목차
오늘은 Nginx (엔진엑스)에 대해 이야기해 보겠습니다. Nginx (엔진엑스)는 웹 서버, 리버스 프록시, 로드 밸런서로 사용되는 오픈 소스입니다.

Nginx (엔진엑스)
최근 호스팅 서버 업체를 바꾸기 위해 카페24, 닷홈 등 국내 업체를 찾아보다가 뭔가 좀 운용 스타일이 자유롭지 못하다는 생각을 하게 되었습니다. 오히려 아마존(AWS lightsail)이 더 자유롭게 운영할 수 있지 싶었습니다. 또, 도메인이 루트 도메인만 사용하는 것도 아니라 필요에 따라 서브도메인을 추가할 상황도 종종 있기 때문에 딱 아마존 역시 최적의 호스팅 서버는 아니라고 생각했었죠.
여러 가지 고민하던 차에 Nginx (엔진엑스)라는 웹 서버 엔진을 알게 되었고 그동안 다뤄본 내용을 정리해 보겠습니다.
주요 특징
- 이벤트 기반(비동기) 구조: 최소한의 CPU와 메모리 사용을 통해 동시에 많은 연결을 처리할 수 있습니다.
- 리버스 프록시 및 로드 밸런서 기능: 여러 서버에 걸쳐 트래픽을 분산해 고가용성과 확장성을 제공합니다.
- 정적 파일 처리에 강점: 이미지, CSS, 자바스크립트 등의 정적 파일을 빠르게 전송합니다.
- TLS/SSL 지원: HTTPS 설정 및 인증서 관리가 용이합니다.
대표적인 사용 사례
- 로드 밸런싱
- Round Robin, Least Connections 등 여러 알고리즘을 통해 여러 서버로 트래픽을 배분하여 서버 부하를 분산합니다.
- 정적 웹 서버
- HTML, CSS, JS, 이미지 등 정적 파일들을 빠르게 서빙하는 데 최적화되어 있습니다.
- 리버스 프록시
- 애플리케이션 서버(예: Node.js, Python, PHP 등) 앞단에서 SSL 종단 처리를 하거나, 캐싱을 수행하고, 로드 밸런싱을 담당합니다.
루트 도메인과 서브도메인 개념 정리
루트 도메인과 서브도메인의 차이
- 루트 도메인: 보통 example.com처럼 가장 기본이 되는 도메인을 말합니다.
- 서브도메인: 루트 도메인 앞에 특정 식별자(sub, blog, www 등)를 붙인 형태입니다. 예를 들어, blog.example.com, shop.example.com 이 여기에 해당합니다.
서브도메인의 확장성
- 서브도메인은 사이트 종류나 기능별로 구분 지어 운영하기 좋습니다. 예를 들어 api.example.com처럼 API 서버를 분리 운영할 수도 있고, mobile.example.com처럼 모바일 전용 페이지를 별도로 구성할 수도 있습니다.
서브도메인을 무한대로 늘리는 것이 가능한 이유
- 이론적으로는 도메인 등록기관에서 제공하는 DNS 설정에 문제만 없다면, 서브도메인을 무한정 늘릴 수 있습니다. 루트 도메인을 소유하고 있는 한, DNS 레코드와 서버 설정(Nginx)만 올바르게 해 주면 얼마든지 새로운 서브도메인을 만들 수 있습니다. 물론 서버 리소스와 관리 이슈도 고려해야 하므로 실무에서는 무작정 많이 생성하기보다는 목적에 맞게 분류해서 사용하는 것이 바람직합니다.
Nginx 설정 방식 알아보기
요약하자면, 엔진엑스를 사용하면 하나의 서버에서 도메인 두 개를 동시에 호스팅 할 수 있습니다. 그러면 어떻게 이게 가능한 건지 설정 내용을 살펴보겠습니다.
Nginx 기본 설정 파일 구조
엔진엑스의 메인 설정 파일은 보통 nginx.conf에 있습니다. 그리고 각 도메인별 설정은 conf.d/나 sites-available 디렉터리에 별도 파일(server 블록) 형태로 관리하는 경우가 많습니다.
server 블록을 통한 루트 도메인, 서브도메인 설정
Nginx에서 루트 도메인과 서브도메인을 동시에 호스팅 하려면, server 블록을 여러 개 두면 됩니다.
server {
listen 3000; #Nginx로 사용할 포트 번호
server_name example.com;
# 루트 도메인에 대한 설정
root /var/www/html;
index index.html index.php;
}
server {
listen 3000; #Nginx로 사용할 포트 번호
server_name blog.example.com;
# blog 서브도메인에 대한 설정
root /var/www/blog;
index index.html index.php;
}
위 코드는 루트 도메인에 해당하는 부분과 서브 도메인으로 서비스하는 부분을 하나의 파일에 모드 작성한 예시입니다. 물론, 해당 설정 파일을 각각 루트도메인용과 서브도메인용을 각 파일에 따라 나눠 작성할 수도 있습니다.
위 코드에서 “root /var/www/html;” 이 부분은 자신의 서버에 맞게 해당 서비스 (예를 들어 워드프레스면 워드프레스 경로) 경로를 입력합니다.
서브도메인 확장성과 한계
서브도메인을 확장하는 것은 기술적으로는 무제한이에요. 하지만 실제로는 몇 가지 제한이 있습니다.
- DNS 제한: 예를 들어 AWS Lightsail의 DNS 서비스는 매월 한 도메인당 정해진 쿼리까지만 무료입니다. 그 이상은 추가 요금이 부과됩니다.
- 서버 성능: 너무나 당연한 얘기일 수 있지만, 너무 많은 서브도메인을 한 서버에서 처리하면 성능이 저하될 수 있습니다. 뿐만 아니라 동시 접속자 수가 많은 인기 도메인인 경우는 서브도메인의 한계는 더욱 두드러질 것입니다.
- SSL 인증서: Let’s Encrypt 같은 무료 SSL 제공 업체들은 주당 발급 개수를 제한한다고 합니다. 아직 그 정도까지 해보지 않아서 정확하게는 모르겠지만, 이 역시 당연한 조건이 아닐까 합니다.
루트 도메인과 서브도메인을 동시에 호스팅 하는 방법은 생각보다 복잡해 보이지만, 엔진엑스의 간결한 설정 방식을 활용하면 큰 어려움 없이 구축할 수 있습니다. 특히 소규모 프로젝트나 개인 블로그에 적합하며, 향후 트래픽이 늘어나거나 추가 기능이 필요해지면 단계적으로 확장하기도 쉽다고 생각됩니다.
서브도메인은 필요에 따라 자유롭게 늘릴 수 있지만, 실제 운영 환경에서는 보안과 리소스 관리, SSL 인증서 문제를 신중하게 고려해야 합니다. 또한 도메인을 효율적으로 구분해 둬야 유지보수에 있어서 수월하게 대응할 수 있을 것 같습니다.
- OpenAI API 요금은 어떻게 계산될까? 토큰 개념과 tiktoken 활용 #1
- 챗지피티 프롬프트로 지브리 스타일, 픽사 스타일 이미지 생성 방법
- 생성형 AI 소유권, 챗지피티 지브리 스타일 이미지 사례 #1
- OpenAI API로 구현하는 AI Agent #2, “프로그래밍 AI 에이전트”
- OpenAI API로 구현하는 AI Agent, GPT-4o와 Function Tool 활용