Spring Message

  2 mins read  

Spring Message 설정

1. 스프링 프레임워크 Message

1.Spring MessagSource
국제화(i18n)을 제공하는 인터페이스이다. 메세지 설정 파일을 모아놓고 각 국가마다 국가마다 로컬라이징을 함으로서 쉽게 각 국가에 맞춘 메세지를 제공할 수 있다.

message.properties 파일 설정

message.properties 파일 안에 값들은 key와 value 형태로 정의합니다.
프로퍼티 값에는 MessageFormat 클래스가 해석할 수 있는 메시지 문자열을 지정해야 합니다.

welcome.message=\uD658\uC601\uD569\uB2C8\uB2E4.


message-context.xml 파일 설정

다음엔 message-context.xml 파일을 만들어 basenames라는 프로퍼티 밑에 파일의 위치를 지정해줍니다.
이 때 뒤에 .properties 는 생략합니다.

스프링이 외부에서 메시지를 가져오기 위해서는 MessageSource라는 인터페이스를 사용합니다.
스프링 프레임워크에서는 다양한 MessageSource의 구현체들을 제공하는데 대표적인 예가 ResourceBundleMessageSource 와 ReloadableResourceBundleMessageSource 이다.

ReloadableResourceBundleMessageSource는 일정 주기로 업데이트를 확인하는 기능을 합니다.

contorller 설정

메시지에 접근하기 위해서 MessageSource를 주입받고 MessageSource의 .getMessage() 메서드를 이용해 메시지를 가지고 옵니다.

@Autowired
private MessageSource messageSource;

@RequestMapping(value = "/hellow2", method = RequestMethod.GET)
public ResponseEntity<?> hellow2() throws Exception {
		
	log.debug(messageSource.getMessage("welcome.message", new String[] {"이데아텍"}, Locale.KOREAN));
	
	Map<String, String> out = new HashMap<>();
	out.put("result", "Hellow World 1");
	
	return new ResponseEntity<Map<String, String>>(out, HttpStatus.OK);
}


MessageUtils.java 설정

이제 설정한 Bean으로부터 Message Property를 편하게 사용하기 위한 유틸 객체를 작성하겠습니다.

package util;

import java.util.Locale;

import org.springframework.context.support.MessageSourceAccessor;

public class MessageUtils {
    private static MessageSourceAccessor msAcc = null;
    
    public void setMessageSourceAccessor(MessageSourceAccessor msAcc) {
        MessageUtils.msAcc = msAcc;
    }
     
    public static String getMessage(String code) {
        return msAcc.getMessage(code, Locale.getDefault());
    }
     
    public static String getMessage(String code, Object[] objs) {
        return msAcc.getMessage(code, objs, Locale.getDefault());
    }
}


controller 설정

	@RequestMapping(value = "/hellow2", method = RequestMethod.GET)
	public ResponseEntity<?> hellow2() throws Exception {
				
		log.debug(MessageUtils.getMessage("welcome.message"));
		
		Map<String, String> out = new HashMap<>();
		out.put("result", "Hellow World 1");
		
		return new ResponseEntity<Map<String, String>>(out, HttpStatus.OK);
	}



2. 스프링 부트 Message

MessageConfig 파일 생성

config라는 이름의 패키지를 만든 후 MessageConfig 설정 파일을 만들어 위와 같이 선언했습니다. 디테일한 설정은 스프링과 같습니다. ReloadableResourceBundleMessageSource 객체 선언 후, basename에 프로퍼티 파일의 위치, 업데이트 확인 주기 설정, 인코딩 설정 등을 설정해준 후 반환 해주는 역할을 합니다.

package spring.boot.tomcat.config;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;

@Configuration
public class MessageConfig {
	@Bean
	public MessageSource messageSource() {
		ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
		
		source.setBasename("classpath:message/message");
		source.setCacheSeconds(60);
		source.setDefaultEncoding("UTF-8");
		source.setUseCodeAsDefaultMessage(true);
		
		return source;
	}
}


controller 설정

spring framework 설정과 같다.

@Autowired
private MessageSource messageSource;
	
private static final Logger log = LoggerFactory.getLogger(TestController.class);

@RequestMapping(value = "/hellow2", method = RequestMethod.GET)
public ResponseEntity<?> hellow2() throws Exception {
		
	log.debug(messageSource.getMessage("welcome.message", new String[] {"이데아텍"}, Locale.KOREAN));
				
	Map<String, String> out = new HashMap<>();
	out.put("result", "Hellow World 2");
	
	return new ResponseEntity<Map<String, String>>(out, HttpStatus.OK);
}
profile img

oscar

Why do you make efforts commonly, dont't want to live commonly.

Read more