[Java Spring] message와 i18n 처리 방법

작성일 : 2023년 08월 14일
  • #Java
  • #Spring Boot

Spring Boot는 별다른 설정 없이 자동으로 기본으로 사용할 다양한 기능을 초기화 해준다. 이 중 message와 i18n 기능을 사용하면 클라이언트에 전송할 결과, 에러 문자열을 다른 방식이나 소스 내 하드 코딩 하지 않고 설정한 값으로 사용 가능하다.

❓기본 설정 범위

messageSource 빈의 기본 설정 범위는 다음과 같다.

  • 기본 ClassLoader 사용

  • messages로 이름 사용

  • UTF-8 인코딩 사용

  • 각 locale별 message bundle 캐시 처리

📏 기본 설정이 적용 되는 범위

[Java Spring] 내부 구현을 통한 MessageSource, Validation 동작 원리 탐구에서 살펴본 내용과 같이 모든 jakarta, spring framework에서 적용되는 validation에 모두 message를 적용 할 수 있다.


또한 Spring Boot가 기본 생성한 MessageSource bean을 이용하면 어디서든 사용 할 수 있다.

📂 파일 생성 방법

resources 디렉터리 내 properties 파일을 만든다.

파일 이름은 기본 locale 설정의 경우 messages.properties다.

추가 locale 설정의 경우 각 지역 명 축약어에 따라 설정한다.

  • ex)

    • 기본 : messages.properties

    • 한국 : messages_ko.properties

    • 영어 : messages_en.properties

🧑‍💻 사용 방법

  • 유효성 검증 어노테이션

    public record Request(
    	@NotBlank(message = "{com.example.NotBlank.message}"
    	Integer id,
    ) {}
    @Documented
    @Constraint(validatedBy = JsonValidator.class)
    @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Json {
    
    	String message() default "{com.example.constraints.Json.message}";
    
    	Class<?>[] groups() default {};
    
    	Class<?>[] payload() default {};
    
    }
  • 설정 메시지 가져오기

    public class Message {
    	@Autowired
    	private MessageSource messageSource;
    
    	public void message() {
    		messageSource.getMessage("com.example.constraints.Json.message", null,
    			Locale.getDefault());
    	}
    }

🏁결론

커스텀 메시지 사용이 필요하다면 스프링에서 기본 제공해주는 기능을 이용한다.

🔗참고 사항

i18n에 관한 추가 내용