• [ 배경 ]
    • Spring에서 다국어를 처리하기 위해 찾아보는 중 i18n 설정을 지원하고 있었습니다. i18n의 i는 Internationalization의 약자입니다. i와 n사이에 18개의 알파벳이라는 뜻입니다.
      즉 해당 세팅을 통해 한국어를 영문권에서도 표시할 수 있도록 할 수 있습니다. 해당 방법을 이용해 예외 처리 메시지를 다국어를 적용시켜보겠습니다.

  • [ 과정 ]
    • pom.xml 에 yaml-rsource-bundle 을 추가합니다. 해당 의존성은 YamlResourceBundle클래스를 사용할 수 있고
      그로 인해 실제 언어 정보가 담겨있는 exception_ko.yml, exception_en.yml 파일을 사용할 수 있습니다.
    • MessageConfiguration 파일 생성
      • com.market.server.config 패키지 하위에 클래스를 생성 후 @Configuration 어노테이션을 통해 환경 구성을 합니다. 설정한 내용으로는 아래와 같습니다.
        • 세션에 Default 지역 정보를 설정
        • 요청 시 파라미터에 lang 정보를 지정하여 LocalechangeInterceptor를 통해 언어가 변경 되게 설정
        • yml 파일을 참조하는 MessageSource를 설정
        • locale 정보에 따른 다른 yml파일을 읽도록 처리
        • 인터셉터를 시스템 레지스트리에 등록 
      • (참고) @Configuration 어노테이션은 @Bean 메서드를 제공하고 스프링 컨테이너가 Bean정의를 생성하고 런타임 시 Bean들이 요청을 처리할 수 있게 해주는 어노테이션입니다.
      • 스프링에서는 LocaleChangeInterceptor를 사용하여 lang이라는 RequestParameter가 요청에 있으면 해당 값을 읽어 로케일 정보를 변경합니다. 중고거래 프로젝트에서는 Session에서 읽어오고 저장하도록 SessionLocaleResolver를 사용하였습니다.
      • Session 말고도 Http요청 시 헤더에 기본 로케일 설정, 쿠기를 사용하는 방식 등을 사용하는 Resolver 도 있습니다. 다른 Resolver 내용이 궁금하신 분은 아래 사이트를 참조 부탁드립니다.
    • application.properties에 다국어 처리 yml i18n 경로와 인코딩 정보를 추가합니다.
    • 다국어 처리 message yml을 형식에 맞게 작성합니다. exception_en.yml, exception_ko.yml 파일을
      생성 후 code, 국가 언어에 맞는 msg 정보를 아래와 같이 추가합니다.
    • ResposeService에서 서버가 클라이언트에게 응답할 때 response 패킷을 정의합니다.
      성공, 실패 처리 시에 해당하는 code, msg를 response패킷에 설정합니다.
    • @RestControllerAdvice 어노테이션을 사용하는 ExceptionAdvice 클래스를 통해 Controller에서 발생하는 예외를 ExceptionHandler를 통해 Response에 code값과 msg값을 연결합니다.
    • findUserById API에서 파라미터에 lang값을 통해 국가명을 입력하게 설정합니다.
    • 아래 내용은 Swagger API에 en설정을 통해 ResponseBody에
      msg값이 영어로 출력되는 걸 확인할 수 있습니다. 

 


  • [ 결과 ]
    • 중고거래 서비스가 해외 국가에서도 배포가 가능하게 예외 메시지를 다국어 처리를 하였습니다.
    • Spring에서 i18n세팅 후 MessageSource를 이용하여 국가에 해당하는 언어로 출력되도록 개 발하였습니다.
    • LocaleChangeInterceptor를 사용하여 lang이라는 RequestParameter가 요청에 있으면 해당 값을 로케일 정보로 변경하게 했습니다.
    • 로케일 정보는 기본으로 Session에서 읽어 오고 저장하도록 SessionLocaleResolver를 사용하였습니다.
    • Spring의 i18n 라이브러리에서는 각 종 리졸버를 제공함으로써 특정 상황에 맞게 활용할 수 있음을 알았습니다.
    • 결과적으로 다국어 환경에서도 요구사항에 맞게 개발이 가능해졌습니다.

  • [ 성과 ]
    • Spring i18n 다국어 지원을 통해 국가별 언어를 설정 방법을 학습하였습니다.
    • MessageConfig를 설정하면서 @Configuration을 통해 스프링 컨테이너가 bean을 정의하고 
      런타임 시 정의한 Bean들이 요청을 처리하는  spring의 IOC컨테이너의 개념과 생성원리를 학습하였습니다.
    • LocaleChangeInterceptor, SessionLocaleResolver를 이용해 세션정보에 지역정보를 설정하면서
      인터셉터, 리졸버의 동작원리에 대해 학습하였습니다. 

 


 

junshock5/used-market-server

중고거래 프로젝트. Contribute to junshock5/used-market-server development by creating an account on GitHub.

github.com

+ Recent posts