inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발

다국어 처리를 위한 Internationalization 구현 방법

MessageSource와 LocaleResolver 관련 질문

453

gooroom

작성한 질문수 4

1

안녕하세요 강사님! 유용한 강의 정말 감사드리며 열심히 듣고 있습니다!

이번 강의를 듣던 중 MessageSource와 LocaleResolver에 관련하여 궁금한 점이 생겼습니다!

우선 메인 실행 클래스에서 LocaleResolver를 빈으로 등록하는 것과 HelloWorldController에서 MessageSource를 주입 받는 것까지는 이해를 했습니다!

저는 단순히 LocaleResolver 빈을 MessageSource에 주입한다고 생각을 하고 있었는데 각 클래스의 구현 코드를 확인해보니 MessageSource에 LocaleResolver 빈이 주입되지 않는 거 같다고 생각을 했습니다.

혹시 주입이 되는 것이 아니라면 LocaleResolver 빈은 어디에 주입이 되며, MessageSource에는 어떤 빈이 주입이 되는지 궁금합니다!

spring-boot rest-api

답변 1

1

Dowon Lee

안녕하세요, 이도원입니다. 

질문에  대한 답변이 늦어 죄송합니다. 

먼저, LocaleResolver는 지역 코드 및 언어에 관한 정보를 설정하게 됩니다. 기본적으로 말씀하신 실행 클래스에서 @Bean으로 등록해서 사용하게 되면, 사용자로부터의 Request에 Accept-Language 설정이 없을 경우에 사용될 기본값이 설정됩니다. 반대로 Accept-Language를 설정하게 되면 해당 값을 사용할 수 있게 됩니다. 

MessageSource는 사용자로부터의 요청에 대한 결과를 처리하는 과정에서 발생하는 문자열을 각 언어별로 새로운 HTML 페이지를 생성하지 않게 하기 위한 메시지 표시를 위한 객체로써, getMessage()라는 메소드에 필요한 Key를 요청하게 되면, 해당 Value를 message.properties 파일에서 검색하여 반환하게 됩니다. 이때 Locale 정보를 같이 전달할수도 있으며, 전달하지 않을 경우에는 LocaleResolver에서 설정한 기본 값을 사용하게 됩니다. 예를 들어 아래와 같이 사용하실 수도 있습니다.

@GetMapping(path = "/hello-world-internationalized")
public String helloWorldInternationalized(
@RequestHeader(name = "Accept-Language", required = false) Locale locale,
HttpServletRequest request) {
if (locale == null)
locale = localeResolver.resolveLocale(request);

return messageSource.getMessage("greeting.message", null, locale);
}

위 코드에서 사용자로부터의 Locale 정보가 없으면, localeResolver로부터 값을 가져와서 사용할 수 있게 됩니다. 

위 Controller 클래스에서 localeResolver 객체의 주입은 생성자난 setter 메소드 등에서 할 수 있으며, 

생성자를 이용할 경우 다음과 같이 주입 가능합니다. 

@Autowired
public HelloWorldController(MessageSource messageSource, LocaleResolver localeResolver) {
this.messageSource = messageSource;
this.localeResolver = localeResolver;
}

따라서, LocaleResolver 빈을 직접 MessageSource에 주입한다는 것보다는, 

MessageSource를 사용하기 위해 LocaleResolver 객체를 사용한다는 표현이 맞을 것 같습니다. 

사용해 보시다가, 추가 질문사항 있으시면 다시 질문게시판에 글 남겨 주세요.

감사합니다. 

0

기팝

위 코드에서 사용자로부터의 Locale 정보가 없으면, localeResolver로부터 값을 가져와서 사용할 수 있게 됩니다. 

라고 말씀해주셨는데

마지막에 강의에서 나온거와 같이

굳이 localeResolver 를 가져오지 않아도

default 로 설정된 한국어로 나오지않나요?

JPA

0

57

1

jpa dependency를 추가하고 SecurityConfig클래스에서 오류가 납니다.

0

68

1

웹 브라우저 400 bad request

0

70

1

@Size는 되는데 @Past는 안 됩니다.

0

61

1

pdf 자료는 없나요?

0

73

2

locale 정보가 null 이면 무조건 messages_ko.properties이 호출 되는 문제

0

87

2

Swagger 강의, Unable to infer base url 이거 뜨시는 분들 도움되시라고

0

118

1

강의에서나온 화면 피피티

0

158

1

HelloWorldBean 관련 에러

0

182

2

Swagger API 3.x 오류..

0

218

1

java: variable message not initialized in the default constructor 에러는 어찌하면 좋을까요?

1

282

1

현재 GIT에 올리신 소스를 실행해봤습니다.

0

188

2

고양이 소리가 귀엽네요 !!

0

137

2

git에서 소스받고 실습중인데

0

117

1

post가 안되요

0

102

1

한국어 같은 경우 언어코드인 messages_ko.properties 로 생성하는게 더 좋지 않나요?

0

167

2

리턴타입으로서 EntityModel<User> 와 ResponseEntity질문

0

103

1

예외처리쪽 관련 질문있습니다.

0

159

2

엔티티가 바로 응답으로 나가도 되나요??

0

220

2

안녕하세여 Cannot invoke "co.kr.joneconsulting.resfulservice.repository.PostRepository.save(Object)" because "this.postRepository" is null

0

135

2

사용자 등록하고 나서 H2 에서 보면 신규 사용자의 password, ssn 이 null 로 되어 있습니다.

0

140

2

ApplictionContext 질문

0

190

2

롬북이 안먹히는것같아요

0

156

1

인텔리제이에서스프링부트 파일 실행하면

0

239

1