server

[Server] Nginx가 뭔데 배포할 때마다 설치하는거지?

inhooo00 2025. 1. 21. 02:56

📍개요

스프링 프로젝트를 AWS로 배포하게 될 때마다 Nginx를 통해서 진행한다.
그럴 때마다 드는 생각이 "AWS에서도 Nginx 없이 호출이 가능하지 않나? 기본적으로 Spring boot에 tomcat이 있을텐데.."였다.
왜 다양한 레퍼런스를 참고하면 다들 Nginx를 사용해서 배포를 하는 걸까? 필수도 아닌데 무엇이 좋길래?

 

 

 

📍웹서버

시작하기 앞서 우리는 웹서버의 개념을 확실히하고 가야한다.

서버란 개념은 어떤 컴퓨터로 하여금 서버 역할을 하도록 해주는 소프트웨어를 무슨무슨 서버라고 부른다.

그래서 백엔드 개발자를 보고 서버를 개발한다고 하는 것.

웹서버도 소프트웨어의 개념이다. 그 대표로 아파치, Nginx가 있다.

 

쉽게 말해 '웹' 서버니까 이 컴퓨터를, 서버들 중에서도 웹사이트를 제공하는 서버로 만들어주는 서비스.

이 프로그램들도 서버 컴퓨터에 있는 어떠한 폴더를 개방하고 그 안에 들어있는 파일들로 웹 사이트를 제공해 준다.

 

❓이렇게 되면 정적 웹이 아닌가..

아파치나 Nginx의 모듈로 할 수 있다. ex) 아파치 + PHP + MySQL 연동 = 동적인 PHP 웹사이트.

 

 

📍tomcat(톰켓)

요즘은 Spring boot에 톰켓이 내장되기 때문에 직접은 많이 안 접한다.

하지만 자바 + JSP 기술로 만든 API를 호출할 때는 tomcat같은 web application server 즉 WAS가 사용된다.

쉽게 생각해서 웹과 서버간에 동적 기능을 +했다고 보면 된다.

아파치나 Nginx는 이 tomcat의 손을 빌려야 된다.

 

톰켓을 사용하는 예를 간단히 설명하자면, 
스프링으로 코딩한 웹앱을 war 파일로 빌드하면 그 안에 .class 파일이 압축되어 있다.
톰켓을 다운받으면 있는 폴더 안에 특정 파일이 있는데, 그 안에 war 파일을 넣고 명령어를 실행하면 스프링 서비스가 톰캣을 사용해서 돌게 된다.
요즘은 스프링을 톰켓이 들어있는 jar 파일로 빌드해서 배포하곤 한다. (필자도 jar만 해봄..)

 

 

 

✔️지금까지 내용을 정리하자면 아파치나 Nginx는 웹서버이구 톰캣은 WAS라고 기억하면 된다.

 

 

 

📍tomcat(톰켓) 만으로 모두 해결할 수 있다.

사실 톰켓 같은 WAS들도 동적으로 실행되는 웹을 제공할 수 있고, 정적 리소스들을 건내주는 웹을 제공할 수도 있다.

아파치나 Nginx 없이 톰캣만으로도 웹사이트를 제공할 수 있다는 것.

 

그런데 왜 그렇게 하지 않을까?

첫 번째로 바로 reverse proxy 때문이다. 유저들에게서 서버의 정보를 감추는 것.

즉, 서버의 관리자는 보안상 웹의 구조를 감출 필요가 있다. 서버 내부적으로 파일이 어느 폴더에 들어있는지, 서비스가 어떤 포트에 돌고 있는지를 감추는 것.

 

두 번째는 로드밸런싱 때문이다. 이는 유저들이 몰릴 때 호출을 분산해서 처리하는 기능이다.

추가로 새로운 기능을 재배포할 때 서버가 잠깐 꺼지는 다운타임을 방지하기 위해서 사용하기도 한다.

 

 

📍아파치 VS Nginx

이 둘은 작동 방식에서 가장 큰 차이가 있다.

아파치는 다중 프로세스, Nginx는 이벤트로 일을 처리한다는 것.

 

먼저 아파치는 MPM, 멀티 프로세스 모듈 방식으로 일하는데 이 기능은 유저가 접근할 때마다 프로세스를 새로 생성하는 방식이 있고, 한 프로세스 안에서 스레드를 새로 생성하는 방식이 있다.
이 방식은 컴퓨터 자원을 매우 많이 사용한다는 단점이 있다.

 

Nginx는 유저들을 한 줄로 세우는 것이다. 다음 유저가 오는데로 하나씩 처리하는 것이다. 성능과 가벼움을 중요시하는 서비스에 알맞다.

 

 

 

📍결론

배포 서버에 Nginx를 설치하는 주요 이유는 보안 강화와 로드밸런싱을 통한 안정적인 서비스 운영 때문이다.
또한,Nginx와 아파치는 각각의 장단점이 있으므로 웹서버의 특성과 요구사항에 맞춰 적절히 선택 하여 사용하는 것이 중요해 보인다.