NestJS/Next.js는 WAS인가? 개념부터 실무 분류까지

NestJS/Next.js는 WAS인가? 개념부터 실무 분류까지
신규 프로젝트를 진행하면서 "NestJS도 WAS인가?" 혹은 "Next.js 서버는 그냥 웹 서버로 볼 수도 있지 않나?"라는 질문이 들게 되었다. 이 글에서는 그 혼선을 줄이기 위해, "기술 분류"와 "역할"을 분리해서 정리해 보겠다.
목차
- 웹 서버와 WAS를 어디서 구분할까
- Tomcat과 NestJS/Next.js를 같은 선에서 비교하면 생기는 오해
- 한눈에 정리: WS vs WAS vs Framework
- 결론: 분류는 다르지만, 역할은 겹친다
웹 서버와 WAS를 어디서 구분할까
먼저 아래는 내가 알고 있는 웹 서버와 WAS의 가장 기본적인 정의다.
- Web Server(WS): 정적 파일(HTML, CSS, JS, 이미지)을 빠르게 서빙하는 데 최적화된 소프트웨어
- Web Application Server(WAS): 애플리케이션 코드를 실행해 동적 응답을 만드는 실행 환경
중요한 포인트는 "요청을 받는다" 자체가 아니라, 무엇을 실행해서 응답을 만드는지다. 정적 파일 전달이 중심이면 WS 성격이 강하고, 비즈니스 로직 실행이 중심이면 WAS 성격이 강하다.
아래처럼 보면 조금 더 명확해진다.
브라우저 요청
-> Nginx (정적 파일/프록시)
-> Node.js 런타임에서 동작하는 NestJS/Next.js 앱 (동적 로직 실행)
-> DB
이 흐름에서 NestJS/Next.js가 수행하는 일은 분명히 WAS 역할에 가깝다. 다만 이것이 곧 "NestJS/Next.js = 독립 WAS 소프트웨어"라는 뜻은 아니다.
Tomcat과 NestJS/Next.js를 같은 선에서 비교하면 생기는 오해
혼란의 핵심은 비교 단위가 다르기 때문이다.
Tomcat
Tomcat은 자바 서블릿 컨테이너로, 그 자체가 서버 소프트웨어로 동작한다. 즉, 독립적으로 실행되는 WAS 범주에 놓기 쉽다.
NestJS/Next.js
NestJS와 Next.js는 Node.js 런타임 위에서 동작하는 프레임워크다. 엄밀히 말하면 "서버 엔진"이 아니라 "애플리케이션을 구성하는 규칙과 도구"에 가깝다.
여기서 Next.js가 특히 헷갈리기 쉽다.
Next.js는 public 파일, 빌드 산출물(_next/static), 사전 렌더링된 페이지를 직접 서빙할 수 있어서 겉으로 보면 WS처럼 보이기도 한다.
하지만 이 기능은 프레임워크가 애플리케이션 제공을 위해 포함한 정적 전달 기능이며, Nginx 같은 범용 웹 서버 소프트웨어와 기술 분류가 같아지는 것은 아니다.
실무에서는 보통 이렇게 나눈다.
- Next.js: 앱 로직, SSR/라우트 핸들러, 내장 정적 파일 서빙
- Nginx/CDN: 캐싱, TLS 종료, 대규모 정적 전달 최적화
그래서 기술 분류 기준으로는 이렇게 말하는 편이 정확하다.
- Tomcat: WAS 소프트웨어(컨테이너)
- NestJS/Next.js: WAS 역할을 수행할 수 있는 웹 프레임워크
내가 헷갈렸던 지점 (개인 경험)
사내 개발 서버를 처음 구축하던 당시, 사수와 함께 Nginx + PM2와 Nginx + Docker 배포 방식을 두고 고민한 적이 있다.
"WS는 Nginx로 고정하고, WAS는 어떻게 구성할까?"라는 논의가 오가던 중, 사수님으로부터 **"엄밀히 말해 NestJS 자체를 WAS라고 정의할 수는 없다"**는 말을 듣게 되었다.
당시 나는 '애플리케이션 코드를 실행해 동적 응답을 만드는 환경'이라는 기준에서 NestJS를 WAS로 이해하고 있었다. 하지만 사수님은 기술적 분류상 NestJS는 프레임워크일 뿐 WAS 그 자체는 아니라고 짚어주셨다.
Tomcat을 예로 들어 설명을 해주셨다.
Tomcat처럼 독립적으로 실행되는 서버 소프트웨어와 달리, NestJS는 Node.js라는 런타임과 결합되어야만 비로소 WAS로서의 시스템 역할을 수행할 수 있다는 것이 핵심이었다.
당시에는 '독립적 실행 환경'에 대한 개념이 모호해 발생했던 혼란이었지만, 덕분에 기술 스택을 바라보는 시야가 한층 선명해지는 계기가 되었다.
한눈에 정리: WS vs WAS vs Framework
| 구분 | Web Server (Nginx) | WAS (Tomcat) | Framework (NestJS/Next.js) |
|---|---|---|---|
| 핵심 기능 | 정적 파일 서빙, 프록시 | 서블릿 실행, 동적 처리 | 비즈니스 로직/SSR/라우팅 + 정적 파일 서빙 가능 |
| 실행 관점 | 독립 실행 | 독립 실행 | Node.js 런타임 필요 |
| 분류 관점 | 웹 서버 소프트웨어 | WAS 소프트웨어 | 웹 프레임워크 |
| 역할 관점 | WS 역할 | WAS 역할 | WAS 역할 수행 가능 |
결론: 분류는 다르지만, 역할은 겹친다
"NestJS/Next.js는 WAS인가?"라는 질문에는 기준을 먼저 밝히고 답하면 된다.
- 기술 분류 기준: WAS 자체라기보다 프레임워크
- 시스템 역할 기준: WAS가 하던 동적 처리 역할을 수행
실무에서는 이 두 문장을 함께 말할 수 있어야 오해가 줄어든다. 내가 겪었던 배포 논의에서도 결국 문제를 푼 건 새로운 용어가 아니라, 같은 대상을 두 개의 관점으로 분리해 설명하는 방식이었다.