avatar
띵로그
CS
1

article-thumbnail
주니어 백엔드 개발자입니다 :)
태그
NginxWASTomcat웹서버면접리뷰직무면접

최근 댓글
avatar
thingk0
1. 네, 말씀하신 이해가 맞다고 생각합니다! nginx가 유용한 이유는 여러 가지가 있겠지만 nginx는 이벤트 기반 처리로 정적 파일 제공에 최적화되어 있어서 Node.js보다 리소스 사용이 효율적이고 파일 캐싱과 압축 기능 등 잘 구현되어 있어 성능상 이점이 있다고 알고 있습니다. 그리고 서버 사이드 렌더링의 경우 Node.js나 톰캣같은 서버가 동적 렌더링을 직접 처리해야 하고, 매 요청마다 서버에서 동적으로 HTML을 생성하기 때문에 nginx의 정적 파일 캐싱이나 압축 기능의 이점을 제대로 활용하기 어렵다고 생각합니다. :) 2. 저도 깊게 아는 것은 아니지만.. 가장 큰 이유로는 nginx가 HTTPS 처리를 담당하여 애플리케이션 서버의 부담을 줄일 수 있고 직접적인 서버 접근을 차단하기 때문에 추가적인 보안 레이어 역할을 해줄 수 있기 때문입니다 ! 3. 맞습니다. Node.js나 스프링부트도 충분히 좋은 성능을 제공합니다. 하지만 그럼에도 nginx를 앞단에 두면 정적 파일 캐싱으로 서버의 부하를 덜 수 있고 불필요한 요청을 사전에 필터링 역할까지 가능하기 때문입니다. 그리고 개인적으로 Nginx 가 굉장히 잘 만들어진 웹서버라고 생각하기 때문에, 서버는 정말 애플리케이션의 역할만 수행하고, 나머지의 정적인 것들은 Nginx 에서 부담을 나누어주면 여러모로 이점이 많을 거라고 생각합니다!
avatar
injaesong
글 잘 읽었습니다 ㅎㅎ 저도 nginx를 사용하려다 nginx를 사용함으로써 얻는 장점에 대해 의문이 생겨 서칭하다가 들어오게 됐는데, 읽으면서도 몇가지 의문이 남아 질문드리고 싶습니다! 1. 정적 컨텐츠 제공 Tomcat 같은 WAS도 정적 컨텐츠를 제공할 수 있습니다. 아무 로직 없이 정적 컨텐츠를 응답하면 정적 컨텐츠를 제공하는 웹서버로도 활용이 가능합니다. 물론 다른 FE 애플리케이션이 있다면 필요가 없겠지만요! 리액트나 뷰를 사용한 FE 애플리케이션은 SPA를 위해 Nodejs 상에서 돌아갑니다. 동적 렌더링이 아닌 웹팩 등의 번들링 툴을 이용해 npm build 등을 통해서 정적 파일을 생성해 이를 배포하기 위함이라면 nginx의 정적 컨텐츠 제공의 역할이 이해가 됩니다. 정적 컨텐츠를 위해선 JS 런타임 환경인 Node보단 nginx가 훨씬 효율적이라고 생각하기 때문입니다. SPA일 경우 유용하다고 생각하셨다는데, 그 이유가 제가 이해한 바가 맞을까요?? SPA가 아닐 경우엔 어째서 유용하지 않은걸까요? 2. 리버스 프록시 한 EC2 인스턴스에 FE와 BE 앱이 모두 다른 포트로 연결됐기 때문에 리버스 프록시가 이유가 된다는 점이 이해가 됐습니다! 그럼 감히 구조를 예상해보자면, `클라이언트 <-> 리버스 프록시(nginx) <-> EC2 (FE + Spring Boot)` 라고 예상이 되는데, FE앱 내에선 API 서버가 같은 디바이스 내에 있기 때문에 주소가 `http://localhost:8080`으로 되어있을 것이라고 생각이 듭니다. 그럼 서버가 받을 요청은 localhost의 3000포트 같은 FE 앱 뿐일 것 같은데, 리버스 프록시가 필요하고 유용한 이유가 무엇인지 궁금합니다! nginx가 BE로 향하게 끔 하는 경우가 모니터링이나 문서 등이 있다거나, 혹은 시스템 구조가 다른 것일까요?? 3. 고성능 Spring Boot의 Tomcat이나 Nodejs도 논블로킹 I/O를 통해 높은 퍼포먼스의 동시 작업을 지원한다고 생각합니다. 아파치 웹 서버처럼 비슷한 역할을 하는 프로그램과 비교라면 이해가 되긴하는데, 이런 경우 Node가 그대로 트래픽을 받는 것도 문제될 것 같지 않다는 생각이 듭니다.