Web/Basic

[Web] 웹 서버와 WAS : 아파치(Apache)와 톰캣(Tomcat)

생각많은 프로그래머 2024. 1. 30. 00:14

 

HTTP는 클라이언트와 서버 간의 데이터 교환을 위한 프로토콜로,

웹 브라우저(클라이언트)와 웹 서버 간에 웹 페이지, 이미지, 동영상 등의

리소스를 주고받는다.

 

HTTP 통신 과정

더보기
  1. 요청(Request):
    • 클라이언트(웹 브라우저)가 서버에게 요청을 보낸다.
    • 요청은 HTTP 메서드(GET, POST, PUT, DELETE 등)와 요청 URL(Uniform Resource Locator)을 포함한다.
    • 예를 들어, 웹 브라우저에서 "http://www.example.com"을 입력하면 클라이언트는 서버에게 "GET / HTTP/1.1"과 같은 요청을 보낸다.
  2. 응답(Response):
    • 서버는 클라이언트의 요청에 대한 응답을 생성한다.
    • 응답은 HTTP 상태 코드(200 OK, 404 Not Found 등), 헤더(Header), 본문(Body) 등으로 구성된다.
    • 예를 들어, 서버가 요청된 웹 페이지를 찾으면 "200 OK"와 함께 해당 페이지의 HTML 내용을 응답한다.
  3. 데이터 전송:
    • 클라이언트가 요청한 리소스가 있다면, 서버는 해당 리소스를 클라이언트에게 전송한다.
    • 전송되는 데이터는 HTML 파일, 이미지, 동영상 등의 다양한 형식일 수 있다.
    • 이 데이터는 TCP/IP 프로토콜을 사용하여 전송된다.
  4. 연결 종료:
    • 데이터 전송이 완료되면, 클라이언트와 서버 간의 TCP 연결이 종료된다.
    • 일부 상황에서는 연결을 유지하거나 재사용할 수 있다.(Keep-Alive 기능)

이 과정에서 언급되는 웹 서버라는 용어는 세 가지의 의미로 사용된다.

1. 웹 서비스가 실행되고 있는 물리적인 형태의 서버 

2. 물리적인 서버 내에서 실행 중이며 웹 요청을 받을 수 있는 서버(웹 서버)

3. 프로그래밍 언어에 의해 특정 로직이 실행되는 웹 애플리케이션 서버(WAS)

 

보통은 2번이나 3번의 경우를 모두 웹 서버라고 부르기도 한다.

 

하지만 웹 통신의 흐름을 좀 더 수월하게 이해하려면

이 둘을 좀 더 명확하게 구분할 필요가 있다.

이번 글에서는 2번과 3번, 웹 서버WAS를 구분하여

HTTP 통신 과정에 대해 이해해보고자 한다. 

 

 

웹 서버(Web server)

 

웹 서버는 보통 정적인 콘텐츠를 제공하는 역할을 한다. 

예를 들어 HTML, CSS, 이미지 파일처럼

사용자가 요청한 콘텐츠를 정적인 형태 그대로

반환해 주는 역할을 한다. 

 

웹 서버로는 엔진엑스(Nginx), 아파치(Apache) 등이 있다.

 

 

WAS(Web Application Server)

 

WAS는 이런 정적인 콘텐츠에 더해 사용자의 요청에 따라 

어떠한 로직을 실행시키거나, 그 로직의 결과에 맞춰서

서버에 존재하지 않았던 콘텐츠를 새로 가공하거나

새로운 정보를 생성하여 응답한다.

 

DB에서 불러와야 하는, 즉 서버에서 미리

준비할 수 없는 것으로 응답하는 경우 WAS가 이를 담당한다.

다르게 말하면 동적인 콘텐츠를 제공한다고 할 수도 있다.

 

물론 WAS 자체는 DB와 직접적으로 통신하지 않는다.

스프링과 같은 프레임워크를 통해서 DB에 클라이언트의

요청을 전달하고 필요한 데이터를 받아 온다.

 

WAS의 예로는 자바를 기준으로 톰캣(Tomcat)과 언더토우(Undertow) 등이 있다.

 

 

요약하면,

웹 서버는 정적인 콘텐츠만 클라이언트에게 제공할 수 있고

WAS는 정적인 콘텐츠와 동적인 콘텐츠 모두를

생성하고 관리할 수 있으며, 클라이언트에게 제공할 수 있다.

 

 

 

 

이어서 웹 서버와 WAS의 예시 중

자주 사용되는 아파치와 톰캣에 대해 살펴보자. 

 

아파치 (Apache HTTP Server)

아파치는 가장 널리 사용되는 웹 서버 소프트웨어이다.

오픈 소스이기 때문에 무료로 사용할 수 있다.

아파치는 정적 파일을 제공하고 동적 콘텐츠를 처리하기 위한 다양한 모듈을 제공한다.

또한 보안, 성능, 확장성 등에 강점을 가지고 있다.

 

 

톰캣 (Tomcat)

 

톰캣은 아파치 소프트웨어 재단(Apache Software Foundation)에서 개발된

오픈 소스 웹 서버이며, Java Servlet 및 JavaServer Pages(JSP)를 실행하는 데

사용된다. 톰캣은 주로 Java 웹 애플리케이션 서버로 사용되며,

Java EE(Enterprise Edition) 스펙을 준수하여 JSP, Servlet,

WebSocket, JNDI 등의 Java 기술을 지원한다.

톰캣은 아파치 웹 서버와 함께 사용되어 동적 웹 애플리케이션을 구축하고

배포하는 데 주로 사용되고 있다.

 

일반적으로 아파치와 톰캣은 함께 사용되어 아파치가 정적 파일을 처리하고

톰캣이 동적 콘텐츠를 처리하는 구성이 일반적으로 사용되고 있다.

 

 

 

+ 참고 : 스프링과 스프링 부트의 차이 : 톰캣 내장 여부

더보기

스프링 부트는 스프링과 달리 톰캣을 내장된 서블릿 컨테이너로 가지고 있다. 

스프링 부트가 톰캣을 내장하고 있는 이유는

개발과정이 보다 간편해진다는 이유가 가장 클 것이다.

 

스프링 부트를 사용하면 애플리케이션을 실행할 때 별도의 웹 서버를

설치하거나 설정할 필요가 없다. 그저 JAR 파일을 실행하면 내장된 톰캣이나 

다른 서블릿 컨테이너가 자동으로 시작된다는 점에서 초기 세팅이 간편해진다.

 

또한 단일 JAR 파일에는 애플리케이션 실행에 필요한 모든 종속성이 포함되어 있어서

서버 환경에 대한 별도의 구성이 필요하지 않게 된다.

즉, 별도의 서버 설치나 설정 없이 JAR 파일을 실행하면 서버가 시작되고

애플리케이션이 실행되는 것이다.