ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Web Server, Application Server, WAS, Web Container(=Servlet Container)
    웹서버 2022. 6. 27. 20:16

    여러 개발관련된 문서를 읽어보면 이 4가지 개념이 혼재되어서 사용되기도 하고 차이점을 두고 설명하기도 해서 읽을 때마다 항상 헷갈립니다. 이번 포스팅에서는 이 4가지 개념을 정리해보도록 하겠습니다.

    Web Server

    • Client 는 HTTP 프로토콜을 이용하여 요청을 보내게 됩니다. 웹 서버는 이를 해석해 요청에 맞는 데이터를 보내주어야 합니다.
    • 그에 맞는 데이터 형식으로 보내주는 것이 Web Server 가 할 일입니다.
    • 웹 서버는 단순히 요청에 대한 데이터를 수정없이(static, 정적) 클라이언트에 보내주기만 하면 됩니다.
    • 초창기 인터넷에서는 정적 데이터에 대한 수요가 높았기 때문에 기능적으로 WAS 를 따로 나누지 않고 웹 서버라는 개념을 통칭해서 사용했습니다.

    Application Server

    • 하지만 사용자가 증가하고 데이터를 수정하여 클라이언트에 보내줘야 하는 서비스들이 생겨나면서 웹 서버와 따로 서버를 나누게 되었는데 이를 Application Server라고 합니다.
    • Application Server 는 주로 DB와 같이 사용되며 동적데이터를 처리합니다.
    • Application Server 는 Java, JS, Go 등 여러 언어를 통해서 만들 수 있습니다.

    WAS(Web Application Server)

    WAS 는 J2EE 스펙을 구현하여, 서블릿이나 JSP 로 작성된 애플리케이션을 실행하는 스프트웨어이다.

    Web Container(=Servlet Container)

    동적 데이터 생성

    CGI(Common Gateway Interface)

    • 웹 서버에서 동적인 데이터를 반환하려면 요청에 알맞는 프로그램(A)이 필요할 뿐 아니라, 그 알맞은 프로그램(A) 에 적절히 넘겨주는(예를들어, 어떤 경로로 요청이 들어왔는지, GET요청인지 POST요청인지 등을 파싱해주는것 등) 중간자 역할을 하는 프로그램(B)가 필요합니다.
    • CGI 프로그램이 그 역할을 합니다.
    • 여기서 CGI 는 이름에도 나왔지만 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법의 표준 스펙 즉, 인터페이스입니다.
    • 따라서 PHP, Perl, Python 등 다양한 언어로 CGI 를 적용 시킬 수 있습니다.

    Servlet

    • Java 에서는 CGI 와 유사한 방식으로 구현된 Servlet 이라는 프로그램이 존재합니다.
    • 자바 Servlet 은 J2EE 사양의 일부분으로 클라이언트의 요청에 대해 처리하는 역할을 하는 자바 프로그램입니다.

    CGI 와 서블릿의 차이점

    • CGI 는 매 요청이 들어올 떄마다 프로세스가 생성되고 각각의 CGI 구현체를 통해 처리합니다.
    • 서블릿은 각 요청마다 스레드가 생성되거나 스레드 풀에서 기존의 스레드를 사용하여 동작합니다.
    • 또한 Servlet 은 싱글턴 패턴을 통해 사용되기 떄문에 하나의 구현체를 통해 동작할 수 있습니다.

    CGI

    Servlet

    서블릿을 만들었다고 해서 스스로 작동하지 않습니다. 서블릿을 생성, 소멸 및 관리해주는 것이 필요한데 이 역할을 서블릿 컨테이너(ex. 톰캣) 가 합니다. 서블릿 컨테이너는 다음과 같은 역할을 합니다.

    1. 웹 서버와의 통신지원
    2. 서블릿 생명주기 관리
    3. 멀티쓰레드 지원 및 관리
    4. 선언적인 보안 관리

     

    FAQ

    1. Tomcat 은 WAS 인가요 서블릿 컨테이너 인가요?

    WAS 는 웹 서버처럼 HTTP 요청과 응답을 할 수 있고, 응답시 필요한 DB나 외부 서비스와의 교류 비즈니스 로직을 처리할 수 있습니다. WAS 는 요청을 분석하고 이러한 비즈니스 로직이나 트랜잭션을 처리할 때 서블릿을 사용하는데 이 서블릿 관리를 서블릿 컨테이너가 합니다. 즉, WAS 는 서블릿 컨테이너를 포함합니다. 우리가 Spring 을 사용할 때 주로 사용하는 tomcat 은 서블릿 컨테이너면서 WAS 의 역할을 어느정도 합니다. 하지만 명확히 보면 J2EE 스펙을 전부 구현하고 있지는 않기 때문에 WAS 라 할 수 없고, 서블릿 컨테이너라고 할 수 있습니다.

    2. WAS 가 Application Server 아닌가요?

    명확히 얘기하면 Java 로 J2EE 스펙에 따라 서버 개발 제품으로 구현한 것을 웹 애플리케이션 서버 또는 WAS라 불립니다.
    따라서 WAS 도 Application Server 의 한 종류라고 할 수 있습니다.

     

    3. J2EE 란

    Servlet, JSP, EJB, JDBC, JNDI, NMX, JTA 등을 구현하고  썬 마이크로시스템즈가 J2EE 명으로 발표한 분산 애플리케이션 개발목적의 산업 표준 플랫폼입니다. 기업용 애플리케이션을 개발/실행하기 위한 기술과 환경을 제공하며 다음과 같은 기술을 포함하고 있습니다.

    참고

    댓글