전 세계 웹 서비스에서 가장 광범위하게 활용되고 있는 대표 웹서버 엔진엑스(Nginx)의 핵심 기초를 다뤄봅니다. Nginx의 주요 특징과 시스템 구조, 처리 흐름부터 디렉터리 구성까지 핵심만 깔끔하게 정리해 드리겠습니다.
Nginx
Nginx 소개
기존 아파치(Apache)의 스레드 및 프로세스 할당 방식이 가진 자원 한계를 개선하기 위해 이벤트 비동기 기반으로 개발되었습니다. 엔진엑스는 이벤트 기반 구조의 웹 서버 소프트웨어로서 웹서버 역할뿐만 아니라 리버스 프록시, 트래픽 로드 밸런서, HTTP 캐싱 서버 등 다방면으로 작동합니다. 기존 아파치에 비해 압도적인 동시 접속 처리 능력과 적은 리소스 사용량이 최대 강점이라 할 수 있습니다.
Nginx 핵심 기능
1. 웹서버 기능 – HTML, CSS, JS, 이미지 파일 등 고정된 정적 파일을 클라이언트에게 신속하게 서빙합니다.
2. 리버스 프록시 – 최전방에서 요청을 수신한 뒤 뒤편의 내부 애플리케이션 서버로 중계해 주는 통로 역할을 합니다.
3. 로드 밸런싱 – 여러 대의 웹/앱 서버로 트래픽을 효율적으로 분산해 서버 과부하를 방지하고 부하를 줄입니다.
4. 캐싱 – 호출 빈도가 높은 파일이나 데이터를 미리 저장해 두어 응답 속도를 극적으로 끌어올립니다.
5. SSL/TLS 통신 – 암호화 데이터 송수신을 위한 보안 인증서 연결을 지원합니다.
Nginx 주요 구성 요소
엔진엑스를 시작하면 백그라운드에서 크게 2가지 형태의 프로세스가 생성되어 작동합니다.
Master Process – 전반적인 관리를 담당하는 최상위 프로세스로, 환경 설정 파일 판독, 워커 프로세스 관리 및 생성, 재시작과 설정 로딩 작업을 전담합니다.
Worker Process – 실질적인 사용자 요청을 받아들여 처리하는 구동 프로세스입니다.
Nginx 웹 서비스 흐름
1. 사용자의 요청 – 사용자가 웹 브라우저를 통해 특정 페이지를 요청합니다.
2. Nginx 수신 – 시스템 가장 앞단에 위치한 Nginx가 해당 HTTP/HTTPS 요청을 받습니다.
3. 리버스 프록시 전달 – Nginx는 환경 설정(nginx.conf) 속 location 블록과 proxy_pass 경로를 확인하여 8080 포트 등에서 동작 중인 백엔드(Spring Boot 내장 톰캣 등)로 트래픽을 전달합니다.
4. Spring Boot 작업 수행 – 전달받은 애플리케이션이 데이터베이스 조회 등 비즈니스 로직을 구동하여 데이터를 구성합니다.
5. 응답 전달 – 백엔드가 반환한 처리 결과를 Nginx가 받아서 사용자 브라우저로 최종 응답을 전송합니다.
Nginx 폴더 구조
/etc/nginx/ (설정)
엔진엑스의 전체적인 환경 설정을 관리하는 가장 기본적인 메인 디렉터리 구조입니다.
├── nginx.conf – 시스템 전체에 적용되는 핵심 설정 파일로, 외부 서브 설정 파일들을 불러오는(include) 역할을 겸합니다.
├── mime.types – 파일 확장자와 MIME 브라우저 데이터 타입을 서로 매핑해 주는 파일입니다.
├── conf.d/ – 커스텀 공통 설정 파일들을 보관하는 폴더로 전역 서버 세팅이 배치됩니다.
├── sites-available/ – 등록 가능한 가상 호스트(Virtual Host) 설정 파일 원본들이 저장되는 공간입니다.
├── sites-enabled/ – sites-available 중 실제 구동에 적용되어 활성화된 설정 심볼릭 링크가 저장됩니다.
├── modules-available/ – 적용 가능한 동적 모듈 파일들이 보관되는 위치입니다.
└── modules-enabled/ – 실제 시스템에 로드되어 동작 중인 동적 모듈 구성입니다.
/var/www/ (콘텐츠)
└── html/
└── index.html – 실질적으로 외부로 서빙할 정적 웹 리소스가 보관되는 공간이며 root나 alias 구문으로 참조합니다.
/var/log/nginx/ (로그)
엔진엑스 서버의 수신 기록 및 시스템 오류 로그가 쌓이는 디렉터리입니다.
├── access.log – 서비스에 도달한 개별 요청과 방문 내역이 실시간으로 기록되는 접속 로그입니다.
└── error.log – 구동 중 오류나 문제 상황 발생 시 관련 에러 내역이 저장되는 로그입니다.