EC2 서버와 RDS DB 연결하기
OutGameServer에 DB를 연결해 로그인 등을 구현하려고 한다.
RDS 인스턴스는 생성했는데 로컬에서 개발할 수가 없었다.
- EC2는 public / RDS는 private 인스턴스로 생성했다. -> 보안 상의 이유
- 단순히 EC2 터미널에 접속해서 mysql 서버를 여는 건 성공했다.
- mysql -u [계정] -p -h [DB엔드포인트] → 이 명령어 쓰면 연결됨
인스턴스에 문제가 있는 것은 아니니...방법을 찾아야 했다.
문제 발생
우리는 로컬에서 작업을 해야함. <로컬 작성 → 깃허브 업로드 → EC2 실행> 이런 과정을 거침.
- 1차 해결 : vs code에서 ssh 연결로 vs code에서 제공하는 UI로 테이블 작성 등이 가능해짐.
문제 발생
const connection = mysql.createConnection({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
});
결국 node.js 코드에서 CRUD를 하려면 mysql.connection에 성공해야함. 그러나 로컬에서 코드로 private 인스턴스에 접근할 수는 없었다. 되어서도 안 되긴 함...
- 2차 해결 : 결국 RDS가 private에 있기 때문에 로컬 서버에서 연결하기는 불가능.
gitHub Action이 다른 서버와 연결되어 있기 때문에 하나의 repo를 사용하는 지금은 함부로 건들 수가 없어서 EC2 터미널에서 git clone을 받아 서버를 실행함. 이 단계에서 DB 연결 성공 로그 확인.
EC2 설치한 모듈
- → sudo apt nodejs, npm, mysql-server 등
- → npm i express, socket.io, mysql 등
과정
! 주의할 점
EC2는 public / RDS가 private이지만, 이 두 인스턴스는 같은 vpc안에 있어야한다.
같은 vpc에 있다면 보안 그룹의 인바운드 규칙만 3306 포트를 열어주도록 설정하면 된다.
vpc를 다르게 열어 삽질한 사람이 알려드립니다...

원하는 인스턴스를 선택하고 연결 버튼을 누르면

연결할 수 있는 페이지가 나온다. 연결 버튼을 한 번 더 눌러주면 cmd처럼 ubuntu 터미널이 등장한다.
sudo apt install git
sudo 명령어로 git을 설치해주고 원하는 repo에서 clone을 받으면 된다.
node 서버를 실행할 때는 위에 적은 명령어들을 다 설치해주고, 오류가 발생하면 또 필요하다는 모듈을 설치해주면 된다.
문제 발생
보안 상의 이유로 git에 올라가는 코드에 우리 endpoint나 pw 등을 직접 작성하면 안 된다.
! 1차 도전
EC2 터미널에서 nano 명령어를 사용해 .sh 파일을 생성했다.
nano auth.sh
// 내용
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=myuser
MYSQL_PASSWORD=mypassword
MYSQL_DATABASE=mydatabase
환경변수로 endpoint, user, pw 등의 정보를 작성하고,
서버 코드에서 host: process.env.MYSQL_HOST 로 접근, 사용했다.
const connection = mysql.createConnection({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
});
하지만 변수에 접근이 안 되는지, 서버가 계속 localhost로 DB에 접근을 했다. 변수를 읽어오지 못 하는 듯한 상황.
위치가 문제인가 싶어 .sh가 있는 bin 폴더를 여기저기 옮겨봤지만 해결되지 않았다.
! 2차 도전
EC2 터미널에서 touch .env 라는 명령어를 통해 .env 파일을 생성했다.
nano .env 를 통해 중요한 정보를 파일에 작성해 주었다.
아래의 서버 코드와 같이 작성하여 dotenv 패키지를 불러오고, .env 파일을 로드해서 .env에 작성한 정보를 사용해서 서버를 실행했다.
const dotenv = require('dotenv'); dotenv.config();
- 설치한 모듈 → npm install dotenv
또! 문제발생
서버가 시작되고, DB연결이 성공했지만, 곧바로 연결을 닫는 문제가 생겼다.
- 해결 : 현재 코드에서 모듈 로딩 시점에 데이터베이스 연결을 생성하고, 모듈 내보내기 직전에 연결을 종료하고 있는 코드를 수정했다. 연결이 종료되면 호출되는 함수가 아니었다...
connection.end((err) => {
if (err) {
console.error('Error closing database connection:', err);
process.exit(1); // 에러 발생 시 프로세스 종료
}
console.log('Database connection closed');
});
이렇게 하면 EC2에 적재된 서버에서 RDS에 연결할 수 있다~
'나만무' 카테고리의 다른 글
나만무 : Sleighers 프로젝트 소개 및 정리 (0) | 2024.06.08 |
---|---|
4주 간의 트러블 슈팅 모음 (0) | 2024.06.08 |
[GitHub Actions + EC2] 두 branch에서 서로 다른 서버 배포하기 (0) | 2024.05.10 |