Spring

[Spring] MessageSource๋ฅผ ์ด์šฉํ•œ ๊ตญ์ œํ™” exception ์ ์šฉํ•˜๊ธฐ

2024. 3. 2. 17:39
๋ชฉ์ฐจ
  1. ๐ŸŒฑ i18n ๊ฐœ๋…
  2. โš™๏ธ build.gradle ์— ์˜์กด์„ฑ ์ถ”๊ฐ€
  3. โš™๏ธ application.yml์— ๋ฉ”์‹œ์ง€ ๊ฒฝ๋กœ ์„ค์ • ๋ฐ ์„ค์ • ํŒŒ์ผ
  4. โš™๏ธ MessageConfiguration ์„ค์ •
  5. ๐Ÿซง ๊ฒฐ๊ณผ

 

 

ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ ๊ตญ์ œํ™” ์ ์šฉ์„ ํ•ด๋ณด์•˜๋‹ค.

 

๐ŸŒฑ i18n ๊ฐœ๋…

i18n์ด๋ž€ internationalization(i์™€ n์‚ฌ์ด 18๊ธ€์ž)์„ ์ค„์ธ ๊ฒƒ์œผ๋กœ ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋ฉด '๊ตญ์ œํ™”'๋ผ๋Š” ๋œป์ด๋‹ค. 
๊ตญ์ œํ™”๋Š” ๋ฌธํ™”, ์ง€์—ญ, ์–ธ์–ด๊ฐ€ ๋‹ค์–‘ํ•œ ๋Œ€์ƒ ๊ณ ๊ฐ์„ ์œ„ํ•ด ์‰ฝ๊ฒŒ ํ˜„์ง€ํ™”๋  ์ˆ˜ ์žˆ๋Š” ์ œํ’ˆ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋ฌธ์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด๋‹ค!

 

 

โš™๏ธ build.gradle ์— ์˜์กด์„ฑ ์ถ”๊ฐ€

๋‚˜๋Š” ymlํŒŒ์ผ์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ด€๋ฆฌํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ด์คฌ๋‹ค! properties๋กœ ํ•  ๊ฑฐ๋ฉด ์ถ”๊ฐ€ ์•ˆ ํ•ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค!

implementation 'net.rakugakibox.util:yaml-resource-bundle:1.1'

 

 

โš™๏ธ application.yml์— ๋ฉ”์‹œ์ง€ ๊ฒฝ๋กœ ์„ค์ • ๋ฐ ์„ค์ • ํŒŒ์ผ

spring:
  messages:
    basename: i18n/messages
    encoding: UTF-8

 

 

ํ•ด๋‹น ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ๊ฒฝ๋กœ๋Š” ์ด๋ ‡๊ฒŒ ์ง€์ •ํ–ˆ๋‹ค! ํ˜„์žฌ๋Š” ํ•œ๊ตญ์–ด์™€ ์˜์–ด๋งŒ ๊ด€๋ฆฌํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— messages_ko.yml , messages_en.yml ๋‘ ๊ฐœ๋งŒ ์ •์˜ํ–ˆ๋‹ค!

 

 

์•ˆ์— ๋‚ด๋ถ€๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ •์˜ํ–ˆ๋‹ค.

successResult:
  code: "200"
  msg: "Success."


successResult:
    code: "200"
    msg: "์„ฑ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค."

 

 

โš™๏ธ MessageConfiguration ์„ค์ •

@Configuration
public class MessageConfiguration implements WebMvcConfigurer {

    @Bean //์„ธ์…˜์— ์ง€์—ญ ์„ค์ •. default๋Š” KOREAN = 'ko'
    public SessionLocaleResolver localResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.KOREAN);
        return slr;
    }

    @Bean //์ง€์—ญ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ธํ„ฐ์…‰ํ„ฐ. ์š”์ฒญ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ Lang ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ฉด ์–ธ์–ด๊ฐ€ ๋ณ€๊ฒฝ๋จ
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("lang");
        return lci;
    }

    @Override //์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์‹œ์Šคํ…œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋ก
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }

    @Bean // yml ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๋Š” MessageSource ์„ ์–ธ
    public MessageSource messageSource(
            @Value("${spring.messages.basename}") String basename,
            @Value("${spring.messages.encoding}") String encoding
    ) {
        YamlMessageSource ms = new YamlMessageSource();
        ms.setBasename(basename);
        ms.setDefaultEncoding(encoding);
        ms.setAlwaysUseMessageFormat(true);
        ms.setUseCodeAsDefaultMessage(true);
        ms.setFallbackToSystemLocale(true);
        return ms;
    }

    // locale ์ •๋ณด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ yml ํŒŒ์ผ์„ ์ฝ๋„๋ก ์ฒ˜๋ฆฌ
    private static class YamlMessageSource extends ResourceBundleMessageSource {
        @Override
        protected ResourceBundle doGetBundle(String basename, Locale locale) throws MissingResourceException {
            return ResourceBundle.getBundle(basename, locale, YamlResourceBundle.Control.INSTANCE);
        }
    }

}

 

 

์œ„์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‚˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ–ˆ๋‹ค!!

    private void setSuccessResult(CommonResult result) {
        result.setCode(Integer.parseInt(messageSource.getMessage("successResult.code", null, LocaleContextHolder.getLocale())));
        result.setMsg(messageSource.getMessage("successResult.msg", null, LocaleContextHolder.getLocale()));
    }

 

messageSource๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ’์„ ์„ธํŒ…ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค :)

 

๐Ÿซง ๊ฒฐ๊ณผ

 

ํฌ์ŠคํŠธ๋งจ์œผ๋กœ ํ…Œ์ŠคํŠธํ•ด ๋ดค๋Š”๋ฐ ์„ฑ๊ณต์ ์œผ๋กœ ์ž˜ ๋‚˜์˜ค๋Š” ๊ฒƒ ๊ฐ™๋‹ค ใ…Žใ…Ž 

 

 

reference

https://javaengine.tistory.com/entry/SpringBoot2%EB%A1%9C-Rest-api-%EB%A7%8C%EB%93%A4%EA%B8%B07-%E2%80%93-MessageSource%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-Exception-%EC%B2%98%EB%A6%AC

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring] @AllArgsConstructor, @RequiredArgsConstructor ์‚ฌ์šฉ์„ ์ง€์–‘ํ•œ ์ด์œ   (0) 2024.03.05
[Spring] @ExceptionHandler๋ฅผ ํ†ตํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (+ DTO Validation)  (0) 2024.03.05
[Spring] Spring Cache(์Šคํ”„๋ง ์บ์‹œ)๋ž€?  (0) 2024.02.19
[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ์‚ฌ์šฉ์ž DB ๋“ฑ๋ก ๋ฐ PasswordEncoder  (2) 2023.11.22
[Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) CSRF, CsrfFilter - ๋กœ๊ทธ์•„์›ƒ ์˜ˆ์ œ  (2) 2023.11.20
  1. ๐ŸŒฑ i18n ๊ฐœ๋…
  2. โš™๏ธ build.gradle ์— ์˜์กด์„ฑ ์ถ”๊ฐ€
  3. โš™๏ธ application.yml์— ๋ฉ”์‹œ์ง€ ๊ฒฝ๋กœ ์„ค์ • ๋ฐ ์„ค์ • ํŒŒ์ผ
  4. โš™๏ธ MessageConfiguration ์„ค์ •
  5. ๐Ÿซง ๊ฒฐ๊ณผ
'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring] @AllArgsConstructor, @RequiredArgsConstructor ์‚ฌ์šฉ์„ ์ง€์–‘ํ•œ ์ด์œ 
  • [Spring] @ExceptionHandler๋ฅผ ํ†ตํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (+ DTO Validation)
  • [Spring] Spring Cache(์Šคํ”„๋ง ์บ์‹œ)๋ž€?
  • [Spring] Spring Security(์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ) ์‚ฌ์šฉ์ž DB ๋“ฑ๋ก ๋ฐ PasswordEncoder
DAHLIA CHOI
DAHLIA CHOI
DAHLIA CHOI
๐ŸŒผ dali's log ๐ŸŒผ
DAHLIA CHOI
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (103)
    • Spring (42)
    • JAVA & OOP (8)
    • AWS (2)
    • DevOps (5)
    • Network (7)
    • DB (5)
    • Algorithm (9)
      • BOJ (6)
      • PROGRAMMERS (2)
      • LEETCODE (0)
    • Books (5)
    • ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… (5)
    • ํšŒ๊ณ  (0)
    • ๊ธฐํƒ€ (5)
    • FRENCH (1)
    • ํ•„์‚ฌ (2)
    • ๊ฒฝํ—˜ (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

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

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
DAHLIA CHOI
[Spring] MessageSource๋ฅผ ์ด์šฉํ•œ ๊ตญ์ œํ™” exception ์ ์šฉํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

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

๋‹จ์ถ•ํ‚ค

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

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

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

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

๋ชจ๋“  ์˜์—ญ

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

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