1. 개요
- 웹 서버(Web Server): HTTP 요청을 받아 정적 파일을 반환하거나, 뒤단 애플리케이션 서버로 프록시 역할을 수행
- Nginx vs Apache: 아키텍처, 처리 모델, 확장성, 설정 방식에서 차이가 존재
- 내장 서버(Built-in Server): 개발·테스트 용도로 언어별로 제공되며, 프로덕션 환경에는 부적합
- 사내 DNS 서버: BIND9 등을 이용해 내부 네트워크 전용 도메인(zone)과 레코드(A, CNAME 등)를 설정·관리
2. Nginx와 Apache의 아키텍처 및 성능 차이
2-1. 아키텍처
- Apache는 프로세스/스레드 기반(각 요청마다 스레드 또는 프로세스 생성)인 MPM(Multi-Processing Module)을 사용한다.
- Nginx는 이벤트 드리븐(event-driven) 비동기 모델로, 소수의 워커 프로세스가 수천~수만 개의 커넥션을 효율적으로 처리한다.
2-2. 정적 콘텐츠 처리 성능
- Nginx는 캐시 메커니즘과 이벤트 루프 덕분에 정적 파일 서빙 시 Apache보다 최대 2배 이상 빠른 처리량을 보인다.
- Apache는 모듈 로딩 시 동적 콘텐츠(PHP, CGI 등) 처리에 강점을 가지나, 정적 파일 서빙에서는 메모리·CPU 오버헤드가 다소 크
2-3. 모듈 확장성 및 설정 방식
- Apache는 mod_php, mod_wsgi 등 다수의 모듈을 동적으로 로드하며 .htaccess 지원으로 디렉터리별 세부 제어가 가능하다.
- Nginx는 모듈을 컴파일 타임에 포함하며, 설정 파일(nginx.conf)에서 직접 로드·언로드를 제어한다.
3. 개발용 내장 서버의 특징
3-1. 역할과 한계
- Python의 http.server, PHP의 Built-in Server, Node.js의 http 모듈 등은 간단한 개발·디버깅을 위해 제공된다.
- 이들 내장 서버는 보안, 로깅, 튜닝 옵션이 미비하여 다중 사용자 트래픽 처리나 서비스 가용성 측면에서 프로덕션 환경에 적합하지 않다.
4. 웹 서버 운용 방식의 차이
4-1. 설치 및 패키징
- Apache: apt install apache2 / yum install httpd 등 패키지 매니저 활용
- Nginx: 패키지 매니저 또는 소스 컴파일(커스텀 모듈 포함) 선택 가능
4-2. 서비스 관리
- Systemd 기반: systemctl start|stop|reload apache2 vs systemctl reload nginx
- 그레이스풀 재시작(graceful restart) 지원 여부 및 방법 차이
4-3. 로그 관리
- Apache: access.log·error.log, rotatelogs 모듈로 로그 순환
- Nginx: access_log·error_log, logrotate 스크립트 연계
5. 실무 경험 사례
5-1. LEMP 스택 구성
- Ubuntu 서버에 Nginx, MariaDB, PHP-FPM 조합으로 트래픽 급증 대비 캐시 및 FastCGI 튜닝 적용
- Ansible로 설정 파일 템플릿 관리, Jenkins CI 파이프라인에서 systemctl reload nginx 자동화
5-2. LEAP 스택 구성
- Apache + mod_wsgi 연동으로 Python Django 애플리케이션 배포, WSGIDaemonProcess 프로세스 수 조절
5-3. 장애 대응
- Nginx의 stub_status 모듈로 실시간 커넥션 현황 모니터링, Prometheus exporter 연동하여 알람 체계 구축
6. 사내 DNS 서버에 도메인 등록하기 (BIND9 기준)
6-1. 사전 준비
- 도메인 네이밍: service.internal 등 내부 전용 TLD 사용 권장(.int 사용 시 외부 충돌 주의)
- BIND9 설치: Ubuntu 20.04 기준 apt install bind9 bind9utils bind9-doc
6-2. 포워드 존(zone) 파일 작성
- zone "service.internal" { type master; file "/etc/bind/zones/db.service.internal"; };
6-3. 레코드 예시 (/etc/bind/zones/db.service.internal)
- $TTL 86400 @ IN SOA ns1.service.internal. admin.service.internal. ( 2025042001 ; serial 3600 ; refresh 1800 ; retry 604800 ; expire 86400 ) ; minimum IN NS ns1.service.internal. ns1 IN A 10.0.0.10 web IN A 10.0.0.20 api IN A 10.0.0.30
6-4. 리버스 존(reverse zone) 설정
- zone "0.0.10.in-addr.arpa" { type master; file "/etc/bind/zones/db.10.0.0"; };
6-5. Named 설정 반영 및 확인
- named-checkconf / named-checkzone service.internal /etc/bind/zones/db.service.internal
- systemctl reload bind9
- dig @10.0.0.10 web.service.internal A +short → 10.0.0.20
7. 결론
- 서비스 규모 및 목적에 따라 Nginx(고성능 정적 콘텐츠·리버스 프록시)와 Apache(동적 모듈·.htaccess 지원)를 적절히 선택
- 개발 단계에서는 내장 서버로 빠른 검사·디버깅, 프로덕션에서는 전문 웹 서버 및 모니터링·자동화 툴을 활용
- 사내 DNS 관리는 BIND9로 내부 전용 도메인·레코드를 체계적으로 운영하며, 컨피그 테스트와 자동화(스크립트·CI)로 안정적 서비스 환경을 구축할 수 있다.
8. 참고자료
'개발 환경 | 도구 > 서버 | 인프라 | 배포 | 운영' 카테고리의 다른 글
[서버 권한] chmod 권한 755·777 설정법 및 주의사항 (0) | 2025.04.21 |
---|---|
[Oracle Cloud] 기본 설정 및 SSH 접속 방법 등의 기본 세팅 (0) | 2025.04.20 |
[부하 테스트] Grafana 대시보드 해당 값 설명 (0) | 2025.02.24 |
[L4 로드 밸런서] L4 스위치, 트래픽 분배, 부하 테스트 방법 (0) | 2025.02.16 |
[온프레미스 vs 클라우드] IT 인프라 구축 시 고려해야 할 모든 것 (0) | 2025.02.08 |