DB 서버 분리하기!

허준기·2024년 7월 16일
6

인프라 스터디

목록 보기
3/9
post-custom-banner

이번에 인프라 스터디를 하면서 실습을 하게 되었다.

이번 주 요구사항은 3-tier로 서버를 구성하기다
개념 조사한 것은 아래 글에 작성해놨다
개념 조사

3-tier로 서버를 구성하기 였는데 내가 졸작을 하면서 정적파일은 서빙하지 않고 Data들만 움직이는 Restful API를 구성해놓아서 3-tier로 구성할 수 없었다.

그래서 졸작 서버에 SpringBootMySQL을 같이 띄워 놓은것을 다른 EC2로 분리해보기로 했다.

서버 분리 과정

내가 생각한 순서는 이렇다

  1. 새로운 EC2 구성
  2. 기존 EC2에서 DB 덤프 뜨기
  3. 덤프 뜬 .sql 파일 DB 전용 EC2로 옮기기
  4. 기존 프로젝트 application.yml 에서 DB 경로 수정하기

우선 다른 서버로 분리를 해야하니 새로운 EC2를 하나 파야한다

서버 배포하기
이 글의 초반부분을 참고하여 새로운 EC2를 구성해준다


위의 인스턴스가 기존에 SpringBootMySQL이 둘 다 있던 EC2이고
아래의 senier-db가 DB를 분리하기 위해 새로 판 EC2이다

새로운 EC2를 만들고 MySQL을 깔아준다

기존 프로젝트에서 MySQLDB를 만들어줬기 때문에 동일하게 해주어야 한다

sudo apt update
sudo apt install mysql-server

그 다음 MySQL에서 외부 접속을 허용해줘야한다

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
sudo ufw allow 3306

mysqlId가 아니고 mysqld라서 조심해야 한다
이거때문에 30분을 날렸다!

여기에 들어가서 bind-address 부분을 0.0.0.0으로 해줘서 모든 접속을 허용해준다

ctrl + x로 저장 후 나가기!

MySQL 서버를 재시작해준다

sudo systemctl restart mysql

MySQL에서 외부 접근을 허락해 줄 계정을 만들고 권한을 준다

sudo mysql -u root 를 통해서 mysql서버에 접속

CREATE USER '이름'@'%' IDNTIFIED BY '비밀번호'; 	 - 사용자 생성
GRANT ALL PRIVILEGES ON *.* TO 'jkHeo'@'%';		- 권한 주기
FLUSH PRIVILEGES; 								- 캐시를 지우고 새로운 설정 적용

SELECT user, host FROM mysql.user WHERE user = '이름' - 제대로 들어갔는지 확인


위의 코드를 통해서 새로운 사용자를 만들어 줬다

MySQL 서버 활성화

sud systemctl start mysql
sudo systemctl enable mysql
sudo systemctl restart mysql

MySQl 서버가 비활성화 되어 있을 수 있으니 활성화를 해준다

다른 EC2에서 접속

mysql -u 계정이름 -p -h  DB용 EC2 IP


뒤의 IP는 혹시 몰라서 가려놨다


그러면 이렇게 접속에 성공한 것을 볼 수 있다!!

기존 DB 덤프

이제 외부에서 접속이 되는걸 확인했으니 기존 EC2에 있는 DB를 덤프 떠서 옮겨야 한다

sudo mysqldump -u root -p 덤프 뜰 DB > 저장할 경로

나는 shuttle이라는 DB를 사진에 있는경로에 저장을 해 주었다.


그러면 이렇게 .sql 파일이 생긴 것을 볼 수 있다!!

sql 파일 옮기기

이제 덤프를 떴으니 새로 만든 DBEC2로 옮겨줘야 한다
나는 옮기기 위해서 http 통신을 사용했다

기존 EC2에서 백업파일을 만들어 놓은 경로에서 http 통신을 실행해줬다



다른 포트는 사용중이어서 443 포트로 실행을 해줬다

그 후 DBEC2에서 파일을 가져와준다

wget http://ip주소/shuttle_backup.sql -P /home/ubuntu/

그럼 이렇게 가져오는 것을 볼 수 있다!!!!

MySQL에 덤프 적용하기

이제 파일을 가져왔으니 DB에 적용을 해줘야한다
MySQL에 접속 후 적용할 DB를 생성해준다

이렇게 db를 생성해줬으면 .sql 파일을 적용해주어야 한다

mysql -u 사용자이름 -p DB이름 < 덤프파일 경로

위의 명령어를 실행하고 다시 MySQL에 접속해서 확인을 해주면 적용이 된 것을 볼 수 있다

application.yml 경로 수정하기

DB를 분리했다고 끝이 아니다!
이제 기존 SpringBoot 프로젝트에서 새로운 DB로 연결을 하기 위해서 application.yml에 있는 MySQL 경로를 수정해주어야 한다

이 부분을 분리한 EC2의 주소로 바꿔주고 저장 후 프로젝트를 재시작해주면 된다!

연결 확인

이제 스웨거를 통해서 제대로 변경이 되었는지 확인해보자

회원가입 api를 통해 확인을 해봤다

기존 DB

분리한 DB

확인을 해보니 기존 DB에는 추가되지 않고 분리한 DB에만 생성된 것을 볼 수 있다!

-끝-

profile
나는 허준기
post-custom-banner

0개의 댓글