1. HttpServletRequest
- 웹 사이트 상에서 URL을 입력하고 요청을 하면, 톰캣이 이를 받아서 객체를 생성한 후 받은 정보를 나눠서 담는다. 이후 HttpServletRequest의 매개변수로 제공하며, 사용 가능하다.
말이 조금 어려운데, 웹 주소창에 어떤 정보를 요청하면 톰캣이라는 중계서버가 알아서 만들고 그 정보의 특징에 맞게 정리정돈도 해준다는 뜻이다. 잘 정리정돈 되어있으니 적절한 메서드를 활용하면 사용하기도 수월하다.
2. HttpServletRequest 메서드
- getScheme(), getServerName(), getServerPort()..등등
- 이러한 메서드는 정리정돈된 칸이라고 보면 된다.
- 그 중에 쿼리 스트링 부분은 getParameter 메서드를 사용하면 되는데 name=value 꼴로 name을 이용해 value값을 얻을 수 있다.
?year=2021&month=10&day=25
String year = request.getParameter("year"); // 2021을 얻을 수 있음
String month = request.getParameter("month"); // 10을 얻을 수 있음
String day = request.getParameter("day"); // 25를 얻을 수 있음
- 다양한 메서드들은 나중에 찾아보고 하면 됨.
* 클라이언트 : 서비스를 요청하는 애플리케이션
* 서버 : 서비스를 제공하는 애플리케이션
* 서버의 종류 - 어떤 서비스를 제공하느냐에 따라 다름
- 이메일 서버, 파일 서버, 웹 서버
* 서버의 포트 - IP 주소만으로는 서버의 종류를 구분할 수 없다.
- 따라서, 포트 번호를 통해 어떤 종류의 서버에 접근할 것인지 구분할 수 있다.
- 25 : 이메일서버 , 22 : 파일서버, 80 : 웹 서버 (생략가능)
- 하나의 포트에는 하나의 서버만 연결할 수 있다.
- 특정 포트와 서버는 binding하고, 요청을 listening하는 상태가 되어야 클라이언트가 요청할 수 있다.
- 0 ~ 1023 포트는 예약 포트라서 사용할 수 없고, 1024 ~ 65535까지 포트를 사용할 수 있다.
* WAS ( 웹 어플리케이션 서버 ) 란 웹 어플리케이션을 서비스하는 서버
- 서버에 프로그램(어플리케이션)을 설치하고 클라이언트가 사용할 수 있게 하는 서버
- 업데이트의 용이성, 예전에는 프로그램을 로컬에 일일이 깔았지만 프로그램을 서버에 설치를 하면 서버 프로그램만 업데이트를 하면 되니 업데이트에 용이하다.
* 톰캣의 내부 구조
- URL 요청 -> Thread Pool 중에 하나가 요청을 처리한다. 첫번째, 그리고 가장 상위에 있는 Server는 전체 Catalina Servlet Engine을 의미하고 Tomcat인스턴스의 최상위 요소로 사용이 된다. 말 그대로 서버로 생각하면 된다.
Server
- Service는 하나 이상의 Connector를 가질 수 있고, 선언된 Connector들은 하나의 Engine을 서로 공유한다. 하나의 Server에 여러개의 Service 가 존재할 수 있다.
Connector
- Client로부터의 요청 및 응답을 처리하기 위한 요소를 정의한다. 설치된 Tomcat내의 conf디렉토리안에 있는 server.xml을 보면 “Catalina”라는 Service 내에 두개의 Connector가 정의가 된것 을 확인 할 수 있다. 첫번째 Connecotor는 HTTP요청, 즉 HTTP기반의 client의 요청을 처리하기 위한 것이고(기본 8080포트 사용), 두번째는 Web Server인 Apache와 AJP를 기반으로 연동하기 위한 Connector이다.
Engine
- Service당 하나의 Engine을 가질 수 있다. 그리고 선언된 Connector들을 통해 들어 오는 모든 요청을 처리한다. 그리고 AJP를 통한 load-balancing을 사용할 경우 Engine에 jvmRoute 속성을 사용해야한다.
Host
- 각 Engine에 포함될 가상의 호스트를 정의하기 위한 요소이다. 하나 이상의 weba application을 포함할 수 있다. 그리고 하위의 web application들은 각각의 Context를 가진다.
Context = Spring Project
- 상위의 Host내에서 실행되는 개별 web application을 나타내며 Host내에 선언될 수 있는 Context의 갯수에는 제한이 없다.
Servlet
- 스프링 프로젝트 안에 있는 여러 프로그램들
<Thread -> Thread Pool -> Http11 Connector -> Http11 Processor -> Engine -> Host -> Context>
* 톰캣 설정 파일 - server.xml, web.xml
톰캣설치경로/conf/server.xml : 톰캣 서버 설정 파일
톰캣설치경로/conf/web.xml : 톰캣의 모든 web app의 공통 설정
웹앱이름/WEB-INF/web.xml : web app의 개별 설정
* 서블릿 등록 -> @Controller
* URL 연경 -> @RequestMapping
이것처럼 web.xml 기반에서 @ 어노테이션 기반으로 변화하는 추세, 위 두개의 어노테이션은 스프링에서 사용하고 서블릿에서는 @WebServlet을 사용한다.
'Programming > Spring' 카테고리의 다른 글
[Spring] ApplicationContext, 스프링 컨테이너, 스프링 빈(Bean) (0) | 2022.02.06 |
---|---|
[스프링의 정석] HTTP 요청과 응답 (0) | 2021.10.28 |
[스프링의 정석] HTTP 요청과 응답 (0) | 2021.10.27 |
[스프링의 정석] AWS에 배포하기 (0) | 2021.10.26 |
[스프링의 정석] Spring MVC - 원격 프로그램의 실행 (0) | 2021.10.26 |