4.8.1.1 MessageSource를 사용한 국제화
스프링은 ApplicationContext 이외에도 세 가지 MessageSource 구현체를 제공합니다.
• ResourceBundleMessageSource
• ReloadableResourceBundleMessageSource
• StaticMessageSource
StaticMessageSource 구현체는 상용 애플리케이션에서는 사용하지 말아야 합니다. 일반적으로 애플리케이션에 i18n을 기능을 추가할 때 필요한 외부 구성을 할 수 없기 때문입니다.
ResourceBundleMessageSource는 자바의 ResourceBundle을 사용해 메시지를 읽어 들입니다. ReloadableResourceBundleMessageSource도 ResourceBundleMessageSource와 기본적으로 동일하지만 메시지 소스 파일에서 주기적으로 메시지를 다시 읽어 들일 수 있는 차이가 있습니다.
세 가지 MessageSource 구현체 모두 HierarchicalMessageSource라는 또 다른 인터페이스도 구현하는데, 이 인터페이스로 여러 MessageSource 인스턴스를 내장할 수 있습니다. 이와 같은 메커니즘으로 ApplicationContext는 여러 MessageSource 인스턴스와 함께 동작합니다.
ApplicationContext가 제공하는 MessageSource 기능을 활용하려면 이름이 messageSource인 MessageSource 타입 빈을 구성에 정의해야 합니다. ApplicationContext이 해당 MessageSource 빈을 가져와 내장하면 애플리케이션은 ApplicationContext를 사용해 메시지에 접근할 수 있습니다. 말로는 설명하기 어려우므로 다음 예제를 보겠습니다. 다음은 영어와 한국어 로케일 메시지에 접근하는 간단한 예제 애플리케이션입니다.