강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

수하님의 프로필 이미지
수하

작성한 질문수

비전공자도 이해할 수 있는 Nginx 입문/실전

Nginx의 성능을 알고 싶으면 리눅스 위에서 실행 시켜야 하잖아요..

작성

·

28

0

안녕하세요.

제가 집에서 Nginx 성능 테스트를 진행해보았습니다.

먼저,

  • Windows 환경(로컬 컴퓨터) 에서 직접 Nginx를 설치 후 실행했고,

  • WSL2 환경(리눅스 커널 기반) 위에서도 Nginx를 설치해 실행해보았습니다.

그런데 ChatGPT에 문의해보니,
Nginx의 sendfile()을 통한 커널 레벨 zero-copy 최적화를 제대로 체감하려면
Windows가 아닌 리눅스 환경에서 실행해야 한다고 하더군요.
Windows 커널에서는 해당 기능을 완전히 지원하지 않는다고 합니다.

또한,
WSL2 위에서 Nginx를 실행하고 Windows 브라우저로 접속할 경우,
WSL2(리눅스 커널)와 Windows(호스트 OS) 간 통신 과정에서
지연이 발생할 수 있다는 설명도 들었습니다.

 

그래서 “그럼 도커를 쓰면 되나?” 싶어서
예전에 구매했던 강사님의 Docker 강의를 참고하려고 했습니다.
마침 강의 내용 중 Nginx 설치 및 설정 실습 파트가 있어서 그대로 따라보려 했는데요,
ChatGPT의 설명에 따르면 Docker도 결국 WSL2 위에서 동작한다고 합니다.
즉, WSL2에서 직접 실행하는 것보다는 최적화되어 있지만,
Windows 브라우저에서 요청을 보낼 때는 여전히 변환 과정이 존재해서
원하는 수준의 “커널 레벨 I/O 성능 비교”를 얻기는 어렵다는 답변을 받았습니다.

제가 확인하고 싶은 부분은 단순히
Tomcat과 Nginx 간의 정적 콘텐츠 처리 성능 차이입니다.

(참고로, Nginx는 이벤트 드리븐 I/O 모델(epoll 등)을 기반으로 동작하며,
리눅스에서는 sendfile() 시스템 콜을 통해
커널 수준에서 파일을 소켓으로 직접 전송하는 zero-copy 최적화를 지원한다고 합니다.
이 기능은 리눅스 커널에서 가장 효율적으로 동작하며,
Windows 환경에서는 동일한 수준의 최적화가 적용되지 않는다고 합니다.
ChatGPT를 통해 얻은 정보이며, 이 부분을 실제로 테스트해보고 싶었습니다.)

그래서 궁금한 점이 있습니다.

 

👉이러한 sendfile() 기반 zero-copy 최적화를 직접 체감하려면,
강사님께서 강의에서 보여주신 것처럼 AWS 리눅스 서버(EC2) 위에서
Nginx를 띄워 테스트하는 것이 가장 정확한 방법일까요?

즉, Windows나 WSL2 환경이 아닌,
AWS 리눅스 환경에서 Nginx를 실행해야만 커널 수준 I/O 성능을 정확히 확인할 수 있는지 궁금합니다 ㅠㅠㅠㅠ

Nginx에 대해 공부해보고 싶은데 환경 세팅부터 막히니까 조금 답답합니다.. ㅠㅠ ㅠㅠ ㅠㅠ

답변 2

1

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 수하님 ! 질문 잘 해주셨어요 ~

질문해 주신 내용에 대해 답변드려 볼게요 !

 

우선 최적화를 정확하게 체감하려면

AWS EC2와 같은 실제 리눅스 환경에서 테스트하는 것이 가장 정확해요 !

로컬(Windows/WSL2/Docker) 환경에서는 아래의 이유들로 권장 드리지 않아요 !

WSL2와 Windows 간 네트워크 통신 과정에서 오버헤드가 발생하고,

네트워크 스택이 복잡해서 순수한 성능 측정이 어려워요 !

윈도우 커널 자체가 snedfile()을 완전히 지원하지 않아서

nginx의 핵심 성능 최적화 기능을 제대로 테스트 하긴 힘들어요 !

무엇보다 설정도 복잡하고 예상치 못한 변수들이 많아요 !

Windows 환경에서 억지로 테스트하려다 보면 환경 설정에만 시간을 쏟고

정작 Nginx 학습은 못하는 경우가 많아요 ~

결론적으로 AWS EC2 프리티어를 활용하시는 것을 추천드려요 !

실제 리눅스 환경에서 정확한 성능 측정이 가능하고,

환경 설정이 훨씬 단순해요 !

무엇보다 실무 환경과 동일한 조건에서 테스트가 가능해요 :)

 

추가로 궁금하신 점 있으시면 또 질문 남겨주세요!!

수하님의 프로필 이미지
수하
질문자

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. 수하님.

Nginx의 성능을 제대로 테스트하고 싶으신 상황을 잘 이해했습니다. 특히 sendfile() 기반의 zero-copy 최적화를 통해 Nginx와 Tomcat 간의 성능 차이를 확인하고자 하신다면, 리눅스 기반 환경에서 테스트하는 것이 가장 적합합니다.

  1. 리눅스 환경에서의 이점:

    • Nginx는 리눅스 환경에서 최적화된 성능을 발휘합니다. 특히 sendfile() 시스템 콜은 리눅스의 커널 레벨에서 매우 효율적으로 작동하므로 정확한 성능 데이터를 얻으려면 리눅스에서 직접 구동하는 것이 좋습니다.
  2. WSL2와 Docker의 제한:

    • WSL2는 리눅스 커널을 사용하지만, Windows와의 통신에서 생기는 오버헤드는 여전히 존재할 수 있습니다. Docker도 WSL2 위에서 동작하기 때문에, 최적화된 성능을 기대하기에는 한계가 있습니다.
  3. AWS EC2 활용:

    • AWS EC2와 같은 클라우드 서비스에서 리눅스 서버를 이용하는 방법은 좋은 선택입니다. 클라우드 서버는 리눅스 환경에서 Nginx를 구동할 수 있게 해주며, 전체적인 I/O 성능을 보다 정확하게 테스트할 수 있습니다.

관련 게시글을 추천드립니다:
- AWS EC2에서의 Nginx 설정 및 성능 최적화 - AWS EC2 환경에서 Nginx 성능을 최적화하고 설정하는 방법에 대해 설명합니다. 이 링크에서 보다 상세한 정보를 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

수하님의 프로필 이미지
수하

작성한 질문수

질문하기