[개발 기본 지식] WEB(아파치)과 WAS(톰캣) 차이

Lemon·2022년 12월 14일
9

CS

목록 보기
15/17
post-thumbnail

WEB Server

웹 서버는 작성된 html페이지 등을 네트워크 망에 종속되지 않고, 웹서비스를 할 수 있도록 어플리케이션으로, 클라이언트에게 요청을 받으면 해당 요청을 판단하여 정적인 자원은 WAS를 거치지 않고 바로 응답해주고, 동적인 자원은 WAS에 요청을 전달하여 WAS에서 받은 결과를 클라이언트에게 응답한다.

WAS (Web Application Server)

WAS웹 서버와 웹 컨테이너로 웹 상에서 사용하는 컴포넌트를 올려놓고 사용하게 되는 서버이다.
인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)이다.
웹 애플리케이션 서버는 동적 서버 콘텐츠를 수행하는 것으로 일반적인 웹 서버와 구별 되며, 주로 데이터베이스 서버와 같이 수행된다.
여기서 웹 컨테이너란, JSP와 Servlet을 실행시킬 수 있는 소프트웨어를 웹 컨테이너라고 한다.

💡 JSP
JavaServer Pages 의 약자이며
HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구

💡 자바 서블릿(Java Servlet)
서블릿이란 웹페이지를 동적으로 생성하기 위해 서버측 프로그램을 말한다.
자바 언어를 기반으로 만들지며 웹 어플리케이션 서버 ( Web Application Sever ) 위에서 컴파일 되고 동작한다.

💡 JSP 와 서블릿의 차이점
JSP 는 HTML 내부에 JAVA 소스코드가 들어감으로 인해 HTML 코드를 작성하기 간편하다는 장점이있으며
서블릿은 자바코드내에 HTML 코드가 있어서 읽고 쓰기가 굉장히 불편하기 때문에 작업의 효율성이 떨어진다.

WAS의 기본 기능

  • 프로그램 실행 환경과 데이터베이스 접속 기능 제공
  • 여러 개의 트랜잭션(쪼갤 수 없는 업무 처리의 최소 단위) 관리
  • 업무 처리하는 비즈니스 로직 수행
  • Web Service 플랫폼으로서의 역할

WEB 과 WAS의 차이점

1. Web Container 유무
Web Container의 유무로 WEB와 WAS를 나눌 수 있다.
Web Container가 있으면 WAS로 분류된다.

2. 목적이 다르다.
WEB(웹서버)는 HTML 문서같은 정적인 데이터를 처리하는 서버이다. 이미지나 단순 html 파일과 같은 리소스를 제공하는 서버를 웹 서버를 통하면 WAS를 이용하는 것보다 안정적이다.
WAS동적인 데이터를 처리하는 서버이다. DB와 연결되어 데이터를 주고 받거나 프로그램으로 데이터 조작이 필요한 경우에 WAS를 활용해야 한다.

우리가 만드는 웹 페이지는 정적 컨텐츠와 동적 컨텐츠를 함께 노출하게 한다. WAS가 정적 데이터를 처리하게 되면, 동적 컨텐츠의 처리가 지연될 것이고, 이로 인한 페이지 노출시간이 늘어나게 된다. WAS는 동적 처리에 최적화 되어 있는 서비스이기 때문에 처리 속도를 위해, 정적처리는 웹서버에서 처리를 하고, 동적 컨텐츠는 WAS에서 처리하게 된다.

사용자가 클라이언트(브라우저)에 요청을 하게 되면 이를 웹서버에서 반응하여 WAS의 처리를 거쳐 웹 페이지로 다시 웹서버에서 클라이언트(브라우저)에 응답 메시지를 주는 것이다.

추가적으로 JSP를 배울 때, 대체적으로 Apache와 Tomcat을 사용한다. ASP를 구동하기 위해서는 IIS를 사용한다. ASP의 환경이 MS계열 서비스라면 WAS의 기능을 담당하는 부분이 있어 별도의 WAS가 필요하지 않다.

WEB 과 WAS의 종류

Web ServerWAS
ISS, apache, tMax, WebtoBtomcat, tMax jeus, BEA Web Login, IBM Webspere, JBOSS, Blustone, Gemston, inprise, Oracle, PowerTier, Apptivity, silverStream

아파치(Apache)란?

아파치 소프트웨어 재단의 오픈소스 프로젝트이다.
웹서버로 불리며 클라이언트 요청이 왔을때만 응답하는 정적 웹페이지에 사용된다.

  • 웹서버 = 80번 포트로 클라이언트 요청(POST,GET,DELETE)이 왔을때만 응답함.
  • 정적인 데이터만 처리한다. (HTML,CSS,이미지 등)

http 웹 서버는 http 요청을 처리할 수 있는 웹서버이다. 아파치 http 서버는 http요청을 처리하는 웹 서버이다.
클라이언트가 GET, POST, DELETE 등의 메소드를 이용해 요청을 하면 이 프로그램이 어떤 결과를 돌려주는 기능을 한다.

톰캣 (Tomcat)이란?

tomcat은 흔히 WAS(Web Application Server)라고 말한다.
dynamic(동적)인 웹을 만들기 위한 웹 컨테이너, 서블릿 컨테이너라고 불리며, 웹서버에서 정적으로 처리해야할 데이터를 제외한 JSP, ASP, PHP 등은 웹 컨테이너(톰캣)에게 전달한다.
동적인 데이터 처리가 가능하고, DB연결, 데이터 조작, 다른 응용프로그램과 상호 작용이 가능하다.

💡 JSP (JavaServer Pages)
HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구

💡 PHP (Hypertext Preprocessor)
C언어를 기반으로 만들어진 서버 측에서 실행되는 서버 사이드 스크립트 언어
PHP는 동적 웹 페이지를 쉽고 빠르게 만들 수 있도록 해주는 데 그 목적이 있습니다.
PHP로 작성된 코드를 HTML 코드 안에 추가하면, 웹 서버는 해당 PHP 코드를 해석하여 동적 웹 페이지를 생성합니다.

💡ASP (Active Server Page)
동적으로 서버에서 작동하는 페이지를 의미한다.
서버 측의 스크립트로 서버사이드 스크립트라고 해서 서버에서 실행된다.
PHP와는 다르게 윈도우 운영체제에서만 작동한다는 단점이 있다.

WAS는 웹서버와 웹 컨테이너의 결합으로 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행할 수 있는 서버를 말한다.

클라이언트 요청이 있을 때 내부의 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에 전달해주는 역할을 하는 것이 바로 웹 컨테이너이다.

아파치 웹 서버와 차이는 이 컨테이너의 기능이 가능하냐의 차이가 가장 크다.


아파치와 톰캣의 장단점

장점단점
Apache처리 속도가 빠르다.
구조가 단순하여 비용절감.
트래픽 과부하에 강하다.
정적인 데이터만 처리가 가능하다.
다른 서비스와 상호작용이 불가하다.
Tomcat데이터 흐름이 유동적이다.
DB 등 여러 서비스가 가능하다.
아파치에 비해 속도가 느리다.
부가적인 비용이 발생한다.
트래픽 과부하에 약하다.

아파치 톰캣 (Apache Tomcat)이란?

아파치만 사용하면 정적인 웹페이지만 가능하고, 톰캣만 사용하면 동적인 웹페이지 처리가 가능하지만 아파치에서 필요한 기능을 못가져온다. 또한 여러 사용자가 요청할시에 톰캣에 과부하가 걸린다.

아파치와 톰캣을 같이 쓰면 아파치는 정적인 데이터만 처리하고, JSP처리는 Web Container(톰캣의 일부)로 보내주어 분산처리 할 수 있다.

아파치 : 80포트
톰캣 : 8080포트

💡실제로는 80포트로 다 처리하므로, 8080포트는 알아서 보내준다. 8080포트를 다루거나 보려면 리눅스 단에서 처리하거나 수동적으로 포트 처리할 때 빼고는 보기 힘들다.


WAS와 WebServer를 분리하는 이유

  • 기능을 분리하여 서버의 부하 방지
    • 한곳에 집중되는 부하를 여러 서버로 분산하여 로드밸런싱(부하분산)을 할 수 있다.
  • 물리적으로 분리하여 보안 강화
    • 내부/외부 네트워크 사이에 WEB 서버를 두고 DB서버와 연결되어있는 WAS를 내부망에 위치시켜 해킹등의 위협으로 부터 보호하기 위함
  • 여러대의 WAS를 연결 가능 (로드밸런싱의 역할 및 fail over, fail back 처리에 유리)
  • 여러 웹어플리케이션을 서비스 가능(java서버, c#서버, php서버 등 하나의 웹 서비스를 통해 서비스 가능)
  • WEB서버가 클라이언트의 요청을 캐싱하여 동일한 요청이 들어왔을때 WAS에 전달하지 않고 캐시된 내용을 바로 전달하기 때문에 성능상의 이점을 얻을 수 있게 된다.

참고 자료
https://helloworld-88.tistory.com/71
https://javacpro.tistory.com/43
http://www.tcpschool.com/php/php_intro_intro
https://byul91oh.tistory.com/65

profile
프론트엔드 개발자 가보자고~!!

0개의 댓글