
이번에 마지막 파트인 백엔드 파트로 들어갔습니다!
Servlet을 이번에 배우게 됐습니다.
Servlet
Servlet은 자바로 작성한 서버 측 컴포넌트로 http 요청을 받아 처리하고 응답을 생성하는 역할을 합니다.
실제로는 서블릿 컨테이너(Tomcat 등)가 서블릿을 로드, 관리, 실행합니다.
요청 URL과 매핑되어 그 요청을 처리, 매핑은 web.xml 또는 @WebServlet 어노테이션으로 설정합니다.

Servlet의 생명주기
Servlet은 위 사진처럼 클라이언트가 요청을 보내게 됩니다.
클라이언트 요청은 Web 서버로 들어가게 됩니다.
여기서 두 개로 나눠질 수 있는데요. 만약 정적인 리소스 요청이면 바로 클라이언트에게 응답을 주게 됩니다.
동적인 리소스 요청이라면 Was에게 요청을 전달하게 됩니다.
WAS안에는 Servlet 컨테이너가 있어 컨테이너에서 해당 URL과 매핑된 서블릿 클래스를 찾아 실행하게 됩니다.
그러면 init() 메서드 실행 후 service() 메소드 실행 그다음에 doGet() 또는 doPost() 메서드를 실행하게 됩니다.
그리고 응답에 필요한 HttpSerlvetResquest와 HttpServletResponse 객체를 생성 후에 destory() 메서드가 실행되고,
다시 Web 서버에 응답을 줍니다. 그리고 클라이언트에서 그 응답을 다시 주게 됩니다.
Servlet 인스턴스는 하나만 만들어져 여러 요청을 동시 처리(멀티 스레드) 합니다.
HttpServletRequest (요청 객체)
서버가 클라이언트의 http 요청을 파싱해서 제공하는 객체
HttpServletResponse(응답 객체)
클라이언트로 돌아갈 http 응답을 만들기 위한 api
Servlet에서 이뤄지는 데이터 처리에 대해서 몇 가지 알아보겠습니다.
1. 포워딩
클라이언트가 url로 요청을 보내면 was가 요청을 받고, 서버 내부에서 jsp나 다른 servlet으로 요청을 넘기는 것을 의미합니다.

Forward는 위 사진처럼 동작을 하게 됩니다.
포워딩 방식
- Redirect 방식
서버가 클라이언트에 새로운 요청 URL을 알려줍니다.
클라이언트 브라우저가 다시 요청을 보냄
요청이 2번 발생 (클라이언트 -> 서버, 서버 -> 클라이언트 다시 클라이언트 -> 서버, 서버 -> 클라이언트 왕복 두 번)
결과적으로는 주소창 URL이 바뀝니다.
바인딩한 데이터는 전달되지 않습니다.
why?
클라이언트가 서버에 요청을 보내면 서버는 response.sendRedirect("B")를 실행해서 클라이언트에게 반환하게 됩니다.
클라이언트가 이 응답을 받고 새로운 요청을 서버 B에게 보낸다.
즉, 두 번째 요청은 완전히 새로운 http 요청이고 이때 이전 요청의 request 객체와 속성은 사라지게 됩니다.
- Refresh 방식
http 응답 헤더에 refresh 값을 설정합니다.
브라우저가 응답을 받은 후 지정된 시간 후에 자동으로 새 요청을 보냅니다.
- Location 방식
http 응답 헤더에 location을 직접 지정하는 방법입니다.
sendRedirect와 유사하게 동작합니다.
- Dispatcher 방식
서버 내부에서만 자원을 이동합니다.
그렇기 때문에 클라이언트는 새로운 요청이 일어났는지 모릅니다.
주소창 URL 그대로 유지합니다.
request 바인딩 데이터 전달 가능하게 됩니다.
2. 바인딩
- 데이터를 request과 같은 객체의 속성으로 저장
- 포워딩할 때 이 바인딩된 데이터가 같이 넘어감
forward는 서버 내부에서 같은 request 객체를 다음 리소스에게 그대로 전달합니다.
그래서 request.setAttrivute()로 저장한 데이터를 바로 꺼낼 수 있습니다.
간단한 예제 코드와 같이 살펴보겠습니다.

일단 데이터를 담을 수 있는 VO를 하나 만들었습니다.

Setvlet을 만들었습니다.
doGet()과 doPost()는 어떤 방식의 요청이 들어왔는지에 따라서 호출되는 메서드가 다릅니다.
하지만 저희는 간단한 예제 코드이기 때문에 doProcess()라는 메서드를 호출하게 해서 둘 다 같은 동작을 하도록 하겠습니다.

doProcess는 위 사진처럼 되어 있습니다.
VO 세 개를 만들어 데이터를 집어넣고, ArrayList에 집어넣었습니다.
그리고 request.setAttribute()를 사용해서 데이터를 바인딩했습니다.
이 Servlet에서는 데이터를 전달하기 위해 Dispatcher 방식을 사용했습니다.
"prdView"는 이제 forward를 받을 다음 Servlet입니다.

위 사진을 보면 @WebServlet("/prdView")가 있습니다. 여기가 forward 받을 Servlet입니다.

이 Servlet에서는 View를 담당하는 Servlet으로 사용했습니다.
ArrayList를 선언하고 request.getAttribute()를 사용해서 바인딩된 데이터를 가져옵니다.
그리고 PrintWriter를 사용하여 웹 사이트에 태그들이 동작할 수 있게 작성을 하고 데이터를 넣었습니다.

결과가 이렇게 나오게 됩니다.
Dispatcher 방식을 사용해서 URL이 바뀌지 않는 모습까지 확인을 해주시면 됩니다!
'개발 > 백엔드' 카테고리의 다른 글
| 멀티캠퍼스 [현대 이지웰] Spring 어노테이션 기록하기 (0) | 2025.11.18 |
|---|---|
| 멀티캠퍼스 [현대 이지웰] Spring Security Login에 대해서 알아보자! (0) | 2025.10.21 |
| 멀티캠퍼스 [현대 이지웰] Spring에서는 로그인과 회원가입을 어떻게 사용할 수 있을까? (0) | 2025.10.13 |
| 멀티캠퍼스 [현대 이지웰] REST와 REST API란?? (0) | 2025.09.30 |
| 멀티캠퍼스 [현대 이지웰] URI와 URL 뭐가 다른거야! (0) | 2025.09.22 |