본문 바로가기
BackEnd/Spring

[Spring Demo]메세지 데이터 소스

by andante131 2023. 9. 24.

만약에 하드코딩된 UI 데이터를 서버단에서 바꿔주어야 할때 일일이 하나씩 바꾼다면 얼마나 지난한 작업이 될 것인가.

 

스프링에서 글자와 관련된 데이터를 하드코딩 하지 않고 데이터로 가지고 있으면서 필요할때 사용할수 있다.

 

이것은 리액트와 연동시에도 가능하고, thymeleaf 같은 템플릿엔진에도 적용할 수 있다

 

1 메세지 데이터 소스

 

기본적으로 메시지소스 설정은 스프링 빈 중 MessageSource라는 빈을 수정해서 사용할 수 있다 

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/MessageSource.html

 

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

basenames : 설정 파일의 이름을 지정할 수 있다 

* /resources 하위에서 찾는다.

* /resources/messages.properties

defaultEncoding : 기본 인코딩 설정 적용 가능

 

추가로 다른 설정들은 spring doc의 application.properties 부분을 참고하자.

https://docs.spring.io/spring-boot/docs/2.7.16/reference/html/application-properties.html#appendix.application-properties

 

Common Application Properties

 

docs.spring.io

 

여기를 참고하면 된다. 여기서 spring.messages. 라고 검색해보자

 

2 국제화 기능

국제화 기능은 메세지 데이터 소스 파일명 뒤에 로케일을 붙여ㅂ주면 된다. 

 

/resources/messages.properties -> /resources/messages_en.properties , /resources/messages_ko.properties

 

등으로 나눠서 작성하면 된다

 

 

3 그 외

messages.properties 에서

hello=안녕
hello.name = 안녕 {0}

이렇게 작성하면 배열의 첫번째 값을 hello.name을 출력했을 때 같이 동적으로 보여줄 수 있다. 

 

public interface MessageSource {
    String getMessage(String code, @Nullable Object[] args, @Nullable String
  defaultMessage, Locale locale);
    String getMessage(String code, @Nullable Object[] args, Locale locale) throws
  NoSuchMessageException;
}

이러한 인터페이스에서 두번째 메소드 인자인 args에 원하는 배열 값을 넣는 것이다