웹 서비스를 이루는 클라이언트, 웹 서버, 웹 애플리케이션 서버(WAS), 그리고 웹 프레임워크의 구조적 특징과 함께 서비스 요청과 응답이 이뤄지는 전체적인 흐름을 알기 쉽게 정리해보겠습니다.
Nginx (엔진엑스) : 웹 서버
▣ 가장 먼저 사용자가 웹 브라우저(클라이언트)를 통해 접속 요청을 전송합니다.
▣ 요청을 전달받은 Nginx는 정적 리소스(HTML, CSS, JS 파일, 이미지 등)일 경우 서버에서 바로 응답을 반환합니다.
▣ 데이터 처리나 로직 처리가 필요한 동적 요청(API, 회원가입, 로그인 등)은 톰캣(Tomcat) 서버로 이관합니다.
‘프록시’ 란?
프록시(Proxy)는 클라이언트와 백엔드 서버 사이에서 데이터 통신을 중간에서 대리 중계해주는 거점 서버를 뜻합니다.
여기서 Nginx는 서버 내부 시스템 앞단에서 보안과 부하 분산을 담당하는 ‘리버스 프록시(Reverse Proxy)’로 작동합니다. 참고로 사용자의 클라이언트 위치에 설치되어 중계하는 네트워크 서버는 ‘포워드 프록시(Forward Proxy)’라고 부릅니다.
Tomcat (톰캣) : 웹 애플리케이션 서버
▣ Nginx에서 전달받은 동적 웹 요청을 톰캣이 바통을 받아 수신합니다.
▣ 통신용 HTTP 요청 패킷을 자바 기반의 Servlet 객체 형태로 변환한 뒤 서블릿 컨테이너로 전달합니다.
‘서블릿 컨테이너’ 란?
서블릿(Servlet)은 자바 언어를 활용하여 웹 요청에 대해 실시간으로 동적 데이터를 생성하고 처리하는 서버 측 소프트웨어 부품입니다. 아파치 재단에서 연동/관리하는 톰캣은 이러한 서블릿들의 생명주기를 관리하는 전문적인 웹 애플리케이션 서버(WAS)입니다.
Spring Boot (스프링 부트) – 웹 프레임워크
▣ 프론트 컨트롤러인 DispatcherServlet이 인계받아 해당 요청을 처리할 전담 Controller를 탐색 후 매핑합니다.
▣ 비즈니스 핵심 로직 및 데이터베이스(DB)와의 연동 처리를 완료한 뒤 가공된 최종 데이터 결과를 리턴합니다.
‘웹 프레임워크’ 란?
웹 프레임워크는 개발자가 체계적이고 효율적으로 웹 서비스를 개발할 수 있도록 설계된 체계와 뼈대를 제공해주는 소프트웨어 모듈 모음입니다.
- 스프링(Spring) – 자바 환경의 대규모 엔터프라이즈 애플리케이션 구축을 간소화해주는 메인 프레임워크
- 스프링 부트(Spring Boot) – 복잡한 스프링 설정을 자동화하여 애플리케이션을 손쉽게 생성하고 빠르게 실행해 배포할 수 있도록 돕는 도구셋
응답
▣ Spring Boot ➔ Tomcat ➔ Nginx ➔ 클라이언트 브라우저 방향으로 최종 반환
연산이 완결된 데이터를 사용자에게 돌려주는 단계입니다. 들어왔던 요청의 역순으로 통신 노드를 거쳐 최종 전달됩니다.
기본적으로 표준적인 아키텍처 흐름은 이와 같으나, 최근 현대적인 개발 환경에서는 Nginx 뒷단에 별도의 톰캣 설치 없이 스프링 부트 자체의 내장 톰캣(Embedded Tomcat)을 직접 연결하는 방식이 널리 쓰이고 있습니다.