[WEB] HTTP와 서블릿(Servlet) 요청(Request), 응답(Response)

 

 

클라이언트와 서버간에 인터넷 통신을 하는 것을 웹 통신이라고 하며, 이러한 웹은 HTTP기반으로 이루어진다. HTTP는 HTML, TEXT 등과 IMAGE, 음성, 영상 파일 등의 다양한 형태의 데이터를 전송할 수 있다.

 

이러한 HTTP를 기반으로 하는 서버에는 WEB서버와 WAS(Web Application Server)서버가 있는데 이 서버의 특징은 아래와 같다.

 

 

- 웹 서버(Web Server)

  • HTTP 기반으로 동작한다.
  • 정적 리소스(HTML, CSS, JS, 이미지, 사진, 영상 등) 제공
  • 예로 APACHE, NGINX 등이 있다.

 

- 웹 애플리케이션 서버(WAS - Web Application Server)

  • HTTP 기반으로 동작한다.
  • 웹 서버 기능을 포함한다. (정적 리소스 제공 가능)
  • 프로그래밍 코드를 실행해서 애플리케이션 로직을 수행한다.
  • 동적 리소스(HTML, HTTP API, 서블릿, JSP 등) 수행
  • 예로 Tomcat, Jetty, Undertow 등이 있다.

 

웹 시스템의 구성

 

기본적으로 웹 시스템의 구성은 정적 리소스는 WEB서버에서 동적(애플리케이션) 리소스는 WAS에서 관리하며 로직 등을 통해 DB 서버와 데이터를 송, 수신 한다.

 

여기서 Client가 WAS와 통신을 할 때, HTTP 메세지를 기반으로 통신한다. HTTP의 메세지는 기본적으로 시작 라인(start-line)과 헤더(header), 메세지 바디(message body), 헤더와 메세지 바디 사이에 공백라인(empty line, CRLF)로 구성된다.

 

- HTTP 요청메세지 시작 라인

  • HTTP 메서드(GET, POST, PUT, PATCH, DELETE)
  • 요청 대상 (/path[?query&parameter=value])
  • HTTP 버전

 

- HTTP 응답메세지 시작 라인

  • HTTP 버전
  • HTTP 상태코드 (200: 성공, 400: 클라이언트 오류, 500: 서버 오류)

 

- HTTP 메세지 헤더

  • HTTP 전송에 필요한 모든 부가정보 (메세지 바디의 내용, 크기, 압축, 인증, 요청 클라이언트 정보 등)

 

- HTTP 메세지 바디

  • 실제 전송할 데이터 (HTML, 이미지, 영상, JSON 등 byte로 표현 할 수 있는 모든 데이터 전송)

 

 

Client와 Server가 통신하면서 수행하려고 했던 의미있는 비즈니스 로직을 제외한 TCP / 소켓 연결, HTTP 메세지 파싱, 서버 기능 프로세스 실행 등 서버해서 설정해야 할 처리들이 있는데 이 설정들은 비슷하게 반복적이고 양도 많기 때문에 서블릿(Servlet)을 사용한다.

 

서블릿(Servlet)은 Client가 Server에 HTTP를 통한 요청과 응답 정보를 편리하게 사용하고 제공 받을 수 있게 해준다. 서블릿을 이용하면 Request와 Response 객체를 사용 할 수 있는데 이 객체를 통하여 HTTP 요청, HTTP 응답 메세지를 편하게 가져오고 입력할 수 있다.

 

 

@WebServlet(name = "testServlet", urlPatterns = "/test")
public class TestServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       // 비즈니스 로직
    }

위와 같은 서블릿을 사용하게 되면 Client와 Server의 통신간에 설정해야 할 처리들을 알아서 설정해주고 의미있는 비즈니스 로직 부분만을 구현 할 수 있다.

 

@WebServlet에서 해당 urlPattern의 URL이 호출되면 service메서드의 비즈니스 로직 부분이 실행되고 HttpServletRequest 객체를 통해 HTTP 요청 정보를 사용 할 수 있으며 HttpServletResponse 객체를 통해 HTTP 응답 정보를 제공 할 수 있다.

 

+ Recent posts