Containerless 개발

Kyle_Kim·2023년 5월 29일
0

서블릿 컨테이너 뒤에서 스프링 컨테이너는 빈이 작업 처리를 할 수 있게 호출함.

다른 메인 메소드 하나만 살행해지 않도 나머지 캄퍼넌스도 작동 가능

Spring Boot는

Spring Boot는 Spring이 Containerless web application architecture를 지원해줬으면 좋겠다는 한 개발자의 요청사항으로부터 출발됐다 ...

스프링을 기반으로 실무 환경에 사용 가능한 수준의 독립실행형 애플리케이션을 복잡한 고민 없이 빠르게 작성할 수 있게 도와주는 여러가지 도구의 모음이다.

Containerless

Container + less ? 컨테이너가 필요없다? (X)

서버 설치/관리가 필요없다! (O)

Container

위와 같은 ServletContainer(ex> 톰캣)에서 web.xml, war, deploy 등등 설정의 수고 없이 Containerless가 되면 Srping Container 설정이 알아서 된다.

-- 물론 커스텀 할 수 있다. SpringBoot를 이용하면 전체가 다 실행이 된다 그래서 독립실행형 어플리케이션이란걸 알 수 있다.

Servlet Container는 일반적으로 Servlet을 관리하며 WEB CLIENT의 WEB REQUEST가 들어오는걸 담당 Servlet로 안내해주는 역할을 한다.

(Serverless랑 비슷) Spring은 IOC Container이다.

For JAVA ...

컴포넌트 - 서블릿

컨테이너 - 서블릿 컨테이너(ex: 톰캣)

$ 이제부터 핸즈온 진행 $

1. 서브릿 컨테이너 만들어보기

public class HellobootApplication {

    public static void main(String[] args) {
        System.out.println("Hello Containerless StandAlone Server");

        TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory(); // 톰캣 서브릿 웹서버를 만들어준다.
        // 만약 다른 서브렛 컨테이너 를 사용하고 싶다면 JettyServletWebServerFactory()
        WebServer webServer = serverFactory.getWebServer();
        webServer.start();
    }
}

- 서버가 뜨긴 하지만 localhost:8080으로 접속시 404 page not found error가 나온다.

  • 실행 화면

2. 서블릿 등록

웹이서 요청이 오면 컨테이너에서 어떤 서브렛을 사용해야 할지 매핑을 해준다

  • servlet은 web component이다.
public static void main(String[] args) {
        System.out.println("Hello Containerless StandAlone Server");

        TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory(); // Embeded 톰캣 서브릿 웹서버를 호출한.
        // 만약 다른 서브렛 컨테이너 를 사용하고 싶다면 JettyServletWebServerFactory()
        WebServer webServer = serverFactory.getWebServer(servletContext -> {
            servletContext.addServlet("Hello", new HttpServlet() { // 서브랫 추가해주기
                @Override
                protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                    resp.setStatus(200); // set status
                    resp.setHeader("Content-Type", "text/plain"); // set header
                    resp.getWriter().print("Hello Servlet"); // set Body
                }
            }).addMapping("/hello"); //요청이 들어오면 매핑을 해준다.
        });
        webServer.start();
    }

Front Controller

여러 요청을 처리하는데 반복적으로 등장하게 되는 공통 작업을 하나의 오브젝트에서 일괄적으로 처리하게 만드는 방식을 프론트 컨트롤러 패턴(Front Controller Pattern)이라고 합니다.

가령 서블릿 컨테이너의 서블릿이 모든 요청에 대해 처리했다면, Front Controller을 거쳐 서블릿을 매핑 및 바인딩을 할 수 있습니다.

Front Controller가 HTTP 요청을 처리할 핸드러를 결정하고 연동한는 작업을 Mapping이라 하며, 핸들러에게 웹 정보를 추출하여 전달하는 작업을 Binding이라고 합니다. Front Controller가 요청을 분석하여 처리할 요청을 구분하여 이를 처리할 핸들러에게 넘겨줍니다. 핸들러가 처리하고 돌려준 리턴 값을 해석하여 웹 요청을 생성합니다.

서브릿 컨테이너 완성

profile
꾸준함.

0개의 댓글