[MariaDB]Incorrect string value: '\xED\x97\xAC\xEB\xA1\x9C...' for column 오류(feat. AWS RDS)

유현우·2022년 2월 25일
0
post-thumbnail

프론트엔드 글부터 차근차근 쓰고 싶었지만, 매우 따끈따끈한 오류기도 했고 중간에 삽질을 좀 해서 이 오류의 해결과정부터 블로그를 시작하는게 좋아보여 글을 쓰게 되었다!

오류 증상

클라이언트에서 송신한 메세지를 MariaDB에 저장하는 과정에서 서버측에서 오류가 나기에 CloudWatch를 통해 로그를 확인한 결과 아래와 같은 내용이 출력이 되었다.

오류 검색

다행히도 해당 오류에 대해서는 구글에 검색한 결과 아주 쉽게 원인을 찾을 수 있었다.

원인은 바로 데이터베이스의 character set이 utf-8이 아니라서 한글이 들어갈 수가 없다는 것이다. 진짜인지 확인해보려고 메세지에 한글이 아닌 영어를 보내니 잘만 들어갔다...

문제의 해결법도 꽤나 간단했다.

nano /etc/mysql/my.cnf

이 파일을 찾아 각 섹션 최하단에 다음들을 각각 복붙해주면 된다는 것이다.

[client]
default-character-set=utf8

[mysqld]
init_connect="SET collation_connection=utf8_general_ci"
init_connect="SET NAMES utf8"
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake

[mysql]
default-character-set=utf8

그래서 이때까지만 해도 아주 쉽게 이 문제를 해결할 수 있을 줄 알았다.

예상치 못한 난관

일단 나의 경우에는 저 오류 해결방식은 사용할 수 없었다. 왜냐면 AWS RDS를 통해 데이터베이스를 만들었기 때문에 기본적으로 저 파일이 내 컴퓨터에 존재하지 않았기 때문이다.
그래서 별도의 방법을 다시 구글링 해본 결과, 나와 같이 AWS RDS를 사용한 다른 사람들이 이 문제를 해결한 사례가 꽤 있었다.

AWS RDS의 경우 생성 시 별도의 파라미터 그룹을 연결해주는데, 여기서 언어나 최대 연결 가능 수 등 자잘한 설정을 진행할 수 있었다. 여기서 charset과 관련된 값을 수정하면 된다는 내용이었다.

RDS의 왼쪽 메뉴나 DB 인스턴스 안에서 연결된 파라미터 그룹을 볼 수 있다.

파라미터 그룹에 들어가서 아래의 값들을 하나씩 편집을 해주고 저장을 시키면 된다. 이 때, 적용되던 파라미터 그룹이 디폴트로 주어진 거라면 값 수정을 할 수 없으니 새로 하나 만들어서 해야한다.

- character-set-client : utf8

- character-set-connection : utf8

- character-set-database : utf8

- character-set-filesystem : utf8

- character-set-results : utf8

- character-set-filesystem : utf8

※ 만약 파라미터 그룹 수정을 다 끝내고 위 사진처럼 파라미터 그룹 옆에 '동기화 중'이라고 나오면 파라미터 그룹이 잘 적용되고 있는거고, '재부팅 보류 중'이라는 말이 나오면 해당 데이터베이스 인스턴스를 재부팅해주면 적용이 된다.

이렇게 파라미터 그룹이 잘 적용되었으니 다시 DB 확인을 해보면!
전혀 돌아가지 않았다. 이전과 달라진게 1도 없었다.😱😱

어이 없이 찾게 된 해결책

해당 방법 외에는 별도로 찾은 내용이 없어서 계속해서 반복 시도를 해도 제대로 적용이 안 되던 도중, 문득 내 머리를 스쳐지나간 것이 있었다.

설마 이미 생성한 데이터베이스라서 수정사항이 적용 안된게 아닌가?🤔

시스템 자체가 변경은 되었지만, 이전에 만들어진 데이터베이스는 수정 반영이 안 될지도 모른다는 생각이 들자마자 바로 구글링을 해서 RDS 데이터베이스의 charset을 볼 수 있는 SQL문을 검색했다. 그리고 만들었던 DB를 싹 지우고 다시 생성한 뒤 charset을 확인해보았다.

SELECT * FROM information_schema.SCHEMATA

설마설마했는데 불안했던 나의 예상은 적중해있었다. 이걸 위해 쓴 시간이 3시간이 넘는데...

이후 DB 안에 테이블들을 다시 생성하고 클라이언트에서 API 요청을 해보니 아주 깔끔하게 잘 값이 들어가있는 걸 확인할 수 있었다.

파라미터 그룹을 설정하기 전 데이터베이스를 이미 만들었다면 반드시 파라미터 설정 이후 데이터베이스를 생성해줘야(또는 수정해줘야) 한다.

해결법은 나름 단순했지만 해결하는데 시간이 좀 걸린 문제였는데, 그래도 나름 어떻게든 혼자서 해결할 수 있는 문제여서 다행이라는 생각이 들었다. 원래 파라미터 그룹은 만진적이 없는데 이것저것 만지다 보니 경험치가 조금은 늘은 느낌?

profile
노력하도록 노력하자

0개의 댓글