(4) 2장_스프링 코어(DI, AOP) - Resource 추상화, Message 관리

2021. 3. 25. 11:32개발공부/스프링 철저 입문


2장의 마지막 개념 Resource 추상화와 Message 관리입니다. 제 생각엔 중심 개념은 아니지만 사용하면 편리한 라이브러리여서 알아두면 좋을 것 같습니다.


Resource 추상화


애플리케이션을 개발할 때 디렉터리나 war 파일, jar 파일 등 이러한 리소스의 위치를 모두 알고 접근해야 하지만 리소스 추상화 기능을 활용하면 구체적인 위치 정보를 직접 다루지 않아도 리소스에 접근할 수 있게 됩니다. classpath를 관리합니다.

Resource 인터페이스의 구현 클래스(UrlResource)를 통해 웹 리소스 가져오기

1
2
3
4
5
6
7
8
    public void accessResource() throws IOException {
        Resource greetingResource =
                new UrlResource("http://localhost:8080/myApp/greeting.json");
 
        try (InputStream in = greetingResource.getInputStream()) {
            String content = StreamUtils.copyToString(in, StandardCharsets.UTF_8);
            System.out.println(content);
    }
}
cs

 

참고로 WritableResource 인터페이스의 구현 클래스는 파일 시스템에 쓰는 기능을 지원하는데 AWS S3 파일 로드와 쓰기가 가능한 기능(Inputstream, Outputstream)도 제공합니다.


메시지 관리


중복되는 메시지를 프로퍼티 파일에 따로 관리합니다. 필요할 때 꺼내쓸 수 있습니다.

MessageSource 정의

1
2
3
4
5
6
7
8
9
    @Bean
    //DI에 Bean ID가 messageSource가 되도록 정의하는 것이 중요합니다.
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource =  new ResourceBundleMessageSource();
        //classpath 상에 있는 프로퍼티 파일의 이름을 확장자를 제외하고 지정합니다.
        messageSource.setBasenames("messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }
cs

 

메시지 가져올 때 MessageSourceResolvable 클래스 활용

1
2
3
4
5
6
7
8
    public void printWelcomeMessage() {
        MessageSourceResolvable functionName =
                        new DefaultMessageSourceResolvable("functionName.userName");
        String message = messageSource.getMessage("welcome.message"
                    , new MessageSourceResolvable [] {functionName}
                    , Locale.KOREAN);
        System.out.println(message);
    }
cs

MessageSourceResolvable : 메시지 인수(factor)를 할당해줍니다. 

getMessage() : 메시지 내용, 인수(factor)값, 언어(Locale)을 받고 String으로 반환해줍니다.

 

프로퍼티(.properties) 파일

1
2
welcome.message={0}님, 환영합니다!
functionName.userName=사용자
cs

 


 

출처 : 스프링 철저 입문

참고자료 :

Spring API note - MessageSource

Spring cloud aws API note - Resource handling