한글아 제발 (인코딩)

Welcome to Seoyun Dev Log·2022년 11월 13일
0
post-thumbnail

문제

  • 웹 브라우저에서 한글 깨짐 => ???
    [상황]
  1. 입력 폼 화면 요청 ( html 한글 ?? 물음표로 깨짐)

  2. 텍스트 입력 후 등록 버튼 클릭

  3. DB확인

  4. 응답 결과 확인


문제해결 시도 과정

1. 해결 시도 (1)

  1. mysql DB에도 깨져서 들어감

  2. 서버에서 DB로 전송할 때도 깨져서 저장된다

1) 설정 확인

show variables like 'c%';

2) utf-8 변경

ALTER DATABASE `board-aws` charset=utf8mb4;

🙃 응 아니야 ~


2. 해결 시도 (2) DB 한글 입출력 인코딩 확인

postman 응답 체크

값은 정상으로 입력, 출력되고 있다
=> DB 인코딩은 정상

ubuntu?
컴파일?
http?
어디가 문제인가


3. 해결 시도 (3) http 인코딩

+ 로컬 환경에서 체크해보기 > 한글 잘 나옴

컴파일, 인텔리제이, DB 인코딩 문제는 아니다

Ubuntu?

  • 차이가 무엇인지 확인
    좌측 : aws 서버에서 띄웠을 때
    우측 : 로컬 환경에서 실행

참고 링크:

웹에서 한글이 깨지는 이유는 웹브라우저와 웹서버가 서로 다른 인코딩 방식을 사용하기 때문이다.

이게 문제인것 같음!!!!
: 기본값을 받아올 때 ISO-8859-1
서로 요청과 응답 인코딩 방식이 다르다 (두근두근)

: console 개발자 모드 http header 확인 결과
=> html 화면 한글이 깨지는 이유는 이것인가?

http header Content-Type 변경 시도

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@RequestMapping(value = "/hospital", produces = "text/plain;charset=UTF-8")

4. 해결 시도 (4) env

가상 호스트 -e

https://www.ibm.com/docs/ko/sva/10.0.0?topic=configuration-utf-8-encoding-http-header-data

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=haisins&logNo=140117634496


멘토님과 시도 1

1) docker mysql 접속해서 characterset 확인
: utf-8로 되어있음

  • 시도

https://beanbroker.github.io/2019/07/07/docekr_encode/

  • 어...? 근데 뭔가 DB값이 유니코드 값인것 같은 느낌

: &#51228; 해당 코드를 브라우저에 검색하면 자동으로 인코딩되어 한글로 번역해서 검색이 된다

html 인코딩이 잘 못 된건가? 뭔가 자꾸 html 인코딩이 걸린다


멘토님과 시도 2

show variables like 'c%';

변경전

<1. mysql 컨테이너 접속하여 변경해줌>

mysql> SET character_set_client = utf8;
mysql> SET character_set_results = utf8;
mysql> SET character_set_connection = utf8;
mysql> ALTER DATABASE DB명 DEFAULT CHARACTER SET utf8;
mysql> commit;

commit 명령어는 하위 테이블에 적용하는 명령어

변경 후

<2. my.cnf에 적용하는 방법(mysql 재기동 필요)>

[mysql]
default-character-set=utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
character-set-client-handshake=FALSE
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
old_passwords=1

[client]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

my.cnf 파일에 위 내용을 넣고 mysql을 재기동

멘토님과 시도 3

디버깅한 결과
: 데이터베이스 문제는 아니다.
postman과 출력할때는 한글이 잘 나옴
문제는 ec2 앱에서 한글 인코딩 문제 발생

  • html 해당 file 인코딩 확인
file -bi hospital-list.mustache

file -bi [파일명]

  • curl 확인
curl -I http://ec2-3-35-226-64.ap-northeast-2.compute.amazonaws.com:8088/articles/6

curl -I [페이지 주소]


https://dev-monkey-dugi.tistory.com/125


해결

yml 파일을 누락했던 것...

공통 application.yml

profile
하루 일지 보단 행동 고찰 과정에 대한 개발 블로그

1개의 댓글

comment-user-thumbnail
2024년 7월 5일

저랑 동일한 문제인것같습니다. 단순히 웹컨피그에서 설정하면 되는건가요

?

답글 달기