[java] 서블릿에서의 다국어 처리 방법

서버 사이드 언어인 Java를 사용하여 웹 애플리케이션을 개발할 때, 다국어 지원은 매우 중요한 요소입니다. 사용자가 여러 언어로 애플리케이션을 사용할 수 있도록 다국어 처리를 구현하는 방법에 대해 알아보겠습니다.

1. 프로퍼티 파일 사용

가장 일반적인 방법은 다국어 문자열을 포함하는 프로퍼티 파일을 사용하는 것입니다. 우선, 다국어 문자열을 포함하는 여러 개의 프로퍼티 파일을 준비해야 합니다. 각 프로퍼티 파일에는 키-값의 쌍으로 다국어 문자열이 저장됩니다.

예를 들어, messages_en.properties 파일에는 “welcome.message=Welcome!”와 같이 영어로 된 문자열이 저장되고, messages_ko.properties 파일에는 “welcome.message=환영합니다!”와 같이 한국어로 된 문자열이 저장됩니다. 이렇게 준비한 프로퍼티 파일들을 웹 애플리케이션의 리소스 디렉토리에 저장합니다.

2. Locale 객체를 이용한 선택적 로드

서블릿에서는 다국어 처리를 위해 java.util.Locale 클래스를 사용할 수 있습니다. 사용자의 언어 설정에 따라 적절한 프로퍼티 파일을 선택적으로 로드할 수 있습니다.

Locale userLocale = request.getLocale();  // 사용자의 로케일 정보를 얻음
ResourceBundle messages = ResourceBundle.getBundle("messages", userLocale);  // 해당 로케일에 해당하는 프로퍼티 파일 로드

String welcomeMessage = messages.getString("welcome.message");  // 프로퍼티 파일에서 문자열 값 조회

위의 예제에서 request.getLocale()로 사용자의 로케일 정보를 얻어온 후, 해당 로케일에 해당하는 프로퍼티 파일을 로드합니다. 로드한 프로퍼티 파일에서 원하는 문자열 값을 얻어올 수 있습니다.

3. JSTL을 사용한 다국어 처리

JSP 페이지에서 다국어 처리를 위해 JSTL(JSP Standard Tag Library)을 사용할 수 있습니다. JSTL의 fmt 태그 라이브러리를 이용하면 간단하게 다국어 처리를 할 수 있습니다.

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<!DOCTYPE html>
<html>
<body>
    <h1><fmt:message key="welcome.message" /></h1>
</body>
</html>

JSTL의 fmt:message 태그를 사용하여 프로퍼티 파일에서 문자열 값에 접근합니다. 이 태그는 로케일 정보를 바탕으로 사용자에게 해당하는 다국어 문자열을 렌더링할 수 있습니다.

4. 메시지 리소스를 캐싱하기

다국어 처리는 애플리케이션의 성능에도 영향을 미칠 수 있습니다. 따라서, 메시지 리소스를 적절하게 캐싱하는 것이 중요합니다. 캐시를 사용하면 매번 파일 시스템에서 프로퍼티 파일을 로드하지 않고, 메모리에 캐싱된 값들을 가져와 사용할 수 있습니다.

Java에서 메시지 리소스를 캐싱하기 위해 java.util.ResourceBundle.Control 클래스와 java.util.ResourceBundle.getBundle 메서드에 캐시 관련 설정을 추가할 수 있습니다.

ResourceBundle.Control control = ResourceBundle.Control.getControl(ResourceBundle.Control.FORMAT_PROPERTIES);
ResourceBundle messages = ResourceBundle.getBundle("messages", userLocale, control);

위의 예제에서는 ResourceBundle.Control 클래스를 사용하여 캐싱 설정을 지정하고, ResourceBundle.getBundle 메서드의 두 번째 파라미터로 해당 캐시 설정을 전달합니다.

다국어 처리를 할 때 캐싱을 사용하면 성능을 향상시킬 수 있으므로, 적절하게 캐싱 설정을 적용하는 것이 좋습니다.

결론

Java 서블릿에서 다국어 처리를 위해 여러 가지 방법을 사용할 수 있습니다. 프로퍼티 파일을 이용한 방법이 가장 일반적이며, Locale 객체를 이용하여 선택적으로 로드할 수 있습니다. JSTL의 fmt 태그를 사용하여 JSP 페이지에서도 간단하게 다국어 처리를 할 수 있습니다. 적절하게 메시지 리소스를 캐싱하여 성능을 향상시키는 것도 중요한 고려사항입니다.

참고 자료