본문 바로가기
CICD/AWS

[AWS] 트러블 슈팅 json 타입 한글깨짐 utf-8 때문 아님

by windy7271 2025. 2. 9.
728x90
반응형

제게 배포 하는 중에 진짜 어이가 없는 문제가 있었습니다.

 

키워드에는 한글이 들어가고

key_product_sales 는 json 타입인데 한글이 들어가지 않습니다.

 

백엔드 서버가 장고랑, 스프링 두 개가 있는데 RDS에 Table 생성하는것은 스프링입니다.

 

그래서 key_product_sales 은 String 으로 하지 않았고

@Type(JsonBinaryType.class) 
@Column(columnDefinition = "json")
private Map<String, Long> keyProductSales;

 

이렇게 했습니다.  그리고 엑셀 파일은 디장고에서 넣어줍니다. 그래서 파이썬 코드도 

key_product_sales = models.JSONField(null=True, blank=True)

 

이렇게 하였습니다. 디장고는 json 타입을 지원하기 때문에 이상태에서 집어넣으면 넣어진다고 합니다. 그래서 넣었더니 한글이 안들어 갑니다.

 

그래서 일단 RDS 에 파라미터 그룹을 생성해서 

 

이것들을 다 해줬는데도 불구하고 keyword라는 테이블에 json으로 이름이 들어가는곳이 문자열이 안들어갑니다.

 

해결방법은 여기까지 일단 작성을 해놓고 찾으러 갑니다.

배포환경에서

 

ALTER TABLE keyword MODIFY COLUMN key_product_sales JSON;

 

이거를 때려줘도 타입이 변하지 않습니다. 

찾아보니 MariaDB를 배포하면 별칭으로 쓰인다고 합니다.

 

1. 파이썬에서 json타입에 아래 붙이기

ensure_ascii=False

 

이거를 붙여주나, 안 붙여주나 저장이 되기 바로 직전에 print를 찍어봤는데 한글이 잘나옵니다.

 

근데 저장을 하면 안 들어갑니다. 진짜 기가막힙니다. 

 

해결방법은 json 필드를 charFiled로 수정을 해주면 알맞게 들어가게 됩니다.

 

수정전
key_product_sales = models.JSONField(null=True, blank=True)

수정후
key_product_sales = models.CharField(max_length=1000)

 

 

 

참고로 이거를 찾다가 알아낸건데

파이썬에서 json을 그대로 저장하게되면 한글이 안들어간다고 합니다. 그래서 ensure-ascii=False가 필요합니다.

 

반응형

댓글