[Spring] 메시지

robert·2022년 3월 1일
0
post-custom-banner

김영한 스프링 MVC 2편 - 메시지 강의를 듣고 기록 차원에서 남기는 글입니다.

기획자가 특정 단어를 모두 다른 단어로 바꿔달라고 요청을 한다. 이럴때 개발자는 해당 단어를 검색해서 모두 변경 요청한 단어로 바꿔야 할 것이다.
이렇게 하는게 가능은 하지만 많은 파일이 변경되어야 하며 실수가 일어날 수도 있다. 이런 경우 사용하면 편리한게 메시지 기능이다.

어떻게 사용해야 하나?

  1. 스프링 메시지 소스 설정
  • 스프링 부트의 경우는 생략 가능
@Bean
	public MessageSource messageSource() {
		ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
		messageSource.setBasenames("messages", "errors");
		messageSource.setDefaultEncoding("utf-8");
		return messageSource;
	}

스프링의 경우 MessageSource 인터페이스의 구현체를 만드는 빈을 만들어야 한다.

스프링 부트를 사용하면 부트가 알아서 MessageSource를 자동으로 빈으로 등록한다.
application.properties에 spring.messages.basename=messages 값으로 기본 설정한다.

  1. 메시지 파일 만들기

messages_en.properties, messages.properties 파일만 등록하면 된다.

messages.properties

hello=안녕
hello.name=안녕 {0}
label.item.itemName=상품명

messages_en.properties

hello=hello
hello.name=hello {0}
label.item.itemName=Item Name
  1. 스프링 메시지 소스 사용


MessageSource는 code, args, locale 정보를 바탕으로 메시지 정보를 가져온다.


code : hello, args : null, locale : null을 넣었으므로 기본 파일인 messages.properties에서 정보를 가져왔다. 결과값은 "안녕"이다.

  1. 웹 애플리케이션 메시지 적용방법
<div>
	<label for="itemName" th:text="#{label.item.itemName}">상품명</label>
	<input type="text" id="itemName" th:field="*{itemName}" class="form-control" placeholder="이름을 입력하세요">
</div>

타임리프의 메시지 표현식 #{...}을 사용하면 메시지를 편리하게 사용가능.
#{label.item.itemName}을 사용하여 messages.properties에 저장된 상품명을 손쉽게 가져올 수 있다.

국제화 적용

사실 국제화는 앞서 말한 #{...} 메시지 표현식을 통해 사용 가능하다.
browser 언어 설정값 변경을 요청하면 accept-language 우선순위 값이 변경이 되어서 요청이 가고 서버에서는 accept-language 우선순위에 맞게 자동으로 해당 properties의 값을 읽어서 리턴을 한다.
만약 브라우저의 accept language를 따르는게 아니라 다른 방식으로 locale 정보 선택 방식을 변경하고 싶다면 LocaleResolver 인터페이스의 구현체를 변경하면 가능하다.

정리 : 메시지/국제화를 사용한다면 서비스에서 사용하는 메시지들을 조금 더 유연하게 관리할 수 있을 것 같다.

profile
화이팅!
post-custom-banner

0개의 댓글