Java, Spring 국제화(MessageSource) 적용관련 질문

2017-07-09 18:20

스타트업 3년차 웹개발자입니다. 앱서버와 어드민 담당하고있고 현재는 한국어로만 서비스를 하고 있습니다. 조만간 중국어 지원하도록 확장개발을 진행해야 하는데요. 웹개발자가 저 혼자라서 어디 물어볼 곳이 없어서 질문드립니다.

과거 다녔던 회사에서 썼던 방법은 아래와 같은 방법으로 간단하게 구현하였습니다.

  • Message들은 한국어, 중국어 별로 데이터베이스에 저장해둔다.
  • MessageSource가 DB로 부터 해당 한국어/중국어 버전의 메시지를 모두 읽어들인다.
  • request 요청시 language파라미터의 값을 받아 ko, cn을 구분한다.
  • 이후 , language 파라미터 값을 기준으로 언어 메시지를 뿌려준다.

당시에는 아무생각없이 개발했었는데, 제가 직접 책임지고 있는 프로젝트를 손보려니 이것저것 걸리는게 한두가지가 아니네요. 일단 프로젝트 내 인코딩 관련 설정부분은 모두 utf-8로 설정해야할 것같고.

크게 궁금한 것은 아래 세가지입니다.

  • Message 저장 방식 1)DB, 2)XML, 3)프로퍼티
  • MessageSource를 이용하는 것이 최선인가. 다른 더 좋은 방법이 있는가
  • 사용자의 locale를 구분하는 방법 파라미터 값으로 받는 방법 이외

궁금한 내용에 대한 내용이 아니더라도 국제화 프로젝트를 만들때, 제가 참고할 수 있는 양질의 레퍼런스 혹은 구축 가이드 사이트, 서적이 있다면 추천해주시면 감사하겠습니다.

제가 아는 지식이 짧아 질문의 내용도 짧은데요. 다국어지원 경험이 있으신 분들의 '이런건 주의하는 것이 좋다, 이것도 한번 참고해봐라'라는 조언도 큰 도움이 될 것 같습니다.

3개의 의견 from SLiPP

2017-07-10 10:27

저도 다국어와 관련한 경험이 없는 상태에서 알고 있는 내용만 공유해 봅니다.

Message 저장 방식 1)DB, 2)XML, 3)프로퍼티

가장 높은 유연성을 생각한다면 DB를 통해 관리하는 것이 좋을 듯 합니다. 하지만 DB를 통해 관리할 경우 추가적인 개발 비용이 발생하리라 예상하기 때문에 어느 정도의 유연성을 원하는지에 따라 달라질 것 같아요. 예를 들어 고객들이 관리툴과 같은 곳에서 다국어와 관련한 메시지를 수정하기를 원하는 것인지. 그렇지 않고 개발자들이 배포를 통해 해결해도 되는 상황인지라 따라 달라질 것 같아요.

만약 DB를 사용하지 않고 XML 또는 properties 파일을 사용하는 결정했다면 properties 파일을 사용하는 것이 일반적입니다. JDK에서 language 설정에 따라 자동으로 해당 properties 파일을 결정하기 때문에 유용한 듯 보입니다. 물론 XML 관련 라이브러리도 찾아보면 있을 것 같네요.

MessageSource를 이용하는 것이 최선인가. 다른 더 좋은 방법이 있는가

저도 메시지 처리는 MessageSource를 이용한 경험 밖에 없는지라 다른 대안은 모르겠네요.

사용자의 locale를 구분하는 방법 파라미터 값으로 받는 방법 이외

인자를 통해 언어를 구분하는 것도 있지만 세션, 쿠키, DB에 저장하는 방식, Request Header의 AcceptHeader를 사용하는 방법도 가능하겠네요. 내가 특정 언어로 사용하겠다고 결정하면 기록해 두었다가 지속적으로 해당 서비스로 제공하는 방식이죠. Spring에 보면 LocaleResolver라고 있는데요. LocaleResolver 구현체가 다양하게 있습니다. 또한 나만의 LocaleResolver를 만들어 등록하고 사용해도 됩니다.

주의할 점

다국어 지원 경험은 없지만 주의할 점을 생각해 보면 다음과 같은 것이 있지 않을까요?

  • 이미지의 경우도 각 언어별 이미지를 만들고 경로 정보를 메시지와 똑같이 관리해야 한다.
  • DB에 날짜 데이터를 관리할 때 특히 주의해야 한다. 날짜 데이터를 특정 기준 시간으로 일관되게 저장하고, 각 locale 설정에 따라 다르게 처리해야 한다. 특히 이 부분이 쉽지 않을 것 같네요.
  • 혹시 화폐와 관련한 부분이 기능에 있다면 이 부분도 고려해야할 듯 하네요.

지금 생각나는 부분은 이 정도네요.

2017-07-10 12:55

@자바지기 고맙습니다~ 답변 참고해가면서 개발방향 생각해봐야겠습니다.

기회가 된다면 유용하게 공유할내용들 정리해서 또 글올려보겠습니다~

의견 추가하기

연관태그

← 목록으로