진짜 개발자
본문 바로가기

FrameWork/Spring

Spring - IoC 컨테이너의 기능 - 3 (MessageSource 란?)

728x90
IoC컨테이너의 기능 MessageSource

IoC컨테이너의 기능 MessageSource에 대해서 알아보려고 합니다. MessageSource는 국제화(i18n)기능을 제공하는 인터페이스 입니다. 즉, 하나의 메시지에 대해 다국어로 번역을 해주는 기능을 제공하는 것입니다.

 

이전 Environment에 대해 포스팅할 때 보았던 그림입니다. 바로 IoC컨테이너의 기능들을 구현하고 있는 ApplicationContext Interface입니다. 자세히 보면 ApplicationContext Interface가 상속받고 있는 여러 Interface 중 MessageSource가 보입니다. 이번 시간에는 저 MessageSource Interface에 대해 공부할 것입니다. 바로 예제를 통해 알아보도록 하겠습니다.

 


예제

1. messages.* 파일 생성

우선 resources하위에 다음과 같은 이름으로 파일 2개를 만듭니다. messages.properties, messages_ko_KR.properties Spring Boot에서는 messages~로 시작하는 파일들을 자동으로 messages 번들로 인식하여 그림처럼 묶어주게 됩니다.


@Bean
public ResourceBundleMessageSource messageSource(){
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.addBasenames("messages");

return source;
}

messages.* 를 자동으로 인식하는 이유는 SpringBoot 내부적으로 위의 설정을 가지는 Bean이 등록이 되어있기 때문입니다. ( 다음 링크의 1.15.1 Internationalization using Messagesource 파트를 참고해주세요 https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#context-functionality-messagesource )

 



messages.properties

messages_ko_KR.properties파일에 다음과 같이 작성합니다. 맨 앞의 greeting가 message에 해당하며, =을 기준으로 뒤에 나오는 말이 메세지의 값에 해당합니다. 또한 {}안에는 message를 사용하는 쪽에서 넘겨주는 파라미터가 들어오게 됩니다.

 

messages_ko_KR.properties

messages_ko_KR.properties파일에는 다음과 같이 작성합니다. 맨 앞의 greeting가 message에 해당 하고 =을 기준으로 뒤에나오는 말이 번역된 말입니다.

 

2. 사용

사용하는 쪽은 간단합니다. 우선 MessageSource를 주입받습니다. 그후 MessageSource 객체를 이용하여 getMessage()메소드에 매개변수로 1. message, 2. argument, 3. Locale을 넘겨주면 됩니다.