AWS RDS
아마존 관계형 데이터베이스 서비스(Amazon Relational Database Service) 또는 아마존 RDS(Amazon RDS)는 아마존 웹 서비스(AWS)가 서비스하는 분산 관계형 데이터베이스이다.
애플리케이션 내에서 관계형 데이터베이스의 설정, 운영, 스케일링을 단순케 하도록 설계된 클라우드 내에서 동작하는 웹 서비스이다.
데이터베이스 소프트웨어를 패치하거나 데이터베이스를 백업하거나 시점 복구를 활성화하는 것과 같은 복잡한 관리 프로세스들은 자동으로 관리된다.
스토리지와 연산 자원들을 스케일링하는 것은 하나의 API 호출로 수행할 수 있다.
RDS 인스턴스 생성
1. 서비스에서 RDS로 들어간다.
2. 데이터베이스 생성한다.
3. 표준생성-MySQL-MySQL 8.0.27 로 생성해주었다
4. 탬플릿은 프리티어. 이미 rds가 있다면 프리티어로 생성 못한다.
5. 마스터를 설정해준다.
6. 프리티어는 버스터블 클래스만 사용가능하다
7. 외부에서 데이터베이스를 접근할수 있게 하기 위해서 퍼블릭 엑세스를 '예'로 설정해주었다.
보안그룹은 '새로 생성'해주었고 새 보안그룹이름은 'ankisileVPC'로 설정해주었다.
8. 초기 데이터베이스 이름을 지정하기 위해서 추가 구성에서 설정해주었다.
9. 하단의 '데이터베이스 생성'을 누르고 기다린 후 다음의 화면이 뜨면 성공
RDS 운영환경에 맞는 파라미터 설정
RDS를 처음 생성하면 몇 가지 설정을 필수로 해야 한다.
- EC2 연결
- 타임존
- Charcater Set
- Max Connection
EC2 연결
ec2에서 rds로 접근 가능하게 하기 위해서 포트를 열어주는 과정이 필요.
1. 앞서 생성한 보안 그룹을 클릭해서 접근
2. 인바운드 규칙 편집
기본적으로 RDS 서버를 관리할 호스트 컴퓨터의 ip만 접속할 수 있도록 설정되어 있다. EC2역시 RDS의 MYSQL에 접근할 수 있게 해야 하므로 MySQL을 선택하고 EC2의 보안그룹 코드를 설정해주고 저장해준다. 그렇게 함으로써 EC2가 RDS에 접근 가능하도록 설정
3. Datagrip을 활용하여 외부에서 접속해본다.
host : rds 엔드포인트
user/password : rds 인스턴스 생성할때 설정했던 마스터
위와 같이 뜨면 성공
다음의 명령어 실행
show variables like 'c%';
잘뜨는것 확인가능
파라미터 그룹 추가
1. RDS의 타임존, 인코딩 설정을 위해 파라미터 그룹으로 들어가면 기본 default 파라미터가 존재한다.
2. default 파라미터 그룹은 수정이 불가능하기 때문에 새로운 그룹을 생성한다.
타임존 설정
생성한 파라미터 그룹 링크로 들어가 검색창에 time_zone을 검색.
time_zone을 보면 세계 각국의 time_zone이 존재한다.
여기서 Asia/Seoul 을 선택한다. 이후 변경 사항을 저장하면 타임존 설정이 완료된다.
인코딩 설정
인코딩 설정을 위해 파라미터 그룹 링크에서 검색창에 character_set을 검색한다.
한글 데이터가 깨지지 않고 출력되도록 utf-8로 설정해야 한다. utf-8로 설정해도 되지만 이모지를 사용하기 위해 utf8mb4로 설정했다.
charcter_set* 모든 값을 utf8mb4로 설정한다.
MySQL의 utf-8은 3byte로 표현되는 범위의 character만 입력할 수 있지만, 이모지 처럼 4byte로 표현되는 문자를 처리하지 못한다. 반면 utf8mb4는 내부적으로 한 문자를 표현하는데 4바이트를 사용한다.
Collation
collation* 모든 값을 utf8mb4_unicode_ci로 변경한다. collation은 정렬 방식이다.
파라미터 그룹설정
파라미터 그룹 설정을 새로 만든 파라미터 그룹에 설정을 하였고 RDS의 파라미터 그룹은 default가 기본으로 설정되어 있다. 따라서 RDS의 파라미터 그룹 설정이 필요하다.
1. 데이터베이스 선택>수정
2. 추가구성>데이터베이스 옵션>DB 파라미터 그룹
3. 계속 누르고 수정시간 즉시 적용
4. 수정후 데이터베이스 재부팅
타임존 확인
select @@time_zone, now();
인코딩 확인
ALTER DATABASE DB이름
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_unicode_ci';
RDS 한글 테스트
USE RCdatabase;
CREATE TABLE test (
id bigint(20) NOT NULL AUTO_INCREMENT,
content varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE = InnoDB;
insert into test(content) values ('한글 테스트');
select * from test;
이모지 확인
insert into test(content) values ('한글 테스트😀');
select * from test;
이모지가 안뜬다.
character_set_results가 utf8mb3로 뜨는게 문제가 됨
aws에서는 잘 되어있는것이 확인이 됨
따라서 다음을 이용하여 character_set_results를 utf8mb4로 변경
SET character_set_results = 'utf8mb4';
변경완료
다시 확인해보면 잘 뜨는것 확인
EC2에서 RDS 접속
기존에 만든 EC2 환경에서 구축한 RDS에 접근했다. 호스트주소는 RDS의 엔드포인트를 넣어주면 된다.
mysql -u 계정 -p -h Host주소
이모지가 또 안뜬다.
variable을 확인해보면 다음과 같이 뜬다.
역시 uf8mb4로 설정이 안되어 있다. system빼고는 다 utf8mb4로 설정되어야 한다.
그냥 위에서 처럼 SET을 이용하여 설정하자
다시 확인해보면 잘 설정되었다.
이모지가 잘 나온다.