Spring MVC에서 메시지 관리와 국제화(i18n)를 적용하는 방법에 대해 알아보자.
메시지 관리의 필요성
개발 과정에서 UI에 표시되는 텍스트를 변경해야 하는 상황이 자주 발생한다.
예를 들어, "상품명"이라는 레이블을 "상품이름"으로 변경해야 한다고 가정하자. 이때 여러 곳에서 하드 코딩된 텍스트를 일일이 수정하는 것은 비효율적이다.
이러한 문제를 해결하기 위해 메시지 관리 기능을 사용하여 모든 텍스트를 한 곳에서 관리할 수 있다.
메시지 파일 생성 및 적용
메시지 파일 생성
메시지 관리를 위해 messages.properties 파일을 생성하고 키-값 쌍으로 텍스트를 관리한다.

국제화를 위한 메시지 파일 생성
다국어 지원을 위해 각 언어별로 메시지 파일을 관리한다.

Spring에서 메시지 소스 등록
Spring은 메시지 관리와 국제화 기능을 제공하며 이를 사용하기 위해 MessageSource 빈을 등록해야 한다.
직접 등록하는 방법

- setBasenames: 메시지 파일의 기본 이름을 지정한다.
- setDefaultEncoding: 파일의 인코딩을 지정한다.
Spring Boot를 사용하는 경우
Spring Boot는 MessageSource를 자동으로 빈으로 등록한다.
별도의 설정 없이 messages.properties 파일을 /resources 디렉터리에 두면 자동으로 인식한다.
필요에 따라 application.properties에서 메시지 소스를 설정할 수 있다.

MessageSource 인터페이스 이해
MessageSource는 메시지를 가져오는 여러 메서드를 제공한다.
주요 메서드는 다음과 같다.

- getMessage(String code, Object[] args, String defaultMessage, Locale locale): 메시지 코드를 기반으로 메시지를 가져오며, 메시지가 없을 경우 기본 메시지를 반환한다.
- getMessage(String code, Object[] args, Locale locale): 메시지를 가져오며 메시지가 없을 경우 NoSuchMessageException을 발생시킨다.
메시지 소스 사용 예제
테스트 코드를 통한 메시지 사용
MessageSource를 어떻게 사용하는지 테스트 코드를 통해 알아보자.

- ms.getMessage("hello", null, null): 메시지 코드가 "hello"인 메시지를 가져온다.
- Locale이 null이면 기본 메시지 파일을 사용한다.
다양한 상황 테스트

- 메시지가 없는 경우 NoSuchMessageException이 발생한다.
- 기본 메시지를 지정하면 메시지가 없을 때 해당 메시지를 반환한다.
- {0}과 같은 매개변수는 Object[]를 통해 전달한다.
- Locale에 따라 다른 언어의 메시지를 가져온다.
웹 애플리케이션에 메시지 적용
메시지 파일 준비


컨트롤러에서 메시지 사용
컨트롤러나 서비스 계층에서 메시지를 사용해야 하는 경우 MessageSource를 주입받아 사용한다.

- Locale 객체를 통해 현재 언어 정보를 받아온다.
- messageSource.getMessage를 사용하여 메시지를 가져온다.
국제화 적용 방법
LocaleResolver 설정
Spring은 LocaleResolver 인터페이스를 통해 Locale 선택 방식을 커스터마이징 할 수 있다.
기본적으로는 AcceptHeaderLocaleResolver를 사용하지만 쿠키나 세션을 활용하여 사용자가 직접 언어를 선택할 수 있도록 구현할 수 있다.

- SessionLocaleResolver: 세션에 Locale 정보를 저장하여 사용한다.
- setDefaultLocale: 기본 Locale을 설정한다.
LocaleChangeInterceptor 설정
사용자가 요청 파라미터로 Locale을 변경할 수 있도록 인터셉터를 설정한다.

- LocaleChangeInterceptor: 특정 파라미터를 통해 Locale을 변경한다.
- setParamName: Locale 정보를 받을 요청 파라미터 이름을 설정한다.
설정 클래스 전체 코드

- 이 설정을 통해 URL에 ?lang=en과 같이 파라미터를 추가하여 언어를 변경할 수 있다.
서비스 계층에서의 메시지 사용 예제
서비스 계층에서 예외 메시지나 로그 메시지를 국제화하여 사용하고 싶을 때도 MessageSource를 활용할 수 있다.

- 비즈니스 로직에서 메시지를 국제화하여 사용한다.
테스트를 통한 검증
국제화와 메시지 처리가 올바르게 동작하는지 확인하기 위해 테스트 코드를 작성할 수 있다.

출처
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런
스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런
김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습
www.inflearn.com
'Dev > Spring Framework' 카테고리의 다른 글
『MVC』 Bean Validation (0) | 2024.12.03 |
---|---|
『Spring MVC』 필터, 인터셉터 (0) | 2024.11.26 |
『Spring Boot』 Spring Boot Annotation 정리 (1) | 2024.11.25 |
『Spring Core』 Bean Scopes (0) | 2024.11.19 |
『Spring Core』 Bean LifeCycle (2) | 2024.11.07 |