나의 경우: Django, MySQL 프로젝트를 EC2, RDS를 구축해 배포한 경험이 있다. Express, MySQL, Prisma ORM을 활용한 배포는 처음이다. 해당 글은 EC2 및 RDS 구축이 끝났다는 가정하에 쓴 게시물입니다.
배포 서비스 환경:
- Node.js 웹 애플리케이션
- AWS EC2, Ubuntu
- AWS RDS, MySQL
ssh -i "pem이름.pem" ubuntu@"퍼블릭 IPv4 주소"
ex) ssh -i celestine.pem ubuntu@00.000.000.000
$ ssh -i celestine.pem ubuntu@00.000.000.000
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1045-aws x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Fri May 14 15:00:35 UTC 2021
System load: 0.0 Processes: 107
Usage of /: 50.5% of 7.69GB Users logged in: 0
Memory usage: 61% IPv4 address for eth0: 172.31.30.88
Swap usage: 0%
* Pure upstream Kubernetes 1.21, smallest, simplest cluster ops!
https://microk8s.io/
13 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
*** System restart required ***
Last login: Fri May 14 10:00:32 2021 from 222.106.177.9
$
exit
으로 ubuntu 접속을 나온다.$ exit
$ mysql -h "DB 인스턴스 엔드포인트" -u root -p
$ Enter password: # 인스턴스 생성시 입력한 비밀번호 입력
mysql> show databases;
mysql>
+--------------------+
| Database |
+--------------------+
| information_schema |
| innodb |
| mysql |
| performance_schema |
| sys |
| tmp |
+--------------------+
mysql> eixt # 나가기
# ploggingcampaign이라는 테이블을 dump하고 싶은 상황:
$ mysqldump -u root -p ploggingcampaign > ploggingcampaign.sql
$ Enter password: # mysql 비밀번호
$ vi ploggingcampaign.sql # 파일 확인 -> 이상 없으면 q! vim으로 나가기
# DB 인스턴스에 DB create하기
$ mysql -h "DB 인스턴스 엔드포인트" -u root -p
$ Enter password: # 인스턴스 생성시 입력한 비밀번호 입력
mysql> create database ploggingcampaign character set utfmb4 collate utfmb4_general_ci;
Query OK, 1 row affected(0.01 sec)
mysql> exit
# 본격 dump:
$ mysql -h "DB 인스턴스 엔드포인트" -u root -p ploggingcampaign < ploggingcampaign.sql
$ Enter password: # 인스턴스 생성시 입력한 비밀번호 입력
# dump확인하기:
$ mysql -h "DB 인스턴스 엔드포인트" -u root -p
$ Enter password: # 인스턴스 생성시 입력한 비밀번호 입력
mysql> show tables;
+--------------------+
| Database |
+--------------------+
| information_schema |
| innodb |
| mysql |
| performance_schema |
| ploggingcampaign | <----- 성공적으로 dump!
| sys |
| tmp |
+--------------------+
8 rows in set (0.20 sec)
mysql> exit
# sql 파일이 있는 디렉토리로 간다.
$ mysql -h "DB 인스턴스 엔드포인트" -u root -p ploggingcampaign < "sql 파일 이름".sql
$ Enter password: # 인스턴스 생성시 입력한 비밀번호 입력
# dump확인하기:
$ mysql -h "DB 인스턴스 엔드포인트" -u root -p
$ Enter password: # 인스턴스 생성시 입력한 비밀번호 입력
mysql> show tables;
"Db 확인"
mysql> exit
조금 더 간단해진다 :) 나 같은 경우는 이번 프로젝트 때 데이터베이스 생성, 데이터 값 입력시 raw SQL문으로 진행했기 때문에 경우 #2으로 진행했다.
ssh -i "pem이름.pem" ubuntu@"퍼블릭 IPv4 주소"
ex) ssh -i celestine.pem ubuntu@00.000.000.000
------ AWS EC2 ubuntu 서버 접속 완료
# Node.js, npm 설치하기
$ sudo apt install nodejs
$ sudo apt install npm
# 설치 확인하기
$ node -v
$ npm -v
# git clone으로 프로젝트 복제하기
$ git clone "github https 코드"
$ ls # 프로젝트 생성 확인
$ cd "프로젝트 이름"
# npm install package.json dependency에 정의된 라이브러리 모듈이 모두 설치
$ npm install
나는 .env 파일 속에 Database URL, Port number, jwt salt code가 있다.
$ vi .env
----- .env 내용 복붙
.env 내용 복붙 완료!!
나는 DATABASE를 URL으로 설정해줬다:
DATABASE_URL="mysql://root:"mysql 접속 비번"@localhost:"포트 번호"/"DB 이름"
그러나 구글링을 해도 아래와 같은 형식을 가진 자료들만 나왔다.. (출처)
MySQL database url, 등등
으로 검색해도 검색 내용은 부실했다. (MySQL 공식문서...🥲)
그럼에도 저 형식을 고집해야했던 이유는??
바로 prisma가 저 형식으로 요구하기 때문이다... (아래는 Prisma ORM 공식문서)
코드 치는걸 멈추고 합리적 의심과 logical thinking을 하기 시작한다:
mysql dump 뜰 때도 그렇고 나는 "root"으로 들어가고, 인스턴스 생성시 설정했던 "비밀번호"를 입력했다. URL 앞에 root 그리고 rds 비밀번호를 삽입한다.
# HTTP URL: ec2 DB_인스턴스_엔드포인트 : PORT / 설정했던 URL
ex) http://00.000.000.000:8000/programs
아래 URL은 데이터베이스 속 모든 프로그램을 가져오는 URL이다: 200 OK
에러 해결 시간 제한을 3시간으로 잡았는데 다행히 딱 맞춰서 에러를 고칠 수 있었다! 자 이제 s3를 해볼까!!!😃
Reference:
https://www.prisma.io/docs/concepts/database-connectors/mysql
https://joshua1988.github.io/webpack-guide/build/npm-module-install.html#npm-%EC%A7%80%EC%97%AD-%EC%84%A4%EC%B9%98-%EC%98%B5%EC%85%98-2%EA%B0%80%EC%A7%80