JSP, Servlet, JavaBean은 모두 Java 웹 개발에서 사용되는 기술이지만, 각각의 역할과 특징이 다르다.
✔ JSP(Java Server Pages)
- HTML 코드와 Java 코드를 혼합하여 Dynamic Web Page를 생성하는 데 사용되는 서버 측 웹 기술이다.
- Servlet을 보완하면서도 HTML과 유사한 구문을 사용하여 웹 애플리케이션을 작성하기에 편리하다.
JSP 장점
-
쉬운 개발: JSP는 HTML 페이지 내에 Java 코드를 삽입하여 개발할 수 있으므로, 일반적인 HTML과 마찬가지로 작성이 가능하다.
-
데이터베이스 연동 용이성: JSP는 데이터베이스와의 연동이 쉽다. JDBC(Java Database Connectivity) API를 사용하여 데이터베이스와 연동할 수 있다.
-
대용량 트래픽 처리 용이성: JSP는 대용량 트래픽 처리에 용이하다. JSP는 컨테이너에서 미리 컴파일되기 때문에, 매 요청마다 컴파일하지 않아도 된다. 따라서, 많은 양의 트래픽을 처리할 때, 서버의 부하를 줄일 수 있습니다.
JSP 단점
-
떨어지는 코드 가독성: JSP에서는 HTML 코드와 자바 코드가 섞여 있기 때문에 코드 가독성이 떨어진다다. 특히 복잡한 로직을 처리하는 경우 코드가 길어지고 복잡해져 유지보수가 어려워질 수 있다.
-
유지보수 어려움:JSP는 웹 페이지의 디자인과 로직이 하나의 파일에 섞여 있어 디자인 변경이 필요한 경우 로직 코드도 함께 변경해야 하므로 유지보수에 어려움을 겪을 수 있다.
-
성능 저하:JSP는 클라이언트의 요청마다 JSP 파일을 컴파일하여 실행하기 때문에 서버 부하가 매우 커진다. 또한 JSP 파일에 자바 코드가 많이 들어가면서 서버의 메모리 사용량도 높아지는 문제가 있다.
-
보안 문제:JSP 파일에서는 HTML 코드와 자바 코드가 함께 실행되므로, 사용자가 입력한 값에 대한 검증이 제대로 이루어지지 않으면 보안 문제가 발생할 수 있다.
✔ 서블릿(Servlet)
- 자바를 사용하여 웹 애플리케이션을 만들 때, HTTP 요청 및 응답을 처리하기 위한 서버 측 웹 기술이다.
- HTTP 프로토콜을 통해 클라이언트와 통신하고, 요청된 정보를 처리하여 결과를 반환한다.
- JSP와 함께 사용될 수 있으며, JSP에서는 HTML 코드에 Java 코드를 삽입하여 Dynamic Web Page를 생성하고, Servlet에서는 JSP에서 처리할 수 없는 다양한 로직을 처리한다.
- 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해주는 기술이다.
서블릿의 특징
- 클라이언트의 Request에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트이다.
- HTML을 사용하여 Response를 한다.
- Java의 쓰레드를 이용하여 동작한다. 요청이 들어올 때마다 새로운 스레드가 생성된다.
- MVC 패턴에서의 컨트롤러로 이용한다.
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpSevelt 클래스를 상속한다.
- HTML 변경시 Servelt을 재 컴파일해야하는 단점이 있다.(서버는 다시 내렸다 올려야함)
- 세션 관리, 쿠키 처리 등 다양한 기능을 제공한다.
- HTML, XML, JSON, 이미지 등 다양한 형식의 데이터를 처리할 수 있다.
서블릿 컨테이너
- 서블릿을 담고 관리해주는 컨테이너
- 서블릿의 실행 환경을 제공하는 프로그램으로, 서블릿의 생명주기 관리, 스레드 관리, 요청 및 응답 관리, 보안 관리 등을 수행
- HttpServletRequest
request 정보를 서블릿에게 전달하기 위한 목적으로 사용하며 헤더정보, 파라미터, 쿠키 , URI, URL등의 정보를 읽어 들이는 메소드와 Body의 Stream을 읽어 들이는 메서드를 가지고 있다
- HttpServletResponse
WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServletResponse 객체를 생성하여 서블릿에게 전달하고 이 객체를 활용하여 content type, 응답코드, 응답메세지등을 전송한다.
서블릿 동작 과정
- 클라이언트 요청이 서블릿 컨테이너로 전달된다.
- 서블릿 컨테이너는 요청을 처리하기 위해 HttpServletRequest와 HttpServletResponse 객체를 생성한다.
- 서블릿 컨테이너는 요청 URL과 매핑된 서블릿 클래스를 찾는다.
- 서블릿 클래스의 인스턴스가 존재하지 않으면 init() 메소드를 호출하여 인스턴스를 생성한다.
- 새로운 스레드를 생성하여 service() 메소드를 실행합니다. 이때 HttpServletRequest와 HttpServletResponse 객체를 인자로 전달한다.
- 서블릿 클래스는 요청에 대한 처리를 수행하고, HttpServletResponse 객체를 통해 클라이언트에게 응답한다.
- 요청 처리가 완료되면 destroy() 메소드를 호출하여 서블릿 인스턴스를 소멸시킨다.
- 서블릿 컨테이너는 HttpServletRequest와 HttpServletResponse 객체를 소멸시킨다.
✔ JavaBean
- 자바에서 사용하는 소프트웨어 컴포넌트의 일종으로, 자바 객체를 단순하고 재사용 가능한 모듈로 만들어주는 클래스이다.
- 특정 작업을 수행하기 위해 다른 클래스에서 사용할 수 있는 메서드와 속성을 제공한다.
- 주로 비즈니스 로직, 데이터베이스 처리 등의 기능을 담당하며, JSP나 Servlet 등의 웹 프로그램에서 활용됩니다.
결론
JSP와 Servlet은 웹 애플리케이션 개발에 주로 사용되며, JavaBean은 비즈니스 로직, 데이터 처리 등을 모듈화하여 코드의 재사용성을 높이기 위해 사용된다.