Servlet 대 JAX-RS
장황한 HttpServlet 보일러플레이트를 선언적 JAX-RS 리소스 클래스로 대체합니다.
코드 비교
✕ Java EE
@WebServlet("/users")
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
String id = req.getParameter("id");
res.setContentType("application/json");
res.getWriter().write("{\"id\":\"" + id + "\"}");
}
}
✓ Jakarta EE 8+
@Path("/users")
public class UserResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getUser(
@QueryParam("id") String id) {
return Response.ok(new User(id)).build();
}
}
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
선언적 라우팅
어노테이션이 명령형 if/else 디스패치 대신 HTTP 메서드, 경로, 콘텐츠 타입을 정의합니다.
자동 마샬링
POJO를 직접 반환합니다; 런타임이 @Produces에 따라 JSON이나 XML로 직렬화합니다.
더 쉬운 테스트
리소스 클래스는 서블릿 컨테이너 없이 테스트 가능한 일반 Java 객체입니다.
이전 방식
HttpServlet
모던 방식
JAX-RS 리소스
JDK 버전
11
난이도
중급
JDK 지원
Servlet 대 JAX-RS
사용 가능
Jakarta EE 8 / Java 11 이후 널리 사용 가능
동작 원리
JAX-RS(Jakarta RESTful Web Services)는 어노테이션으로 REST 엔드포인트를 노출할 수 있게 합니다. HTTP 메서드 체크, 경로 파싱, 요청/응답 마샬링이 프레임워크에 의해 처리됩니다.
관련 문서