GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Spring

Servlet 서블릿 등장 , http? 내가 다 연결해줄게!

Backcoder 2022. 6. 11. 19:54

4차 산업의 시대, AI 의 시대를 살아가고 있는 우리다. 

 

급격한 변화들이 휙휙 지나가고 있는 와중에도 

 

"Web" 의 세계에선  지금도 모든것이 HTTP 로 시작해 HTTP 로 끝난다.

 

HTML, Text, Image 등 모든 형태의 Data 들은 결국 HTTP 의 손, HTTP 메세지를 거쳐 주고 받아진다.

 

Https:// 에 주소를 입력하고 1초도 걸리지않아 나오는 화면.

 

하지만 그 찰나에 HTTP 메세지가 오고가는 과정은 생각보다 복잡했다. 

 

----------------------

( 소켓을 연결하고, HTTP 요청 메세지를 파싱하고, HTTP body 메세지를 파싱하고, data를 사용할 수 있게끔 파싱하고, 저장프로세스를 실행하고 ... )

 

드디어  < 비니지스로직을 실행, DB 를 다녀오고 > 

 

client 님이 요청한걸 보내드리기 위해 다시 HTTP의 세계로 들어간다. 

 

( HTTP 응답메세지 생성 블라~~~~~~~~~~~~~~블라 TCP/IP 응답 까지. ) 

-----------------------

어질어질 하다. 

 

하지만, 매번 이 복잡한 과정을 다 해야하는 건 상당히 귀찮은 일이라고 생각한 선인분들께서 

 

Servlet 을 만들어주셨다.  

 

Servlet은 위의 과정에서  ( http 메세지를 생성, 파싱, data파싱, 소켓연결 tcp/ip 관련 된 복잡한 과정들 )을 다 해주고, 

 

우리가 조금더 < 비지니스로직, DB > 에만 집중할 수 있도록 해준다. 

 

@WebServlet(name = "HelloServlet", urlPatterns = "/home")
public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response){
        //API 로직 작성
    }
}

 

이렇게 되면 꽁짜로 HTTP 스펙을 편리하게 사용할 수 있다. 

 

HTTP 형식으로 요상하게 메세지가 들어와도, Servlet이 자동으로 파싱해서 넘겨주기 때문에 

 

request.getusername();  같이 request 객체를 그대로 써먹을 수 있다. 

 

response 도 마찬가지로 Servlet 이 자동으로 HTTP 메세지로 파싱해주기 때문에

 

내가 작성한 코드가 편리하게 Client 에게 HTTP 형태로 전달될 수 있다. 

 

 

-

 

이 귀하디 귀한 Servlet 을 제공해 주는건 바로 WAS, Tomcat 과 같은 서버 형님들이다. 

 

WAS 서버들은 Servlet Container 를 만들어 그 안에 Servlet 을 생성할 수 있게 해주었다. 

여기서 Servlet 객체는 싱글톤으로 관리 - 오직 유일한 하나의 객체로만 생성해서 공유해서 사용, 재사용 된다. 

 

그리고 Servlet Container 는 (즉 WAS 는)  

 

가장 중요한 기술인 멀티쓰레드 처리 기술을 지원해준다고 한다.  

 

 

 

(정리) 

 

WAS 가 제공해주는 최고의 기능 두 가지 

 

1. Servlet 제공   = >  <비지니스 로직  /  DB > 를 제외한  ( HTTP 메세지 파싱과정 및 관련 기능들 전반 ) 을 자동으로 처리해준다. 

( HTTP 는 프로그래밍 기저에 깔려있는 중요한 개념. 깊게 공부할 필요가 있다. )

 

 

2. Servlet Container  = > (Servlet 관리)  +  멀티쓰레드 기능 지원 

 

멀티쓰레드 기능은 서버를 관리하는데 핵심 기능. 중요.