WAS, WEB은 무엇인가?
웹 개발이나 서버 아키텍처를 구성할 때 자주 접하게 되는 WEB(웹 서버)과 WAS(웹 애플리케이션 서버)에 대해 정리해 봤습니다.
1. WEB? (웹 서버, Web Server)
웹 서버는 클라이언트(웹 브라우저)가 HTTP 요청을 보내면, 그에 대한 응답으로 정적인 콘텐츠(HTML, CSS, JavaScript, 이미지 파일 등)를 제공하는 컴퓨터 또는 소프트웨어를 말합니다. 쉽게 말해 '이미 완성되어 있는 파일'을 그대로 사용자에게 전달하는 역할을 합니다.
초기 웹 서버의 역할: 단순히 서버에 저장된 HTML 파일을 브라우저에 보여주는 것이 주된 역할이었습니다.
1) Web의 종류
- Apache (아파치): 오랫동안 웹 서버의 표준처럼 사용되어 온 오픈소스 소프트웨어로, 안정성이 매우 뛰어납니다.
- Nginx (엔진엑스): 가볍고 높은 성능을 자랑하며, 특히 동시 접속자가 많은 환경에서 비동기 이벤트 기반으로 트래픽을 효율적으로 처리하여 최근 가장 널리 쓰이고 있습니다.
- IIS (Internet Information Services): 마이크로소프트에서 개발했으며, Windows 서버 환경에서 주로 사용됩니다.
2) Web이 주로 사용되는 방법
- 정적 콘텐츠 제공: 앞서 말씀드린 대로 이미지, 폰트, CSS 등 변하지 않는 파일들을 빠르게 클라이언트에게 전달합니다.
- 리버스 프록시 (Reverse Proxy): 클라이언트의 요청을 받아 뒤에 있는 WAS로 전달해 주는 '문지기' 역할을 합니다.
- 로드 밸런싱 (Load Balancing): 여러 대의 WAS가 있을 때, 요청을 골고루 분산시켜 특정 서버에 부하가 집중되는 것을 막습니다.
2. WAS? (웹 애플리케이션 서버, Web Application Server)
WAS는 웹 서버의 기능에 더해, 사용자의 요청에 따라 동적인 콘텐츠를 생성하여 제공하는 미들웨어입니다. 웹 서버가 할 수 없는 복잡한 비즈니스 로직(로그인, 장바구니, 결제 등)을 처리하거나, 데이터베이스(DB)와 통신하여 실시간으로 데이터를 가져와 사용자 맞춤형 페이지를 만들어냅니다.
1) 대표적인 WAS
- Tomcat (톰캣): 아파치 재단에서 만든 가장 대중적인 무료/오픈소스 WAS입니다. 주로 Java(JSP, Spring) 환경에서 사용됩니다.
- WebLogic (웹로직) / WebSphere (웹스피어): 각각 오라클과 IBM에서 만든 상용(유료) WAS로, 대규모 기업용(엔터프라이즈) 환경에서 강력한 트랜잭션 관리와 안정성을 위해 사용됩니다.
- Jeus (제우스): 국내 기업인 티맥스소프트에서 개발한 상용 WAS로, 국내 공공기관이나 금융권에서 많이 사용됩니다.
- JBoss / Undertow: 레드햇에서 지원하는 오픈소스 기반의 강력한 WAS입니다.
3. WEB과 WAS의 궁극적인 차이점?
가장 핵심적인 차이는 "어떤 목적의 콘텐츠를 처리하느냐"에 있습니다.
4. 굳이 두 용어의 구분이 필요할까? 굳이 한다면?
결론부터 말씀드리면, 구분하는 것이 매우 필요하며 실제 실무에서도 분리해서 구축(WEB-WAS 분리 아키텍처)하는 것이 표준입니다. 과거에는 톰캣 같은 WAS가 웹 서버의 기능도 모두 수행할 수 있어 하나만 쓰는 경우도 있었지만, 서비스가 커질수록 다음과 같은 이유로 반드시 분리합니다.
굳이 분리해야 하는 이유:
1) 서버 부하 방지 및 성능 최적화 (역할 분담)
- WAS는 DB 조회나 복잡한 연산을 하느라 매우 바쁩니다. 만약 용량이 큰 이미지 파일이나 단순 HTML까지 WAS가 전부 처리하게 되면 정작 중요한 로직 처리가 지연됩니다.
- 단순한 파일 전송은 가볍고 빠른 WEB 서버(Nginx 등)에 맡기고, WAS는 '앱의 로직'에만 온전히 집중하게 만들어 전체적인 서버 성능을 높입니다.
2) 보안 (Security) 강화
- 사용자(해커 포함)가 직접적으로 마주하는 것은 맨 앞단의 WEB 서버뿐입니다.
- 실제 중요한 소스 코드나 데이터베이스와 연결된 WAS는 내부망에 깊숙이 숨겨둡니다. 이렇게 하면 WEB 서버가 해킹당하더라도 2차적으로 WAS와 DB까지 뚫리는 것을 방어할 수 있습니다.
3) 무중단 운영과 확장성 (로드 밸런싱)
- 앞단에 1대의 WEB 서버를 두고, 뒷단에 여러 대의 WAS를 연결해 둘 수 있습니다.
- 특정 WAS에 장애가 발생하거나 업데이트를 위해 재시작해야 할 때, WEB 서버가 알아서 살아있는 다른 WAS로 요청을 넘겨주어(Fail-over) 사용자는 서버가 멈춘 것을 눈치채지 못하게 서비스를 무중단으로 운영할 수 있습니다.
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.