오늘은 웹서버와 WAS; 웹 애플리케이션 서버에 대해 알아보겠습니다.
각각이 무엇인지, 이 둘의 차이점과 이상적인 웹 시스템 구성에 대해 이야기해보려고 합니다.
더 나아가 서블릿과 서블릿 컨테이너 역할까지 살펴보겠습니다.
1. 웹서버란?
웹 서버는 말 그대로 웹 환경에서 서빙을 담당하는 서버입니다.
웹은 http를 기반으로 하기 때문에 http 기반 통신을 합니다.
너무 당연한 이야기지요?
가장 핵심적인 기능으로는 정적 리소스를 제공한다는 것입니다. 즉, HTML, CSS, js, 이미지 파일과 같이 미리 만들어져 있는 정적 리소스를 요청받으면, 해당 파일을 찾아서 그대로 클라이언트에게 전달합니다.
여기서 대표적인 웹서버로는 Apache, Nginx가 있습니다.
요약하면,
- http 기반 통신
- 정적 리소스 제공
정도가 될 것 같습니다.
2. WAS(웹 애플리케이션 서비스)
WAS는 웹 서버의 기능에 더해, 서버에서 프로그래밍 코드(동적)를 실행하여 무언가를 처리하는 역할까지 수행합니다.
WAS도 웹서버와 마찬가지로 웹에서 동작하기 때문에 http 기반 통신을 합니다. 또한, 앞서 말한 것 처럼 웹 서버의 기능에 추가적인 기능을 제공하는 것이기 때문에, 웹 서버로서의 기능도 가능합니다.
웹서버와 가장 큰 차이점은 동적 리소스를 제공한다는 점입니다.
로직 수행을 통해 실시간으로 만들어지는 콘텐츠를 동적 리소스라고 합니다.
하나의 예로 사용자가 로그인을 하면, 해당 정보에 따라 다른 화면을 보여주거나, 데이터베이스에서 관련된 데이터를 조회해 보여주는 경우가 해당됩니다.
대표적인 WAS로는 Apache Tomcat, JBOss, WebLogic이 있습니다.
3. 그럼 WAS만 쓰면 되겠네..?!
일단 이 생각에 대한 답은 "꼭 그렇다고 단정할 수는 없다." 입니다.
우선 다시 차이점을 요약해봅시다.
- 웹 서버 : 정적인 파일을 서빙합니다.
- WAS : 정적인 파일 서빙 + 프로그래밍 로직을 수행해 동적인 컨텐츠를 생성하고 서빙합니다.
네~ 웹서버와 WAS를 비교해본 결과, WAS가 웹서버의 기능을 포함하고 있기 때문에, 웹 서버는 필요없을 것만 같습니다.
물론 WAS가 웹 서버 기능을 포함하므로 WAS만으로도 웹 서비를 구성할 수 있습니다. 하지만 대부분의 실무 환경에서는 웹 서버와 WAS를 함께 사용하는 구조를 채택한답니다.
왜 그렇게 할까요?
4. 가장 이상적인 웹 시스템 구성? (웹 서버 + WAS + DB)
효율적인 리소스 관리를 위해 역할을 분담하는 것이 핵심입니다.
- 웹 서버 : 비교적 가벼운 정적 리소스 처리를 전담합니다.
- WAS : 애플리케이션 코드 실행, 데이터베이스 조회 등 무거운 동적 리소스 처리와 비즈니스 로직에만 집중합니다.
- DB : 데이터의 영구적인 저장 및 관리를 담당합니다.
이렇게 R&R를 명확히 분리하는 것이 좋습니다.
이처럼 구성하게 되면 여러 장점이 있기 때문인데요!
웹 서버가 단순한 정적 자원 요청을 빠르게 처리해주면, WAS는 부하가 큰 동적 컨텐츠 생성이나 비즈니스 로직 처리에만 집중할 수 있습니다.
만약 WAS가 정적 리소스 요청까지 모두 처리한다면, 정작 중요한 비즈니스 로직 처리에 지연이 발생할 수 있습니다. 역할을 분담함으로써 전체 시스템의 효율성이 높아지고 안정적인 서비스를 제공할 수 있습니다. 또한, 한쪽에 장애가 발생해도 다른 쪽에 영향을 미치지 않도록 격리하는 효과도 있습니다.
이 역할 분리의 장점을 요약하자면 다음과 같습니다.
- 중요 비즈니스 로직 처리에 집중 가능
- 전체 시스템 효율성 향상
- 한 쪽에 장애가 발생해도 다른 쪽은 영향을 받지 않음
5. 마치며
- 웹 서버 : 정적 컨텐츠 담당
- WAS : 동적 콘텐츠 및 비즈니스 로직 담당
- 웹 시스템 분리 구성 이유 : 효율성과 안정성을 위해
다음은 WAS가 동적 컨텐츠를 만드는 과정에서 가장 핵심적인 역할을 하는 기술인 서블릿에 대해 알아보겠습니다.
'Spring이당' 카테고리의 다른 글
| [WEB] 서블릿(Servlet)과 동시성, 그리고 스레드 풀의 모든 것 (3) | 2025.08.29 |
|---|---|
| Stateful vs Stateless: 세션 인증과 JWT 인증의 핵심 차이점 (0) | 2025.08.20 |
| 그래서 JPA 하이버네이트가 뭔데? 라이브러리! (1) | 2025.08.03 |
| JPA를 왜 써야 할까 - 패러다임의 불일치 (2) | 2025.08.02 |
| Spring : Cannot access ~~.repository 이슈 (해결) (1) | 2025.06.02 |