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 점유율이 높아지기 시작
🌈💕🦄 결론 🌈💖😊
각 웹서버 중 어느 게 좋다고 확정할 수 없음
왜냐!! 대립관계가 아니기 때문
각 서버가 왜 나왔는지 이유를 알면, 왜 선택해야 하는지를 알 수 있음
만들어진 목적이 다름
'Develop > etc' 카테고리의 다른 글
개략적인 뉴스 피드 시스템 설계에 관한 이야기 (0) | 2024.04.24 |
---|---|
Adapter Pattern은 무엇인가 (0) | 2023.09.13 |
0.1 + 1.1 == 1.2 문제 (feat. 부동소수점) (0) | 2023.05.23 |
[C++] 람다식 (feat. 2887 행성 터널) (0) | 2023.05.20 |
RabbitMQ의 메시지 전달 방식 (Direct, Fanout, Topic, Headers Exchange) (0) | 2023.04.19 |