기타

JVM 인코딩 / Tomcat 인코딩 / Springboot 인코딩 / 서버 인코딩

메리짱123 2025. 5. 22. 19:04
반응형

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 기본 인코딩에 간접 영향
  • 클라이언트 인코딩: 요청 인코딩과 응답 처리에 직접 영향
반응형