메뉴 건너뛰기

2024.07.14 10:05

Nginx란

(*.168.0.1) 조회 수 486 추천 수 0 댓글 0
Atachment
첨부 '9'
Extra Form
출처 https://blog.naver.com/gi_balja/223028077537

Nginx(엔진엑스)는 높은 성능과 안정성 그리고 현재 가장 많이 사용되고 있는 웹 서버입니다. Apache(아파치) 같은 웹 서버와 비교하면 더 빠르고 가볍고, 대규모 애플리케이션 처리에 적합하다는 장점이 있습니다. Nginx를 이해하기 위해서는 다음 4가지 용어를 알아둘 필요가 있습니다.

​

​

  1. 클라이언트

​

클라이언트(Client)란 서비스를 이용하기 위해 네트워크를 통해 요청을 보내는 주체를 말합니다. 예를 들어, 인터넷에서 웹 페이지를 보기 위해 웹 브라우저를 실행하면 웹 브라우저가 클라이언트가 됩니다. 또한, 이메일을 보내기 위해 이메일 클라이언트를 실행하면 이메일 클라이언트가 됩니다. 웹 개발 영역에서 보통 클라이언트라 하면 크롬, 사파리, 익스플로러 등 웹 브라우저를 의미한다고 생각하면 됩니다.

​

​

2. 웹 서버

​

웹 서버는 클라이언트의 요청에 따라 HTML, CSS, JS, 이미지 파일과 같은 정적 파일을 응답하여 제공하는 소프트웨어를 말합니다. 웹 서버는 HTTP 프로토콜을 사용하여 클라이언트와 통신합니다. 대표적인 웹 서버로는 Nginx, Apache 등이 있습니다. 이 외에도 Microsoft IIS, Lighttpd 등 다양한 웹 서버가 존재합니다.

​

3. WAS (Web Application Server)

​

WAS는 클라이언트 요청에 대해 동적인 처리를 담당하는 영역입니다. 웹 서버와 달리 애플리케이션 로직을 실행할 수 있도록 구성되어 있습니다. 예를 들어 회원가입이나 로그인 등의 로직을 처리하는 영역이 WAS 입니다. 또한 데이터베이스 연동, 트랜잭션 관리, 보안, 로깅 등의 기능도 제공합니다. 이를 통해 웹 애플리케이션의 안정성과 성능을 향상시키며, 개발자들은 애플리케이션 개발에 집중할 수 있습니다. 대표적인 WAS로는 Tomcat, JBoss, WebLogic, WebSphere 등이 있습니다.

​

웹 서버와 WAS는 역할의 차이가 있지만 현업에서는 웹 서버로 퉁(?)으로 얘기하고 있습니다. 참고로 Node.js는 웹서버 또는 WAS로도 사용할 수 있습니다.

​

​

4. DB (데이터베이스)

​

DB는 조직이나 개인이 필요한 정보를 체계적으로 저장, 관리하고 검색할 수 있는 시스템입니다. DB는 일반적으로 다수의 사용자가 공유할 수 있으며, 대규모 데이터의 저장과 검색을 처리할 수 있습니다. 가장 많이 사용되는 DB 유형으로는 관계형(RDBMS), NoSQL 등이 있습니다.

​

관계형은 데이터를 테이블로 구성하고, 테이블 간의 관계를 정의하여 데이터를 저장하는 방식입니다. SQL과 같은 쿼리 언어를 사용하여 데이터를 검색, 추가, 수정, 삭제할 수 있습니다. 데이터베이스 관리 시스템(DBMS, Database Management System)은 이러한 쿼리 언어를 해석하고 실행하여 데이터를 처리합니다. PostgreSQL, MySQL, Microsoft SQL Server 등이 대표적인 관계형 데이터베이스입니다.

​

NoSQL은 "Not only SQL" 또는 "Non-Relational"의 줄임말로, 관계형 데이터베이스의 한계를 극복하기 위해 만들어진 데이터베이스입니다. NoSQL은 스키마 자유로운 구조로 데이터를 저장하며, 분산 처리 및 고성능 처리를 위해 설계되었습니다. NoSQL은 관계형과는 다르게 데이터를 테이블이 아닌 컬렉션(collection)이나 도큐먼트(document) 단위로 저장합니다. 컬렉션은 테이블과 유사한 개념이며, 도큐먼트는 일반적으로 JSON 또는 BSON 형식으로 저장되는 일정한 구조를 가진 문서입니다. 이러한 구조는 데이터를 유연하게 처리할 수 있으며, 확장성이 높습니다. MongoDB, Redis, Firebase 등이 대표적인 NoSQL 입니다.


보통 웹 서비스는 클라이언트 -> 웹 서버 -> WAS -> DB 순으로 요청이 되고 DB -> WAS -> 웹 서버 -> 클라이언트 순으로 응답이 됩니다.


​

그럼 웹 서버를 이용하는 이유는 무엇일까요?

​

1. WAS 부담을 줄여주기 위해 사용됩니다. WAS는 로그인, 회원가입, 개인정보 수정 등 동적 작업을 처리하는 것만으로도 작업량이 많습니다. 이에 HTML, CSS, JS, 이미지 등 정적인 파일을 클라이언트에게 전달하는 역할을 웹 서버에게 위임함으로써 WAS 작업 부담을 줄일 수 있습니다.

​

2. 보안 기능을 제공합니다. 웹 서버는 보안 기능을 제공하여 웹 페이지에 대한 접근을 제어할 수 있습니다. 예를 들어, 웹 서버는 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고, 액세스 제어, 웹 방화벽 등의 보안 기능을 제공하여 웹 사이트를 보호할 수 있습니다.

​

3. 높은 성능을 제공합니다. 웹 서버는 대부분 비동기 처리 방식을 사용하여 높은 성능을 제공합니다. 예를 들어, Nginx, Apache 등의 웹 서버는 이벤트 기반, 멀티 프로세싱, 스레드 풀 등의 기술을 사용하여 수천 대의 클라이언트 요청을 동시에 처리할 수 있습니다.


그럼 여러 웹 서버들 중에서 Nginx를 사용하는 이유는 무엇일까요?

​

  1. 높은 성능과 적은 메모리 사용

​

Nginx는 비동기 I/O 처리 방식을 사용하여 높은 성능을 제공합니다. 이를 통해 대규모 웹 사이트에서도 빠른 응답 시간을 보장할 수 있습니다. 또한 Nginx는 적은 메모리 사용량으로도 높은 성능을 제공합니다. 이를 통해 서버 운용 비용을 절감할 수 있습니다.

​

​

2. 리버스 프록시(Reverse Proxy) 사용이 가능

​

프록시(Proxy)의 사전적 정의는 "대리"입니다. 인터넷 접속을 할 때 보안상의 문제로 직접 통신을 주고받을 수 없을 때 그 사이의 중계기로서 대리로 통신을 수행하는 기능을 프록시라고 말합니다. 이렇게 중계를 기능하는 것을 우리는 프록시 서버라고 부릅니다. 프록시는 크게 포워드 프록시, 리버스 프록시로 구분됩니다.

​

포워드 프록시는 클라이언트와 인터넷 그 사이에 있는 영역을 말합니다. 클라이언트가 어떠한 정보를 요청하면 포원드 프록시가 이를 대신 받아서 서버에게 전달을 합니다. 이후 서버의 응답 또한 포워드 프록시가 대신 받아 클라이언트에게 전달합니다.

​

포워드 프록시를 사용하면 클라이언트의 IP 주소가 웹 서버에 노출되지 않습니다. 따라서, 클라이언트의 위치나 신원을 식별하는 것이 어려워져 보안이 강화됩니다. 또한 접근 제어를 수행할 수 있습니다. 포워드 프록시를 사용하여 특정 IP 주소, 도메인 또는 URL에 대한 접근을 제한할 수 있습니다.

​

마지막으로 미디어 스트리밍을 지원할 수 있습니다. 미디어 파일은 일반적으로 큰 용량을 가지고 있기 때문에, 웹 서버에서 직접 전송하는 것은 효율적이지 않습니다. 포워드 프록시를 사용하여 미디어 파일을 캐시하고, 클라이언트에게 빠르게 제공할 수 있습니다.

​

​

리버스 프록시는 인터넷과 백엔드 그 사이에 있는 서버 영역을 말합니다. 예를 들어 WAS로 사용하고 있는 서버가 여러 대 있다고 가정을 해보겠습니다. 클라이언트가 https://example/blog1, https://example/blog2으로 접근을 했다면 blog1은 A 서버로 전달, blog2는 B 서버로 전달하여 요청에 해당하는 웹 서버로 길을 분배할 수 있습니다. 이것을 로드 밸런싱이라고 합니다.

​

그리고 캐싱 서버로도 이용이 가능합니다. 예를 들어 클라이언트가 이미지를 요청했을 때 처음에는 서버에서 가져오지만 이후에 동일한 요청이 있는 경우에는 캐시 서버에서 가져와 클라이언트게 전달해 줍니다. 이것으로 사이트의 접속 속도가 빨라지게 됩니다.

​

마지막으로 보안 효과도 있습니다. WAS가 데이터를 응답할 때는 기기의 명칭이나 주소 등 실제로는 민감이 정보들이 담겨져 있습니다. 이러한 정보들을 중간에서 숨겨줌으로써 보안을 높일 수가 있습니다.

​

​

3. SSL 지원

​

SSL (Secure Sockets Layer)은 웹 사이트와 사용자 간의 통신을 암호화하고 보안을 유지하는 데 사용되는 프로토콜입니다. SSL은 HTTPS (HTTP Secure)로 알려진 보안 HTTP 프로토콜의 기반 기술입니다.

​

HTTPS는 HTTP 프로토콜의 암호화된 버전입니다. SSL 프로토콜을 사용하여 웹 서버와 클라이언트 간에 보안 연결을 설정하고, SSL 인증서를 사용하여 서버의 신원을 인증합니다. 이를 통해 중간자 공격과 같은 보안 위협을 방지하고, 사용자의 개인 정보와 웹 사이트의 기밀 정보를 보호할 수 있습니다.

​

Nginx는 HTTPS 인증서를 제공해 줄 수 있습니다.

​

​

4. 데이터 압축

​

클라이언트가 보내는 요청이 Text일 경우에는 gzip을 사용하여 해당 데이터를 압축시킬 수 있습니다.

​

​

5. 비동기 처리

​

Nginx는 이벤트 루프 방식을 사용하여 높은 성능을 제공합니다. 이를 통해 동시에 여러 요청이 들어왔을 때도 많은 트래픽을 동시에 처리할 수 있어 빠른 응답 시간을 보장합니다.


그럼 실무에서 Nginx를 어떻게 사용해볼 수 있을까요?

​

AWS EC2에 Nginx를 설치한다고 가정해 보겠습니다. 일단 AWS 인스턴스에 접속합니다. 최초 인스턴스는 포맷이 되어있는 비어있는 컴퓨터 상태라고 생각합니다. 만약 해당 인스턴스에 Node.js를 적용할 예정이라면 NVM, Node.js, NPM을 미리 설치해 두는 것이 좋습니다. NVM은 여러 버전의 노드를 관리할 수 있는 매니저입니다.

​

설치 전 NVM 최신 버전을 확인한 다음 설치를 진행합니다.

​

sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential libssl-dev // 최신 버전으로 변경 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash // .bashrc 파일이 수정되면 터미널 종료 후 다시 로그인을 해야 합니다. // but 아래 명령어를 입력하면 터미널 종료 없이도 적용 가능합니다. source ~/.bashrc nvm -v

NVM 설치가 완료되면 Node.js를 설치합니다. NVM과 마찬 가지로 버전을 확인 후에 설치를 진행합니다.

​

// Node.js 버전 입력 nvm install 18.13.0 node -v npm -v // 현재 설치되어 있는 Node.js 버전을 확인하고 싶다면... nvm ls // Node.js 버전을 변경하고 싶다면... nvm use 15.12.0

그럼 본격적으로 Nginx를 설치해 보겠습니다.

sudo apt-get install nginx

설치가 완료되면 최상위 디렉토리로 이동하여 Nginx를 실행시켜봅니다.

cd /etc/nginx/ sudo service nginx start

EC2 퍼블릭 IP 주소로 접속하여 다음 화면이 나타난다면 설치가 정상적으로 완료되었다는 것을 의미합니다.

마지막으로 Nginx Proxy Server를 설정해 보겠습니다. 먼저 /etc/nginx/sites-enabled 디렉토리로 이동합니다. 해당 디렉토리에서 Nginx 프록시 설정을 적용합니다.

cd /etc/nginx/sites-enabled sudo rm default sudo vi default

HTTP는 80, HTTPS는 443 포트를 사용합니다. 사용자가 Nginx 서버로 요청을 합니다. HTTP는 80 포트를 사용하기 때문에 Nginx에서는 listen 80 포트 구성합니다. Nginx가 80번 포트로 접속을 하면 443 포트로 리다이렉트 시켜 여러분이 사용하는 WAS(ex. Node.js)에게 전달합니다. 즉, HTTP로 접속을 하면 HTTPS로 접속하는 효과를 갖게 됩니다.

// HTTP로 접속을 하면 아래 프록시로 전달을 하겠다는 의미입니다. server { listen 80; // server_name : 도메인 주소, API 주소, IP 주소 등을 작성하는 영역입니다. server_name XXXXX.example.com; client_max_body_size 20M; // location / : / 경로로 오는 요청을 처리합니다. // proxy_pass : 최종 경로를 지정합니다. location / { proxy_pass http://127.0.0.1:8000; } }

클라이언트가 XXXXX.example.com 경로로 요청하면 현재 서버에서 실행되고 있는 http://127.0.0.1:8000 으로 클라이언트 요청을 대신 보내준다는 의미입니다. 그럼 사용자는 실제로 http://127.0.0.1:8000로 요청하지 않았지만 http://127.0.0.1:8000에 요청한 것과 동일한 효과가 발생합니다. 저장을 한 후 아래 명령어를 입력하여 정상적으로 설정이 진행되었는지 확인합니다.

sudo nginx -t // 정상이라면 아래 문구가 출력이 된다. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

마지막으로 Nginx를 재실행하면 모두 과정이 마무리 됩니다.

sudo service nginx restart

참고 (1) : Apache, Nginx를 비교하여 Nginx의 등장 배경을 소개한 영상


  1. IA, 메뉴구조도, 화면목록

    회사에서 사용자를 위한 서비스가 정의되면, ‘서비스에 어떤 화면들이 필요한지’, ‘각 화면들의 정보(화면 간 관계, 속성, 기능 등)는 어떻게 되는지’ 등을 정리합니다. 이렇게 정리된 화면들의 정보를 토대로 ‘화면 설계’를 진행하고, 이 과정에서 보통 IA(In...
    Date2024.12.18 Reply0 Views327
    Read More
  2. UX의 기본, 와이어프레임은 어떻게 작성하는 것일까

    Wireframe (와이어프레임) 사용자 경험의 기본이자 핵심이라고 할 수 있는 와이어프레임은 기초적인 골격을 통해 만들고자 하는 결과물이 어떤 모습을 할 것인지를 예상해 볼 수 있는 중요한 문서입니다. 그렇다면 와이어프레임은 어떻게 작성해 나가는 것일까...
    Date2024.12.05 Reply0 Views396
    Read More
  3. 웹, 모바일을 위한 I.A(Information Architecture, 정보구조도)

    서비스 설계의 기초인 정보 구조도(Information Architecture) 에 대해서 알아보겠습니다. I.A.의 기초 이론과 역할 그리고 구조도 작성법에 대해 알아보도록 하겠습니다. I.A(정보 구조도)란?I.A.는 간단하게 말해서 서비스의 목차 역할을 수행합니다. 웹 혹...
    Date2024.12.05 Reply0 Views379
    Read More
  4. (웹 용어) GNB, LNB, SNB, FNB

    웹사이트에서 유저의 서비스 탐색을 도와주는 카테고리. 서비스를 찾은 유저가 원하는 것을 쉽게 찾아낼 수 있게 직관적인 UI 구성이 필요한데요. 내비게이션 바라고 불리는 이 카테고리 영역은 위치와 역할에 따라 GNB, LNB, SNB, FNB 등으로 나눌 수 있어요...
    Date2024.12.04 Reply0 Views373 file
    Read More
  5. No Image

    [Spring] Annotation

    Annotation 이란? 사전적 의미로는 주석이라는 뜻이지만, 자바에서 Annotaion(@)은 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술이다. 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공하고, 코드에 정보를 추가하는 정형화된 방법이다. ...
    Date2024.11.23 Reply0 Views421
    Read More
  6. No Image

    iBatis, MyBatis 비교 정리(Dynamic Query)

    iBatis와 MyBatisiBatis( ~ 2.3)의 버전이 변경되면서 MyBatis(2.5 ~)로 변경이 되었다. Apache project팀에서 google code 팀으로 이동하면서 명칭이 변경 변경된 사항들을 정리해보면 아래와 같다. Java 요구 버전Java 요구버전도 iBATIS는 JDK 1.4 이상에서...
    Date2024.11.13 Reply0 Views390
    Read More
  7. Git / Github / 포크 (Fork) 하는 방법 (오픈소스 프로젝트 복...

    Fork란? 오픈 소스 프로젝트를 공부하거나 Contributors가 되고 싶을 때, 해당 원격 저장소(Remote Repository)를 자신의 원격 저장소로 복사할 수 있다. 이를 Fork라 한다. 깃허브의 경우 공개된 모든 자료가 오픈 소스로 다른 사람의 자료를 Fork 할 수 있다...
    Date2024.10.19 Reply0 Views558 file
    Read More
  8. No Image

    VBA, Range/Cells Text, Value, Value2 차이점

    VBA 프로그래밍의 기본은 특정 영역 또는 셀을 선택하는 것으로 시작될 것입니다. 단위 셀을 선택하는 방법은 다음 중 편한 방법을 선택하면 됩니다. Range(A5) = Cells(5, 1) = Cells(5, "A") Range와 Cells의 차이는 다중 영역을 선택할 수 있는지 여부 입니...
    Date2024.10.14 Reply0 Views1871
    Read More
  9. VBA VLookup 가이드

    이 포스트는 Excel Macro Mastery 사이트의 'VBA VLookup – A Complete Guide(by Paul Kelly)'의 내용을 다시 정리한 것입니다. 이번 포스트에서는 VLookup 함수를 VBA 스크립트에서 사용하는 방법에 대해 다룹니다. 들어가며 이번 포스트에서는 VLookup 함수...
    Date2024.10.04 Reply0 Views475 file
    Read More
  10. No Image

    VBA 엑셀 - 북 선택(Workbooks)북(Workbooks), 시트(Sheet) 선택

    VBA를 이용해 북(Book)과 시트(Sheet)를 선택하는 기능에 대해 알아보겠습니다. 일반적으로는 엑셀(Excell) 프로그램을 그냥 엑셀 또는 윈도우라고 하지만 VBA에서는 이 엑셀 프로그램 1개를 Book이라고 생각합니다. 주로 다른 북(Book) 선택 또는 종료를 위해...
    Date2024.09.28 Reply0 Views512
    Read More
  11. 컬렉션(Collections)

    1. 컬렉션(Collections) 1.1 컬렉션이란? : 컬렉션이란 우리말로 쉽게 말해서 자료구조이다. 더 쉽게 말하면 배열이다. 1.2 자료구조 1.3 컬렉션의 핵심 인터페이스와 특징 인터페이스 특징 List 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다. 예) 대...
    Date2024.09.26 Reply0 Views484 file
    Read More
  12. 스테이징 서버(Staging Server)

    2022. 7. 26. 01:26 주요 개념개발 서버(Development Server) 스테이징 서버(Staging Server) 프로덕션 서버(Production Server) 스테이징 서버(Staging Server)란 Production으로 가기 전 임시서버라 볼 수 있다. 즉, 운영환경에 적용하기 전에 확인하는 서버...
    Date2024.09.14 Reply0 Views585 file
    Read More
  13. 배포(deploy) 아키텍처 - 배포 코스

    배포(deploy) 아키텍처 - 배포 코스 2008. 10. 2. 16:29 리소스설정치환에 관한 글에서 얘기했듯이 개발소스와 빌드결과물은 여러 서버를 거치면서 생성,이동,배치됩니다. 개발자 로컬PC -> (소스저장소) -> 빌드서버(CI서버) -> 개발서버 -> 테스트서버 -> 스...
    Date2024.09.14 Reply0 Views495 file
    Read More
  14. Nginx란

    Nginx(엔진엑스)는 높은 성능과 안정성 그리고 현재 가장 많이 사용되고 있는 웹 서버입니다. Apache(아파치) 같은 웹 서버와 비교하면 더 빠르고 가볍고, 대규모 애플리케이션 처리에 적합하다는 장점이 있습니다. Nginx를 이해하기 위해서는 다음 4가지 용어...
    Date2024.07.14 Reply0 Views486 file
    Read More
  15. 인기 높은 아파치 HTTP 서버에서 발견된 취약점 패치돼

    인기 높은 아파치 HTTP 서버에서 발견된 취약점 패치돼 요약 : 보안 블로그 시큐리티어페어즈에 의하면 아파치재단(Apache Foundation)에서 다수의 취약점을 패치했다고 한다. 아파치 HTTP 서버(Apache HTTP Server)에서 발견된 것들로, 가장 눈에 띄는 건 CVE...
    Date2024.07.11 Reply0 Views509 file
    Read More
  16. 데이터센터, 데이터통합관리를 위한 nSIMS 소개

    nSIMS 도입사례 - 국가정보자원관리원 (NIRS) 도입배경 국가정보자원관리원(구 정부통합전산센터)은 2005년 세계 최초의 범정부데이터센터로서 흩어져 있던 전자정부 시스템을 한곳에 모으는 역할을 했습니다. 현재는 정부 기관의 자료들을 한 곳에서 효율적으...
    Date2024.07.07 Reply0 Views491 file
    Read More
  17. APM, Elevisor(Elevation Advisor) 통합성능관리 및 모니터링툴...

    Elevisor(Elevation Advisor) 는 시스템 성능을 최적화 할 수 있도록 도와주는 통합 성능관리 솔루션으로서. 다음과 같은 제품 군으로 구성되어 있습니다. Elevisor for J2EE 특징 J2EE 표준을 준수하는 모든 WAS 지원 50개 이상의 컨테이너의 독립적 모니터링...
    Date2024.07.07 Reply0 Views554 file
    Read More
  18. APM, Jennifer 제니퍼 소개

    정보 기술 분야 에서 애플리케이션 성능 관리(APM, Application Performance Management)는 개발된 애플리케이션 등을 포함한 소프트웨어 응용 프로그램의 성능 및 가용성을 모니터링하고 관리하는 소프트웨어를 의미합니다. 애플리케이션 성능 관리(APM)는 기...
    Date2024.06.29 Reply0 Views564 file
    Read More
  19. APM, Scouter 스카우터 설치 및 실행(+Jenkins, SpringBoot)

    XLog 보는 방법https://github.com/scouter-project/scouter/blob/master/scouter.document/client/Reading-XLog_kr.md Scouter 에서 응답시간 분포 그래프를 XLog 라고 부른다. XLog 는 Transaction Log 라는 의미에서 2004년에 처음 만들어졌다. XLog 는 전...
    Date2024.06.26 Reply0 Views1086 file
    Read More
  20. No Image

    JAVA APM Scouter 활용 - 3부 스카우터 얼럿 플러그인 커스터마...

    1부 APM 선정과 스카우터의 지표소개 2부 스카우터 기능 활용 및 페이퍼 플러그인 3부 스카우터 얼럿 플러그인 커스터마이징 스카우터에서는 성능 모니터링 중 생긴 특정 상황에 대해 얼럿 기능이 들어가 있다. 스카우터 클라이언트의 얼럿항목에서 확인 및 조...
    Date2024.06.26 Reply0 Views498
    Read More
목록
Board Pagination Prev 1 2 3 4 5 Next
/ 5