API로 서버에서 읽어오는 한글 텍스트가 자꾸 깨지는 거임..
Spring boot yml 파일에도 설정해보고 Tomcat 설정도 해봤는데 JVM 인코딩 설정하니 됐음..
tomcat 인코딩 설정
server.xml 설정
<Connector port="8080" URIEncoding="UTF-8" ... />
- 적용 대상: 요청(Request)의 URL(쿼리 파라미터 등)
- 예: /search?query=한글에서 query=한글 → 이 값을 Tomcat이 UTF-8로 해석함.
- 주의: POST body의 form data나 JSON에는 적용되지 않음.
web.xml 설정
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
- 적용 대상:
- 요청 body 파라미터 인코딩 (POST, PUT form)
- 응답 헤더의 Content-Type charset 설정
- Spring Boot에서는 application.yml에서 아래로 대체 가능
spring:
http:
encoding:
charset: UTF-8
enabled: true
force: true
JVM 인코딩 설정
JVM 내부에서 기본 문자 인코딩으로 사용됨
톰캣경로/bin/setenv.sh 파일에 설정하였음
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
setenv.sh : Tomcat 실행 시 JVM 옵션이나 환경변수를 설정하는 스크립트
- Java 표준 입출력(I/O) 기본 인코딩
- 예를 들어 new InputStreamReader(someStream) 처럼 인코딩을 명시하지 않을 때 기본 인코딩으로 사용
- 파일 입출력, 콘솔 출력, 로그 기록 등에서 기본 인코딩 기준이 됨
- 애플리케이션이 명시적으로 인코딩을 지정하지 않은 경우의 문자열 처리
- 예를 들어, new String(byteArray) 처럼 인코딩을 지정하지 않으면 JVM 기본 인코딩을 사용
- 톰캣이나 스프링이 처리하기 전에 JVM 내부에서 문자 데이터를 다루는 기본 인코딩
- 톰캣이나 스프링 필터 전에 JVM 레벨에서의 인코딩 기준 역할을 하므로, JVM 인코딩이 달라서 문제 발생하는 경우도 있음
서버 인코딩 확인
locale
요약
- JVM 인코딩: 내부 기본 문자셋, 파일 I/O, 콘솔 출력 등에 영향
- 톰캣 인코딩: URL 파라미터, 요청 처리 입출력 인코딩에 영향
- 스프링 인코딩: HTTP 요청 바디, 응답 헤더에 인코딩 지정
- 운영체제 로케일: JVM 기본 인코딩에 간접 영향
- 클라이언트 인코딩: 요청 인코딩과 응답 처리에 직접 영향
'기타' 카테고리의 다른 글
JPA N+1이란? N+1 해결방법 (0) | 2024.05.23 |
---|---|
알파스캔 콘퀘스트 32U90G 게이밍 4K UHD 144 (0) | 2024.01.30 |
구글 캘린더 스크롤 오류 / 윈도우 스크롤 오류 (0) | 2023.10.23 |
큐센 MK450 고장 / 큐센 DT45 고장 / 큐센 무선키보드 연결 안 됨 (0) | 2023.04.26 |
게임 화면 alt tab 시 신호없음 (0) | 2022.05.03 |