AWS에서 지원하는 클라우드 기반 관계형 DB다. 하드웨어 프로비저닝, DB 설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 지원하는 서비스다. 추가로 조정 가능한 용량을 지원하여 예상치 못한 양의 데이터가 쌓여도 비용만 추가로 내면 정상적으로 서비스가 가능한 장점도 있다.
🔧 amazon 로그인 후 검색창에 rds 검색
🔧 대시보드 화면 이동
🔧 DB 생성 클릭
🔧 DB 엔진 옵션 선택 화면에서 MariaDB 선택
🔧 DB 엔진 옵션 선택 화면에서 MySQL 선택
쿼리문 인식 문제 및 연결 등 여러 문제들이 해결되지 않아 MySQL로 수정
🔧 (중요)템플릿은 프리 티어로 한다.
🔧 본인만의 DB 인스턴스 이름과 사용자 정보를 등록한다.
여기서 사용된 사용자 정보로 실제 DB에 접근하게 되니 메모해두자.
🔧 인스턴스 구성에서 DM 인스턴스 클래스를 db.t2.micro로 했다.
🔧 스토리지 항목은 기본 설정으로 진행했다.
🔧 네트워크에선 퍼블릭 액세스를 [예]로 변경하고, 이후 보안 그룹에서 지정된 IP만 접근하도록 막을 예정이다.
🔧 DB 옵션에서 이름을 제외한 나머지 정보를 기본 상태로 진행 후 DB 생성 클릭
RDS를 처음 생성하면 다음 설정을 필수로 해야 한다.
🔧 왼쪽 카테고리에서 [파라미터 그룹] 선택
🔧 우측 상단 [파라미터 그룹 생성] 클릭
🔧 다음과 같이 세부 정보를 입력한다. 여기서 주의할 점은 방금 생성한 MySQL DB와 같은 버전을 맞춰야 한다는 것이다.
🔧 생성한 파라미터 그룹을 선택하여 상세 페이지로 이동 후 [파라미터 편집] 버튼을 클릭하여 편집 모드로 전환
🔧 먼저 time_zone을 검색하여 다음과 같은 [Asia/Seoul] 선택
🔧 character_set으로 시작하는 항목들은 모두 utf8mb4로 변경하고, collation 항목들은 utf8mb4_general_ci로 변경
참고로 utf8과 utf8mb4의 차이는 이모지 저장 가능 여부다.
RDS의 Max Connection은 인스턴스 사양에 따라 자동으로 정해진다. 현재 프리티어 사양으로는 약 60개의 커넥션만 가능해서 좀 더 넉넉한 값으로 지정한다.
🔧 Max Connection을 150으로 수정
🔧 설정이 다 되었다면 오른쪽 위의 [변경 사항 저장] 버튼을 클릭해 최종 저장한다.
🔧 옵션 항목에서 default로 된 DB 파라미터 그룹을 방금 생성한 신규 파라미터 그룹으로 변경
🔧 계속을 누르면 다음과 같이 수정 사항이 요약된 것을 볼 수 있다. 여기서 반영 시점을 [즉시 적용]으로 한다.
예약된 다음 유지 시간으로 하면 지금 하지 않고, 새벽 시간대에 진행하게 된다. 이 수정사항이 반영되는 동안 DB가 작동하지 않을 수 있으므로 예약 시간을 걸어두는 것이다. 지금은 서비스가 오픈되지 않았으므로 즉시 적용으로 한다.
로컬 PC에서 RDS에 접속하기 위해 RDS의 보안 그룹에 본인 PC의 IP를 추가하겠다.
🔧 RDS의 세부정보 페이지에서 [보안 그룹] 항목을 클릭
🔧 RDS의 보안 그룹 정보를 그대로 두고, 브라우저를 새로 열어 EC2에 사용된 보안 그룹의 그룹 ID를 복사하면 자동으로 RDS의 보안 그룹에 추가된다.
🔧 복사된 보안 그룹 ID와 본인의 IP를 RDS 보안 그룹의 인바운드로 추가
이렇게 하면 EC2와 RDS 간에 접근이 가능하다. EC2의 경우 이후에 2대 3대가 될 수도 있는데, 매번 IP를 등록할 수는 없으니 보편적으로 이렇게 보안 그룹 간에 연동을 진행한다.
이것으로 RDS와 개인 PC, EC2 간의 연동 설정은 모두 되었다.
로컬에서 원격 DB로 붙을 때 GUI 클라이언트를 많이 사용한다. MySQL의 대표적인 클라이언트로 Workbench, SQLyog(유료), Sequel Pro(맥 전용), DataGrip(유료) 등이 있다.
각각의 도구마다 큰 차이가 없으니 본인이 가장 좋아하는 툴을 사용하면 되겠다. 여기서는 인텔리제이에 Database 플러그인을 설치해서 진행하겠다.
🔧 RDS 정보 페이지에서 엔드 포인트를 확인한다. 이 엔트 포인트가 접근 가능한 URL이므로 메모장 같은 곳에 복사해 둔다.
🔧 인텔리제이에서 database 플러그인 검색 후 Database Navigator 설치
🔧 설치 완료 후, Action > Database Browser 실행하여 MySQL 접속 정보를 open (MariaDB는 MySQL 기반이므로 MySQL을 사용하면 된다.)
🔧 본인이 생성한 RDS의 정보를 차례로 등록
Host : RDS의 엔드 포인트
DB 연결이 잘 된 것을 볼 수 있다! 😄
🔧 use 명령어로 사용할 DB 선택
use [database명];
앞서 RDS 인스턴스 생성 시, 입력한 DB 이름으로 하면 된다.
🔧 파라미터 설정을 조회하기 위해 다음 명령을 실행
show variables like 'c%';
쿼리 결과를 보면 잘 적용되지 않은 필드들이 보인다. 이 파라미터들을 직접 변경하겠다.
ALTER DATABASE DB명
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';
ALTER 명령문 실행 후에도 변경이 되지 않을 경우,
SET 변수명 = [utf8mb4 or utf8mb4_general_ci];
위 명령을 추가적으로 수행했더니 수정 사항이 잘 반영되었다.
잘 변경된 것을 볼 수 있다 😁
🔧 다음 명령을 통해 타임존까지 확인하자
select @@time_zone, now();
🔧 마지막으로 한글명이 잘 들어가는지 간단한 테이블 생성과 insert 쿼리를 실행하겠다.
📝 (주의)
테이블 생성은 인코딩 설정 변경 전에 생성되면 안 된다. 만들어질 당시의 설정값을 그대로 유지하고 있어, 자동 변경이 되지 않고 강제로 변경해야만 한다. 웬만하면 테이블은 모든 설정이 끝난 후 생성하는 것이 좋다.
명령 수행 시, 주의할 점은 테이블명만 적으면 SQL syntax error가 발생한다. 그래서 아래 링크의 내용처럼 DB명.테이블명 형식으로 쿼리를 날려야 작업이 잘 수행되었다.
ref : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=skybrend&logNo=90155188520
다음과 같이 한글 데이터도 잘 등록되는 것이 확인되었다.
RDS에 대한 모든 설정이 끝났다! 💪
🔧 putty(windows)를 통해 EC2에 ssh 접속 수행
🔧 접속되었다면 MySQL 접근 테스트를 위해 MySQL CLI 설치
sudo yum install mysql
🔧 설치가 다 되었으면 로컬에서 접근하듯이 계정, 비밀번호, 호스트 주소를 사용해 RDS에 접속
mysql -u 계정 -p -h Host주소
Host 주소 : RDS의 접속 URL(엔드 포인트)
🔧 RDS에 접속되었으면 실제로 생성한 RDS가 맞는지 간단한 쿼리를 실행해 보겠다.
show databases;
생성했던 bulletinboard_webservice_2022라는 DB가 있음을 확인할 수 있다.
또한, 앞서 생성했던 테이블도 있음을 확인할 수 있다.
다음 챕터부터는 지금까지 작업했던 내용을 토대로 실제로 스프링 부트 프로젝트를 EC2에 배포하고 RDS에 접근하는 방법을 진행하고 개선하도록 하겠다. 🤿🤿