본문 바로가기
Spring/인프런 토비의 Spring Boot

섹션 1-3 [스프링 부트 살펴보기] Containerless

by include_hoany 2024. 5. 28.

Containerless 컨테이너리스 웹 애플리케이션 아키텍처

스프링 부트는 컨테이너리스 웹 애플리케이션 아키텍처를 스프링이 지원해줬으면 좋겠다라는 한 개발자의 요청사항으로부터 출발했다. 그러면 Containerless란 무언인가?
 

Containerless

Containerless는 Serverless와 유사합니다. 서버에 대한 설치 관리를 신경쓰지 않고 서버 애플리케이션을 개발해서 배포하고 운영할 수 있도록 만드는 방법을 Serverless라고 부르는거와 마찮가지고 Containerless또한 개발자가 따로 Container 관리를 신경쓰지 않고 개발을 할 수 있다라는 개념으로 접근할 수 있습니다.
 

Container란?

 
일반적으로 WebClient가 WebComponent로 요청을 보내고 WebComponent는 Dynamic Content를 생성합니다. 생성된 Dynamic Content를 WebClient로 응답을 보내게 됩니다.

다만 WebComponent는 혼자서 존재할 수 없고 꼭 WebContainer에 존재해야합니다. WebContainer는 1차적으로 WebComponent를 관리하여 컴포넌트를 메모리에 올리고 클래스, 인스턴스를 생성, 라이프 사이클 등을 관리하는 역할을 WebContainer가 담당해줍니다. WebContainer는 일반적으로 WebComponent하나만 가지고있지 않고 여러 종류 WebComponent를 가지고 있을 수 있습니다. 회원가입, 로그인 등등 여러 기능들을 가진 WebComponent를 소유하고있고 관리해줘야하는 역할을 합니다. 또한 WebContainer는 정해진 규칙에 따라 WebClient로부터 들어온 요청을 어떤 WebComponent가 요청을 처리하는지 확인하고 해당 요청을 WebComponent로 넘깁니다. 흔히 어떤 WebComponent가 요청을 처리할지 결정하는 부분을 라우팅 또는 맵핑이라고 이야기 합니다.

자바에서는 WebComponent를 Servlet라고 합니다. Servlet을 관리하는 Servlet Container또한 존재하며 Servlet Container는 대표적으로 톰켓이 있습니다.
 

 
90년대 후반부터 시작된 자바의 웹 프로그래밍 기본 구성으로 개발을 진행함에 있어 서블릿에 대한 불만을 가진 개발자들이 고민하여 만든 프레임워크가 스프링 프레임워크 입니다.  스프링은 스프링 컨테이너라고도 많이 불리우는데 스프링 컨테이너는 서블릿 컨테이너를 대체하지는 않고 서빌릿 컨테이너 뒷쪽에 스프링 컨테이너가 존재합니다. 서블릿을 통해서 웹으로 들어온 요청을 스프링 컨테이너에게 넘겨주어 해당 요청을 처리해야할 빈에 넘겨주요 응답을 처리하게 됩니다.

구지 서블릿 컨테이너가 있어야 하나? 스프링 컨테이너가 서블릿 컨테이너를 대체하면 되지 않나 라는 생각이 들 수 있지만 기본적으로 자바의 표준 웹 기술을 사용하려면 서블릿 컨테이너가 존재해야하기 때문에 대체는 어려운 부분이 존재합니다.
 

Spring을 동작시키기까지

Spring 동작시키기까지는 서블릿 컨테이너를 띄워야 하지만 쉽지 않은 부분들이 잇습니다. web.xml설정을 작성해야하고 WAR 형식의 파일로 빌드를 해야하고 프로젝트 폴더 구성도 설정에 맞게 구성해야합니다. 또한 톰켓 서버를 다운로드받고 실행시켜야하고 WAR파일 배포를 진행해야합니다. 그외 서블릿에서 로그를 어떻게 봐야하는지, 클래스로더는 어떻게 설정해야하는지 등등 간단히 Hello World를 구성하는데 까지 많은 작업이 필요로 합니다.
 

 

결국 Containerless란

서블릿 컨테이너를 사용하지 않고 스프링 컨테이너가 요청을 받을 수 있도록 하는게 아닌 서블릿 컨테이너가 필요하지만 설치, 관리를 하고 설치 관리를 하기위한 학습을 하는등의 수고 없이 개발을 할 수 있도록 Spring Boot는 환경을 제공해줍니다.