[꼼꼼한 개발자] 꼼코더
[서블릿 개념 핥기] - 03 - JSP, Servlet의 활용 (한 번에 이해할 수 있는 글) 본문
☕️ 자바 서블릿(Java Servlet)
- 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양
- 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종
- JSP는 HTML 문서 안에 Java코드를 포함
- 서블릿은 자바 코드 안에 HTML을 포함
👀 비슷한 기술
- 펄 등을 이용한 CGI, PHP를 AWS(Apach Wap Server Process)에서 동작하게 하는 mod_php
- 마이크로소프트사의 IIS(톰캣과 유사)에서 동작하는 ASP 등
- CGI는 요청이 있을 때마다 새로운 프로세스(프로그램)가 생성되어 응답
- 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답
- 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.
💡 추가 설명
📟 CGI
- 자바 코드를 가지고 네트워크 프로그래밍 하는 것이다.
- socket을 이용하여 들어오는 요청마다 어떻게 처리할지 일일이 하나하나 처리하는 방식.
- 따라서 요즘은 잘 사용하지 않는다.
📟 PHP
- JSP와 비슷한 역할을 수행하는 서버에서 처리되는 동적언어이다.
- 이것을 동작하게 해주는 mod_php라는 기술도 있다.
🏭 JSP 파일이 처리되는 LifeCycle
- 클라이언트에서 JSP 파일을 요청한다. (Request)
- 톰캣이 요청을 받아서 JSP파일을 자바 코드로 변경한다. (그림 b영역)
- 변경된 자바 코드는 JDK에 포함된 컴파일러를 통하여 class 파일로 컴파일된다.
이때 만들어낸 class가 servlet class이다. (그림 b영역) - 컴파일된 class파일은 JRE를 (실행환경)을 통해 메모리에 ‘인스턴스(객체)’가 만들어진다.
이때 만들어진 객체는 Servlet객체이다. (그림 JRE → Text buffer) - 3번과 4번에서 만든 클래스와 객체를 통해 ‘인스턴스 화’가 되면 객체에 있는(4번 참고) 메서드를 가지고 처리 후 결과 값을 클라이언트에 응답을 준다 ( Response)
💡 번외) 만약 동일한 jsp 파일에 대한 요청이 들어오면 해당 jsp 파일이 수정되지 않는 한 바로 인스턴스로 실행하고 응답을 주게 된다.
(1번 → 5번으로 바로 진행)
📠 기존의 JSP파일을 가지고 처리하는 방법
방법은 여러 가지가 있지만 그중에 몇 가지만 알아보자.
방법 1) 단순하게 JSP 파일 내에서 처리하고 응답을 줄 수 도 있고.
방법 2) JSP 파일은 기능적인 부분이 따로 필요하여 기능 처리 후 응답을 줄 수도 있고.
방법 3) DAO를 통해서 DB에 관련된 정보를 가지고 처리된 결과물을 응답해 줄 수도 있고
방법 4) DB에 직접 접근했다가 결과를 가지고 와서 응답을 줄 수도 있다.
추가 설명)
상황에 따라서 JSP 파일이 연계될 필요가 있다면 처리 후 또 다른 처리가 필요하다면 forwarding 할 수 있다.
forwarding을 할 때에는 request, session, application등과 같은 객체에 결과 값들을 유지시킬 수도 있다.
요청에 관련한 처리를 하고 나서 응답할 내용이 따로 없으면 redirect 응답을 통하여 다시 또 다른 요청할 수 있게끔 응답을 줄 수도 있다.
이렇듯 다양하지만 핵심은 JSP를 가지고 구현하는 애플리케이션은 JSP파일을 요청한다는 것이다.
다시 말해 JSP파일을 통해서 응답한다는 말이다.
🏭 Servlet Lifecylce
요청을 할 때 특정 JSP 파일이 아니라 어떠한 URL로 요청한다. 다시 말해 경로를 요청한다.
어떤 경로를 요청하느냐에 따라 톰캣은 어떤 서블릿을 동작시켜야 하는지 구분해야 한다.
그림으로 보면 요청이 1이면 a.jsp, 2면 b.jsp 즉 어떠한 JSP 파일이 아니라 특정한 명령을 요청을 한다고 생각을 하면 된다.
그 명령을 구분해서 준비된 서블릿들을 처리할 수 있다.
서블릿이 동작할 때 무언가 처리할 내용들이 필요한 경우에 Serveice, DAO, DB와 같이 활용되어 처리하게 된다.
처리된 결과는 서블릿에 처리 결과를 보여줄 수 있도록 forwarding을 많이 사용하게 된다.
a.jsp, b.jsp 경우는 브라우저에 무엇인가 보여주기 위한 용도(view)이다.
그러기 때문에 Servlet에서 어떤 로직의 처리 결과가 있으면 forwarding을 사용하여 데이터를 유지하고
JSP 파일에 전달 후 JSP파일이 브라우저에 응답한다.
또는 서블릿에서 처리를 끝내고 보여줄 페이지가 없으면 redirect를 사용해서 다시 요청하도록 처리할 수 있다
🧹 정리
크게 본다면 기존 방식과 지금 방식과 크게 차이가 없다. 하지만 기존방식으로 구현하게 되면
HTML 방식으로 처리를 하게 되고 css, java, jsp, JS 등이 섞여 있어
규모가 큰 경우에는 유지보수, 기능추가 등에 매우 어려움이 있다.
따라서 서블릿 활용한 구현방식을 사용하게 되면 브라우저에 요청하는 내용에 대해서
‘요청이 무엇인지’ ‘어떻게 처리해야 되는지’를 Servlet(순수 자바 코드)을 통해서 전부 분할할 수 있다.
만약
사용자에게 보여줄 값의 위치, 화면, 모양, 디자인 등을 수정하게 되면 JSP만 수정하면 된다.
서비스 로직에 문제가 있으면 Service 로직만 보면 된다.
DB연동이 문제가 있으면 DB만 보면 된다.
이렇게 계층을 나눠서 작업을 하게 되면 훨씬 더 수월한 유지보수가 가능하고 규모가 커지더라도 가독성에도 좋다.
따라서 지금 Servlet을 활용한 개발 방식을 공부해야 한다.
위 글은 'IT 핥기' 유튜버 님의 영상을 참고하여 작성하였습니다. https://www.youtube.com/@ithotgi
'Servlet, JSP > 개념 핥기' 카테고리의 다른 글
[서블릿 개념 핥기] - 05 - MVC 패턴 적용(실습) (한 번에 이해할 수 있는 글) (0) | 2023.01.11 |
---|---|
[서블릿 개념 핥기] - 04 - MVC 패턴 적용(이론) (한 번에 이해할 수 있는 글) (0) | 2023.01.11 |
[서블릿 개념 핥기] - 02 - 서블릿이란? + 실습 (한 번에 이해할 수 있는 글) (2) | 2023.01.10 |
[서블릿 개념 핥기] - 01 - JSP란 무엇인가?(한 번에 이해할 수 있는 글) (0) | 2023.01.10 |