프론트엔드 백엔드 서로 다른 서버로 수동 배포하고 연결하기(feat. CORS해결)
프론트엔드가 포함된 백엔드 프로젝트 수동 배포하기AWS EC2 nginx에 프론트엔드 정적 배포EC2에서 nginx에 정적으로 파일을 올려 프론트엔드 프로젝트를 배포하는 방법을 강의를 듣고 따로 찾아보
constant1601.tistory.com
지난번에는 프론트엔드, 백엔드를 각각 수동으로 다른 서버에 배포하고 서로 연결하여 CORS를 해결해 봤다.
이번에는 데이터베이스 서버가 있을 때 이를 백엔드 서버와 연결하는 방법을 알아보자.
데이터베이스의 경우 RDS를 사용할 수 있지만 이번에는 EC2에 직접 MySQL을 설치하여
데이터베이스 서버로 사용했다.
개발을 할 때와 운영서버에 올렸을 때 서로 다른 DB를 쓰는 경우에 Spring Boot를 사용한다면
@Profile 애노테이션과 application.yml이나 application.properties을 사용하여
실행환경에 따라 다른 DB를 사용하도록 할 수 있다.
application-prod.properties는 현재 이렇게 작성되어 있다. 이때 DB의 접속 주소를 보면 로컬로 되어있다.
조금 뒤 이 부분을 데이터베이스 서버의 주소로 변경해야 한다.
DB를 설치할 EC2에 접속한 뒤, 명령어를 통해 mysql을 설치한다.
-y 옵션을 붙이면 설치할 때 나오는 확인문구 없이 바로 설치할 수 있다.
설치 후 MySQL이 정상적으로 실행되는지 확인해 봤다.
보안설정을 해준다. 중간에 비밀번호의 제약조건도 설정할 수 있는데 적당히 MEDIUM을 골랐다.
sudo mysql -u root 명령어로 직접 mysql server에 접속할 수 있다.
정상적으로 접속되는 것을 확인했다.
접속 후 비밀번호를 설정해 준다. 비밀번호는 이전에 설정한 제약조건에 맞게
설정해주어야 한다. 비밀번호를 설정한 다음 FLUSH PRIVILEGES; 명령어를 입력해주어야 한다.
해당 명령어는 MySQL에서 사용자 권한 테이블의 변경 사항을 즉시 반영하는 명령어이다.
정상적으로 비밀번호가 등록되었는지 확인하기 위해 exit명령어로 mysql server에서 나온 뒤 재접속해보면
비밀번호를 입력하지 않고는 들어가지 못한다.
기존 명령어뒤에 -p를 추가하면 비밀번호를 입력할 수 있고 이전에 설정한 비밀번호를 입력하고 들어가면 된다.
이젠 보안그룹 설정을 해준다.
이때 MySQL이 설치되어 있는 EC2의 보안그룹에서 백엔드 서버의 private ip에 3306번 포트를 추가해 준다.
AWS에서는 같은 VPC 그룹에 있는 경우 private ip를 사용하면 AWS 내부 네트워크로 통신할 수 있다.
(내부 트래픽은 요금이 부과되지 않고 속도도 더 빠르기 때문에 같은 VPC라면 private ip를 이용하여
통신하는 것이 요금적으로나 성능적으로 더 좋다고 한다.)
이후 다시 mysql 서버로 돌아와서 백엔드 서버가 접근할 수 있도록 계정을 만들어줘야 한다.
위의 명령어를 통해 백엔드 서버의 사용자 계정을 생성할 수 있다. 이때 같은 root라도 host에 따라서
다른 비밀번호를 설정할 수 있다. 또한 아래의 명령어로 계정별로 권한을 부여할 수 있다.
여기서는 모든 권한을 부여했다.
백엔드 서버에서 사용할 스키마와 테이블을 생성해 준다.
이후 백엔드 프로젝트에서 properties의 설정을 변경하는데 이때 주소는 데이터베이스 서버의 프라이빗 ip로 설정한다.
비밀번호는 이전에 데이터베이스 서버에서 백엔드 서버의 사용자 계정의 비밀번호를 입력해줘야 한다.
백엔드 서버에 접속해 직접 애플리케이션을 실행시켜 준다.
이때 profiles의 설정을 prod로 바꿔줘야 하기 때문에 위와 같이 -Dspring.profiles.active=prod 옵션을 추가하여
실행시켜 준다.
하지만 정상적으로 실행되지 않았다.
오류 메시지를 확인해 보니 백엔드 서버와 데이터베이스 서버 간의 연결이 원활하지 않아 발생한 에러였다.
Mysql는 기본적으로 localhost(127.0.0.1) 접속만 허용한다. 만약 원격 접속을 원한다면 설정을 변경해줘야 한다.
위의 경로로 들어가 mysqld.cnf 파일을 열어준다.
중간에 보면 bind-address가 있는데 이것을 0.0.0.0으로 변경해 주면 모든 접속을 허용하며 원격에서 접속할 수 있다.
이미 데이터베이스 EC2의 보안그룹을 통해 접근 가능한 ip를 백엔드 서버로 지정해 두었기에 보안상 문제없이 사용할 수 있다.
다시 백엔드 서버로 돌아와 실행해 보면 정상적으로 백엔드 서버와 데이터베이스 서버가 연결되는 것을 볼 수 있다.
참고
'Practice' 카테고리의 다른 글
HTTPS 적용하기(feat. SSL For Free) (0) | 2025.03.08 |
---|---|
서버 도메인 붙이기 (0) | 2025.03.07 |
프론트엔드 백엔드 서로 다른 서버로 수동 배포하고 연결하기(feat. CORS해결) (0) | 2025.03.05 |
프론트엔드가 포함된 백엔드 프로젝트 수동 배포하기 (0) | 2025.03.05 |
AWS EC2 nginx에 프론트엔드 직접 배포하기 (0) | 2025.03.04 |