서블릿이란
클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
서블릿은 자바로 구현 된 *CGI(Common Gateway Interface 서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션)
서블릿은 자바로 구현된 CGI라고 하기에는 규약과 프로그램은 같게 비교해서 오류가 있다.
그냥 CGI 방식이 개선된 자바로 구현된 것이 서블릿 이라고 이해하면 좋을 것 같다.
동적인 처리를 위해 CGI를 만들었다.
CGI는 문제가 있었는데 요청 시 마다 프로세스를 만든다. 이 프로세스는 상대적으로 만드는데 시간과 메모리가 많이드니까 쓰레드로 바꾼다. 요청 시마다 쓰레드가 다르다면 구현체가 각각 하나씩 생기는데 이것을 싱글톤 패턴으로 만든다. 그게 서블릿이다.
요청이 들어오면 그 요청마다 쓰레드를 만들고 그 쓰레드랑 서블릿 구현체를 연결해주고 서블릿인 인터페이스니까 그 메소드를 호출하는 역할을 한다.
서블릿 사용 이유?
서블릿은 개발자가 일일히 요청정보를 파싱작업을 하지 않더라도 api 를 통해서 쉽게 사용하고 처리결과를 쉽게 응답으로 받을 수 있도록 하였다.
http메소드 분기처리도 대신해준다. 개발자는 요청들을 처리하는 메소드를 재정의하고 (doGet) api를 사용한뒤 요청받을 url만 매핑해주면 우리가 원하는 비즈니스로직을 작성하고 수행하는 환경을 만들 수 있다.
서블릿 컨테이너 ?
서블릿은 스스로 작동하는것이아니다. 이를 관리하고 서블릿 누가생성하는가? 서블릿컨테이너가한다.
서블릿은 init destroy메소드를 통해 생성삭제가 진행된다. 서블릿컨테이너는 이 서블릿의 모든걸 담당하며 생명주기를 담당한다.
요청이온다→ 서블릿 컨테이너가 해당 요청과 매핑되는 서블릿을 찾는다.
→ 생성되어있지않다면 서블릿 생성&동작 → 작업이 끝난 서블릿은 서블릿 컨테이너에서 관리됨(싱글톤)
→생성되어 있다면 서블릿 컨테이너는 이를 재사용함
서블릿의 문제점
요청마다 하나의 서블릿이 1:1로 매핑되는 구조를 가지고있음. 서블릿마다 공통되서 실행되는 로직이있음.
어떻게 해결 ?
클라이언트 요청을 받는 최앞단에 모든 요청을 받을수있도록 컨트롤러를 만든다. 이컨트롤러는 각요청 별로 처리할 로직을 찾아서 전달해 요청을 하게한다. (front controller pattern)
이를 통해 매 요청마다 각각의 서블릿을 사용하는 것이 아닌 하나의 서블릿을 통해 요청을 수행하게 되서 관리가쉬워짐 & 각 중복코드가 줄어든다.
혼자 하기에는 역할이 많다 ! → 이를 분리하자
이런 일련의 과정을 바탕으로 만들어진 프레임워크가 spring web mvc 이다.
frontcontroller → dispatcher servlet으로 이름이 바뀜
handler adapter → 다양한종류의 핸들러를 호출할 수 있도록 하여 보다 확장성있는 기능을 개발할 수 있게함
자세한 Dispatcher Servlet 은 다음 게시글에서 ..
공부하고자 노션에 정리한 것을 올려봤습니다~
'코코코딩공부 > Spring' 카테고리의 다른 글
[Spring] Argument Resolver 내부 구경 하기 (0) | 2023.04.30 |
---|---|
[Spring] Dispatcher Servlet이란 ? & 미션 에서 찾아보기 (0) | 2023.04.30 |
[Spring] 어떤 객체를 빈으로 등록해야 할까 ? (1) | 2023.04.23 |
[Spring] Bean 이란 ? (0) | 2023.04.23 |
[Spring] 테스트 DB Failed to load ApplicationContext 에러 (0) | 2023.04.18 |