1. 내장 톰켓을 가진다.
- 소켓 : 운영체제가 가지고 있는 것! 5000포트는 A 의 연결 용도로 사용 한다고 가정하자. B가 A와 5000 포트를 이용해서 연결이 되면 5001 포트를 생성하고 이를 통해 데이터를 송,수신 한다. C 는 A와 연결을 해야 하기 때문에 A( main 스레드 ) 는 5001 포트에 스레드를 만들고 C 와 연결을 할 수 있다. 그 후 5002 포트를 통해 C 와의 통신이 가능한다. 스레드는 time-slice 기법으로 일의 동시 처리가 가능하도록 해준다. 연결이 끊어지지 않지만 부하가 커서 연결이 느려질 수 있다는 단점이 있다. http 통신은 stateless 방식이여서 부하가 적지만 다시 연결 되기에는 추가 비용이 필요하다. http 의 기반은 소켓이다.
- 웹서버 : 웹서버는 '갑' 이다. 클라이언트들이 필요한 정보를 가지고 있고 이를 request 를 통해 요청을 받는다. 이 때 ip 주소를 알아야 하고 URL( 자원의 주소 ) 이 필요하다. 정적인 자원 ( http )을 주고 받는다.
- 톰켓 : 웹서버가 자신이 이해할 수 없는 파일( JSP 파일 ) 에 대한 요청이 오면 권한을 톰켓에게 넘긴다. 톰켓은 JSP 파일을 자바로 컴파일 해주고 이를 html 파일로 만들어준다. 이를 웹서버(아파치) 로 넘기고 웹서버는 이를 클라이언트에게 넘긴다.
- 아파치의 역할 : 요청한 파일을 응답해줌.
2. 서블릿 컨테이너
- URL : 자원 접근 (스프링에서 사용 불가)
URI : 식별자 접근 , 특정한 파일 요청을 할 수 없고 요청시에는 무조건 자바를 거친다. 톰켓 필요!
서블릿 : 자바 코드로 웹을 할 수 있는 것! 즉 서블릿 컨테이너는 톰켓을 의미한다. 요청이 올 때 마다 톰켓은 스레드를 만들고 그 스레드는 서블릿 객체( 수 많은 일들을 하는 객체 ) 를 생성한다. 스레드는 서버의 성능에 맞는 개수 만큼 생성을 해야 한다. 스레드를 특정 개수 만큼 만들고 이를 초과하는 요청이 올 시 미리 만들어진 스레드 ( 사용된 스레드 ) 를 재사용 하여 시간을 단축 할 수 있다. 웹은 request 와 response 의 여행이다! 스프링 공부 시 이러한 기능들을 사용하는 것이 목표가 아닌 왜 이러한 기능들이 생겼는지에 대한 초점을 맞추는 것이 중요하다.
3. Web.xml
ex) 성을 지키는 문지기는 web.xml 을 토대로 일을 한다.
- ServletContext 의 초기 파라미터 : 한 번 설정을 하면 성 내부에 모든 곳에서 사용 가능 ex) 암구호
- Session 의 유효기간 설정 : ex) 성 내부의 체류 시간을 설정
- Servlet/JSP 에 대한 정의 : ex) 방문자가 가고 싶은 집에 대한 정보를 주면 문지기는 목적지로 안내한다.
- Servlet/JSP 매핑 : 정의에 대한 매핑을 해준다. ex) A 집을 가고 싶은 방문자에게 매핑을 통해 서울시 용산구 라고 알려준다.
- Mime Type 매핑 : 들고 올 데이터의 타입을 의미함. 데이터가 없으면 get방식 ( select ) 를 사용한다. Mime Type 이 틀리면 오류 발생
- Welcome File list : ex) 방문자가 아무 이유 없이, 아무 것도 없이 왔을 때 보내는 곳.
- Error Pages 처리 : ex ) 방문자가 없는 장소로 가고 싶어할때 보내는 곳.
- 리스너/필터 설정 : ex ) 리스너 : 특정 임무만 수행하는 문지기의 수행 비서 ( 술 잘먹는 사람 찾기 ). 필터 : 방문자의 신원을 확인하는 것
- 보안 : ex) 성을 보호하는 것
4. FrontController 패턴
- Requet 의 요청을 받아서 클래스에 넘겨준다. ( 문지기가 힘드니깐 ) 이 때 새로운 요청이 생기기 때문에 새로운 Request 와 Response 가 생긴다. Request 에 대한 정보를 저장하고 있어야 효율적이기 때문에 RequestDispathcer 가 필요하다.
5. RequestDispatcher
- 필요한 클래스 요청이 도달했을 때 FrontController 에 도착한 request 와 response 를 그대로 유지해준다.
6. DispatchServlet
- DispatcherServlet = FrontController + RequestDispacher 이다.
7. 스프링 컨테이너
- DispatcherServlet 역할은 주소 분배 뿐 아니라 component scan 을 통해 필요한 것 ( @Controller, @RestController, @Configuration, @Repository, @Service, @Componet ) 들을 메모리에 올린다. 이렇게 메모리에 올린 것들을 주소 분배할 수 있다.
@Configuration 의 어떤 메서드가 객체를 리턴한다면 @Bean 을 붙여 관리할 수 있고 이또한 IoC 이다. 이 객체들은 미리 로드되지 않고 필요할 때 호출하여 로드하기 때문에 속도가 조금 느리다.
8. 요청 주소에 따른 적절한 컨트롤로 요청 ( Handler Mapping )
9. 응답
- Html 파일을 response 하기 되면 ViewResolver 가 관여하게 되지만 Data 를 응답하게 되면 MessageConverter 가 작동하게 된다. 이때 json 이 활용된다.

1. 탐켓 실행 시 로딩 시작.
3. 주로 DB 관련된 객체들이 로딩 됌.
< 출처 : https://www.youtube.com/watch?v=GCx65TdiA44&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg&index=14 >
'🟢 개념 정리 > Spring' 카테고리의 다른 글
| @Configuration, @Bean (0) | 2022.08.02 |
|---|---|
| 테스트 코드, @Test (0) | 2022.08.02 |
| 좋은 객체 지향 설계의 5가지 원칙 ( SOLID ) (0) | 2022.08.01 |
| JPA 란 무엇인가? (0) | 2022.07.27 |
| 스프링이란 무엇인가? (0) | 2022.07.26 |