Home Nginx, 정확히 무엇인가? (0)
Post
Cancel

Nginx, 정확히 무엇인가? (0)

개발 얘기에 앞서…

개발을 하다보면 일단 남들이 쓰니까, 블로그에 써있는 대로, 이게 제일 좋다더라 등 별 생각없이 쓰게되는 경우가 많다. 필자 또한 개발자로서 최근 많이 반성하는 부분이 이것이다.

유저가 아니라 엔지니어가 되자라는 마인드를 행동으로 하기 위해 부단히 노력중이다. 이번 Nginx를 시작으로 무엇을 쓰고 있는지, 그렇다면 이것을 왜 쓰는지 어떻게 작동하는지, 단점은 있는지 등 더 Deep-dive하게 CS의 세계를 알아보고자 한다.

Nginx 전에 Web Server

Nginx는 종류로 설명하자면 Web Server 프로그램이다. 웹 개발자라면 ‘웹서버’를 누구나 들어봤겠지만, 그저 서버겠거니 웹페이지의 리소스를 제공하는 것 정도로 알고 있는 사람이 있을 것이다.

없다면 다행이다. 본인만 그렇다는 뜻이니…

해서, Web Server에 대해서 먼저 살펴보고 들어가고자 한다.

Web Server 간단 설명

Web Server란, 가장 쉽게 말해서는 웹 사이트 등 사용자가 요청한 파일을 제공하는 컴퓨터이다. 서버에 저장된 소프트웨어와 컴포넌트(HTML5, CSS 등), 리소스를 저장하는 대상이다. 가장 중요한 것은, 인터넷에 연결되어 있다는 점이며, 다른 장치들이 웹 서버에서 데이터를 송/수신 할 수 있도록 한다.

위의 설명은 하드웨어적인 설명으로, 소프트웨어 관점에서 봤을 땐 웹 서버는 웹 사용자가 어떻게 파일에 대해 접근하고, 확인하는지 관리하는 대상이다.
이를 위해 HTTP 프로토콜을 사용한 서버를 주로 구축한다.

웹 서버는 동적 웹 서버와 정적 웹 서버로 나눌 수 있다. 이제부터는 웹 서버에 대한 자세한 설명이 되므로 추후 기재하고, 지금은 간단하게 Nginx는 특히 정적 웹 서버로서 구성을 한다 정도만 알아둔다.

Nginx는 그래서 무엇인가?

Nginx 간단 설명

Nginx는 결국 위에서 설명한 웹 서버를 구성하기 위해 개발된 소프트웨어 이다. 여러 웹 서버 중에서도 Nginx는 가벼우면서도, 높은 성능을 목표로 한다. 웹 서버 뿐만 아니라 Reverse Proxy, Mail Proxy로도 사용한다.

대체 프로그램으로는 Apache가 있는데, Apache보다는 동작이 간단하고 동시접속 처리에 특화된 부분을 주로 사용하는데 있어 전달자 역할을 하는 것이 Nginx의 주요한 장점이라 볼 수 있다.

한 블로그의 글에 의하면, 동시접속자 700명 이상일 경우에 서버 증설 또는 Nginx 환경 구축을 권장한다고 하는데, 정확한 출처는 나와있지 않다. 대략 ‘아, 어느정도 서비스에 사용자가 늘면 그 때 구축이 필요하구나’ 하는 기준 정도로 생각하면 좋을 듯 하다.

기본적으로는 Nginx가 “Open-source Web Server”이므로 무료로 사용할 수 있는 장점 또한 크며, 각 서비스에 맞게 자잘한 튜닝 또한 가능하여 인기가 있는게 아닐까 싶다.

물론 이 외에도 여러 프로덕트가 있는데, 아직은 써보질 않아서…

Nginx의 다른 프로그램들

Nginx의 역할

앞서 설명한 Nginx의 기능적인 부분을 좀 더 세분화하여 얘기하면 다음과 같다.

Static File 처리를 하는 HTTP 서버

Web Server는 기본적으로 정적인 파일(HTML, CSS, Javascript, Image File…)을 제공하여 Client가 이를 받아 Browser에서 볼 수 있도록 하는 역할을 수행한다. 이 때의 정적 파일을 Nginx가 제공하는 역할을 한다.

Nginx의 Web Server 동작

Reverse Proxy 서버

Reverse Proxy라는게 일단 뭔지 설명을 잠깐 하고자 한다. 예시를 들면, Client가 특정 Domain(https://www.naver.com)으로 데이터를 요청하면 Reverse Proxy Server에서는 이 요청을 받아 내부의 실제 서버(데이터를 저장하고 제공하는)에 요청을 전달하여 내부 서버의 데이터를 받아 이를 Client에 전달한다.

서버가 클라이언트에 제공하는 방향에서 한 번 역으로 서버에서 내부 서버로 요청 후, 받은 데이터를 전송하는 것이다.

Reverse Proxy Server는 내부 네트워크와 외부 네트워크 사이에 구성한다. 이를 통해 외부에서는 Reverse Proxy Server로만 접근, 요청하고 실제 Service Server는 내부망에 위치하여 Proxy <-> Service 간 통신으로 데이터를 주고받게끔 구성이 이뤄진다.

이렇게 구성하는 이유 중 하나는 보안 문제로 인하여 Proxy Server가 해킹당하더라도 내부 서버와 통신할 때에는 제한적인 포트만 사용하므로 내부망에 대한 접근 또한 제한된다.

추가로, 내부 Service Server를 Cluster로 구성하게되면 가용성을 쉽게 높일 수 있다.

Reverse Proxy 구성

1
2
3
4
5
6
7
8
9
10
11
- Forward Proxy? -

Forward Proxy는 클라이언트가 특정 Domain(https://www.naver.com)으로 연결을 시도하면
Forward Proxy Server가 요청을 받은 후, Domain에 연결하여
그 결과를 클라이언트에 전달(Forward)한다.

Forward Proxy는 Caching 기능이 있어, 자주사용하는 컨텐츠의 경우
빠른 응답이 가능하여 성능 향상이 가능하다.

또한, 정해진 사이트에만 연결 설정하게끔 할 수 있으므로
권한 별 사용자 접근 제한에도 사용한다.

Forward Proxy 구성

Nginx에 대한 설명을 하다보니 옆길로 새서 다른 얘기를 많이 한 것 같다. 이번 글은 이쯤에서 마무리하고, Nginx의 구조와 동작 방식에 대해서는 다음 글에서 설명한다.

참조 링크

Web Server란 무엇인가

Forward VS Reverse Proxy

This post is licensed under CC BY 4.0 by the author.

systemd 옵션

Web Server란?