<spring:message> 태그로 메시지 출력하기


사용자 화면에 보일 문자열을 JSP에 직접 코딩한다고 해보자

<label>이메일</label>
<input type="text" name="email">

 

이메일과 같은 문자열은 로그인 폼, 회원가입 폼, 회원정보 수정 폼에서 반복해서 사용된다.

이렇게 문자열을 JSP에 하드코딩하면 2가지 문제가 발생한다.

  1. 동일 문자열을 변경할 때 (예를 들어, 폼에서 사용할 이메일을 이메일 주소로 변경하고 싶다면?)
  2. 다국어 지원 (영어권 나라에서 웹에 접속했을 때는 '이메일'이 아니라 'E-mail'로 표시하고 싶다면?)

 

위 문제를 해결하는 방법은 뷰 코드에서 사용할 문자열을 언어별로 파일에 보관하고 뷰 코드는 언어에 따라 파일에서 문자열을 읽어와 출력하는 것이다.

 

문자열을 별도 파일에 작성하고 JSP 코드에서 이를 사용하는 방법은 다음과 같다.

  1. 문자열을 담은 메시지 파일을 작성한다.
  2. 메시지 파일에서 값을 읽어오는 MessageSource 빈을 설정한다.
  3. JSP 코드에서 <spring:message> 태그를 이용해서 메시지를 출력한다.

 

메시지 파일은 Java의 .properties 파일 형식으로 작성한다. 파일 경로는 src/main/resources/message/label.properties

# label.properties
member.register=회원가입

term=약관
term.agree=약관동의
next.btn=다음단계

member.info=회원정보
email=이메일
name=이름
password=비밀번호
password.confirm=비밀번호 확인
register.btn=가입 완료

register.done={0}님, 회원가입을 완료하였습니다.

go.main=메인 화면으로 이동

 

다음으로 MessageSource 타입의 빈을 추가하고

@Bean
public MessageSource messageSource() { // 빈 이름은 무조건 messageSource 여야 함 !!
   
    // 메시지 파일로 프로퍼티 형식 사용을 위한 MessageSource 구현체 클래스
    ResourceBundleMessageSource ms = new ResourceBundleMessageSource();
    ms.getBasenames("message.label"); // message는 패키지명으로, 여기서 message라는 폴더를 사용했다.
    ms.setDefaultEncoding("UTF-8");
    return ms;
}

 

이제 JSP 코드에선 아래와 같이 사용할 수 있다.

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<head>
    <title><spring:message code="member.register" /></title>
</head>
<body>
    <h2><spring:message code="term" /></h2>
    
    <!-- 아래도 마찬가지로 위처럼 작성하면 된다. -->
</body>