1. Create & Access RDS Instance
- MySQL 데이터베이스 엔진을 사용하는 DB 인스턴스를 생성한다
- 로컬 환경에서 MySQL 클라이언트를 활용하여 DB 인스턴스에 연결한다
1) RDS 인스턴스 생성
- AWS 메인 콘솔 창에서 RDS를 검색하여 RDS 메인 화면으로 이동한다
- 사이드 바에 위치한 '데이터베이스' 메뉴를 클릭하여 이동한다
- 데이터베이스 메뉴로 이동한 뒤, 화면에 보이는 '데이터베이스 생성' 버튼을 클릭합니다.
- DB 인스턴스의 생성과 관련된 여러 가지 옵션을 지정할 수 있는 페이지가 나온다
- 데이터베이스 엔진 옵션 중에 MySQL을 사용하여 실습을 진행할 것이기에 MySQL 을 선택한다
- 스크롤을 아래로 내려서 템플릿을 프리 티어 옵션으로 선택한다
- 아래로 더 이동하여 설정 옵션 창에서 'DB 인스턴스 식별자'의 이름과 '자격증명 설정'의 마스터 사용자 이름, 마스터 암호를 기재한다
- 마스터 사용자 이름과 암호는 나중에 데이터베이스를 연결할 때 쓰이는 정보로 반드시 기억한다
- 아래로 이동해서 RDS 인스턴스 구성의 DB 인스턴스 클래스를 버스터블 클래스, db.t2.micro로 선택한다
- 아래로 한참 내려와서 연결로 이동 후 '퍼블릭 액세스'를 '예'로 설정한다
- VPC 보안 그룹 설정은 기본 항목 선택, 기존 VPC보안 그룹은 default를 설정한다
- 다른 보안 그룹을 선택 시 로컬 환경 터미널에서 테스트가 불가능하다 - 추가 구성 토글을 열면 '데이터베이스 포트' 항목이 열리고 번호를 지정할 수 있는 창이 나타난다
- 일반적으로 사용되는 3306번 포트 대신, 포트 번호 노출을 방지하려는 목적으로 13306번으로 지정한다

- 아래로 이동하여 '추가 구성' 토글을 클릭한다
- 추가 구성 토글을 열면 여러 옵션을 추가로 확인 가능하다
- 초기 데이터베이스 이름은 'test'로 설정한다
- 서버 코드가 'test' 데이터베이스를 찾도록 작성되어 있으니, 다른 이름은 사용하지 않는다 - 초기 데이터베이스 이름을 기입하고 나면 모든 설정이 끝난다
- '데이터베이스 생성' 버튼을 클릭하여 DB 인스턴스를 생성한다
- DB 인스턴스가 생성되기까지 시간이 오래 걸리므로 '상태' 부분이 현재 '생성 중'으로 보인다면 잠시 대기한다
- '사용 가능'으로 변화하면 DB 인스턴스 생성이 완료된다
2) MySQL 클라이언트를 활용 DB 인스턴스 연결
- MySQL 클라이언트를 통해 RDS의 DB 인스턴스에 연결하기 위해서는 세 가지 정보가 필요하다
1. DB 인스턴스 생성 시 기재한 마스터 이름, 마스터 비밀번호
2. 포트 번호
3. 생성한 DB 인스턴스의 엔드 포인트 주소 - 포트 번호와 마스터 유저 정보 부분은 생성 과정에서 교육처에서 기재했기 때문에 넘어간다
- 엔드 포인트 주소를 확인하기 위해서 생성한 DB 인스턴스를 클릭한다

- 연결 & 보안 메뉴 부분을 보시면 엔드 포인트 주소를 확인할 수 있다
- 엔드 포인트 주소를 복사하여 저장한다
- MySQL 을 통해서 DB 인스턴스에 접속한다
- 터미널을 열고 'mysql -u [마스터 이름] --host [엔드 포인트 주소] -P 13306(포트 번호) -p' 명령어를 입력한다
- 해당 명령어를 입력하면 비밀번호를 요구하는데, 마스터 비밀번호를 입력하면 된다 - 명령어와 비밀번호를 바르게 작성했지만 접속이 되지 않는 경우 생성한 RDS 인스턴스의 보안그룹을 확인하여 인바운드 규칙에 접근하려는 IP(혹은 모든 곳에서 접근 허용)가 추가되어있는지 확인한다
- 그래도 안되면 컴퓨터의 환경설정에 mysql>bin 주소를 등록되어 있는지 확인하고 없으면 등록해 준다

- 정상적으로 진행이 된다면 아래와 같이 MySQL에 접속이 된다
- 데이터베이스 연결 테스트를 하기 위해 터미널에 'show databases;' 를 입력한다
- 아까 DB 인스턴스를 생성할 때 만들었던 초기 데이터베이스 'test'가 보인다면 정상적으로 연결이 된 것이다

2. 서버 환경 설정
- EC2 인스턴스에서 실행되고 있는 서버는 작동은 하고 있지만, 데이터베이스와 클라이언트에 연결하지 않았다
- 서버의 환경 설정을 통해 실습에서 생성한 RDS 인스턴스에 접속하고, 클라우드 데이터베이스를 사용할 수 있게 한다
1) 서버 코드에 저장된 application.properties 파일에 환경 변수 설정하기
- EC2 인스턴스에서 실행하고 있는 서버를 종료한다
- java 를 이용해 프로세스로 실행 중인 경우 Command + C 로 종료한다
- 백그라운드에서 실행중인 경우 실행중인 프로세스를 종료한다 - 서버를 모두 종료한 후에 환경 설정 파일을 수정한다
- application.properties 파일을 nano 에디터를 사용하여 수정한다
$ cd be-sprint-deployment/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:// 가 포함되어야 합니다.
- 환경 변수를 변경이 끝나면 Ctrl + X 키를 입력하여 변경 내용을 저장한다
- y 로 저장하고 enter로 빠져 나온다
- application.properties 파일을 통한 환경 설정이 완료되면 EC2의 세션을 연결한다
- 해당 폴더로 이동하여 이전 빌드를 삭제한다
$ ./gradlew clean
빌드를 모두 삭제
- 새로 빌드를 진행한다
$ ./gradlew build
수정된 환경변수를 적용하여 다시 빌드를 진행
- 서버를 다시 실행한다
3. 서버 실행
- java -jar build/libs/DeployServer-0.0.1-SNAPSHOT.jar 명령어를 입력하여 서버를 재실행한다
- Shell script를 이용해서 프로세스로 실행할 수도 있다
- ./restart.sh명령어를 이용하여 서버를 다시 실행한다
- 서버를 실행 후 s3 버킷의 엔드포인트 주소로 접속해서 연결 테스트를 진행한다
- 이름에 김코딩, 비밀번호에 1234 를 입력한다
아래와 같은 메세지가 화면에 보인다면 데이터베이스 연결에 성공한 것입니다.
※ 참조
위 메세지가 보이지 않고 다른 메세지가 화면에 출력된다면 아래 사항을 체크해보세요.
- DB 인스턴스가 정상적으로 실행되고 있나요?
- 환경변수에 제대로 된 값을 할당했는지 확인합니다.
- DB 인스턴스의 엔드포인트 값을 환경 변수에 넣을 때, 앞에 http://를 붙이면 안 되고, 포트 번호는 반드시 입력해야합니다. 위 스크린샷의 예시를 참고해주세요.
- S3 주소를 입력할 때 다른 엔드포인트가 붙어있진 않은지 확인해주세요.
- RDS 엔드포인트를 사용해서 MySQL에 접속을 시도하지만, 타임오류로 접속이 되지 않아요!
- AWS RDS 페이지에 접속한후, 사용중인 인스턴스를 클릭, 이후 연결/보안탭에서 VPN 보안그룹 정보를 클릭합니다.
- 우측 하단에 Edit inbound rules 버튼 클릭
- 규칙 추가 클릭후, 유형에 모든 TCP, 소스에 모든 IP-V4를 클릭한후 해당 규칙을 추가한 이후에, 저장후 다시 확인하면 접속이 가능합니다.
- 크롬 개발자 도구의 Network 탭에 들어가서 요청, 응답 과정에서 어떤 오류가 발생하는지 확인합니다.
'클라우드' 카테고리의 다른 글
Docker Desktop - 사전 실행 (0) | 2022.08.05 |
---|---|
Cloud - 배포 컨테이너 (0) | 2022.08.05 |
Cloud - AWS 실습 - 클라이언트 배포 (0) | 2022.08.04 |
Cloud - AWS 실습 - Security Group (0) | 2022.08.03 |
Cloud - AWS 실습 - EC2 인스턴스 서버 실행 (0) | 2022.08.03 |