Spring 메시지 관리

hoyong.eom·2023년 7월 19일
0

스프링

목록 보기
17/59
post-thumbnail

Spring

스프링은 이러한 메시지 관리와 국제화 기능을 모두 제공한다.

1. 메시지 관리

하드코딩된 메시지(TW)를 특정 파일에서 일관되게 관리하도록 하는것을 말한다.(messages.properties)
왜 이렇게 관리해야하냐면... 만약 특정 화면의 제목을 변경해야하는 경우, 이 제목은 소스 코드에 하드 코딩되어있는게 아니라 메시지 파일에서만 바꿔주면 소스 코드의 변경 없이 요구 사항을 반영할 수 있게 된다.
(일관성을 갖는다.)

스프링에서 메시지 관리 기능을 제공하기 위해서 MessageSource를 스프링 빈으로 등록해야하는데, 스프링 부트를 사용하는 경우 자동으로 스프링빈으로 등록해주긴 한다고 한다.

	@Bean
	public MessageSource messageSource() {
		ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
		messageSource.setBasenames("messages", "errors");
		messageSource.setDefaultEncoding("utf-8");
		return messageSource;
	}

MessageSource는 messages와 errors 라는 파일을 자동으로 읽어서 사용한다.(위 코드가 디폴트로 스프링 부트에서 스프링빈으로 추가해줌)
따라서, messages로 지정하면 messages.properties 파일을 읽어서 사용하며, 여기에 국제화 기능을 적용하려면 messages_en.properties, messages_ko.properties와 같이 파일명 마지막에 언어 정보를 주면 된다.
만약 국제화 파일을 찾을 수 없다면 messages.properties 를 기본으로 사용한다.

파일의 위치는 /resources/messages.properties 에 둔다.

1.1 스프링 부트에서 메시지 소스 설정

스프링 부트를 쓰면 MessageSource를 스프링빈으로 자동으로 등록해준다고 한다.
그리고 스프링부트에서 MessageSource를 설정하기 위해서 application.properties파일에 아래와 같이 적는다.

spring.messages.basename=messages

만약 스프링빈으로 등록하지 않고, 별도의 설정을 하지 않는다면 messages라는 이름으로 기본 등록된다.

1.2 메시지 소스 사용하기

MessageSource는 messages.properties 파일을 읽어서 값을 반환해주는 역할을 수행한다.

스프링빈으로 등록된 MessageSource를 이용해서 메시지를 가져올 수 있다.

사용 예시는 아래와 같다.

    @Autowired
    MessageSource ms;

    @Test
    void whatMessage() {
        String result = ms.getMessage("what", null, null);
        assertThat(result).isEqualTo("뭐야");
    }

getMessage의 매개변수는 첫번째부터 code, args, locale 값이 된다.

2. 국제화

국제화는 메시지 파일(messages.properties)을 각 나라별로 별도로 관리하면 서비스를 국제화할 수 있다

3. 참고

해당 포스팅은 아래의 강의를 공부 후 개인적으로 정리한 내용입니다.
김영한님의 SpringMVC1편- 메시지,국제화

0개의 댓글