본문 바로가기
AWS/RDS

[AWS] Amazon RDS에서 이모지 데이터 사용하기

by 책 읽는 개발자_테드 2021. 4. 18.
반응형

문제

서비스 운영 중 예약이 실패하는 오류가 발생했다. 서버 로그를 확인하니 이모지가 포함된 예약 메모를 데이터베이스에 저장하다가 오류가 발생한 것이다.

 

이모지다 😃

 

현재 사용하는 데이터베이스는 RDS - MySQL Aurora였고, 문자 인코딩 방식은 utf8를 사용하고 있었다. utf는 이모지 저장이 불가능한 방식이기 때문에 이모지 저장이 가능한 utf8mb4로 변경이 필요했다.

 

UTF-8 인코딩은 4바이트 가변 길이 인코딩 방식입니다. 그런데 MySQL에서는 utf8을 3바이트로 구현했었습니다. 그러다가 MySQL 5.5.3 (2010년 3월 24일)에 4바이트짜리 character set인 utf8mb4을 추가했습니다.

 

유니코드 U+10000 이상인 문자들을 UTF-8로 인코딩하려면 4바이트가 필요한데 이에 해당하는 대표적인 문자가 이모지(Emoji)다

 

해결

utf8mb4 설정을 적용하기 위해서 AWS의 RDS - 파라미터 그룹으로 이동한다.

그리고 RDS가 사용 중인 파라미터 그룹을 다음과 같이 변경한다. 이때, 몇 가지 주의점이 있으니 뒤에서 살펴보자.

 

#utf8mb4로 변경

character-set-client

character-set-connection

character-set-database

character-set-filesystem

character-set-results

character-set-server

 

#utf8mb4_general_ci로 변경

collation_connection

collation_server

 

주의1!

이때 디폴트 파라미터 그룹은 수정할 수 없다. 디폴트 파라미터 그룹을 수정할 경우 다음과 같은 오류가 발생한다.

 

cannot modify a default parameter group.

 

RDS가 디폴트 파라미터 그룹을 사용할 경우에 새로운 파라미터 그룹을 생성한 후, 위 설정을 적용하자.

 

 

주의2!

RDS에 이미 적용되어 있는 파라미터그룹의 설정을 변경하면 오류가 발생할 수 있다. RDS에 적용된 파라미터그룹을 다른 것으로 변경한 후, 설정을 변경하도록 하자.

 

저장 중 오류: This parameter group [파라미터그룹이름] cannot be modified because it is currently being applied to DB Instance deeping (Service: AmazonRDS; Status Code: 400; Error Code: InvalidDBParameterGroupState; Request ID:

 

주의3!

설정을 변경한 후에는 RDS를 재시동해야 적용된다.

 

 

다음으로 RDS에 명령을 보낼수 있는 환경에 접속한다. 여기서는 MySQL Worbench를 사용한다. 그리, 다음과 같이 입력하여 생성되어있는 데이터베이스에 추가적으로 설정을 적용한다.

 

ALTER DATABASE [데이터베이스명] CHARACTER SET 'utf8mb4' COLLATE  'utf8mb4_general_ci' ;

 

마지막으로 다음 명령어로 모든 설정이 올바르게 적용 되었는지 확인한다.

 

show variables like 'c%';

설정을 마치고 테이블에 이모지를 입력하면 정상적으로 입력된다.

출처

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

blog.gangnamunni.com/post/aws-rds-mysql-utf8mb4/

medium.com/oldbeedev/mysql-utf8mb4-character-set-설정하기-da7624958624

반응형

댓글