목차
개요
입대 전까지 집중적으로 해야될 일이 많아서 과외를 좀 정리하게 되었다. 그 중 하나의 수업에는 고객님이 주신 질문에 대해서 답변을 드리려고 준비 중이었다. Remote access to db, web app deployment 등 여러 질문이 있었는데 my.cnf 파일을 못 찾아서 remote access를 시도하던 중에 막혀서 다른 문제들을 시작도 못했고, Mysql에서 데이터를 가져와 Flask로 출력할 때 한글이 깨지는 문제에 대한 답을 마지막을 찾고 끝나게 되었다. 이것도 결론적으로는 간단했지만 나름 시행 착오가 있어서 한 번 정리해보려 한다.
우선 문제의 발단은 이러했다. 고객님께서 Mysql, Python,Flask 사용법을 배워가신 후 web app을 만드셨다. 테스트를 하실 때 한글 이름을 사용하셨는데, 그걸 fetch해서 가져와서 보니 한글이 깨져서 나오는 것이었다. 그러하여 내게 질문을 주셨고 그 때 부터 이 문제를 해결하기 위해 하나씩 살펴보았다.
Mysql
우선은 정확히 잘 모르겠어서 구글링을 해보니 Mysql에서 setting이 잘못되어 있을 수 있다는 것이다. utf8이 아니라 다른 언어 세팅으로 되어 있으면 한글이 깨질 수 있다는 것이다. 이를 해결하기 위해선 my.cnf파일에서 이것 저것을 추가하고 다시 mysql을 실행해서 db와 table의 세팅을 바꿔주면 된다는 거 였다. 우선 나는 remote access를 시도하면서 my.cnf 파일을 찾는데 많은 노력을 쏟았었고, 그럼에도 불구하고 찾지 못했기에 이 방법을 시도하기가 어려웠다. 그래서 내가 직접 해보지 못하고 고객님과 수업 중에 함께 진행해볼 수 밖에 없었는데, 고객님 컴퓨터에서도 my.ini(windows에서는 이 파일이 my.cnf와 같이 mysql의 configuration이 기록된 곳이다.)를 찾는데에 실패했다. 다음 수업까지 내가 구글링을 해서야 결국 my.ini파일을 찾을 수 있었다. 그러나 웬걸, my.ini파일을 바꾸고 process대로 해서 세팅을 바꿔도 결과는 그대로 였다. 여기서 문제가 Mysql에 있지 않다는 것을 알 수 있었고 이제 눈을 Python으로 돌리기 시작했다. reference: https://co-deok.tistory.com/66
Python
우선 그전에 확실히 하기 위해 Mysql 에서 data를 가져왔더니 거기서는 한글이 깨지지 않고 그대로 출력이 됐다. 그 말인 즉슨, Mysql에는 문제가 없고 그것을 python으로 가져와서 web에 출력하기 전까지에 문제가 있다는 뜻이다. 여기서 확인도 안해보고 Mysql 과 Python을 연결해주는 connector에 문제가 있다고 생각하고 또 몇시간을 쏟아서 문제를 해결하려 했다. connection을 만들 때 charset을 utf8로 세팅해야한다는 구글링 결과로 이것저것 만지작 거렸으나 문제가 해결되지 않았다. 뒤늦게 fetch 해온 data를 출력해보니 한글로 출력이 되었고 문제는 charset을 뭐로 세팅 하느냐에 있지 않았다.
Flask
그래서 다시 코드를 훑어봤다. 그랬더니 flask 함수에서 output을 출력할 때 render_template을 하는 것이 아닌 Mysql data를 json 포멧으로 그저 return 하고 있는 것이었다. 설마 저게 문제인가 하고 output.html에 jinja2를 사용해서 변수를 넣을 수 있도록 한 다음 html에서 결과값이 출력되도록 하니 web에서도 한글이 출력되는 것 볼 수 있었다.
배움
결과적으로는 문제를 해결했지만 이 나름 간단한 문제에 생각보다 많은 시간을 소비했다. 이러면서 실력이 느는 거라는 생각이 있는 한 편 참 효율적으로 개발하지 않는다는 생각도 들었다. 끝에와서야 항상 다짐하는 것이지만 다음부터 개발하거나 디버깅을 할 때는 바로 손부터 움직이지 말고 생각을 하거나 diagram을 그려보고 전체적인 틀이 잡혔을 때 키보드에 손을 올려야겠다. 알면서도 잘 되지 않는다. 그래도 내가 천재가 아니라는 가정 하에 최소한 괜찮은 개발자가 되기 위해서는 이 습관을 잘 기르는 것이 중요할 것 같다.