자바 웹기술 역사는
서블릿 → JSP → (서블릿 + JSP) MVC 패턴 → 스트럿츠, 웹워크 -> 스프링 MVC
요런식으로 발전해왔어요.
요즘은 Spring WebFlux라는 서블릿 기반이 아닌 Web Reactive 기반을 이용하기도 하죠.
이번 글은 자바 웹 기술의 핵심이면서 기본인 서블릿에 대해서 알아보려고해요.
같이 공부해보면 좋겠습니다. 🙃
요즘 흥하는 ChatGPT한테 서블릿에 대해 물어볼게요 ㅎㅎ
서블릿에 대해 알아보기에 앞서 먼저 HTTP 프로토콜과 웹에서 데이터를 어떻게 주고 받고 있는지에 대해서 알면 좋습니다.
웹 HTTP는 무엇일까요?
- 클라이언트와 서버가 데이터를 주고 받을 때 사용하는 인터넷 규약으로
- 서버와 서버가 데이터를 주고 받을 때도 쓰이고,
- HTML, TEXT, 이미지, 음성, 영상, JSON, XML 등 거의 모든 형태의 데이터로 전송이 가능해요.
- 위의 이미지구조와 같이 형식을 정해서 이제 우리 이런 구조로 데이터 주고 받자는 약속 같은거라고 이해하시면 돼요.
웹 동작 흐름
- 클라이언트는 HTTP 형식으로 어떠한 요청을 보내고 서버는 HTTP 형식으로된 요청을 풀어서 애플리케이션 로직을 처리하고 이에 맞는 응답을 주는게 가장 기본적인 웹 동작흐름입니다.
- WebServer와 WAS도 그려봤는데, 요건 나중에 한번 다뤄볼게요 :)
서블릿은 Web 서버에 붙어서 뭔가를 처리해준다고 했는데, 서블릿을 지원하는 WAS에 대해서 봅시다.
WAS(Web Aplication Server)의 역할
- 흔히 이용되는 톰캣같은 WAS(Web Aplication Server)는 웹 통신을 통해 온 여러가지 데이터에서 통신에 필요한 부가적인 것들을 대신 처리 해주는데, WAS에 붙어서 Client의 요청을 처리하고, 그 결과를 반환하는데 도움을 주는 자바 웹 프로그래밍 기술이라고 생각하시면 돼요.
- 실제 URL이 호출되면 서블릿의 코드가 실행되고 그에 맞는 비즈니스 로직이 실행되고 반환되죠.
- WAS는 요청 정보를 담은 Request 객체와 응답 정보를 담은 Response 객체를 새로 생성해주는데,
- 개발자는 이 객체들을 이용해서 HTTP 스펙을 편리하게 사용할 수 있게 됩니다.
아 서블릿은 뭔가 비즈니스 로직이 실행되는 곳 같은데.. 헷갈리네요 ㅎㅎ 더 깊게 서블릿의 동작 흐름을 살펴보죠.
서블릿 동작 흐름
- HTTP 요청이 오면
- WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출하고
- 서블릿 객체에서 Request 객체에서 HTTP 요청 정보를 꺼내서 비즈니스 로직을 수행하고
- 다시 Response 객체에 HTTP 응답 정보를 담아서
- WAS가 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성해서 다시 클라이언트에 보내주고 ㅎㅎ
아하..!! 서블릿은 웹 애플리케이션에서 HTTP 프로토콜을 이용해 요청처리하고 응답을 하는 자바 클래스구나 🙃
그럼 이제 실제 자바에서 서블릿 객체가 어떻게 구현되어 있는지 코드를 보시면 이해 되실꺼에요. ㅎㅎ
또한 서블릿 객체가 여러개가 되면 요걸 관리해주면 좋을 것 같아서 생긴 것이 서블릿 컨테이너
서블릿 컨테이너
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 해요.
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리하는 역할을 하고
- 여러 서블릿 객체를 싱글톤으로 관리 하는 특징도 있어요 (재사용)
- 또한 동시 요청을 위한 멀티 쓰레드 처리 지원도 해주고요.
제가 생각하는 서블릿에 대해 정리를 해봤는데요. 🙃
막상 작성하고 나니 깊은 내용이 빠진것 같아 아쉽기도 하고 끝까지 작성할 수 있어 다행인 생각도 드네요.
자바 웹 기술중 기본이자 핵심인 서블릿에 대해 같이 공부해서 이야기 나눌 수 있으면 좋겠습니다.
다음글은 서블릿에서 멀티 쓰레드 처리 지원 을 해준다고 했었는데,
WAS의 멀티 쓰레드에 대해 이야기 해도 재밌을 것 같다는 생각도 드네요.
부족한 글 읽어 주셔서 감사합니다. 또한 잘못된 내용 있으면 지적해주시면 감사하겠습니다. 🙏
Reference
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF - 위키백과 자바 서블릿
https://docs.oracle.com/javaee/5/tutorial/doc/bnafe.html - oracle docs 자바 서블릿 기술
https://www.baeldung.com/intro-to-servlets - baeldung 자바 서블릿 소개
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard - 인프런 김영한님 스프링 mvc 1편
하얀종이개발자
'Spring' 카테고리의 다른 글
SpringDataJPA(스프링데이터JPA)를 뜯어보자 (0) | 2023.06.05 |
---|---|
JPA n+1 문제는 왜 생기는걸까? (0) | 2023.05.06 |
의존관계주입 or 의존성주입 with spring #3 (0) | 2023.01.24 |
SOLID에 대해서 쉽게 알려줄게 with spring #2 (0) | 2023.01.23 |
좋은 객체 지향 설계란? with spring #1 (0) | 2023.01.15 |