웹 서버, WAS, 웹 컨테이너

waonderboy·2022년 2월 20일
5

목록 보기
1/2
post-thumbnail

개요
Web Server, WAS(Web Application Server), 웹 컨테이너와 같은 용어를 혼용하는 경우가 많다. 이들은 늘 헷갈리기 때문에 구분할 필요가 있다. 웹 서버와 어플리케이션 서버의 주된 차이점은 웹 서버는 HTML 및 CSS와 같은 정적 페이지를 제공하는 반면 애플리케이션 서버는 Servlet 또는 EJB와 같은 서버 측 코드를 실행하여 동적 콘텐츠를 제공한다는 것이다.



웹 서버(Web Server)

웹 서버는 두 가지 의미로 사용된다.


  • Web Server는 Web Server의 소프트웨어와 Website(HTML, CSS , JavaScript 파일)의 컴포넌트 파일들을 저장하는 컴퓨터로 보는 하드웨어로서의 의미.

  • Client가 어떻게 호스트 파일들에 접근하는지를 관리하는 소프트웨어로서의 의미. 웹 서버는 URI(Uniform Resouce Indentifier)와 HTTP(당신의 브라우저가 웹 페이지를 보여주기 위해 사용하는 프로토콜)의 소프트웨어 일부이다.


Client는 HTTP 프로토콜을 이용하여 요청을 보내게 된다. 웹 서버는 이를 해석하여 요청에 맞는 데이터를 보내주어야 한다. 여기서 HTTP 를 해석하고, 그에 맞는 데이터 형식으로 보내주는 것이 Web Server 가 할 일이다.

웹 서버(Web Server)는 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램을 말한다. 웹 서버란 단순히 요청에 대한 데이터를 수정없이 보내 HTTP에 맞춰 보내주기만 하면 때문에 정적(Static)이라고 한다. 단순히 데이터만 반환하면 되기 때문에 처리 속도가 빠르며 트래픽의 과부하를 잘 처리할 수 있다는 장점이 있다.

  • 초창기 인터넷에서는 정적 데이터에 대한 수요가 높았기 때문에 기능적으로 어플리케이션 서버를 따로 나누지 않고 웹 서버라는 개념을 통칭해서 사용하였다.

  • 하지만 유저가 증가함에 따라 더 많은 서비스와 기능이 필요하게 되었고 그로 인한 서버의 부하를 줄이기 위해 따로 서버를 나누게 되었는데 이를 어플리케이션 서버라고 한다.

💡초창기 인터넷에서는 기능적으로 어플리케이션 서버를 따로 나누지 않고 웹 서버라는 개념을 통칭해서 사용하였다. 하지만 현재에는 주로 정적데이터를 처리하는 서버를 의미한다.



어플리케이션 서버(Application Server)

웹 서비스가 복잡해지고 기능이 다양해지며 데이터를 가공해서 처리하는 비즈니스 로직이 필요하게 되었다. 웹 서버 하나에서 이러한 로직을 처리하는데는 부하가 커서 별도의 서버가 필요하게 되었고 이를 어플리케이션 서버라 부르게 되었다.

어플리케이션 서버는 인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 비즈니스 로직을 수행해 주는 미들웨어로 볼 수 있다. 웹 애플리케이션 서버는 동적데이터를 처리하며, 주로 데이터베이스 서버와 같이 수행이 된다. 애플리케이션 서버가 HTTP 서버를 통해 브라우저에게 요청된 데이터를 전송하기 전에, 애플리케이션 서버가 업데이트하기 때문에 동적이라고 한다. 어플리케이션 서버는 Java, JavaScript, PHP, Python, Ruby, nodejs 등의 다양한 언어로 애플리케이션 서버를 만들 수 있다.

그러면 WAS와의 차이점은 무엇일까?

간단하게 말해서 자바로 J2EE 스펙을 구현하여 서블릿으로 작성된 애플리케이션을 실행할 수 있으면 WAS이다. 즉 WAS는 어플리케이션 서버의 한 종류라고 볼 수 있다.

💡한국에서는 일반적으로 "WAS" 또는 "WAS S/W"로 통칭하고 있으며 공공기관에서는 "웹 응용 서버"로 사용되고, 영어권에서는 "Application Server" (약자 AS)로 불린다. (Wiki)



WAS(Web Application Server)

웹 애플리케이션 서버(Web Application Server)는 J2EE의 스펙을 구현하여, 서블릿(Servlet)이나 JSP로 작성된 애플리케이션을 실행하는 소프트웨어이다. J2EE란 1999년 썬 마이크로시스템즈가 J2EE(Java 2 Enterprise Edition) 명으로 발표한 분산 애플리케이션 개발 목적의 산업 표준 플랫폼이다. 기업용(Enterprise) 애플리케이션을 개발/실행하기 위한 기술과 환경을 제공하며 서블릿(Servlet), JSP, EJB, JDBC, JNDI, JMX, JTA 등의 알려진 기술을 포함하고 있다.

💡현 Jakarta_EE 구 J2EE(Java Enterprise Edition)란?

  • Servlet : 클라이언트가 보내는 HTTP 요청을 처리하는 서버 측 자바 프로그램이며, Servlet 엔진이 있어야 합니다.
  • JSP(Java Server Pages): HTML이나 Java 코드를 써서 사용자에게 정보를 보여 줍니다. JSP가 처음 실행될 때 Servlet 엔진이 이것을 Servlet으로 컴파일시켜서 내부적으로는 Servlet으로 동작합니다.
  • EJB(Enterprise Java Beans) : Java에서 제공하는 분산 컴포넌트 기술로 비즈니스 로직이나 데이터, 메시지를 처리할 수 있습니다.
  • Remote Method Invocation(RMI): 프록시를 써서 원격에 있는 Java 객체의 메소드를 실행시키기 위한기술입니다.
  • Java Naming DirectoryInterface(JNDI): 자바 기술로 만들어진 객체에 이름을 붙여 찾을 수 있도록 단일한인터페이스를 제공합니다.
  • Java Database Connector(JDBC): 여러 종류의 데이터베이스 시스템에 접근하는 단일한 인터페이스를 제공합니다. 각각의 데이터베이스에 맞는 JDBC 드라이버가 있어야 합니다.
  • Java Connector Architecture(JCA): 다른 기종 플랫폼을 통합할 수 있도록 플랫폼 독립적인 인터페이스를 제공합니다.
  • Java Message Service (JMS): 여러 가지 메시징 시스템에 대한 플랫폼 독립적인 인터페이스를 제공합니다.

    출처: https://gyrfalcon.tistory.com/entry/J2EE [Minsub's Blog]

바뀐 Jakarata_EE에 대하여 (출처 : 삼성 SDS)
Read more: https://www.samsungsds.com/kr/insights/java_jakarta.html



웹 컨테이너(Web Container)

동적 데이터 생성

CGI(Common Gateway Interface)

웹 서버에서 동적인 데이터를 반환하려면 요청에 알맞는 프로그램(A)이 필요할 뿐만 아니라, 그 알맞는 프로그램(A)에 적절히 넘겨 주는 중간자 역할을 하는 프로그램(B)이 필요한데 CGI 프로그램(B)이 그 역할을 한다. 하지만 CGI는 특별한 라이브러리나 도구를 의미하는 것이 아닌 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법, 즉 표준 스펙이자 Interface를 말한다. 즉, 서버 프로그램과 외부 프로그램과의 연계법을 의미하기 때문에 PHP, Perl, Python등 다양한 언어로 CGI를 적용 시킬 수 있다.

하지만 JAVA에서는 CGI와 유사한 방식으로 구현된 서블릿(Servlet) 이라는 프로그램이 존재한다.

서블릿

마찬가지로 웹페이지를 동적으로 생성할때 사용되는 서버 측 프로그램이다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 자바 서블릿은 자바 EE 사양의 일부분으로, 클라이언트의 요청에 대해 처리하는 역할을 하는 자바 프로그램입니다.

CGI와 서블릿의 차이점

  • CGI는 매 요청이 들어올 때마다 프로세스가 생성되고 각각의 CGI 구현체를 통해 처리한다.
  • 서블릿은 각 요청마다 스레드가 생성되거나 스레드 풀에서 기존의 스레드를 사용하여 동작한다.

    💡 메모리를 공유하는 쓰레드에 비해서 프로세스는 각자의 공간을 지니기 때문에 무겁고 생성되는데 시간이 상대적으로 오래 걸린다. 또한 Servlet은 싱글톤 패턴을 통해 사용되기 때문에 하나의 구현체를 통해 동작할 수 있다.
CGI을 이용한 동적 데이터 처리 Servlet을 이용한 동적 데이터 처리


웹 컨테이너(Web Container)

서블릿 컨테이너

💡웹 컨테이너와 서블릿 컨테이너는 같은 말이다.

서블릿을 만들었다고 해서 스스로 작동하는 것이 아니고 서블릿을 생성, 소멸 및 관리해주는 것이 필요한데 이 역할을 하는 것이 바로 서블릿 컨테이너이다. 예를 들어, 서블릿이 어떠한 역할을 수행하는 정의서라고 하면, 서블릿 컨테이너는 그 정의서를 보고 수행한다고 할 수 있다. 서블릿 컨테이너는 IoC(Inversion of Control) 및 DI(Dependency Injection)를 할 수 있으며 개략적인 역할은 다음과 같다.


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



WAS와 차이점(tomcat)

WAS는 웹 서버처럼 HTTP 요청과 응답을 할 수 있고, 응답시 필요한 데이터베이스나 외부 서비스와의 교류 비즈니스 로직을 처리할 수 있다. WAS는 요청을 분석하고 이러한 비즈니스 로직이나 트랜잭션을 처리할때 서블릿을 사용하는데 이 서블릿 관리를 서블릿 컨테이너가 한다. 즉, WAS는 서블릿 컨테이너를 포함하고 있다. 웹 공부를 하다 보면 WAS와 서블릿 컨테이너 두 개념이 헷갈리는데 이유는 아마 tomcat 때문인 것 같은데, 톰캣이 서블릿 컨테이면서도 WAS의 역할을 어느정도 하기 때문이다. 하지만 tomcat은 J2EE 스펙을 전부 구현하고 있지는 않기 때문에 서블릿 컨테이너라 할 수 있다.







Reference

profile
wander to wonder 2021.7 ~

0개의 댓글