๐Ÿ’ Spring/Spring ํ•ต์‹ฌ ๊ธฐ์ˆ 

8. IoC ์ปจํ…Œ์ด๋„ˆ 7๋ถ€ : MessageSource

2020. 7. 6. 00:11
๋ฐ˜์‘ํ˜•

๊ตญ์ œํ™” (i18n) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค.

 

ApplicationContext extends MessageSource

  • getMessage(String code, Object[] args, String, default, Locale, loc)
  • ...

 

์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ณ„๋‹ค๋ฅธ ์„ค์ • ํ•„์š”์—†์ด messages.properties ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • messages.properties
  • messages_ko_kr.properties
  • ...

IntelliJ์—์„œ ์ž๋™์œผ๋กœ Resource Bundle 'messages'๋ผ๊ณ  ์ธ์‹์„ ํ•œ๋‹ค.

 

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    MessageSource messageSource;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(messageSource.getClass());

        System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.getDefault() ));
        System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.KOREA ));
        System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.US ));
    }
}

์‹คํ–‰ ๊ฒฐ๊ณผ

Locale ์„ ๋””ํดํŠธ๋กœ ์คฌ๋Š”๋ฐ ์•ˆ๋…•, ์ด๋ผ๊ณ  ๋‚˜์˜ค๋Š” ์ด์œ ๋Š” ํ˜„์žฌ ์‹œ์Šคํ…œ์˜ ์–ธ์–ด๊ฐ€ KR๋กœ ๋˜์–ด์žˆ์–ด์„œ ๊ทธ๋ ‡๋‹ค.

์ด๋ฆ„์˜ ์„ค๋ช…์€ ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋œ๋‹ค.

 {basename}.properties

 Default Message๋กœ ์‹œ์Šคํ…œ์˜ ์–ธ์–ด ๋ฐ ์ง€์—ญ์— ๋งž๋Š” Property ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์‚ฌ์šฉ

 {basename}_en.properties

 ์‹œ์Šคํ…œ ์–ธ์–ด ์ฝ”๋“œ๊ฐ€ ์˜์–ด์ผ ๋•Œ ์‚ฌ์šฉ

 {basename}_ko.properties

 ์‹œ์Šคํ…œ ์–ธ์–ด ์ฝ”๋“œ๊ฐ€ ํ•œ๊ธ€์ผ ๋•Œ ์‚ฌ์šฉ

 {basename}_en_UK.properties

 ์‹œ์Šคํ…œ ์–ธ์–ด ์ฝ”๋“œ๊ฐ€ ์˜์–ด์ผ๋•Œ ์˜๊ตญ(๊ตญ๊ฐ€์ฝ”๋“œ)์„ ์œ„ํ•œ ๋ฉ”์‹œ์ง€ 

 

 

 

๋ฆด๋กœ๋”ฉ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ์†Œ์Šค ์‚ฌ์šฉํ•˜๊ธฐ

@Bean
public MessageSource messageSource(){
	var messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:/messages");
    messageSource.setDefaultEncoding("UTF-8");
    messageSource.setCacheSeconds(3);
    return messageSource;
}	

https://hannamedia.tistory.com/81

์ž๋ฐ” var ๋ณ€์ˆ˜ํ˜• ์‚ฌ์šฉ๊ฐ€๋Šฅ

var ํƒ€์ž… ๋ณ€์ˆ˜๋Š” ์ž๋ฐ” jdk10 ์ด์ƒ๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

message๋ฅผ 1์ดˆ๋งˆ๋‹ค ํ™”๋ฉด์— ์ฐ๋Š”๋‹ค.

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    MessageSource messageSource;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        while (true){
            System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.KOREA ));
            System.out.println(messageSource.getMessage("greeting", new String[]{"seunghan"}, Locale.US ));
            Thread.sleep(1000l);//1์ดˆ ๋งˆ๋‹ค ์ฐ๋Š”๋‹ค.
        }


    }
}
@SpringBootApplication
public class Demospring51Application {

    public static void main(String[] args) {
        SpringApplication.run(Demospring51Application.class, args);

    }

    @Bean
    public MessageSource messageSource(){
        var messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:/messages");//ํด๋ž˜์ŠคํŒจ์Šค ๊ธฐ์ค€์œผ๋กœ messages๋ฅผ ์ฝ๋Š”๋‹ค.
        messageSource.setDefaultEncoding("UTF-8");//ํ•œ๊ธ€์ด ๊นจ์ง€์ง€ ์•Š๋„๋ก
        messageSource.setCacheSeconds(3);//์บ์‹ฑ์‹œ๊ฐ„์„ ์ตœ๋Œ€ 3์ดˆ๋กœ ์ œํ•œ.
        return messageSource;
    }
}

์ด๋•Œ ์ค‘๊ฐ„์— messages.properties ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค. (๊ผญ ๋นŒ๋“œ๋ฅผ ํ•ด์ค˜์•ผํ•จ)

 

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ’ Spring/Spring ํ•ต์‹ฌ ๊ธฐ์ˆ ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 10. IoC ์ปจํ…Œ์ด๋„ˆ 9๋ถ€ : ResourceLoader
  • 9. IoC ์ปจํ…Œ์ด๋„ˆ 8๋ถ€ : ApplicationEventPublisher
  • 7. IoC ์ปจํ…Œ์ด๋„ˆ 6๋ถ€ : Environment 2๋ถ€. ํ”„๋กœํผํ‹ฐ
  • 6. IoC ์ปจํ…Œ์ด๋„ˆ 6๋ถ€ : Environment 1๋ถ€. ํ”„๋กœํŒŒ์ผ
iseunghan
iseunghan
๊พธ์ค€ํ•˜๊ฒŒ ์—ด์‹ฌํžˆ..
iseunghan
iseunghan

๊ณต์ง€์‚ฌํ•ญ

  • ์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜์ด ๋˜๊ธฐ ์œ„ํ•ด ๐Ÿ”ฅ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (261)
    • ๐Ÿ’ Spring (14)
      • ๊ฐœ๋… ๋ฐ ์ดํ•ด (2)
      • Spring ํ•ต์‹ฌ ๊ธฐ์ˆ  (24)
      • Spring REST API (8)
      • Spring MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  (7)
      • Spring Security (23)
      • Spring in Action (1)
    • ๐ŸŒป JAVA (84)
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (13)
      • ๋””์ž์ธ ํŒจํ„ด (7)
      • ์ •๋ฆฌ์ •๋ฆฌ์ •๋ฆฌ (43)
      • JUnit (1)
    • ๐Ÿ”– Snippets (3)
      • Javascript (3)
    • โš™๏ธ Devops (22)
      • โ› Git (11)
      • ๐Ÿณ Docker (6)
      • ๐Ÿง Linux (3)
      • ๐ŸŒˆ Jenkins (1)
      • ๐Ÿ“ฌ Kafka (1)
    • ๐Ÿ’ฌ ETC.. (4)
      • ๐Ÿ’ป macOS (2)
    • ๐ŸŒง๏ธ ORM (2)
      • JPA (2)
    • ๐Ÿ Python (2)
    • ๐Ÿ“š Databases (15)
      • ์˜ค๋ผํด๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต(2ํŒ) (3)
      • RealMySQL 8.0 (8)
    • ๐Ÿ”ฅ Computer Science (5)
      • ๐Ÿ“ก ๋„คํŠธ์›Œํฌ (5)
    • ๐Ÿท๏ธ ํ˜‘์—… (1)
    • ๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (38)
      • BAEKJOON\์ˆ˜ํ•™ 1, ์ˆ˜ํ•™ 2 (8)
      • BAEKJOON\์žฌ๊ท€ (5)
      • BAEKJOON\๋ธŒ๋ฃจํŠธ ํฌ์Šค (3)
      • BAEKJOON\์ •๋ ฌ (1)
      • BAEKJOON\๋ฐฑํŠธ๋ž˜ํ‚น (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\์ด๋ถ„ํƒ์ƒ‰ (1)
      • BAEKJOON\๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9)
      • BAEKJOON\๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
    • โœจ ISEUNGHAN (1)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
iseunghan
8. IoC ์ปจํ…Œ์ด๋„ˆ 7๋ถ€ : MessageSource
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.