5주차가 시작되었다. 이번주차의 과제로는 현재 진행중인 클론 코딩 프로젝트에 RDS와 JWT를 적용하는 것이었다. 여기서는 AWS RDS
를 적용하는 과정을 정리하고자 한다.
먼저 AWS에 로그인을 한 뒤 RDS
를 검색해서 해당 서비스 화면으로 접근한다.
잊지말고 아래에서 보이는 것과 같이 우측 상단에 존재하는 지역(리전) 설정을 서울로 해주도록 하자.
접근한 화면에서 데이터베이스 탭에 들어가보면 우측에 데이터베이스 생성
이라는 버튼을 통해 데이터베이스를 생성한다.
그러면 다음과 같은 화면이 나오게 되는데, 우리는 MySQL
을 사용할 것이므로 MySQL
을 선택하도록 한다.
아래에 보면 버전을 선택할 수 있는데, 본인이 사용하는 버전에 맞게 선택해주면 된다.
템플릿이라고 선택지가 있는데, 나는 무료로 AWS RDS를 이용할 수 있는 프리티어를 선택했다.
다음은 설정이다. DB 인스턴스 식별자
에는 원하는 이름을 지정해주면 되며, 마스터 사용자 이름과 마스터 암호를 입력해야 한다. 여기서 사용된 사용자 정보로 실제 데이터베이스에 접근하게 되므로 반드시 기억하도록 해야한다.
그리고 다음과 같이 설정을 진행해준 뒤 데이터베이스를 생성해준다.
다음과 같이 데이터베이스가 잘 생성된 것을 확인할 수 있었다.
데이터베이스를 사용하기에 앞서, RDS 운영환경에 맞는 파라미터를 설정해줘야 한다.
이를 위해서 초기 AWS RDS
를 셋팅할 때 파라미터 그룹을 하나 생성하여 character set
과 collation
그리고 Amazon RDS MySQL DB 인스턴스의 함수, 절차 및 트리거를 활성화 하기 위한 log_bin_trust_function_creators
설정이 필요하다.
다음과 같이 파라미터 그룹
탭에 접근한 뒤, 우측 상단의 파라미터 그룹 생성
버튼을 통해 파라미터 그룹을 생성하도록 한다.
여기서 세부 정보 위쪽에 DB 엔진을 선택하는 항목이 있는데, 여기서 방금 생성한 MySQL과 같은 버전을 맞춰줘야 한다. 앞선 과정에서 5.7.xx
버전으로 생성했기 때문에 같은 버전대인 5.7을 선택해야 한다.
생성이 완료되면 다음과 같이 생성된 파라미터 그룹을 확인할 수 있는데, 우측 상단의 메뉴를 통해 해당 파라미터 그룹을 편집한다.
먼저 char
을 검색하여 다음의 항목들을 utf8mb4
로 변경해준다.
마찬가지로 collation
을 검색하여 아래의 항목들을 utf8mb4_general_ci
로 변경해준다. 여기서 utf8
과 utf8mb4
의 차이는 이모지 저장 가능 여부이다. utf8
은이모지를 저장할 수 없지만, utf8mb4
는 이모지를 저장할 수 있으므로 보편적으로 utf8mb4
를 많이 사용하는 편이라고 한다.
다음으로는 time_zone
을 검색해서 Asia/Seoul로 변경해주도록 한다.
그리고 Max Connection
을 수정해준다. RDS
의 Max Connection
은 인스턴스 사양에 따라 자동으로 정해지는데, 현재 프리티어 사양으로는 약 60개의 커넥션만 가능하기 때문에 좀 더 넉넉한 값으로 지정해준다(150으로 지정). 이는 이후에 RDS
사양을 높이게 된다면 기본값으로 다시 돌려놓으면 된다.
마지막으로 log_bin
을 검색한 뒤, log_bin_trust_function_creators
를 1
로 설정해준다.
log_bin_trust_function_creators 옵션은 MySQL이 function, trigger 생성에 대한 제약을 강제할 수 있는 기능이다. 해당 옵션의 default는 OFF이며, OFF상태의 경우 권한이 있더라도 trigger를 생성할 수 없고, function을 생성할 수 없다. 결론적으로 해당 옵션이 OFF 상태일 경우, root 권한이 없는 user가 생성한 function을 일반 user가 실행할 수 없게된다.
변경사항을 모두 확인한 뒤 저장하면 파라미터 설정은 완료된 것이다. 다만, 변경된 파라미터 설정을 데이터베이스에 적용하기 위해서 데이터베이스를 재부팅 해주어야 한다.
파라미터 그룹 설정을 마치고 재부팅까지 완료한 뒤, 다음과 같이 데이터베이스가 사용 가능한 상태에서 다음 과정을 진행하도록 한다.
먼저, 해당 데이터베이스를 체크한뒤 수정
버튼을 통해 진입하도록 한다.
여러가지 설정을 변경할 수 있는데, 그 중에서 데이터베이스 옵션 - DB 파라미터 그룹
에 방금 만든 파라미터 그룹을 선택해준다.
변경점을 확인한 뒤 아래에 보이는 것처럼 즉시 적용
을 체크하고 DB 인스턴스 수정
버튼을 통해 설정을 변경하도록 한다.
만약 예약된 다음 유지 시간으로 하면 지금 하지 않고, 새벽 시간대에 수정이 진행되게 된다. 이 수정사항이 반영되는 동안 데이터베이스가 작동하지 않을 수 있으므로 예약 시간을 걸어두라는 의미지만, 지금은 크게 의미있지 않으므로(서비스를 오픈한 것이 아니기 때문) 즉시 적용하는 것이다.
간혹 파라미터 그룹이 제대로 반영되지 않을 때가 있는데, 정상 적용을 위해 한 번 더 재부팅을 진행해주도록 하자.
이제 로컬 PC에서 RDS
에 접속하기 위해서 RDS의 보안 그룹에 본인 PC의 IP를 추가하도록 하자. RDS
의 세부정보 페이지에서 [보안 그룹]
항목을 클릭해서 앞전의 EC2
인스턴스에서 보안 그룹을 설정해줬던 것과 마찬가지로 보안 그룹을 설정해주면 된다.
본인의 경우에는 앞서 RDS
인스턴스를 생성할 때 EC2
인스턴스의 보안 그룹으로 보안 그룹을 지정해주어 이미 설정이 다 되어있는 상태이다. 다음과 같이 확인할 수 있었다.
인텔리제이 Ultimate 버전(제가 사용중인)에서는 Database 플러그인을 제공하는데, 해당 플러그인을 이용하면 손쉽게 데이터베이스를 연결할 수 있다. 만약 해당 플러그인을 사용할 수 없다면 MySQL
의 대표적인 클라이언트인 Workbench
, SQLyog(유료)
, Sequel Pro(맥 전용)
, DataGrip(유료)
등등 여러가지 클라이언트 중에서 선택해서 이용하면 된다(저는 인텔리제이의 Database 플러그인을 이용해서 진행했습니다).
먼저, 인텔리제이를 실행하면 우측에 보이는 Database
탭을 눌러보면 아래와 같은 화면이 나오게 되며, +
버튼을 눌러서 Data Source - MySQL
을 선택해준다.
그리고 방금 생성했던 RDS
의 엔드포인트를 확인하여 Host
에 입력해준다.
또, RDS
를 생성할 때 입력해주었던 사용자 정보를 각각 User
와 Password
에 입력해준 뒤, Test Connection
버튼을 통해 연결이 잘 되는지 확인해본다.
연결이 잘 되는걸 확인하였으면, Apply
버튼을 눌러 연결을 적용하면 다음과 같이 잘 연결된 모습을 확인할 수 있다.
추가적으로, EC2
에서 RDS
로의 접근은 다음과 같이 할 수 있다.
앞서 진행한 과정중에 WinSCP와 Putty로 EC2에 접근하기를 참고하여, EC2
인스턴스에 접속을 하였다면 로컬에서 MySQL
에 접속했을 때와 마찬가지로 접근해주면 된다.
명령어는 다음과 같다.
mysql -u 계정 -p -h host주소
여기서 host주소
란, RDS
의 엔드포인트
를 말한다.
패스워드를 입력하라는 메시지가 나오면 패스워드까지 입력해주면, EC2
에서 RDS
로 접속되는 것을 확인할 수 있을 것이다. 접속이 잘 되었다면 임의로 데이터베이스를 생성한 뒤, 그에 대한 확인을 통해 실제로 생성한 RDS
가 맞는지 확인해보는 것도 좋을 것이다.