본문 바로가기
Develop/etc

Nginx 넌 도대체 뭐니

by 독서왕뼝아리 2023. 9. 12.

https://www.youtube.com/watch?v=6FAwAXXj5N0&ab_channel=우아한테크
해당 영상을 보고 정리한 내용입니다. 정말 설명을 잘하시니 한번씩 보시는 거 추천!!
 


Nginx?

백엔드 개발을 하다보면 들어봤을 법 한 단어이다. 왜 쓰이는지 어떻게 쓰는지 모르면서 사용하다가 이번에 확실하게 정리해본다.
 
 
웹서버이자 로드밸런서이자 *SSL 터미네이션이자 캐시이자 HSTS, CORS 처리, TCP/UDP 커넥션 분산 등등등…
만능열쇠🔑
 

더보기

SSL 터미네이션
웹서버-클라이언트는 https, 웹서버-서버는 http 통신

하드웨어 가속기라고도 한다.

 
년도에 따라서 웹서버가 발전한 내용을 알아보자.

1995년

이전까지는 NCSA HTTPd(유닉스 기반 최초의 웹서버)라는 웹서버 사용 → 버그가 굉장히 많음
버그 수정을 목적으로 APACHE 서버 탄생
아파치 서버는 컨넥션 요청이 들어올 때마다 프로세스를 생성 → 프로세스를 만드는 시간이 오래 걸려서 미리 프로세스를 만들어 놓는 PreFork 방법을 사용했다.
👍🏻 꾸준한 업데이트, 모듈 확장성이 좋았음, 호환성 좋음

but!

인터넷이 발전할수록 요청이 많아지고 컨넥션을 형성하지 못하는 문제 발생(C10k 문제; connection 10,000개 문제)
👎🏻 메모리 부족, 무거운 프로그램, CPU 부하
 

2004년

아파치 서버를 보안하기 위해 Nginx 탄생

Nginx 구조

  • master process가 존재하고
  • worker process을 생성해 listen socket을 배정받음

 
소켓에 클라이언트 요청(event)이 들어오면 처리
keep-alive 시간만큼 연결을 유지
events는 커널이 worker process의 queue로 전달
 
❗만약 큐 안의 event의 처리 시간이 오래 걸린다면?
→ 시간이 오래 걸리는 event들은 thread pool로 관리
 
worker process는 보통 CPU 코어 개수만큼 생성됨
코어의 컨텍스트 스위칭 비용을 절감하게 됨!!
Event Driven Model CPU 부하 저하 (아파치 서버와 가장 큰 차이)
 
 

👎🏻 물론 단점도 존재

개발자가 직접 만지다가 워커프로세서를 죽이면 치명적임
개발자가 직접 모드를 만들기 까다로움
 

하지만 단점에 비해 장점이 명확함

  • 동시 커넥션 양 최소 10배 증가 (일반적으로 100 ~ 1000배 증가)
  • 동일한 커넥션 개수일 때 속도 2배 향상
  • 동적 설정 변경 가능

 

Nginx의 로드밸런싱

동적으로 설정을 변경 가능하기 때문에
그리고 설정 변경을 초당 수십번을 무리없이 수행할 수 있는 퍼포먼스를 가짐
 
 

하지만 엔진엑스의 점유율은 그닥 높지 않았다.

 

2008년

스마트폰 등장 → 동시 접속 多

 
아파치 서버의 점유율이 떨어지고 Nginx 점유율이 높아지기 시작
 

🌈💕🦄 결론 🌈💖😊

각 웹서버 중 어느 게 좋다고 확정할 수 없음
왜냐!! 대립관계가 아니기 때문
각 서버가 왜 나왔는지 이유를 알면, 왜 선택해야 하는지를 알 수 있음
만들어진 목적이 다름