최근에 신생 스타트업에서 백엔드 개발자로 합류하여 일하고 있다. 기존 부실하게 만들어진 서버를 재설계하는 작업을 맡았다.
새로 개편하는 서버를 정식 배포할 때까지 기존 서버로 서비스를 운영하는 중인데 아무래도 프로토 타입이다 보니 빈틈이 많아 예상치 못한 오류가 많이 발생하더라. 이번에는 예상치 못한 부분에서 오류가 발생하여 이를 공유해보려고 한다.
서비스에서 운영하는 정보 공유방에 오류 제보가 들어왔다. 회원가입을 시도하면 예외 메세지가 그대로 출력이 되는 것이다(...!)
(..!)
출력된 오류는 이와 같았다.
"message" : conversion from collation utf8mb4_unicode_ci into utf8_general_ci impossible for parameter
과연 무엇이 문제였을까...
.
.
.
.
.
.
정답은 소셜 인증 서버에서 가져온 정보에서 예외 케이스가 있었던 것이었다. 어떤 예외냐 하면 소셜 인증 서버에서 가져오는 닉네임에 이모지가 포함된 경우가 있던 것이었다. 닉네임을 저장하는 칼럼의 charset이 이모지를 지원하지 않아 충돌이 났었다.
MySql에서 utf8은 3Byte까지만 지원한다. 하지만 이모지는 최대 4Byte를 갖기 때문에 기존 utf8로는 이모지를 처리할 수 없다고...
그래서 이모지를 사용하기 위해선 VARCHAR(255) 타입에서 charset을 utf8에서 utfmb8로 바꾸어야 이모지를 처리할 수 있다고 한다.
이게 간과하기 쉬웠던 이유가 닉네임==단순 문자열 이라는 명제를 공식처럼 받아들였고 코드 상에서는 문자열로 받을 수 있었기 때문에 이게 문제가 될것이라고 상상을 못했다.
최근들어서 이모지와 같은 문자들을 점점 더 많이 사용하는 추세이다. MySql 환경에서는 이제 VARCHAR 타입 칼럼의 charset은 웬만하면 utf8mb4로 변경해야하지 않을까 한다. 트랜드에 의해 DDL을 만져야하는 상황이 어찌보면 흥미롭다😁.