자바 스프링 다국어처리

dropKick·2024년 1월 29일

개발 이슈

목록 보기
3/14

개요

  • 다국어 결제 서비스를 제공하고 있고, 최근 이슈가 발생하여 공부
    • 로케일이 강제 변환 되버리는 현상
  • 스프링에서 다국어(i18n) 처리를 적용하는 방법과 주요 개념 (LocaleResolver, Encoding, Charset)을 이해함

스프링 다국어(i18n) 처리

  • 스프링에서는 다국어 처리를 위해 LocaleResolver를 이용하여 사용자의 언어 설정을 감지
  • messages_xx.properties 로 각 언어별 메시지 설정 파일을 관리하는 것이 정석
    • messages_eng.properties
  • 다국어 처리는 스프링에서 LocaleResolver가 제공

LocaleResolver

✅ 사용자의 요청에서 언어 정보를 감지하여 해당 언어에 맞는 리소스를 반환
✅ Session, Cookie, Accept-Language Header 등을 이용하여 언어를 설정 가능

타입속성
AcceptHeaderLocaleResolver (기본값)브라우저 Accept-Language 헤더
SessionLocaleResolver사용자 Session
CookieLocaleResolver브라우저 Cookie

AcceptHeaderLocaleResolver

  • 브라우저 헤더 기반 동작
  • 브라우저 설정 언어를 가져옴
  • 실제 문제가 되었던 로케일 동작 방식
구현
@Bean
public LocaleResolver localeResolver() {
    return new AcceptHeaderLocaleResolver();
}

SessionLocaleResolver

  • 사용자 요청 세션에 담긴 로케일 구분
  • 로드밸런싱에 따른 세션 클러스터링 필요
구현
@Bean
public LocaleResolver localeResolver() {
    return new SessionLocaleResolver();
}

CookieLocaleResolver

  • 브라우저 쿠키에 설정된 로케일 사용
  • 브라우저 재시작 시에도 유지
  • 쿠키 보안 문제 있음
구현
@Bean
public LocaleResolver localeResolver() {
    CookieLocaleResolver localeResolver = new CookieLocaleResolver();
    localeResolver.setCookieName("localeCookie"); // 쿠키 이름
    localeResolver.setCookieMaxAge(24 * 60 * 60); // 유지 시간
    localeResolver.setDefaultLocale(Locale.ENGLISH); // 로케일 설정
    return localeResolver;
}

해결

  • 일관성 있는 로케일 제공을 위해 쿠키로 방식 변경
    • 세션 클러스터링이 없는 상태에서 세션 클러스터링 구현과 쿠키에서 리소스 효율성을 따졌음
profile
안아줘요

0개의 댓글