aws ec2 리눅스 서버에 react + spring 프로젝트를 배포하기 위해 우선 nginx를 설치하고 react 프로젝트를 배포했습니다. 그 과정을 작성하기 전에 nginx가 무엇이고, 왜 사용하는지 알아보겠습니다.
간단하게, nginx는 높은 성능과 안정성을 보유한 경량 웹 서버입니다.
좀 더 자세한 이해를 위해서는 웹 서버(web server)와 was(web application server)를 알아둘 필요가 있습니다. 웹 서버는 클라이언트의 요청에 따라 html, css, js, 이미지 파일과 같은 정적 파일을 응답하여 제공하는 소프트웨어입니다. was는 클라이언트 요청에 대해 동적인 처리를 담당하는 영역입니다. nginx는 웹 서버에 해당합니다.
보통 웹 서비스는 client → 웹 서버 → was → db 순으로 요청되고, 반대 순서로 응답합니다.
위 사진은 react + spring 프로젝트를 nginx를 사용하여 배포할 때 기본 아키텍처입니다. nginx가 웹 서버, spring boot에 사용된 서버가 was 입니다. 여기서, 빌드된 react 앱을 nginx를 통해서 실행되도록 하면 됩니다.
그러면 웹 서버는 왜 사용하는 걸까요? 그 이유는 첫째, was 부담을 줄여주기 위해 사용합니다. was는 동적 작업을 처리하기에도 바쁩니다. 정적인 파일 전달 역할을 웹 서버에게 위임하면 그 만큼 부담을 줄일 수 있습니다. 둘째, 보안 기능을 제공합니다. 셋째, (대부분의 웹 서버가) 비동기 처리 방식을 사용하여 높은 성능을 제공합니다. 멀티 프로세싱, 스레드 풀 등의 여러 기술을 사용하여 많은 클라이언트 요청을 동시에 처리 가능합니다.
그렇다면, 다시 넘어와서, 여러 웹 서버 중에 왜 nginx 일까요? 이것까지 다루면 내용이 길어지기 때문에 대충 '많이 좋아서' 정도로 하고 넘어가겠습니다.
cf. nohup 명령어를 사용한 백그라운드 실행 또는 pm2를 사용한 무중단 배포는 웹 서버를 사용하지 않습니다. 단순히 node.js를 was로 사용하는 구조입니다. 아마도요.
,, 여기까지 nginx가 뭐고, 왜 사용해야 하는지 알아보았습니다. 이제 본격적으로 nginx를 설치하고 배포하는 과정에 대해 알아보겠습니다.
yum info nginx
리눅스 환경의 ec2를 시작하면, nginx에 대한 repo 경로가 없기 때문에 설정해주어야 합니다.
sudo vi /etc/yum.repos.d/nginx.repo
vi 편집기가 열리면 아래 내용을 입력합니다.
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch
gpgcheck=0
enabled=1
내용 입력을 완료했으면 :wq 입력하여 저장, 종료합니다.
yum info nginx
sudo yum install nginx
잘 설치됐는지 확인해봅시다.
nginx -v
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
인스턴스 → 보안 → 보안 그룹 → 인바운드 규칙 편집 → SSH 규칙 추가
퍼블릭 DNS 주소에 접속해봅시다.
다음 글에서 이어집니다.
참고
https://blog.naver.com/gi_balja/223028077537
https://okky.kr/questions/1357368
https://control-time.com/entry/AWS-EC2-%EC%84%9C%EB%B2%84%EC%97%90-nginx-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
https://lsjsj92.tistory.com/550