항해99 73일차 TIL1 - NGINX 적용하기(feat. chat GPT)
안녕하세요. 실전 프로젝트가 열흘 정도남았어요. 오늘은 지난 주말에 해결했던 트러블 슈팅 글을 공유하고 NGINX에 대해 조금 이야기를 해보려고 합니다. 그님스 트러블 슈팅 저장소 - 용량 큰 이미지 넣으면 에러가 발생합니다.
글을 요약하면 다음과 같습니다.
1. 1M 넘는 파일 업로드 시, 413 에러
2. 413, Payload Too Large 요청이 너무 크다는 의미
3. NGINX client_max_body_size 10M 로 변경
NGINX는 어떤 역할을 할 수 있을까요?
NGING 와 더불어 APACHE는 대표적인 웹 서버입니다. 영한님의 HTTP 강의를 들을 때 단순히 웹 서버는 정적 리소스를 처리하는 웹 서버에 지나지 않는 것으로 알고 있었는데요. 생각보다 많은 역할을 합니다. 몇 가지만 적어보겠습니다.
리버스 프록시
캐싱
로드벨런서
URL 리다이렉션
이런 기능 덕에 NGINX를 사용합니다. 항해99에서는 많은 팀들이 로드벨런서로 사용해서 무중단 배포로 사용하고 계시는걸로 알고 있는데요. 저희 팀에서는 NGINX 대신 AWS의 ALB 서비스를 이용해 배포를 진행중입니다. 물론 인스턴스는 1개이지만 추후 확장성을 위해 로드 벨런서를 사용해 롤링 방식으로 배포를 하고 있습니다.
저희 팀에서는 NGINX를 통해 사용하는 주요 기능은 두 가지였습니다.
1. HTTP로 들어온 요청을 HTTPS로 리다이렉션
2. 리버스 프록시를 통한 캐싱 기능
그런데 그님스 서비스 특성 상 대부분의 페이지의 데이터에 많은 변경이 있을 것이라 판단해 도입을 미루고 있습니다.
NGINX, 아파치와 무엇이 다를까?
모든 내용은 CHAT GPT와 혈투? 끝에 얻어낸 정보들입니다.
아파치는 멀티 프로세스입니다. 이로 인한 단점으로 NGINX에 비해 오버헤드가 크고 합니다. 클러스터링 설정이 복잡하다고 하네요. 아파치에 대한 정보는 많이 물어보지 않았어요.
NGINX의 경우 메인 프로세스라는 것이 존재하고 하위에 복수의 워커 프로세스가 존재합니다. 그리고 각각의 워커 프로세스에는 스레드 풀이 존재하고 풀에는 스레드가 한 개만 존재합니다. 그래서 NGINX 와 아파치를 비교해달라고 하면 멀티 프로세스, 멀티 스레드의 차이를 말해줍니다. 그러다 계속해서 질문을 이어나가면 NGINX는 단일 스레드라고 합니다 ㅋㅋ
NGINX는 이벤트 기반의 비동기 처리를 합니다. 그래서 단일 스레드로도 작업을 빠르게 합니다. 사실 단일 스레드는 아닌 것 같아요. 결국 여러개의 워커 프로세스가 있으니 공장에 일꾼이 한 명 뿐인거지 일을 한 명만 하는건 아닙니다.