클라이언트와 서버
클라이언트(client) : 서비스를 요청하는 애플리케이션
서버(server) : 서비스(service)를 제공하는 애플리케이션
* 우리가 브라우저로 프로그램을 호출을 해서 요청을 하면 서버는 프로그램을 실행을 해서 html 형식으로 결과가 나온다. 이를 텍스트 문서(문자열)로 만들어서 브라우저로 보내주면 이를 브라우저가 해석해서 html로 웹에서 보여줌.
URL을 이용해서 요청을 하면 해당 서버에서 톰캣이 이 요청을 받아 객체를 생성 후 저장. 그리고 정보를 나누어서 담고 HttpServletRequest의 매개변수로 제공을 한다. 요청에 대한 정보가 필요할 때는 request 객체를 통해 접근을 한다.
서버의 포트
예를 들어 한대의 PC에 3개의 이메일, 파일, 웹 서버가 있다고 가정해보자. 클라이언트가 111.22.33.44의 IP 주소로 요청을 했을 때, 서버는 어떤 서버의 서비스를 제공해야할지 구분할 수 없다. 이 때, 필요한 것이 포트번호이다. 그래서 클라이언트가 IP주소를 입력할 때, 111.22.33.44:25와 같이 뒤에 포트번호를 붙여서 요청해야 한다. 웹서버는 기본적으로 80포트번호를 가지고 있으므로 생략가능하다.
클라이언트가 요청할 수 있으려면 서버가 포트하고 연결되어있어야한다. 한 포트에는 한 서버만 연결될 수 있고 이를 리스닝이라고 한다. 서버가 먼저 실행되고 특정포트에 연결되서 요청을 기다리는 상태가 리스닝 상태이다. 포트번호는 0~1023까지가 이미 예약되어져 있다.
웹 애플리케이션 서버(WAS) 란?
서버에 프로그램을 설치해놓고 클라이언트가 이 프로그램을 사용할 수 있게 해줌. ex)tomcat
Tomcat의 내부 구조
사용자가 요청하면 서버에서 쓰레드가 요청을 처리. 톰캣 서버안에서는 서비스가 요청을 처리하는데, 서비스안에는 커넥터가 있고, 그 안에는 다양한 프로토콜의 종류가 있다. 요청할 때, 어떠한 프로토콜로 요청하느냐에 따라 처리할 커넥터가 달라진다. 예를 들어, HTTP1.1로 요청을 한다면, HTTP1.1 커넥터가 처리한다. 또, 서비스안에는 엔진이 있는데 엔진에는 호스트가 있다. 커넥터 하나가 여러개의 호스트를 처리할 수 있다. 또, 호스트안에는 컨텍스트가 있는데 마찬가지로 여러개 존재 가능하다. 컨텍스트는 하나의 Web App(ex. stx 프로젝트)이다. 그리고 그 하나의 콘텍스트에서는 서블릿들이 있다. 서블릿은 작은 서버 프로그램이다. 컨트롤러와 서블릿은 같은 개념으로 봐도 무방하다.