웹 서버(Web Server)
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(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란?
- 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): 여러 가지 메시징 시스템에 대한 플랫폼 독립적인 인터페이스를 제공합니다.
웹 컨테이너(Web Container)
동적 데이터 생성
CGI(Common Gateway Interface)
웹 서버에서 동적인 데이터를 반환하려면 요청에 알맞는 프로그램(A)이 필요할 뿐만 아니라, 그 알맞는 프로그램(A)에 적절히 넘겨 주는 중간자 역할을 하는 프로그램(B)이 필요한데 CGI 프로그램(B)이 그 역할을 합니다. 하지만 CGI는 특별한 라이브러리나 도구를 의미하는 것이 아닌 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법, 즉 표준 스펙이자 Interface를 말합니다. 즉, 서버 프로그램과 외부 프로그램과의 연계법을 의미하기 때문에 PHP, Perl, Python등 다양한 언어로 CGI를 적용 시킬 수 있습니다.
하지만 JAVA에서는 CGI와 유사한 방식으로 구현된 서블릿(Servlet) 이라는 프로그램이 존재합니다.
Servlet
마찬가지로 웹페이지를 동적으로 생성할때 사용되는 서버 측 프로그램입니다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종입니다. 자바 서블릿은 자바 EE 사양의 일부분으로, 클라이언트의 요청에 대해 처리하는 역할을 하는 자바 프로그램입니다.
웹 컨테이너(Web Container)
서블릿 컨테이너
※웹 컨테이너와 서블릿 컨테이너는 같은 말입니다.
서블릿을 만들었다고 해서 스스로 작동하는 것이 아니고 서블릿을 생성, 소멸 및 관리해주는 것이 필요한데 이 역할을 하는 것이 바로 서블릿 컨테이너입니다. 예를 들어, 서블릿이 어떠한 역할을 수행하는 정의서라고 하면, 서블릿 컨테이너는 그 정의서를 보고 수행한다고 할 수 있습니다. 서블릿 컨테이너는 IoC(Inversion of Control) 및 DI(Dependency Injection)를 할 수 있으며 개략적인 역할은 다음과 같습니다.
- 웹 서버와의 통신 지원
- 서블릿 생명주기 관리
- 멀티쓰레드 지원 및 관리
- 선언적인 보안 관리
WAS와 차이점(tomcat)
WAS는 웹 서버처럼 HTTP 요청과 응답을 할 수 있고, 응답시 필요한 데이터베이스나 외부 서비스와의 교류 비즈니스 로직을 처리할 수 있습니다. WAS는 요청을 분석하고 이러한 비즈니스 로직이나 트랜잭션을 처리할때 서블릿을 사용하는데 이 서블릿 관리를 서블릿 컨테이너가 하게 됩니다. 즉, WAS는 서블릿 컨테이너를 포함하고 있습니다. 웹 공부를 하다 보면 WAS와 서블릿 컨테이너 두 개념이 헷갈리는데 이유는 아마 tomcat 때문인 것 같은데, 톰캣이 서블릿 컨테이면서도 WAS의 역할을 어느정도 하기 때문입니다. 하지만 tomcat은 J2EE 스펙을 전부 구현하고 있지는 않기 때문에 서블릿 컨테이너라 할 수 있습니다.
https://velog.io/@waoderboy/웹-서버-WAS-웹-컨테이너
'programming_kr > other' 카테고리의 다른 글
애자일(Agile Methodology) 방법론이란? (0) | 2022.08.11 |
---|---|
DevOps란? (0) | 2022.08.08 |
public cloud란? (0) | 2022.08.05 |
vscode tomcat war 배포하기 (1) | 2022.07.21 |
vscode에서 tomcat 서버 세팅하기 (5) | 2022.07.12 |
댓글