✏️ 메시지, 국제화

2026. 7. 21. 20:01·Backend/Spring MVC

이 글은 Velog에서 이전한 글입니다. Velog 원문 보기

⭐️ 메시지

만약 화면에서 “상품명”을 “상품 이름”으로 전부 바꾸고 싶다고 하자.
그러면 여러 화면에서 수십, 수백개의 단어를 교체해야하는 상황이 생길 수 있다.

메시지가 HTML에 하드코딩 되어 있기 때문이다.
이런 다양한 메시지를 한 곳에서 관리하는 기능을 메시지 기능이라고 한다.

예를 들어서 messages.properties라는 관리용 파일을 만들고

item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량

각 HTML들은 다음과 같이 해당 데이터를 key 같으로 불러서 사용하는 것이다.

<label for="itemName" th:text="#{item.itemName}"></label>

⭐️ 국제화

메시지에서 한 발 더 나가서 생각해보자. 메시지에서 설명한 메시지 파일(messages.properties)을 각 나라별로 관리하면 서비스를 국제화 할 수 있다. 예를 들어서 다음과 같이 2개의 파일을 만들어서 분류한다.

messages_ko.properties

item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량

messages_en.properties

item=상품
item.id=상품 ID
item.itemName=상품명
item.price=가격
item.quantity=수량

영어를 사용하는 사용자라면 messages_en.properties를 사용하고 한국인 사용자라면 messages_ko.properties를 사용하게 개발하면 된다.

이렇게 하면 사이트를 국제화 할 수 있다.

한국에서 접근한 것인지 영어에서 접근한 것인지 인식하는 방법은 HTTP accept-language 헤더 값을 사용하거나 사용자가 직접 언어를 선택하도록 하고, 쿠키 등을 사용해서 처리하면 된다.

메시지와 국제화 기능을 직접 구현할 수도 있겠지만, 스프링은 기본적인 메시지와 국제화 기능을 모두 제공한다. 그리고 타임리프도 스프링이 제공하는 메시지와 국제화 기능을 편리하게 통합해서 제공한다.

지금부터 스프링이 제공하는 메시지와 국제화 기능을 알아보자.

📌 스프링 메시지

스프링은 기본적인 메시지 관리 기능을 제공한다.

메시지 관리 기능을 사용하려면 스프링이 제공하는 인터페이스인 MessageSource의 구현체를 스프링 빈으로 등록하면 된다. MessageSource의 구현체인 ResourceBundleMessageSource를 스프링 빈으로 등록하면 된다.

직접 등록

@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasenames("messages", "errors");
    messageSource.setDefaultEncoding("utf-8");
    return messageSource;
}
  • basenames : 설정 파일의 이름을 지정한다.
    • messags 로 지정하면 messages.properties 파일을 읽어서 사용한다.
    • 추가로 국제화 기능을 적용하려면 messages_en.properties, messages_ko.properties 와 같이 파일명 마지막에 언어 정보를 주면된다. 만약 찾을 수 있는 국제화 파일이 없으면 messages.properties (언어정보가 없는 파일명)를 기본으로 사용한다.
    • 파일의 위치는 /resources/messages.properties 에 두면 된다.
      여러 파일을 한번에 지정할 수 있다. 여기서는 messages , errors 둘을 지정했다.
  • defaultEncoding : 인코딩 정보를 지정한다. utf-8 을 사용하면 된다.

그러나 위의 과정을 할 필요가 없다.
스프링 부트를 사용하면 MessageSource를 자동으로 스프링 빈으로 등록한다.

✔︎ 스프링 부트 메시지 소스 설정

스프링 부트를 사용하면 다음과 같이 메시지 소스를 설정할 수 있다.
application.properties

spring.messages.basename=messages,config.i18n.messages

MessageSource를 스프링 빈으로 등록하지 않고, 스프링 부트와 관련된 별도의 설정을 하지 않으면 messages라는 이름으로 기본 등록된다. 따라서 messages_en.properties, messages_ko.properties , messages.properties 파일만 등록하면 자동으로 인식된다.

✔︎ 메시지 파일 만들기

메시지 파일을 만들어보자. 국제화 테스트를 위해서 messages_en 파일도 추가하자.

  • messages.properties :기본 값으로 사용(한글)
  • messages_en.properties : 영어 국제화 사용

주의! 파일명은 massage가 아니라 messages다! 마지막 s에 주의하자

  • /resources/messages.properties
  • messages.properties*
  • hello=안녕 hello.name=안녕 {0}
  • /resources/messages_en.properties
  • messages_en.properties*
  • hello=hello hello.name=hello {0}

📌 스프링 메시지 소스 사용

MessageSource 인터페이스

public interface MessageSource {
    String getMessage(String code, @Nullable Object[] args, @Nullable String
  defaultMessage, Locale locale);
    String getMessage(String code, @Nullable Object[] args, Locale locale) throws
  NoSuchMessageException;

MessageSource 인터페이스를 보면 코드를 포함한 일부 파라미터로 메시지를 읽어오는 기능을 제공한다.

다음 글에서는 게시판에 메시지, 국제화를 적용하는 글을 작성하겠습니다.
💡 게시판 - 메시지, 국제화 적용!


출처
김영한님의 Spring MVC 2편

'Backend > Spring MVC' 카테고리의 다른 글

✏️ PRG(Post / Redirect / Get) 패턴  (0) 2026.07.18
✏️ Thymeleaf  (0) 2026.07.18
✏️ HTTP Message Converter와 ArgumentResolver  (0) 2026.07.18
✏️ HTTP 응답  (0) 2026.07.18
✏️ HTTP 요청 메세지 - 단순 텍스트  (0) 2026.07.18
'Backend/Spring MVC' 카테고리의 다른 글
  • ✏️ PRG(Post / Redirect / Get) 패턴
  • ✏️ Thymeleaf
  • ✏️ HTTP Message Converter와 ArgumentResolver
  • ✏️ HTTP 응답
pp8817
pp8817
공부한 내용, 개발 관련 지식, 트러블 슈팅 등을 기록합니다. 이전 블로그: https://velog.io/@pp8817/posts
  • pp8817
    끄적이는 개발 log
    pp8817
  • 전체
    오늘
    어제
    • 분류 전체보기 (273)
      • Project (71)
        • 척척학사 (29)
        • Book (23)
        • Saynow (3)
        • YAPP 27기 (4)
        • 나의 작은 프로젝트 (10)
        • Landit (2)
      • Backend (88)
        • Spring (13)
        • Spring MVC (13)
        • Spring Security (4)
        • JPA (26)
        • Database (19)
        • HTTP·Web (13)
        • Architecture (0)
      • Language·CS (59)
        • Java·Kotlin (5)
        • CS Interview (17)
        • Backend Interview (5)
        • Concepts (32)
      • Algorithm (25)
        • Algorithm (24)
        • 소마 알고리즘 스터디 (1)
      • Infra (8)
      • Troubleshooting (11)
      • Retrospective (6)
      • Etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    object
    척척학사
    Spring
    Project
    BOJ
    트러블슈팅
    java
    OS
    게시판
    HTTP WEB 기본 지식
    jpa
    개념 정리!
    Book
    Spring MVC
    interview
    Python
    나의 작은 프로젝트
    Algorithm
    CS Interview
    http
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
pp8817
✏️ 메시지, 국제화
상단으로

티스토리툴바