프로젝트/Recipository

[Dev] 23.03.24. AWS RDS 인스턴스 생성 및 연결

규글 2023. 3. 24. 03:17

 지난 게시글에서는 AWS EC2 인스턴스를 생성하고, ssh 연결에 대한 작업을 기록했다. 현재 인스턴스에는 아무 것도 존재하지 않으므로 java도 설치하고 mysql도 설치해야 한다. 사실 ubuntu에 mysql을 다운로드해서 연결하고자 했는데, AWS RDB라는 친구가 있다기에 이왕 AWS를 활용해서 뚱땅이는 김에 사용해보려고 한다.

 

 만약 MYSQL을 직접 다운로드하여 활용하고자 한다면 footnote 페이지를 참고하면 되겠다.[각주:1]

 

 

AWS RDS 인스턴스 생성

 EC2와 마찬가지로 검색창에 RDS를 검색하고 서비스를 선택하여 볼 수 있는 페이지이다. 아무런 데이터베이스가 없으니 생성하도록 하겠다.

 

 가장 먼저 '데이터베이스 생성 방식 선택' 항목이다. 표준 생성 방식을 선택하고 넘어간다.

 

 '엔진 옵션' 항목이다. MYSQL을 활용하고자 하니 선택하고 버전을 선택한 뒤 넘어간다.

 

 '템플릿' 항목이다. 필자의 계정에 맞게 프리 티어를 선택하고 넘어간다.

 

 '가용성 및 내구성' 항목은 비활성화 상태이므로 넘어간다.

 

 '설정' 항목이다. 인스턴스 식별자마스터 사용자의 이름, 암호를 작성하고 넘어간다.

 

 '인스턴스 구성' 항목이다. 프리 티어일 경우 선택 사항이 없으므로 버스터블 클래스를 선택하고 넘어간다. 필자는 EC2 인스턴스에서도 t2가 default 였던 기억이 있어서 t2로 바꿔주었다.

 

 '스토리지' 항목이다. Default 그대로 두되, 스토리지 자동 조정 활성화를 체크 해제한다. 자동 조정 시에는 과금이 되는 것 같다.

 

 '연결' 항목이다. 빨간 박스로 표기한 것이 변경한 부분이다. 퍼블릭 엑세스의 경우 local이나 tool에서 접근할 수 있도록 ''를 선택해주었다. 보안 그룹은 따로 선택해주지 않아도 된다. 필자는 그냥 입력해주었다.

 

 '데이터베이스 인증' 항목이다. 기본적으로는 암호 인증으로 선택되어 있으며, 필자도 그렇게 넘어갔다.

 

 '모니터링' 항목과 '추가 구성' 항목이다. 모니터링은 체크하지 않았으며, 추가 구성에서는 초기 데이터베이스 이름만을 설정해주었다.

 

 모든 설정을 마쳤으니 데이터베이스 생성 버튼을 눌러 마무리해주면 새로운 데이터베이스가 생성된 것을 확인할 수 있다.

 

 

파라미터 그룹 생성 및 적용

 좌측 배너의 파라미터 그룹을 누르면 AWS RDB 인스턴스를 구성하면서 추가 구성 항목에 있던 파라미터 그룹에 대한 생성 및 편집을 할 수 있다.

 

 새로 하나 생성해준다.

 

 생성한 파라미터 그룹을 편집해준다. 검색창에 'time_zone'을 검색하여 그 항목을 'Asia/Seoul'로 선택하고 재설정 후 저장한다.

 마찬가지 방식으로 'character_set'을 검색하여 다음 항목에 대해 'utf8mb4'로 선택하고 재설정 후 저장한다.

  • character_set_client
  • character_set_connection
  • character_set_database
  • character_set_filesystem
  • character_set_results
  • character_set_server

 마찬가지 방식으로 'collation'을 검색하여 다음 항목에 대해 'utf8mb4_general_ci'로 선택하고 재설정 후 저장한다.

  • collation_connection
  • collation_server

 

 더하여 필자의 프로젝트가 정상적으로 구동되도록 하기 위해서는 sequence의 역할을 할 수 있는 친구를 만들어주어야 했다. 하지만 local에서와 달리 정상적으로 작업할 수 없었고, 대신 error code 1419를 만났다.

 

 이를 해결하기 위해서는 위 파라미터에 더하여 log_bin_trust_function_creators 항목을 기존의 0에서 1로 변경해주어야 한다는 것을 알았다.[각주:2]

 

 다시 데이터베이스 항목으로 가서 인스턴스를 선택하고 수정 버튼을 눌러 추가 구성 항목에서 만든 파라미터 그룹으로 변경하여 적용해준다.

 

 현재는 서비스에 연결된 것이 아니므로 즉시 적용을 선택하여 수정해주었다. 필요시 유지 관리 기간에 적용하는 것도 가능할 것 같다.

 

Workbench와 연결

 Workbench를 열어 새로운 connection을 추가한다. 이미지에 표기된 Connection Name, Hostname, Port, Username, Password 항목에 대한 입력을 해준다.

  • Connection Name : Workbench에서 보일 Connection의 이름을 입력해준다.
  • Hostname : 데이터베이스 인스턴스의 엔드포인트 항목을 입력해준다.
  • Port : 연결할 port 번호이다. AWS RDB 인스턴스를 생성할 때의 번호를 입력해준다.
  • Username : 인스턴스를 생성할 때 입력했던 master name을 입력해준다.
  • Password : 인스턴스를 생성할 때 입력했던 master password를 입력해준다.

 생성한 RDB 인스턴스를 눌러 확인해보면 엔드포인트 정보를 확인할 수 있다.

 

 정상적으로 연결된다면 test connection을 눌러 위와 같은 메시지를 확인할 수 있다.

 

 Connection을 생성하고 접속하면 정상적으로 접속되는 것을 확인할 수 있으며, schemas에 인스턴스를 생성하면서 추가 정보에 작성했던 항목이 존재하는 것을 확인할 수 있다.

 

 

EC2 인스턴스와 연결

sudo apt-get install mysql-server

mysql -u {username} -p -h {엔드 포인트}

 EC2 인스턴스에 MYSQL을 설치하고, AWS RDB 인스턴스 생성 시 입력했던 username을 쓰고, 인스턴스의 엔드 포인트를 입력하면 비밀 번호 입력 메시지가 뜬다. 비밀 번호를 입력하면 접속이 가능하다.

 이때 주의할 점은 보안 그룹에 어느 곳에서든 접속할 수 있도록 인바인드 규칙을 추가해주면 된다.

 

 

프로젝트와 연결

application.properties

# DB Source URL
spring.datasource.url=jdbc:mysql://{엔드 포인트}:{port 번호}/{schema}?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8

spring.datasource.url=jdbc:mysql://rdb-practice.c6p7fc4rqvs2.ap-northeast-2.rds.amazonaws.com:3306/recipository?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8

#DB Username
spring.datasource.username={아이디}

spring.datasource.username=xxx

#DB Password
spring.datasource.password={비밀번호}

spring.datasource.password=yyy

 기존에 필자의 프로젝트에서 DB Source URL, Username, Password에 대한 내용을 변경해주었다.

 그리고 프로젝트에서 서버가 정상적으로 실행되는 것을 확인했다.

 

 

 참고한 블로그들이다.[각주:3] [각주:4] [각주:5]

 

 

Reference