메시지, 국제화

Lilac-_-P·2023년 4월 17일
0

스프링 MVC

목록 보기
7/15

메시지

웹 애플리케이션을 개발하다보면, 여러 페이지에서 동일하게 사용되는 단어나 문구들이 있다.
이런 단어나 문구들을 HTML 같은 정적인 영역에 하드코딩 해놓을 경우 추후에 변경 사항 발생 시 여러군데에 반복적으로 있는 모든 단어, 문구들을 모두 수정해야한다. 그럴 바에는 프로그램 코드에서 static과 같은 정적 변수로 상수값을 사용하는 것 처럼, 정적인 영역에 사용되는 단어, 문구들을 따로 한 곳에 모아서 관리하는게 편리할 것이다.

이런 다양한 단어나 문구들을 스프링에서는 메시지라고 하고, 이 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라고 한다.

참고.
스프링에서는 메시지를 보통 properties 파일이나 yml 파일에 모아서 관리한다.

국제화

메시지에서 한 발 더 나가보자.
메시지에서 설명한 메시지 파일을 "각 나라별로 별도로 관리하면" 서비스를 국제화할 수 있다.
HTTP 요청 메시지의 Accept-Language 헤더로 요청을 하는 사용자의 접근 지역 정보를 얻을 수도 있고, 따로 사용자가 직접 언어를 선택하도록 해서, 쿠키를 통해 선택 언어를 처리할 수도 있다.

메시지와 국제화 기능을 직접 구현할 수도 있겠지만, 스프링은 기본적인 메시지와 국제화 기능을 모두 제공한다.
우리는 제공되는 기능을 잘 사용하기만 하면 된다.

스프링 메시지 소스

메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource를 스프링 빈으로 등록하면 되는데, MessageSource는 인터페이스라서, 구현체인 ResourceBundleMessageSource를 스프링 빈으로 등록하면 된다.

참고.
스프링 부트는 MessageSource를 자동으로 스프링 빈으로 등록한다.

MessageSouce 인터페이스의 코드를 보자.

public interface MessageSource {

	@Nullable
	String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale);
	
	String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;

	String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;

}

상당히 심플하게 getMessage()라는 함수가 3개 정의되어 있는데, 3개의 함수 모두 동일하게 메시지를 읽어오는 기능을 한다. 단지 Option을 추가할 수 있는 측면에서 조금씩 차이가 있는 것 뿐이다.

함수의 파라미터를 보면 code, args, defaultMessage, Locale 등이 있는데, 이들의 역할은 다음과 같다.

  • code : properties 또는 yml 파일에서 메시지를 갖고오는 키 값
  • args : properties 또는 yml 파일에서 메시지를 갖고 올 때, 전달할 수 있는 매개변수
  • defaultMessage : code에 해당하는 메시지 값이 properties 또는 yml 파일에 없을 때, 이를 대신하는 기본값 (code에 해당하는 메시지 값이 없고, defaultMessage를 설정하지 않으면 NoSuchMessageException 발생)
  • Locale : 메시지를 갖고 올 때 사용되는 지역정보
profile
열심히 하자

0개의 댓글