-
우아한테크캠프 Day17우아한테크캠프 2018. 7. 25. 23:25
아래는 배민찬 서비스 중 회원가입과 로그인 기능을 구현하며, 배운 것들을 정리한 것이다.
스프링은 새로운 객체를 무조건 관리하지 않는다. 따라서, 객체에 무엇인가를 주입해주려면 객체를 Spring 관리 컴포넌트로 만들어줘야 한다. (@Component)
Day17 학습 내용
웹 애플리케이션을 개발하다 보면 MessageSource가 변경될 경우 MessageSource를 반영하기 위하여 애플리케이션 서버를 재시작하는 경우가 많다. 이러한 문제를 해결하기 위해 스프링에서는 ReloadableResourceBundleMessageSource 클래스를 지원하고 있다. 이러한 기능 때문에 ReloadableResourceBundleMessageSource 클래스를 사용할 때는 파일이 변경되었는지를 모니터링 하기위한 시간을 설정해야 한다.
MessageSource 인터페이스
스프링에서는 다국어 처리를 위한 방법으로 org.springframework.context.MessageSource 인터페이스를 제공하고 있다.
ApplicationContext는 MessageSource 인터페이스를 상속하여 메세지 기능을 제공한다.
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {ApplicationContext를 통해 메시지를 가져오기 위해서는 messageSource인 빈 객체를 등록해줘야 한다.
ApplicationContext가 초기화 될 때 MessageSource를 구현한 빈 객체를 찾아서 내부 프로퍼티인 MessageSource messageSource에 등록하게 된다.
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(30);
return messageSource;
}
@Bean
public MessageSourceAccessor messageSourceAccessor(MessageSource messageSource) {
return new MessageSourceAccessor(messageSource);
}사용법
@Slf4j
@RestControllerAdvice
public class ValidationExceptionControllerAdvice {
@Resource(name = "messageSourceAccessor")
private MessageSourceAccessor msa;
private String getErrorMessage(FieldError fieldError) {
...
log.info("code.get() : {}", code.get());
String errorMessage = msa.getMessage(code.get(), fieldError.getArguments(), fieldError.getDefaultMessage());
log.info("error message: {}", errorMessage);
return errorMessage;
}구현체
ReloadableResourceBundleMessageSource : 서버를 다시 시작하지 않고도 메시지를 다시 정의할 수 있다.
MessageSource와 @PropertySource 차이
@PropertySource, @Value
민감하고 중요한 데이터는 application.properties 파일에서 관리한다. (포트, DB 설정값 etc...)
민감한 정보기 때문에 이것을 반영하기 위해서는 서버를 죽였다 살려야 한다.
MessageSource
상대적으로 덜 민감한 에러메시지는 messages.properties 파일에서 관리한다.
상대적으로 덜 민감한 정보기 때문에 서버를 죽였다 살릴 필요가 없이 자동 반영된다.
참고
https://github.com/kenu/springstudy2013/blob/master/0325/1.SpringMessageSource.md
'우아한테크캠프' 카테고리의 다른 글
우아한테크캠프 중간에 빠진 부분 (0) 2018.07.28 우아한테크캠프 Day20 (0) 2018.07.27 우아한테크캠프 Day15 (0) 2018.07.23 우아한테크캠프 Day14 (0) 2018.07.20 우아한테크캠프 Day13 (0) 2018.07.18