메시지 기능
만약 HTML에 이런 식으로 하드 코딩 되어 있으면 유지보수에 굉장히 힘들 것이다
<label>상품명</label>
만일 기획자가 “상품명 → 상품이름으로 바꿔주세요” 라고 요청이 오면
모든 HTML 을 찾아가서 하나하나 다 수정해야 한다
그래서 이러한 Message를 한 파일에 관리하고 해당 파일에서 가져다 쓰는 방식이 필요하다
messages.properties
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
이렇게 하나의 파일에서 관리하고
<label th:text="#{item.itemName}"></label>
이제 문구 변경 시 properties 파일만 수정하면 전체 화면 반영이 된다!
국제화 기능
메시지에서 나라별로 관리하면 서비스를 국제화 할 수 있다 스프링은 국제화 기능도 제공한다
messages_en.properties
item=Item
item.id=Item ID
item.itemName=Item Name
item.price=price
item.quantity=quantity
messages_ko.properties
item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량
한국에서 접근한 것인지 영어에서 접근한것인지 알 수 있는 방법은
- HTTP accept-languae 헤더값 사용 하거나
- 사용자가 언어를 선택하고 쿠키에 처리하면 된다
이렇게 직접 할 수 있지만 스프링은 기본적인 메시지 국제화 기능을 제공한다
스프링 메시지 소스
메시지 관리 기능을 사용하려면 MessageSource 를 스프링 빈으로 등록하면 된다
근데 스프링 부트가 자동으로 빈으로 등록해준다.
스프링 부트와 관련된 별도의 설정을 하지 않으면messages라는 이름으로 기본 등록 된다
(이것을 변경하고 싶으면 application.properties에서 spring.messages.basename=messages을 통해 변경하자 )
따라서 messages_en.properties , messages_ko.properties , messages_properties 파일만 등록하면 자동으로 인식되고 사용자의 Locale 정보에 따라서 스프링이 자동으로 국제화 기능을 제공한다
타임 리프에서 메시지 적용하기
타임리프의 메시지 표현식 #{메시지 키 이름}를 사용하면 스프링의 메시지를 편리하게 조회할 수 있다
예)
th:text="#{button.save}"
스프링의 국제화 메시지 선택
앞서 MessageSource 테스트에서 보았듯이 기능은 Locale 정보를 알아야 한다
결국 타임리프도 이 MessageSource의 getMessage 기능을 실현시켜 메시지와 , 국제화 기능을 제공한다 이때 기본으로는 Accept-Language 헤더 값을 이용한다
ms.getMessage(”hello”,null,null)`
파라미터 의미
- code : hello
- args : null
- locale : null
여기서 args는 MessageProperties의 메시지에도 argument를 구성할 수 있는데 해당 argument에 보내는 값이다
예시는 다음과 같다
label.item.itmename= 안녕하세요 아이템 이름은 {0} 입니다
LocaleResolver(참고)
스프링은 Locale 선택 방식을 변경할 수 있도록 LocaleResolver라는 인터페이스를 제공하는데 스프링 부트는 기본적으로 Accept-Header를 활용하는 AcceptHeaderLocaleResolver를 사용한다
만일 우리가 웹 브라우저에서 설정한 언어와 상관없이 언어를 클릭해서 사용자가 직접 언어를 선택할 수 있게 하려면 LocaleResolver가 필요하다
'🌿 스프링 > 스프링 MVC 2편' 카테고리의 다른 글
| 서블릿 예외 처리와 오류 페이지 (0) | 2026.02.15 |
|---|---|
| 서블릿 필터와 스블릿 인터셉터 (0) | 2026.02.15 |
| 로그인 처리- 쿠키,세션 (0) | 2026.02.14 |
| Validation (0) | 2026.02.14 |
| 타임리프 기본 기능 과 스프링 (0) | 2026.02.14 |