[Spring] 메시지, 국제화
메시지, 국제화 기능
메시지 기능이란 화면이나 사용자에게 전달되는 텍스트 정보를 한 곳(messages.properties)에서 관리할 수 있는 기능을 의미한다. 그리고 이런 메시지 파일을 나라별로 만들어서 서비스의 다국어 처리를 하는 것을 국제화라고 한다.
MessageSource
위 기능을 사용하려면 MessageSource를 스프링 빈으로 등록해야 한다. (스프링 부트의 경우 자동 등록)
- 스프링에서 국제화, 로컬화를 지원하기 위한 인터페이스로 구현체는 ResourceBundleMessageSource가 있다.
- /resources 하위에 messages.properties 파일을 생성하면 이를 기본으로 사용하며, 국제화 기능을 사용하려면 messages 뒤에 언어 정보를 입력하면 된다. (messages_en.properties, messages_ko.properties)
// MessageSource 수동 등록
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasenames("messages", "errors");
messageSource.setDefaultEncoding("utf-8");
return messageSource;
}
# MessageSource 설정. (스프링 부트의 경우 spring.messages.basename=messages 기본 값)
spring:
messages:
basename: messages
encoding: UTF-8
error.message=기본 예외 메시지
error.user.message={0}님 예외 메시지
messages.properties
error.message=exception message
messages_en.properties
MessageSource 사용
빈으로 MessageSource가 등록되어 있으므로 @Autowired를 통해 객체를 주입받을 수 있다.
이후 messageSource.getMessage 메서드를 통해 메시지 파일에 정의한 메시지를 가져올 수 있다.
파라미터는 code(key), args, locale 정보가 들어가며 locale을 지정하지 않는다면 Locale.getDefault()을 호출해서 시스템의 기본 locale을 사용한다.
@SpringBootTest
public class MessageSourceTest {
@Autowired
MessageSource messageSource;
@Test
void test() {
String message = messageSource.getMessage("error.message", null, null);
Assertions.assertThat(message).isEqualTo("기본 예외 메시지");
String userMessage = messageSource.getMessage("error.user.message", new Object[]{"hbb"}, null);
Assertions.assertThat(userMessage).isEqualTo("hbb님 예외 메시지");
String enMessage = messageSource.getMessage("error.message", new Object[]{"hbb"}, Locale.ENGLISH);
Assertions.assertThat(enMessage).isEqualTo("exception message");
}
}
만약에 아래와 같이 messages.properties에서 한글이 깨진다면
Settings -> Editor -> File Encodings → Default encoding for properties files 설정
- ISO-8859-1 -> UTF-8
- Transparent native-to-ascii conversion 체크

참고
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런
김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습
www.inflearn.com