일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 취준생
- CS기술면접
- 헬스
- CS
- HTTP/2.0
- 컴퓨터공학과
- Nginx
- 컴퓨공학과
- 코딩테스트
- 도커명령어
- IT
- Python
- gunicorn
- http 메소드
- 프론트엔드
- 도커기본개념
- 자바스크립트
- 도커 컨테이너
- Javascript
- HTTP
- Nginx개념
- JavsScript
- Jupyter notebook
- docker
- HTTP/3.0
- HTTP/0.9
- 백준
- HTTP버전
- HTTP/1.0
- 운동
- Today
- Total
dogo_ day
Nginx 란? 본문
Nginx 란?
높은 성능과 확장성을 갖춘 오픈 소스 웹 서버 소프트웨어이다. Igor Sysoev에 의해 개발되었으며, 현재는 Nginx Inc.가 관리하고 있다. Nginx는 경량화된 디자인과 이벤트 기반 아키텍처를 가지고 있어 많은 웹 트래픽과 연결을 효율적으로 처리할 수 있다.
정의만 이야기하면 재미가 없으니 Nginx의 탄생배경도 알아보자
Apache(아파치)를 많이 들어보았을 것 이다.
아파치는 웹 서버 소프트웨어로, 초창기에는 인터넷 상에서 웹 페이지를 제공하는 역할을 했다.
아파치 특징
1. prefork 형식 : 요청 전 프로세스를 미리 생성하는 컨셉으로 동적 컨텐츠 처리 가능 및 확장성(다양한 모듈을 생성->서버에 빠르게 추가 가능)
2. 프로세스가 많다 : 메모리 부족 현상 발생
3. 다양한 모듈을 생성하는 것은 장점이자 리소스의 양이 늘어나므로 무거워지는 단점이 있다
4. 컨텍스트 스위칭을 많이 한다 : cpu 부하
시간이 흐르면서 웹 페이지는 단순히 텍스트만 보여주는 걸로 만족하지 않았다.
웹 페이지.. 즉, 클라이언트 요청이 다양하고(스마트폰) 많아지면서 connection도 많아졌다.
이런 단어도 생겼었다. -> C10K : Connection 10000 Problem
connection을 재사용하기 위해 persistent connection을 맺는 기법 중 하나인 keep-alive이 탄생
이러한 상황때문에 아파치로는 해결이 힘들었고 Nginx가 탄생하게 되었다.
컨셉은 클라이언트 <-> 아파치 였던 구조에서 클라이언트 <-> Nginx <-> 아파치로 변경이 된다.
클라이언트의 커넥션을 유지하기위해 더 이상 아파치의 리소스를 사용하지 않아도 된다.
그리고 Nginx는 그 자체만으로 웹 서버이기 때문에 정적파일을 처리할 수 있고, 동적 파일에 대한 요청만 아파치와 커넥션한다.
Nginx의 구조는 master process와 worker process로 구성 되어 있다. 새로운 커넥션 연결, 제거 및 새로운 요청을 처리하는 것을 event라고 부르며, os커널이 Queue형태로 worker process에게 전달한다.(비동기)
시간이 오래 걸리는 작업이 들어오게 된다면 어떻게 될까?(ex. disk I/O)
그럴 때를 대비해서 Thread Pool이라는 개념이 존재하며 오래 걸릴 것 같은 작업은 Thread Pool로 event를 위임한다.
worker process는 CPU코어의 갯수만큼 생성이 된다. -> CPU의 컨텍스트 스위칭 사용을 줄이는 효과
즉, Nginx는 event-driven-model 이다.
장점만 있는 것은 아니다.
단점으로는 개발자가 직접 모듈을 만들기가 까다롭다.
BUT, 단점을 씹어 먹는 장점
- 동시 커넥션 양 최소 10배 증가
- 동일한 커넥션 수일 때 속도 2개 증가
Nginx VS apache
이 두개의 웹 서버 소프트웨어는 대립관계가 아니며, 적재적소 사용하면 된다.
Nginx의 활용처
1. 정적 파일 서비스 : Nginx는 정적인 웹 콘텐츠(HTML, CSS, 이미지 파일 등)를 처리하여 웹 서버의 성능을 향상시킨다.
2. 리버스 프록시 서버 : Nginx는 웹 요청을 받아서 백엔드 서버로 전달하는 리버스 프록시 역할을 수행한다. 부하 분산, 캐싱, SSL 종단 감독 등을 구현할 수 있다.
3. 로드 밸런싱 : Nginx는 여러 대의 백엔드 서버에 웹 트래픽을 균등하게 분산시켜주는 로드 밸런싱 기능을 제공한다. 이를 통해 서버의 부하를 분산하여 성능을 향상시킬 수 있다.
4. SSL/TLS 종단 감독 : Nginx는 SSL/TLS 인증서를 로드 밸런서 또는 리버스 프록시로 사용하여 암호화된 트래픽을 처리할 수 있다.
ex) 클라이언트와는 SSL/TLS 암호화된 연결이 이루어지지만, 백엔드 서버와는 암호화되지 않은 연결로 통신한다.
5. 가상 호스팅 : 하나의 서버에서 여러 개의 도메인 또는 웹 사이트를 호스팅하는 가상 호스팅을 지원한다.
간단하게 Nginx에 대한 개념을 알아보았다.
누군가 Nginx에 대해 묻는다면...
Nginx가 왜 탄생하게 되었고, 어떠한 컨셉으로 동작하며 어떻게 활용되는지 알려줄 수 있게 되었다.😙
'IT > DevOps_' 카테고리의 다른 글
REST API 란? (0) | 2023.06.16 |
---|---|
Nginx 그리고 Gunicorn (0) | 2023.06.16 |
Docker 란? (0) | 2023.06.15 |