본문 바로가기
전공공부

Nginx란 무엇인가?

by 시아나 2026. 1. 10.

nginx는 웹 서버의 일종으로 현재 프로젝트에서는 프록시 서버로 사용하는 것 같다.
아니 그럼 웹서버는 뭐고 프록시 서버는 뭐지

 

Web Server (웹 서버)

웹 서버는 웹으로부터 HTTP 요청을 받아 정적 리소스를 제공하는 프로그램을 의미한다.

https://soultree.inblog.io/server-%EC%9B%B9-%EC%84%9C%EB%B2%84%EC%99%80-%EC%9B%B9-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%9C%EB%B2%84-%EB%B0%8F-%ED%94%84%EB%A1%9D%EC%8B%9C%EC%97%90-%EA%B4%80%ED%95%B4-19474

웹서버는 HTTP 요청을 받으면 정적인 콘텐츠(HTML파일, 이미지, CSS, JavaScript 등)를 제공하고
동적인 컨텐츠 제공을 위한 요청을 WAS에 전송한다.

웹 서버에는 대표적으로 Apache Server, Nginx, IIS 가 있다.

 

WAS (Web Application Server)

아니 그럼 WAS는 무엇인가

https://soultree.inblog.io/server-%EC%9B%B9-%EC%84%9C%EB%B2%84%EC%99%80-%EC%9B%B9-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%9C%EB%B2%84-%EB%B0%8F-%ED%94%84%EB%A1%9D%EC%8B%9C%EC%97%90-%EA%B4%80%ED%95%B4-19474

WAS(Web Application Server)는 DB 조회나 기타 여러 로직 처리를 위한
동적 컨텐츠 제공을 하는 Application Server이다.

WAS에는 Apache Tomcat, JBoss, Jeus, Web Sphere 등이 있다.

 

Web Server vs WAS

근데 WAS에서도 JSP(JavaServer Pages)를 사용하면 웹 페이지를 제공할 수 있지 않은가?
그럼 WAS랑 Web Server는 뭐가 다른거지?

WebServer의 주 개념은 정적 리소스 제공에 최적화된 서버를 의미한다.

WAS에서도 JSP를 사용한다면웹 페이지를 제공할 수 있지만
WAS의 주 기능은 비즈니스 로직을 수행하는 것이다.

옛날에는 WAS에서 모든 작업을 처리했지만
현재는 보안, 효율, 유지보수 등의 이유로 프론트엔드와 백엔드를 분리하는 구조로 사용하고 있다.

요즘 서버 구조는 아래와 같다.

그래 Web이랑 Was 서버에 대해서는 대충 알았다.
그럼 프록시 서버는 뭐지?

 

프록시 서버

프록시 서버는 클라이언트와 서버 사이에서 중계역할을 하는 서버를 의미한다.

https://jung-story.tistory.com/117

 

Forward Proxy & Reverse Proxy

프록시 서버도 위치가 어디에 있는지에 따라 하는 역할도 바뀐다.

 

Forward Proxy

Forward Proxy는 정방향 프록시라고도 하는데
우리가 주로 이야기하는 프록시, 프록시 서버, 웹 프록시가 이 포워드 프록시를 지칭한다.

Forward Proxy는 클라이언트와 인터넷 사이에 위치하여
사용자가 인터넷 사이트 및 서비스에 요청을 보내면 프록시 서버는 이 요청을 가로채서 사용자 대신 웹 서버와 통신한다.

https://soultree.inblog.io/server-%EC%9B%B9-%EC%84%9C%EB%B2%84%EC%99%80-%EC%9B%B9-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%9C%EB%B2%84-%EB%B0%8F-%ED%94%84%EB%A1%9D%EC%8B%9C%EC%97%90-%EA%B4%80%ED%95%B4-19474

프록시 서버가 없다면 A는 C에 직접 연결하여 요청을 보내지만
정방향 프록시가 설정되면 A 가 B에 요청을 보내고 B가 C에 요청을 전달한다.
C는 B에게 응답하고 B는 A에게 응답을 다시 전달한다.


포워드 프록시 서버로는 Squid, blue Coat, CNTLM 등의 프로그램을 사용한다.

 

그럼 프록시 서버는 왜 쓰는거지?

이 구조를 보면 아니 바로 C에 요청하는게 더 빠르고 쉽지 않나? 라고 생각 할 수도 있다.
하지만 필요하니 프록시 서버라는 개념이 생겼지 않겠는가

프록시 서버는 여러 이유로 사용된다.

  1. 익명성
    프록시 서버를 사용하면 사용자의 IP 대신 프록시 서버의 IP를 사용하기 때문에 사용자의 개인정보를 보호할 수 있다.

  2. 보안강화
    프록시 서버를 사용함녀 특정 그룹이나 사용자에게 리소스 권한을 제어할 수 있다.
    보안이 중요한 기관에서는 방화벽을 사용하여 제한된 사용자에게만 액세스 권한을 사용한다.

  3. 캐싱
    프록시 서버는 캐싱을 제공하여 서버의 부하를 감소시킬 수 있다.

우리는 이러한 사유로 포워드 프록시 서버를 사용한다.

 

Reverse Proxy Server

역방향 프록시는 하나 이상의 웹 서버 앞에서 클라이언트의 요청을 가로채는 서버이다.

https://soultree.inblog.io/server-%EC%9B%B9-%EC%84%9C%EB%B2%84%EC%99%80-%EC%9B%B9-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%9C%EB%B2%84-%EB%B0%8F-%ED%94%84%EB%A1%9D%EC%8B%9C%EC%97%90-%EA%B4%80%ED%95%B4-19474

역방향 프록시를 사용하지 않으면 D의 모든 요청은 F로 이동하고 F는 D에게 직접 응답을 보낸다.
역 방향 프록시를 사용하여 D의 요청이 E로 이동하고 E는 F에게 요청을 보낸다.
F는 응답을 E에 주고 E는 D에게 응답을 전달한다.

리버스 프록시로는 nginx, apache HTTPD 등을 사용한다.

 

역방향 프록시 사용 이유?

  1. 로드 밸런싱
    역방향 프록시를 사용하면 단일 서버의 과부하를 방지하기 위해
    트래픽을 여러 서버로 분배하는 부하 분산 솔루션을 제공할 수있다.

  2. 보안강화
    이 덕분에 외부의 공격으로부터 서버를 보호할 수 있다.
    역방향 프록시를 사용하면 웹 사이트나 서비스에 원본 서버의 ip 주소를 공개하지 않아도된다.

  3. 캐싱
    역방향 프록시도 캐싱 기능을 제공할 수 있다.

  4. SSL 암호화
    역방향 프록시는 요청 데이터를 복호화하고 응답데이터를 암호화 하는 기능을 제공할 수 있다.

추가로 개발자들은 로컬 환경에서 개발 시 CORS 에러를 피하기 위해 proxy 서버를 사용하기도 한다.

CORS에러에 대해 간단하게 설명하자면

CORS란
CORS에러는 브라우저가 보안을 위해 출처목적지가 동일한 요청만 가능하도록 제한한 정책이다.

* 비교하는 출처
HTTPS://www.domain.com:8080
Protocol/Host/Port


하지만 개발자는 프론트와 백엔드를 로컬환경에 동시에 구동시키는 경우가 많다.
때문에 개발자라면 CORS 오류에 직면할 수 밖에 없다..

이 경우 프록시 서버를 사용하면

[Client: 80] → [Nginx: 80] → [Spring Boot: 8080]

브라우저에서 직접 서버를 요청하지 않고
프록시 서버에서 로컬 서버에 요청을 하기 때문에 CORS 정책에 위배되지 않는다.

이런 이유로 프록시 서버를 사용하고
필요하다면 포워드, 리버스 프록시 서버 둘다 사용할 수도 있다.

 

Nginx 너는 뭔데?

자 다시 원래 궁금증으로 돌아와서
nginx. 너는 뭔데 Web Server도 되고 프록시 서버도 되는건가?

그건 nginx가 애초에 둘 다 가능하도록 설계되었기 때문이다.
그럼 nginx에 대해 다시 정리해보자.


 Nginx는 고성능 웹서버이자 리버스 프록시 서버로 많이 사용되는 오픈소스 소프트웨어이다.

 

Nginx의 특징

nginx의 특징이라고 하면 비동기 이벤트 기반구조라고 할 수 있다.


nginx 등장 이전에 많이 사용하던 Apache는
요청이 들어오면 커넥션 형성을 위한 프로세스를 생성하는데
프로세스 생성에는 시간이 많이 필요하기 때문에 미리 프로세스를 만들어 놓는 방식을 사용했다.

새로운 요청이 들어오면 만들어둔 프로세스를 사용하고
그것도 다 사용하면 새로 만들어서 사용한다.

하지만 컴퓨터 보급이 많아지면서 문제가 발생했다.
아파치는 동시 접속 수가 많아 질 수록 리소스(메모리, CPU)에 부담이 많아지는 문제가 있었다.

이를 해결하기 위해 나온 것이 Nginx 이다.
Nginx는 비동기 이벤트 기반구조로 동시에 많은 요청을 처리할 수 있게되었다.

https://hstory0208.tistory.com/entry/Nginx%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80-Apache%EC%99%80-%EC%B0%A8%EC%9D%B4%EC%A0%90

Nginx는 하나의 마스터 프로세스가 여러 워커 프로세스(worker)를 관리하고
각 워커 프로세스는 수천개의 클라이언트 요청을 이벤트 큐(Event Loop)를 통해 비동기적으로 처리한다.

덕분에 Nginx는 요청이 많아도 리소스 부담이 적고 빠르게 동작할 수 있다.
이러한 장점 덕분에 실무에서도 역방향 프록시 서버로 Nginx를 주로 사용한다.

 

 

 

 

여기까지 Web Server, WAS 서버, 프록시, Nginx까지 공부해봤다.
다음에는 Web과 Was가 분리된 이유에 대해 공부해보고 싶다.

 

 

참고

https://jung-story.tistory.com/117

https://soultree.inblog.io/server-%EC%9B%B9-%EC%84%9C%EB%B2%84%EC%99%80-%EC%9B%B9-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EC%84%9C%EB%B2%84-%EB%B0%8F-%ED%94%84%EB%A1%9D%EC%8B%9C%EC%97%90-%EA%B4%80%ED%95%B4-19474

https://ssdragon.tistory.com/60