이번에 인프라 스터디를 하면서 실습을 하게 되었다.
이번 주 요구사항은 3-tier로 서버를 구성하기다
개념 조사한 것은 아래 글에 작성해놨다
개념 조사
3-tier로 서버를 구성하기 였는데 내가 졸작을 하면서 정적파일은 서빙하지 않고 Data들만 움직이는 Restful API를 구성해놓아서 3-tier로 구성할 수 없었다.
그래서 졸작 서버에 SpringBoot랑 MySQL을 같이 띄워 놓은것을 다른 EC2로 분리해보기로 했다.
내가 생각한 순서는 이렇다
- 새로운
EC2구성- 기존
EC2에서DB덤프 뜨기- 덤프 뜬
.sql파일DB전용EC2로 옮기기- 기존 프로젝트
application.yml에서DB경로 수정하기
EC2를 하나 파야한다서버 배포하기
이 글의 초반부분을 참고하여 새로운 EC2를 구성해준다

위의 인스턴스가 기존에 SpringBoot와 MySQL이 둘 다 있던 EC2이고
아래의 senier-db가 DB를 분리하기 위해 새로 판 EC2이다
EC2를 만들고 MySQL을 깔아준다기존 프로젝트에서 MySQL로 DB를 만들어줬기 때문에 동일하게 해주어야 한다
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로 저장 후 나가기!
sudo systemctl restart 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 = '이름' - 제대로 들어갔는지 확인

위의 코드를 통해서 새로운 사용자를 만들어 줬다
sud systemctl start mysql
sudo systemctl enable mysql
sudo systemctl restart mysql
MySQl 서버가 비활성화 되어 있을 수 있으니 활성화를 해준다
mysql -u 계정이름 -p -h DB용 EC2 IP

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

그러면 이렇게 접속에 성공한 것을 볼 수 있다!!
이제 외부에서 접속이 되는걸 확인했으니 기존 EC2에 있는 DB를 덤프 떠서 옮겨야 한다
sudo mysqldump -u root -p 덤프 뜰 DB > 저장할 경로

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

그러면 이렇게 .sql 파일이 생긴 것을 볼 수 있다!!
이제 덤프를 떴으니 새로 만든 DB용 EC2로 옮겨줘야 한다
나는 옮기기 위해서 http 통신을 사용했다
기존 EC2에서 백업파일을 만들어 놓은 경로에서 http 통신을 실행해줬다


다른 포트는 사용중이어서 443 포트로 실행을 해줬다
그 후 DB용 EC2에서 파일을 가져와준다
wget http://ip주소/shuttle_backup.sql -P /home/ubuntu/


그럼 이렇게 가져오는 것을 볼 수 있다!!!!
이제 파일을 가져왔으니 DB에 적용을 해줘야한다
MySQL에 접속 후 적용할 DB를 생성해준다

이렇게 db를 생성해줬으면 .sql 파일을 적용해주어야 한다
mysql -u 사용자이름 -p DB이름 < 덤프파일 경로

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

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

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

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

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

기존 DB

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