CS/데이터베이스
Cloud - 운영 환경 구성 5
RangA
2023. 6. 18. 00:41
데이터베이스 연결
RDS 인스턴스 연결
인스턴스 생성 및 연결 과정
RDS 인스턴스 생성
- AWS 메인 콘솔 창에서 RDS를 검색하여 RDS 메인 화면으로 이동함
- 사이드 바에 위치한 '데이터베이스' 메뉴를 클릭하여 이동함
- 데이터베이스 메뉴로 이동한 뒤, 화면에 보이는 '데이터베이스 생성' 버튼을 클릭함
- 데이터베이스 생성 버튼을 클릭하면 DB 인스턴스의 생성과 관련해서 여러 가지 옵션을 지정할 수 있는 페이지가 보이는데, 우선 데이터베이스 엔진 옵션을 선택해야 함
- MySQL을 사용할 것이기 때문에 MySQL을 선택함
- 데이터베이스 엔진을 MySQL로 선택하고 페이지의 스크롤을 살짝 아래로 내리시면 템플릿 옵션이 나오는데, 여기서 프리 티어 옵션을 선택함
- 설정 옵션 창으로 이동하여 DB 클러스터 식별자 이름, 마스터 사용자 이름과 마스터 암호를 기재함
- 마스터 사용자 이름과 암호는 나중에 데이터베이스를 연결할 때 쓰이는 정보로 반드시 기억하거나 기록해야 함
- RDS 인스턴스 클래스는 t2.micro를 선택함
- 연결 옵션으로 이동하여 퍼블릭 액세스 가능 부분을 '예'로 설정함
- 보안 그룹 같은 경우는 기본값인 'default' 보안 그룹을 선택하며, 다른 보안 그룹을 선택 시 로컬 환경 터미널에서 테스트가 불가능함
- '추가 연결 구성' 토글을 열면 데이터베이스 포트 번호를 지정할 수 있는 창이 보이고, 여기서는 흔히 사용되는 3306번 포트 대신, 포트 번호 노출을 방지하려는 목적으로 13306번으로 지정함
- 포트 번호 변경이 완료된 뒤, 페이지의 스크롤을 아래로 내려 '추가 구성' 토글 창을 찾아 클릭함
- 여기서 초기 데이터베이스 이름을설정함
- 서버 코드가 데이터베이스 이름을 찾도록 작성해야 함
- 초기 데이터베이스 이름을 기입하고 나면 모든 설정이 끝나며, '데이터베이스 생성' 버튼을 클릭하여 DB 인스턴스를 생성함
- DB 인스턴스가 생성되기까지 시간이 오래 걸리며, '상태' 부분이 현재 '생성 중'으로 보인다면 잠시 대기해야 함
- '사용 가능'으로 변화하면 DB 인스턴스 생성이 완료됨
데이터베이스 연결
- MySQL 클라이언트를 통해 RDS의 DB 인스턴스에 연결하기 위해서는 세 가지 정보가 필요함
- DB 인스턴스 생성 시 기재한 마스터 이름, 마스터 비밀번호
- 포트 번호
- 생성한 DB 인스턴스의 엔드 포인트 주소
- 엔드 포인트 주소를 확인하기 위해서 생성한 DB 인스턴스를 클릭함
- 연결 & 보안 메뉴 부분을 보시면 엔드 포인트 주소를 확인할 수 있음
- 엔드 포인트 주소를 복사하여 저장함
- MySQL 을 통해서 DB 인스턴스에 접속함
- 'mysql -u [마스터 이름] --host [엔드 포인트 주소] -P 13306(포트 번호) -p' 명령어를 입력함
- 해당 명령어를 입력하면 비밀번호를 요구하는데, 마스터 비밀번호를 입력함
- 명령어와 비밀번호를 바르게 작성했지만 접속이 되지 않는 경우 생성한 RDS 인스턴스의 보안그룹을 확인하여 인바운드 규칙에 접근하려는 IP(혹은 모든 곳에서 접근 허용)가 추가되어있는지 확인함
- MySQL에 접속 되면, 데이터베이스 연결 테스트를 하기 위해 터미널에 'show databases;' 를 입력함
- 초기 데이터베이스 이름이 보인다면 정상적으로 연결이 된 것
서버 환경 설정
- EC2 인스턴스에서 실행되고 있는 서버는, 그 자체로는 작동하고 있지만, 아직 데이터베이스와 클라이언트에 연결하지는 않았음
- 서버의 환경 설정을 통해 지난 실습에서 생성한 RDS 인스턴스에 접속하고, 클라우드 데이터베이스를 사용할 수 있게 해야 함
1. 서버 코드에 저장된 application.properties 파일에 환경 변수 설정하기
- EC2 인스턴스에서 실행하고 있는 서버를 종료하고, 로컬이 아닌 EC2 인스턴스의 터미널에서 다음 단계를 진행함
- application.properties 파일을 nano 에디터를 사용하여 수정함
$ cd [프로젝트폴더]/DeployServer/
$ nano src/main/resources/application.properties
- application.properties 파일에서 변경해야 할 환경변수
- spring.datasource.url 변수에서 {} 부분에는 AWS RDS '엔드포인트 주소:포트'가 들어가야 함
- spring.datasource.username 변수에는 AWS RDS Mysql 마스터 사용자 이름을 입력함
- spring.datasource.password 변수에는 AWS RDS Mysql 마스터 암호를 입력함
- config.domain 에는 AWS S3 Endpoint 주소를 넣음
- 해당 부분에는 꼭 앞에 http:// 가 포함되어야 함
- CORS 설정을 위해 통신할 클라이언트의 도메인 입력이 필요함
- 환경 변수를 할당하는 과정이 끝나면, ctrl + x 키를 입력하여 변경 내용을 저장함
application.properties 파일을 통한 환경 설정이 완료되면, 이전 빌드를 삭제하고, 다시 빌드를 진행한 이후에, 서버를 다시 실행함
아래 명령어를 사용하여, 이전 빌드를 모두 삭제함
$ ./gradlew clean
- 아래 명령어를 사용하여 수정된 환경변수가 적용하여 다시 빌드를 진행함
$ ./gradlew build
2. 서버 실행
- java -jar build/libs/[서버 코드 디렉터리]-0.0.1-SNAPSHOT.jar 명령어를 입력하여 서버를 재실행함
- Shell script를 이용해서 프로세스로 실행할 수도 있음
- ./restart.sh 명령어를 이용하여 서버를 다시 실행함
- 서버를 실행하고 다시 s3 버킷의 엔드포인트 주소로 접속해서 연결 테스트를 진행하며, 이름과 비밀번호를 입력함
- 정상적으로 로그인 되지 않을 경우
- DB 인스턴스가 정상적으로 실행되고 있는지 확인함
- 환경 변수에 제대로 된 값을 할당했는지 확인함
- DB 인스턴스의 엔드포인트 값을 환경 변수에 넣을 때, 앞에 http://를 붙이면 안 되고, 포트 번호는 반드시 입력해야 함
- S3 주소를 입력할 때 다른 엔드포인트가 붙어있진 않은지 확인함
- RDS 엔드포인트를 사용해서 MySQL에 접속을 시도하지만, 타임오류로 접속이 되지 않는 경우
- AWS RDS 페이지에 접속한 후, 사용 중인 인스턴스를 클릭, 이후 연결/보안탭에서 VPN 보안그룹 정보를 클릭함
- 우측 하단에 Edit inbound rules 버튼을 클릭함
- 규칙 추가 클릭 후, 유형에 모든 TCP, 소스에 모든 IP-V4를 클릭한 후 해당 규칙을 추가한 이후에, 저장 후 다시 확인하면 접속이 가능함
- 크롬 개발자 도구의 Network 탭에 들어가서 요청, 응답 과정에서 어떤 오류가 발생하는지 확인함
- 정상적으로 로그인 되지 않을 경우