스프링 MVC 2편- 백엔드 웹 개발 핵심 기술을 듣고 정리
스프링은 기본적인 메시지와 국제화 기능을 모두 제공한다. 개념 및 사용 방법에 대해서 알아보자.
어떤 애플리케이션의 여러 화면에서 쓰이는 필드명을 바꾸려면? 화면이 수백개라면? 수기로 작업하기에는 상당한 시간이 걸린다.
이런 정보를 한 곳에서 관리하는 기능을 메시지라고 한다.
사용방법
1. messages.properties 메시지 관리용 파일을 생성한다.
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
<label for="itemName" th:text="#{item.itemName}"></label>
스프링 메시지를 사용하려면, MessageSource를 스프링 빈으로 등록해야하는데, 스프링 부트가 자동으로 등록한다.
스프링 부트 메시지 소스 기본 값은 spring.messages.basename=messages이다.
따라서 아래와 같은 이름으로 파일을 생성하면 자동으로 인식된다.
Test
@SpringBootTest
public class MessageSourceTest {
@Autowired
MessageSource ms;
@Test
void helloMessage() {
String result = ms.getMessage("hello", null, null);
assertThat(result).isEqualTo("안녕");
}
//메시지가 없는 경우, 기본 메시지 사용 가능
@Test
void notFoundMessageCodeDefaultMessage() {
String result = ms.getMessage("no_code", null, "기본 메시지", null);
assertThat(result).isEqualTo("기본 메시지");
}
// 매개변수 사용 가능 -> hello.name=안녕 {0}
@Test
void argumentMessage() {
String result = ms.getMessage("hello.name", new Object[]{"Spring"}, null);
assertThat(result).isEqualTo("안녕 Spring");
}
}
Thymeleaf에 메시지 적용하기
메시지 파일(messages.properties)을 각 나라별로 관리해서 서비스하면 국제화가 가능하다.
메시지 파일을 나라별로 생성
서버는 클라이언트가 어느 국가에서 접근했는지 어떻게 알 수 있나?
1. HTTP accept-language 헤더 값을 사용
2. 사용자가 직접 언어를 선택하도록 처리
accept-Language
클라이언트가 서버에 기대하는 언어 정보를 담아서 요청하는 HTTP 요청 헤더이다.