본문 바로가기
TIL

Servlet 개념 핥기 강의 정리

by 둥바 2022. 7. 17.

출처 : https://www.youtube.com/watch?v=g5KmJAIIEeI IT핥기 - 서블릿 개념 핥기 

 

1탄 ) 

 

 

HTML/CSS/JS - 정적 사이트 개발

JSP(Java) - 동적 사이트 개발 

 

 

입력 폼을 가진 JSP와 입력된 내용을 서버로 요청해서, 서버에서 그 데이터를 받고 어떻게 처리할지 결정하는 프로세스 페이지가 따로 필요하다. 이 프로세스 페이지는 그저 요청을 받아서 어떻게 할 건지만 결정하지, 굳이 보여줄 필요가 없다.

JSP파일을 보면 HTML코드와 섞여서 동적인 페이지를 만드는 역할을 하는데, 프로세스 역할의 JSP는 다소 목적과 부합하지 않는다. 기존의 방식은 이 같이 클라이언트의 요청을 JSP파일로 받았다.

 

이를 이해하기 위해서는 JSP라이프 사이클에 대해서 알아야한다.

JSP파일에서 서버에 요청을 하게 되면 -> 톰캣이 Java 코드로 변환한다 -> 이 Java코드는 컴파일(.class)이 되고 -> 객체가 생성된다. 이 객체가 init()함수로 초기세팅하고, 서비스라는 함수에서 브라우저에 대한 요청을 처리하여 응답한다. 

 

잠깐 여기서 서블릿이란, 웹 클라이언트의 요청을 처리할 수 있는 클래스이다.

HttpServlet을 상속하여 만들어진 것들을 서블릿이라고 한다.

결국, 따라서 jsp파일(웹 클라이언트의 요청을 처리하는 클래스, 즉 이 객체)가 서블릿이다.

 

서블릿 방식은 기존의 방식(JSP로 웹 클라이언트의 요청을 직접 받았던 것)과 달리 클라이언트의 요청을 Servlet으로 직접 받을 것이다. 이렇게 바뀌어야 MVC라는 패턴에 대해서 이해할 수 있다.

MVC패턴은 모델, 뷰, 컨트롤러라는 웹 어플리케이션을 구축할 때 코드를 분류한다.

뷰는 사용자에게 보여지는 역할(JSP파일), 컨트롤러는 요청을 분석하고 처리하는 역할(서블릿)

 

이전에는 브라우저에서 .jsp파일을 요청했다면, 이제 브라우저에서 java코드 파일을 요청해야하는 상황이 되었다. 이는 불가능하므로, 매개체의 역할이 필요하다.

 

web.xml에서

1) 톰캣에 서블릿 등록

<servlet>

<servlet-name> 서블릿 이름

<servlet-class> 서블릿의 클래스 위치(패키지.클래스)

</servlet> 

2) 경로 매핑 : 브라우저에서 무엇이라 요청했을 때, 이렇게 처리할 것인지를 매핑해줘야 한다.

<servlet-mapping>

<servlet-name>

<url-pattern> 이렇게 요청이 들어오면, 서블릿이 동작할 것이다라고 정의

<servlet-mapping>

3) 설정이 완료되면 서비스를 재시작해야한다.

 

즉, 서블릿이 가진 메소드들이 요청을 처리하고 있는데 이 때 요청 메소드들이 있다.(doGet/doPost)

jsp로 응답할 페이지를 만들어서, 응답하게 만든다. 

 

이제는 url에 jsp파일로 요청하는 것이 아니라는 개념, 내가 정의한 자바 클래스(HttpServlet 상속)의 오버라이딩 된 메소드를 통해서 요청을 처리, jsp파일은 보여지는 페이지를 정의하는 역할

 

 

2탄 )

 

 

자바 서블릿

- 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버측 프로그램 

- 자바 서블릿은 자바 클래스의 일종

- JSP는 HTML문서 안에 Java코드를 포함하고 있다.

- 서블릿은 Java 코드 내에서 HTML코드를 포함한다. (웹 어플리케이션 구현에서 필수)

- PHP,ASP 등과 같은 비슷한 기술이 있다.

- 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로 응답하고, 자바로 구현하므로 플랫폼에 독립적이다.

 

JSP 라이프 사이클 

최초)브라우저에서 JSP파일 요청 -> 톰캣이 요청을 받아서 자바 코드로 변경 -> 변경된 자바 코드는 컴파일러를 통해서 클래ㅡ 파일로 컴파일 -> 실행환경을 통해서 객체(서블릿 객체) 만들어진다 -> 이 기능을 가지고 처리해서 클라이언트에게 응답

이미 객체 존재하는데 요청) 단계 다 건너뛰고 응답

 

기존의 JSP파일로 처리 방식의 흐름)

브라우저에서 리퀘스트(JSP 파일 요청) - 서버에 여러 JSP파일 중에 요청에 맞는 JSP파일을 서블릿(객체로 만들고 서비스)으로 만들어낸다. 이 서비스를 할 때, JSP파일에서 모든 로직을 작성하는 것은 불편하므로 별도의 클래스(처리할 수 있는 코드)를 만들고 ,DB연동이 필요하다면 DB에 접근하는 DAO객체를 만들어서 DB에 관련한 처리를 할 수도 있다.

 

핵심은 JSP를 가지고 구현하는 어플리케이션은 JSP파일을 요청하게 된다는 것이다. (JSP파일을 통한 응답) 상황에 따라서 JSP파일이 연계될 필요가 있다면, 1) 먼저 처리하고 처리 결과에 따라 이어서 다음 처리가 필요하다면 포워딩을 할 수도 있고 2)요청을 했는데 응답할 내용이 없다면 redirect응답을 통해서 다른 것을 요청할 수 있게 응답을 줄 수 있다. 

포워딩을 할 때 ) request, session,application 객체의 set/getattribute를 활용하여 결과 데이터를 유지시킬 수도 있다. 

 

서블릿을 이용해서 구현하게 되면, 내부 구조가 달라지게 된다.

 

Servlet 라이프 사이클 

서블릿 동작)

웹 클라이언트로부터 URL(경로)를 요청에 따라 톰캣이 어떤 서블릿이 동작시킬지 구분하게 된다. 이 서블릿은 자바 클래스(HttpServlet을 상속하는)이며, 리퀘스트를 처리한다. 처리할 내용들은 비즈니스,로직 클래스(DAO, Service/Action)을 활용하게 되어 처리한다. 그 처리 결과는 서블릿의 동작 결과를 보여주도록, 주로 forward를 활용하게 된다. 서블릿에서 어떤 로직의 처리 결과는 포워드를 통해서 데이터를 유지해서, jsp파일(응답 결과를 보여주는 역할)이 브라우저에 응답할 수 있는 형태로 데이터를 만든다.

또는 별도로 보여줄 페이지가 없다면 redirect로 처리한다.

 

아니, JSP도 결국 서블릿인데 별 차이 없는 거 아니냐?

기존 JSP는 HTML코드를 기반으로, 다양한 코드들이 혼재되어 있어서 유지보수가 매우 불편하다. 소규모 프로젝트의 경우에는 간단하게 만들기 편하다.

그러나, 큰 규모의 어플리케이션 구현을 한다면 JSP방식이 불편하다.

서블릿을 활용 - 브라우저에서 요청하는 내용에 따라서 서블릿으로 분할해 줄 수 있고, 동작할 때 비즈니스 로직을 처리하고 나서 응답할 내용을 서블릿이 아닌 jsp에 작성하게 되면, jsp 파일만 / 로직만 / DB연동 부분만 / 등 계층을 나누어 작업하게 되면서 유지보수가 편리하다. 

 

MVC패턴(Model,View,Controller) 사용하는 이유

이 패턴을 성공적으로 사용한다면, 사용자 인터페이스로부터 비즈니스 로직을 분리하게 되면서 결합도를 낮출 수 있다.

브라우저 -> 요청 : 서블릿이 그 요청을 구분하고 비즈니스 로직(모델)을 처리하게 한다. 처리된 결과를 데이터에 싣어서 jsp파일로 포워딩(컨트롤러)하게 되고, jsp파일(결과물)이 브라우저로 -> 응답(뷰) 

 

작업은 분할을 해서, 어떤 작업이 다른 작업에 영향을 주지 않게 하기 위함으로 동작된다.(메소드,클래스 역시 마찬가지) JSP로 모든 걸 처리하는 것이 아니라 사용자에게 보여지는 부분, 실제 로직을 나누고 이 둘을 제어하기 위한 역할이 있으면 기능적(모델), 보여지는 부분(뷰), 요청 해석(컨트롤러) 등의 분산을 통해 결합도를 낮추게 된다. (결합도는 낮추고, 응집도는 높이기) *응집도 : 특정 기능은 해당 모듈이 책임을 지게끔하는 것

 

 

3탄 ) 

 

JSP에서 MVC 패턴 흐름

브라우저의 요청

 

웹 컨테이너


컨트롤러                                             

1. HTTP 요청을 받음

2. 요청 분석

3. 비즈니스 로직 처리(모델 사용)

4. 결과 데이터를 리퀘스트,세션에 저장(for 사용자에게 보여줘야 하기 때문에 결과 데이터 유지)

5. 알맞은 뷰를 선택한 후 포워딩 또는 리다이렉트

 

모델

1. 컨트롤러 요청 받음

2. 비즈니스 로직 처리(외부자원 사용)

3. 처리 결과를 컨트롤러로 변환

 

1. 선택된 JSP파일을 해석하여 자바 코드 생성(서블릿)

2. java 코드를 컴파일해서 서블릿 객체 생성

3. request, session 객체의 값을 표현식에 세팅하여 브라우저에 응답할 데이터를 생성(html,css,js 등)

(REST API : 클라이언트와 관계없이 정해진 데이터를 줄 수 있는 xml,json 등으로 응답하기도 함)


브라우저에 응답한다.

 

JSP에서 MVC를 구현하는 방법

- 서비스하는 기능마다 서블릿을 정의하고 등록한다 (요청마다 서블릿을 만들고 매핑되는 URL패턴을 설정)

a. web.xml에 servlet을 등록하여 매핑

b. 어노테이션으로 서블릿 등록

@WebServlet(urlPatterns = "/url") - 서블릿 하나 당 URL패턴 

 

- FrontController를 만들어서 모든 요청을 받는 서블릿을 정의하고 등록

하나의 서블릿이 모든 요청을 다 받게 한다. (URL 매핑에 /이용) - 컨트롤러 

요청 URL 또는 파라미터로 전달된 명령을 이용하여 처리할 비즈니스 로직을 선택 - 모델

프론트 컨트롤러에서 요청을 분석하고 비즈니스 로직을 처리한 후 브라우저에 응답, 적절한 뷰 선택하여 응답 - 뷰

 

 

'TIL' 카테고리의 다른 글

내가 만든 홈페이지  (0) 2022.06.09
이력서 테이블  (0) 2022.06.08