-
Spring Boot 시리즈 27편 – 다국어(i18n) 지원 전략: 메시지 번들, 리소스 자동 로딩, 언어 감지까지기술과 산업/언어 및 프레임워크 2025. 5. 7. 00:16728x90
Spring Boot에서 다국어(i18n) 지원을 위한 메시지 번들 구성, 언어 자동 감지, 동적 언어 전환 방법을 설명합니다. 글로벌 서비스 대응을 위한 실전 전략을 제시합니다.
Spring Boot 시리즈 27편 – 다국어(i18n) 지원 전략: 메시지 번들, 리소스 자동 로딩, 언어 감지까지
전 세계를 대상으로 서비스하는 SaaS나 앱은 더 이상 예외적인 사례가 아닙니다.
한국어 외에도 영어, 일본어, 스페인어 등 다국어 지원은 기획 단계에서 반드시 고려해야 하는 필수 기능입니다.
Spring Boot는 기본적으로 i18n(Internationalization) 기능을 내장하고 있으며,
적절한 설정과 구조만 갖춘다면 유연하게 글로벌 사용자에게 맞춤 언어를 제공할 수 있습니다.
이번 글에서는 Spring Boot 기반 프로젝트에서
- 메시지 리소스 설정
- 언어 선택 및 감지 방법
- 동적 언어 전환 방법
- 을 실무 중심으로 설명합니다.
📌 1. i18n 기본 개념과 흐름
Spring Boot의 i18n 처리 흐름은 다음과 같습니다.
[1] 사용자의 Accept-Language 또는 수동 선택 ↓ [2] MessageSource가 언어에 맞는 properties 파일 탐색 ↓ [3] 컨트롤러/템플릿/에러 메시지에 번역 결과 반영
✅ 2. 메시지 번들 구성하기
1️⃣ 기본 폴더 구조
src/main/resources/ ├── messages.properties (기본) ├── messages_en.properties (영어) ├── messages_ko.properties (한국어) └── messages_ja.properties (일본어)
2️⃣ application.yml 설정
spring: messages: basename: messages encoding: UTF-8
- basename에 다국어 메시지 파일 접두어 설정
- Locale에 따라 자동으로 해당 언어 리소스 로드됨
3️⃣ 메시지 번들 예시
messages.properties (기본)
greeting=Welcome!
messages_ko.properties
greeting=환영합니다!
messages_ja.properties
greeting=ようこそ!
🛠️ 3. 컨트롤러에서 다국어 메시지 사용
@RestController @RequiredArgsConstructor public class GreetingController { private final MessageSource messageSource; @GetMapping("/greet") public String greet(Locale locale) { return messageSource.getMessage("greeting", null, locale); } }
- Locale은 HTTP Header의 Accept-Language를 기준으로 자동 주입됨
- 영어 브라우저로 요청 시 Welcome!, 일본어는 ようこそ!
🌐 4. 언어 감지 및 수동 전환 전략
1️⃣ Accept-Language 기반 자동 감지
GET /greet Accept-Language: en-US
Spring Boot는 기본적으로 Header 기반 LocaleResolver를 사용
2️⃣ Cookie 기반 수동 전환
@Bean public LocaleResolver localeResolver() { CookieLocaleResolver resolver = new CookieLocaleResolver(); resolver.setDefaultLocale(Locale.KOREA); return resolver; }
→ 사용자가 언어 선택 시 쿠키에 저장 가능
예: locale=ja → 이후부터 일본어 메시지 사용
3️⃣ 웹 기반 언어 선택 처리 (링크 기반)
<a href="?lang=ko">한국어</a> <a href="?lang=en">English</a>
@Bean public LocaleChangeInterceptor localeChangeInterceptor() { LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor(); interceptor.setParamName("lang"); return interceptor; }
→ /greet?lang=ja 요청 시 일본어로 동적 변경
🧠 실무 설계 팁
항목전략
파일 위치 src/main/resources/messages_*.properties 유지 기본 언어 messages.properties는 항상 영어 또는 디폴트 언어 신규 번역 대응 키 기반 정렬, 버전 관리 Git으로 추적 관리자 도구 i18n 관리 툴(PoEditor, Crowdin 등) 연계 추천 미번역 대응 defaultMessage 파라미터 지정 or 로그 경고 출력
✅ 마무리 요약
항목요약
메시지 파일 언어별 .properties 파일로 분리 관리 자동 감지 Accept-Language 기반 Locale 자동 선택 수동 전환 Cookie, URL 파라미터 기반 언어 변경 처리 가능 실무 팁 번역 키 관리 일관성 유지 + 자동화 도구 연계 확장 전략 외부 CMS, DB 기반 번역 로딩으로 확장 가능
📌 다음 편 예고
Spring Boot 시리즈 28편: 예외 처리 전략 – @ControllerAdvice, 커스텀 예외, 에러 응답 표준화
728x90'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
NestJS 마스터 시리즈 11화. 파이프(Pipe) – 요청 데이터의 정제와 전처리 전략 (0) 2025.05.07 FastAPI 시리즈 7화 - Response 모델과 응답 커스터마이징 (0) 2025.05.07 전자정부 표준프레임워크 시리즈 5화 – 버전별 주요 변화와 특징 정리: 3.0에서 4.3까지 무엇이 달라졌는가 (0) 2025.05.06 JHipster 시리즈 2화 - JHipster 설치와 프로젝트 생성 – 모놀리식 앱 실습 (1) 2025.05.05 Python 마스터 시리즈 6화 – 함수 정의와 호출, 매개변수와 반환 구조 설계하기 (0) 2025.05.05