Back-end

DB 구축 및 서버 배포 과정

hjr067 2024. 11. 28. 16:50

이화여자대학교 졸업 프로젝트 캡스톤디자인과창업프로젝트 수업을 수강하며, 필요한 기술을 정리해보는 블로그를 적는다. 방학동안 개발에 들어갈 것이기 때문에 어찌 보면 백엔드 과정에서 가장 중요하다고 생각하고 있는 부분을 정리해보고자 한다.

 

특히 Django로는 서버 배포를 수차례 진행해보았기에 이번엔 Node.js 툴에 맞추어서 작성해야겠다!

 

AWS 배포하기

 

1️⃣

EC2 서버 설정을 완료한 후 Status checks 가 running으로 바뀌면 접속할 수 있게 된다.

IPv4 Public IP로 접속할 수 있다. 이제 터미널을 열고 pem키가 있는 폴더로 들어간 후, 아래와 같은 command line을 입력하게 되면

chmod 400 <your pem key name>.pem
ssh -i "<your pem key name>.pem" ubuntu@<your IPv4 Public IP>

 

인스턴스에 접속할 수 있다 !

 

2️⃣

만들어두었던 Node.js 서버를 방금 생성한 인스턴스에 올려야 한다. 

인스턴스에 Node.js나 npm 등이 깔려있진 않지만 git은 깔려있을 것이다.

git으로 서버를 clone하기전, 먼저 Node.js와 npm을 깔자!

sudo apt update
sudo apt install nodejs
sudo apt install npm

Node.js와 npm 설치가 완료됐다면 원하는 directory에다 Node.js 서버를 clone 하면 된다.

그 후 server folder로 이동해 npm install로 필요한 의존성들을 설치해주어야 한다.

설치 이후 node app.js로 서버를 실행시켜 your IPv4 IP Public:3001으로 접속하고 웹이 뜨는지 확인하면 된다.

 

3️⃣

node app.js로 서버를 실행시켰는데 터미널에서 instance를 나오려면 어쩔 수 없이 server를 꺼야 한다.

계속 터미널을 실행시켜 줄 수 없기에 아래와 같이 설정하자.

npm install -g pm2

app.js 폴더로 이동하여 다음 이어서 실행

pm2 start app.js

 

실행 이후에 status가 online이라면 ubuntu terminal을 닫아도 server가 계속 실행된다.

 

 

HTTPS 배포하기

 

1️⃣ 환경 설정

1) AWS EC2 이용해 배포를 끝낸 상태

2) 가비아(이 외 다른 사이트를 이용해도 된다)를 이용해 domain 준비

 

2️⃣ Route 53에서 도메인 인증

1) 대시보드에서 호스팅 영역 들어가기

2) 호스팅 영역 생성

3) 도메인 이름은 구매한 이름으로 설정, 나머지는 그대로, 호스팅 영역 생성 클릭

4) 생성된 호스팅 영역에 들어가면 NS, SOA 유형의 레코드 생성 확인 가능

6) 생성된 NS를 가비아로 구입한 도메인 네임서버에 넣기

⚠️ 호스팅 영역에 4개의 NS 마지막에 .이 있기 때문에 지우고 입력해주기 !

 

7) 소유자 인증까지 해주면 적용할 수 있다.

 

3️⃣ ACM 인증서 발급

1) ACM에 들어가 >> 퍼블릭 인증서 요청 << 을 누르고 다음을 클릭한다.

2) 퍼블릭 인증서 요청을 통해 인증서 요청 시도

3) 도메인 이름에 가비아에서 구입한 도메인을 입력한다. 나머지는 기본 세팅(DNS 검증 - 권장, RSA 2048)을 유지하고 요청을 클릭한다.

4) ACM 메뉴에서 인증서 나열을 클릭하면 요청한 인증서를 확인할 수 있다. (이때 검증 대기중/ 아니요/ 부적격)이 나오는게 정상이다.

 

5) 레코드 생성 후 다시 라우트 53 접속하면 CNAME이 생성된 것 확인 가능

6) cname을 가비아에서 구입한 도메인에 등록

 

4️⃣ 보안 그룹

배포할 때 보안그룹 설정했던 것과 같은 방법으로 진행

-> port number는 개인이 사용하고 있는 port 번호 입력

❗ 443 port number - HTTPS

 

5️⃣ Load Balancer

1) Create load balancer

2) 1번째 ALB 선택

3) 적당한 이름을 설정, 네트워크 매핑에서 최소 2개의 AZ(Available Zone)을 설정, EC2가 사용하는 VPC, 서브넷과 매핑되어야 한다.(EC2 인스턴스에서 확인 가능) / 참고로 Scheme 설저을 Internet-facing으로 정했기에 Public subnet으로 매핑해야 한다.

4) 보안 그룹은 EC2 인스턴스와 동일하게 설정해준다.

5) HTTP 8080, HTTPS 443에 대한 리스너를 생성한다. (HTTP는 본인이 설정한 포트번호로 설정한다.)

6) 생성한 인증서를 적용, 마지막으로 Create load balancer 클릭!

7) 리스너 규칙 추가

 

6️⃣ 도메인 레코드 생성

- A 레코드 

: 동일한 방법으로 레코드를 생성하면 된다. 이제 총 4개( A, NS, SOA, CNAME)을 확인할 수 있다.

 

7️⃣ Health Check

1. EC2 ➜ 로드 밸런싱 ➜ 대상 그룹 ➜ 생성한 대상 그룹 선택

2. Health checks ➜ Edit

3. Health check path가 /로 되어 있는데 이것은 root 디렉토리로 요청을 보낸다는 것이다. http://spa-mall.shop:8080/으로 로 HTTP요청을 을 보낸다는 것. 이 요청에 대한 응답 상태 코드가 200번이면 해당 타겟을 healthy하다고 판단.

4. 지금 설정을 코드에도 똑같이 적용시켜주면 된다. 루트 디렉토리에 GET요청을 보낼 때 200으로 보내는 API로 작성하고 구동시키면 healthy 상태가 된다.

 

 

reference

https://velog.io/@rheey90/AWS-EC2-Node.js-%EC%84%9C%EB%B2%84-%EB%B0%B0%ED%8F%AC

https://yoonsoo-space.tistory.com/83

'Back-end' 카테고리의 다른 글

OOM 문제 해결  (0) 2025.04.19
[node.js] schedular  (0) 2025.01.06
[node.js] 견고하게 node.js 설계하기  (6) 2024.09.23
AWS 사용요금 문자로 받기  (0) 2024.08.29
[Spring Boot] 네이버 SENS 로 문자(SMS) 발송하기  (0) 2024.08.15