개요

오늘도 회사에서 어김없이 서버 개발을 하던 도중 웹페이지에서 한글이 깨지는 오류가 발생했다.

원래 알고 있던 오류지만 보안관리 웹페이지 특성상 한글을 잘 사용하지 않을뿐더러 우선순위에서 계속 밀려왔기에 

이제서야 급하게 해결하려고 했다. 

디버깅 과정

일단 크게 구분점을 잡는다. 웹페이지에는 보통 3개의 지점이 있는데 바로 프론트엔드, 백엔드, 데이터베이스이다.

프론트엔드가 제일 의심되어 로그를 찍어보았지만 프론트엔드는 그저 백엔드에서 보내주는 깨진 값을 출력해줄 뿐이였다.

자바로 되어 있는 백엔드 코드에서도 로그를 찍어보았지만 계속 깨진채로 출력이 되었다. 

그렇다면 남은 지점은 데이터베이스뿐이다. 의심이 가서 첫번째로 시도한 방법은 DB 인코딩 확인이였다.

근데 DB 인코딩은 utf8mb4로 아주 아주 멀쩡했다. 실제로 그렇게 적용되기도 하였고..

그래서 테이블 구조를 다시 한번 천천히 살펴보던 도중 컬럼 타입이 잘못되었다는 점을 발견하게 되었다.

문제점

문제점은 바로 컬럼 타입이 varbinary를 사용하고 있던것이였다.. 

varchar 타입은 non-binary character로 데이터를 저장하고 varbinary는 binary byte 타입형태로 저장하는 타입이다.

그렇다면 한글은 컬럼에 binary byte 형태로 저장이 되고 그걸 읽어서 표시해주기전에 인코딩등 전처리가 필요했다.

하지만 굳이 varbinary타입을 사용할 이유는 없어서 그렇게까지 하진 않았다.

해결법

name VARBINARY(100) -> name VARCHAR(100)

 varbinary 형태의 컬럼을 varchar 타입으로 바꿔주면서 정상적으로 해결되었다.

 

 

 

반응형
복사했습니다!