개발자

React EC2배포 시 nginx, pm2 궁금합니다 !

2023년 09월 10일조회 561

안녕하세요 ! React 프로젝트를 AWS EC2 통해서 배포하고있는데 궁금한 사항이 생겨 이렇게 글 남깁니다 ! 현재 구조는 ELb에서 http 80포트는 https 443포트로 리디렉션, 그리고 https 443 포트는 EC2 nginx가 있는 80포트로 보내주면 nginx는 React 3000 포트로 포트포워딩해서 보여주게 됩니다 ! 여기서 혹시 ELb 쪽에서 요청이 들어왔을때 EC2 nginx가 있는 80포트가 아닌 React가 있는 3000번 포트로 바로 보내주고, pm2를 통해서 React 프로젝트를 관리할경우 nginx의 역할이 사라지는거 같은데… 1. 혹시 저러한 구조로 변경할경우 nginx의 역할 혹은 사용시 이점이 따로 있을까요?! 2. 저러한 구조에서 ELB 를 사용하지 않고 http 80, https 443 요청을 nginx 쪽에서 핸들링해서 https 요청을 적용하는것도 가능한지 궁금합니다 ! 질문이 약간 혼란스러운거 같아서 죄송합니다 ㅜㅜ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 3

지왕님의 프로필 사진

1. 글을 읽어본 결과 리액트 3000번 포트로 돌린다고 하시는건 그냥 개발환경으로 포워딩 하시는거 같네요! 리액트 프로젝트를 빌드해서 nginx서버에서 돌리시는걸 추천합니다! 2. 기본적으로 ec2에 퍼블릭 ip가 있고 보안그룹이 열려있다면 ec2의 퍼블릭 ip로 외부접근이 가능합니다 인증서의 경우도 인증서 관련 오픈소스를 사용하여 https도 가능은 합니다 개발에 대한 공부고 프론트만 하신다면 단순히 ec2에 올려서 해보시는 것도 좋지만 백엔드까지 보신다면 먼저 3티어의 구조에 대한 공부부터 하시는 걸 추천드립니다!

profile picture

익명

작성자

2023년 09월 11일

안녕하세요 ! 답변 감사합니다 ! 리액트 프로젝트를 빌드해서 nginx server에서 돌리는다는건 80 port 로 들어올시 빌드한 build/index.html 를 지정해주어 정적컨텐츠 배포 방식이 맞을까요?! 😂 포트 포워딩이랑 차이가 어떤점이 있는지 궁금합니다…! 재질문 죄송합니다…….

지왕님의 프로필 사진

지왕

베스핀글로벌 테크센터 테크니컬 아키텍트2023년 09월 11일

네네 맞습니다~ 제가 리액트를 잘 몰라서 npm run을 돌리면 3000번포트에서 돌았던거 같은데 그건 서버를 올렸다라는 개념이라기 보단 테스트용 데모 페이지를 띄웠다라는 느낌으로 보시는게 맞을꺼에요 실제 어플리케이션을 배포한다 라고 하면 해당 어플리케이션의 빌드 파일을 만들어서 서버에 올린다보시명 됩니다!

profile picture

익명

작성자

2023년 09월 11일

친절한 답변 감사합니다 ! 많은 도움이 되었습니다 :)

김대현님의 프로필 사진

궁금하신 것에 대한 답변은 아닙니다만, 참고차 적습니다. 프론트엔드 앱이고, 만약 정적배포가 가능하다면 (백엔드API는 다른데 있다는 가정), AWS CloudFront또는 API GW를 앞에두고, S3버켓에 빌드된 파일을 배포해두는 방법은 어떠실지 추천드려봅니다. 그러면, EC2는 물론이거니와, ELB도 필요없어지고, nginx도 필요없어지니까요. 프론트엔드 앱인데 왜 EC2를 띄우는지 의아해서 (제가 잘 몰라서) 답글다네요. CloudFront나 API GW둘다 앞단에서 TLS인증서 처리와 터미네이션을 잘 해줍니다.

샘님의 프로필 사진

오래전 질문이지만 이 글 보시는 다른 분들도 도움 될까 답변 남깁니다. 1. 결론 부터 말씀드리자면, 오픈 소스 버전 nginx의 기본 기능만 사용하신다면 말씀하신대로 nginx의 역할은 사라지는게 맞습니다. nginx는 로드밸런서, 리버스 프록시, 라우터 등의 역할을 하는데, AWS의 로드밸런서가 이 역할 대부분을 수행합니다. 서버 상태체크도 aws 로드밸런서가 수행합니다. 오픈소스 nginx는 요청이 있어야 서버 상태를 체크하는 반면 aws 로드밸런서는 주기적으로 서버 상태를 체크하므로 후자가 가용성 면에서 더 유리합니다. 2. 역으로 aws 로드밸런서 사용하지 않고 nginx만으로 포트포워딩, ssl 적용 가능합니다. 이부분은 공식 문서 읽어보시는게 가장 빠릅니다. 아니면 gpt 에 질문을 하면 매우 기본적인 질문이므로 틀리지 않고 답변을 합니다. 3. 다만 현재 구조에서 nginx를 디테일하게 사용하신다면 캐싱에 있어서 이점을 가져가실수 있습니다. 그리고 3000번 포트를 사용한다고 개발환경 포워딩인건 잘못된 답변 같습니다. 실제 프로세스가 돌아가는 서버는 일반적으로(프로덕션이라면 당연히) 클라이언트가 닿을 수 없는 곳에 위치합니다(엔진엑스, aws 로드밸런서의 사용에는 이 목적도 포함됩니다). 따라서 서버의 포트 사용은 일반적 관습을 따르되 3000번 같이 그 의미가 다소 헐거운 포트는 프로덕션 레벨 배포에서도 사용할 수 있습니다. 어짜피 이 포트는 내부 it 자원간의 통신에 사용되므로 클라이언트 3000번으로 서버가 배포하는 자원에 접근하지 않습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2023년 09월 10일

1. Nginx를 사용하는 가장 큰 이점 중 하나는 정적 파일을 효율적으로 제공하며, 리버스 프록시와 로드밸런싱 기능을 수행한다는 것입니다. React의 경우 build 과정에서 생성되는 static 파일들을 제공하는 역할이 필요한데 이것을 nginx가 수행하게 됩니다. 그리고 nginx는 여러대의 서버에 요청을 분산하는 로드 밸런싱, 유입되는 트래픽을 효율적으로 관리해주는 기능도 합니다. PM2만으로 서비스를 운영할 경우에 생기는 문제점은 보안과 성능 관련 문제가 있습니다. PM2가 80, 443 포트를 직접 Listen 할수 없으며(HTTP, HTTPS 기본 포트로서 루트 권한 필요), 대용량의 정적 리소스 처리나 Caching 등 성능 향상에 있어서 nginx보다 떨어집니다. 2. ELB를 사용하지 않고 Nginx에서 직접 HTTPS 요청을 처리하는 것은 가능합니다. 하지만 이 경우 SSL 인증서 설치와 같은 추가 작업이 필요합니다. AWS Certificate Manager(ACM) 같은 서비스를 이용하면 간편하게 인증서 발급과 연장이 가능하지만, ELB나 CloudFront와 같은 AWS 관리형 서비스에서만 사용 가능합니다. ELB를 통해 SSL/TLS를 종료하는 방식을 사용하면 인증서 관리가 용이합니다. ELB의 또 다른 이점은 여러 서버에 대한 로드 밸런싱 기능을 제공하는 것입니다. Nginx도 로드 밸런싱 기능을 제공하지만, 서버 수 확장 시 설정 변경이 필요하고, 각각의 서버 상태 체크 등 추가적인 작업이 필요할 수 있습니다. ELB를 사용하면 이러한 부분들을 자동으로 처리해주기 때문에 유지보수가 간편합니다. 각 방식마다 장단점이 있기 때문에 프로젝트의 요구사항과 상황에 따라 적절한 선택이 필요합니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!