모바일 애플리케이션 개발 후 댓글에 이모지로만 작성을 했을 때,
입력한 이모지가 안보이고 댓글 영역이 공란으로 보인다라는 버그 제보로 인해서 찾아서 작성하는 글..
왜 이모지가 안 보였을까?
AWS 서비스 중 RDS를 이용하여
데이터베이스는 Aurora MySQL, 문자 인코딩 방식은 "utf8"을 이용하고 있습니다.
UTF-8의 인코딩은 4바이트 가변 길이 인코딩 방식이나,
MySQL에서 utf8
에 대하여 3바이트
로 구현 되어 표현할 수 있는 캐릭터의 제한이 있습니다.
대표적으로 이모지는 유니코드 U+1000 이상으로 UTF-8로 인코딩하게 되면 4바이트가 필요하게 되며 이에 따라 3바이트 표현이 가능한 utf8에서는 이모지가 나올 수 없던 것입니다.
어떻게 하면 이모지를 보이게 할 수 있을까?
3바이트인 utf8이 아닌, 4바이트 character set인 utf8mb4로 진행하면 됩니다.
RDS 파라미터 그룹 설정
RDS MYSQL의 파라미터 그룹의 내의 character set에 대한 기본값을 설정해봅시다.
RDS를 만들었을 때 당시의 파라미터가 기본 파라미터(Default)였다면,
값 변경이 불가하기에 파라미터 그룹에 들어가 별도로 파라미터 그룹을 생성합니다.
파라미터 그룹 생성
AWS 콘솔 > RDS > 파라미터 그룹 > 파라미터 그룹 생성
( https://ap-northeast-2.console.aws.amazon.com/rds/home?region=ap-northeast-2#parameter-groups:id= )
으로 이동합니다.
파라미터 그룹 패밀리에 RDS의 엔진 버전을 입력합니다.
*RDS 엔진 버전 : RDS > 데이터베이스 > {변경하고자하는 클러스터 } 상세로 이동합니다.
해당 페이지 진입 시 하단의 "구성" 탭을 확인할 수 있는데, 해당 구성 탭에서 엔진 버전을 확인 할 수 있습니다.
유형을 선택할 때
DB 엔진이 MySQL
이라면 "DB Parameter Group"
만약 Aurora MySQL
이라면 "DB Cluster Parameter Group
"으로 설정합니다.
그룹 이름과 설명을 작성하고 생성을 하면 목록에서 확인할 수 있습니다.
파라미터 그룹 수정
만들어진 파라미터를 수정하기 위해 해당 파라미터 상세로 접속합니다.
검색을 "character_set"을 한 뒤 나오는 목록 중
- character_set_client
- character_set_connection
- character_set_database
- character_set_results
- character_set_server
5가지의 항목의 값을 utf8mb4
로 변경합니다. (22년 8월 11일 기준 select 항목 중 최하단에 존재합니다.)
character_set_filesystem은 수정하지 않도록 주의합니다.
마찬가지로 "collation" 검색 후 나오는 목록
- collation_connection
- collation_server
2가지의 항목의 값을 utf8mb4_unicode_ci
로 변경합니다. (22년 8월 11일 기준 select 항목 중 최하단에 존재합니다.)
※ utf8mb4_general_ci와 utf8mb4_unicode_ci 의 차이는 무엇일까?
위에서 collation을 설정 시에 값을 utf8mb4_unicode_ci로 설정을 했는데, utfmb4_general_ci로 하여도 무방합니다.
둘의 차이로는 비교와 정렬에 사용하는 알고리즘에 있는데,
utf8mb4_unicode_ci가 복잡하지만, 요즘 시대로서는 차이를 느낄 수 없는 속도라고 합니다.
값을 다 수정했다면 변경사항을 저장합니다.
저장한 파라미터를 적용하기 위하여 DB수정을 합니다.
추가 구성에 위에서 설정했던 파라미터 클러스터 그룹
혹은 파라미터 그룹
으로 변경한 뒤
적용 시에 즉시 적용
을 합니다.
적용 확인 하기
show variables where variable_name like 'c%';
해당 데이터 베이스 접속 후 위의 쿼리를 작성합니다.
쿼리 결과로 위의 설정한 값들이 적용되어있는 것을 확인할 수 있습니다.
만약 적용이 되어 있지 않다라면 재부팅을 한 번 더 한 뒤 쿼리를 실행시켜봅니다.
이후 이모지가 들어가야 하는 칼럼에 대하여 쿼리를 이용하여 변경합니다.
ALTER TABLE {테이블명} MODIFY COLUMN {컬럼} VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
이후 이모지 작성이 잘되는지 확인을 합니다.
주의할 점
이미 생성된 데이터베이스에 대하여 데이터가 채워지고 난 뒤 작업을 하고자 한다라면 데이터의 손실이 발생할 수 있습니다. (설정되어 있는 character set에 따라 상이)
틀린 내용을 기입한 게 있다라면, 알려주시면 해당 내용을 수정하도록 하겠습니다.
읽어주셔서 감사합니다 :)
'AWS' 카테고리의 다른 글
Ubuntu 22.04에 CodeDeploy Agent 설치하기 (0) | 2022.08.30 |
---|---|
AWS CodeDeploy 배포시 나는 에러 해결법 (0) | 2022.08.25 |
Python Module을 Lambda Layer 생성 방법 (0) | 2022.08.01 |