티스토리 뷰
서블릿이란?
서블릿이라는건 간단히 얘기해서, 클라이언트의 요청을 받아서 동적으로(인풋에따라) HTML을 생성해서 응답으로 내어주는 서버측에서 동작하는 자바 프로그램이다.
CGI 프로토콜의 경우(PHP) 멀티 프로세스로 동작하기 때문에 다수의 클라이언트 요청이 들어오면 상당히 큰 부하가 걸린다. 하지만, 서블릿은 자바 기반이기 때문에 멀티 쓰레드로 동작하고, 좀 더 많은 클라이언트의 요청에 더 잘 견딘다. 또한, 자바는 자바 가상 머신 위에서 동작하기 때문에 플랫폼에 독립적이다. 즉, 어떤 환경에서 실행시키더라도 동일하게 동작하는 서버 프로그램을 만들 수 있다는 것이다.
서블릿의 단점 |
서블릿의 예시는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 | public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ PrintWriter out = response.getWriter(); out.println("<HTML>"); out.println("<HEAD><TITLE>Sum of 1 to 100</TITLE></HEAD>"); ... out.println("</HTML>"); } } | cs |
즉 자바 코드 내에서 HTML을 동적으로 생성하는 프로그램이다. 이렇기 때문에, 웹 디자이너와 프로그래머의 협업이 굉장히 비효율적이게 된다. 디자이너가 열심히 이쁘게 HTML,CSS를 적용시켜서 프로그래머에게 전달하면 프로그래머는 일일이 out.println으로 HTML코드를 다시 작업하는 단순 노동을 아주 긴 시간 동안 해야 할 것이다. 이런게 첫번째 단점이다.
또한 코드안에 들어가기 때문에 HTML의 구조를 파악하기 힘들게 만든다.
서블릿을 사용하면 프론트엔드와 백엔드의 협업이 굉장히 불편하기 때문에, 서블릿의 단점을 극복한 JSP가 등장하게 되었다.
JSP(Java Server Page) |
서블릿은 코드안에 HTML이 들어있었다고 한다면, JSP는 그 반대로 HTML안에 자바 코드가 들어가있다.
1 2 3 4 5 6 7 8 9 10 11 | <HTML> <HEAD><TITLE>1부터 100까지의합</TITLE></HEAD> <BODY> <% int total = 0; for(int i=1; i<=100; i++) total += i; %> 1부터 100까지의 합은? <%= total %> </BODY> </HTML> | cs |
위와 같은 구조로 되어있다. 보면 <% %>로 감싸져 있는 부분에 자바 코드가 들어가있고 자바 코드는 html안에 있다.
이 코드들은 WAS(웹 어플리케이션 서버)에서 실행되어 서블릿으로 변환 된 다음, 서블릿에서 완벽히 구성된 정적인 HTML을 만들고난 뒤, 그 HTML을 클라이언트에게 전송하게 된다.
WAS에서 JSP실행 -> JSP가 서블릿으로 변환 -> 서블릿에서 HTML생성 -> 클라이언트 응답 전송
위와 같은 과정으로 HTML이 생성되어 클라이언트로 보내진다. 이런 구조로 만들어 놓으면 디자이너도 HTML을 수정할수있고 프로그래머도 코드를 수정할수 있기 때문에 협업이 굉장히 편해지게 된다.
요즘 웹앱 개발에서는 프로그램의 로직은 서블릿으로 구현하고, 그 서블릿의 결과를 출력하는 일은 JSP에서 담당하는 방식이 많이 사용된다.
Servlet vs JSP? |
서블릿
장점 : 자바를 통한 멀티 쓰레드 환경에서 동작하기 때문에 여러 요청을 동시에 적은 부하로 처리 할 수 있다.
단점 : 자바 코드 안에 HTML이 들어가기 때문에 구조 파악이 힘들고 디자이너와의 협업이 힘들다.
JSP
장점 : HTML안에 자바 코드가 들어가기 때문에 디자이너와 프로그래머의 협업이 유용하다.
단점 : 자바 코드(회사의 핵심 로직)가 노출 될 가능성이 있다. HTML과 자바 코드가 섞여 있어서 코드 분석이 어렵다.
서블릿 클래스 계층 구조 |
Servlet 인터페이스
↓
GenericServlet 클래스
↓
HttpServlet 클래스
↓
MyServlet 클래스 (우리가 작성한 서블릿)
'컴퓨터 공학과 졸업 > JSP&Servlet' 카테고리의 다른 글
필터와 래퍼 (0) | 2018.07.27 |
---|---|
JSP의 새로운 문법 (0) | 2018.07.26 |
Servlet Container (0) | 2018.07.26 |
웹 어플리케이션 구조 (0) | 2018.01.26 |
웹서버와 WAS의 차이(feat.톰캣) (0) | 2018.01.21 |
- Total
- Today
- Yesterday
- webpack
- type alias
- react hooks
- server side rendering
- storybook
- promise
- Polyfill
- reducer
- await
- design system
- rendering scope
- javascript
- reflow
- react
- atomic design
- reactdom
- Next.js
- useEffect
- Action
- hydrate
- Babel
- mobx
- useRef
- state
- props
- typescript
- return type
- async
- computed
- es6
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |