Technical NOTE
JSP에서 DB를 이용해 요일을 한글로 가져오기 본문
WAS에서 TO_CHAR를 이용해 요일을 한글로 가져오는 방법에 대해 설명한다.
Windows 환경에서는 문제가 안될 것같은데,
Linux나 Unix 환경에서는 TO_CHAR를 이용해서 날짜 데이타를 'YYYY/MM/DD DY' 포맷으로 요일 정보를 가져오는 경우 한글로 요일이 출력되어야 되는데 영문으로 출력되는 경우에 대한 해결 방법
※ 테스트 환경
OS : CentOS
WAS : JEUS 7
DB : Tibero 6
쿼리문 : SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD DY') FROM DUAL;
1. TbSQL에 접속해서 DB의 NLS_DATE_LANGUAGE 파리미터가 KOREAN 인지 확인하기
TbSQL은 Tibero에서 제공하는 Command 기반 Tool이다. 오라클의sqlplus와 동일한 녀석인데, 오라클도 아래와 유사한 결과를 얻는다.
SQL> show param NLS
NAME TYPE VALUE
---------------------------- -------- ----------------------------------------
NLS_COMP STRING BINARY
NLS_CURRENCY STRING $
NLS_DATE_FORMAT STRING YYYY/MM/DD
NLS_DATE_LANGUAGE STRING KOREAN
NLS_LANG_AT_BOOT STRING MSWIN949
NLS_LENGTH_SEMANTICS STRING BYTE
NLS_NUMERIC_CHARACTERS STRING .,
NLS_SORT STRING BINARY
NLS_TIMESTAMP_FORMAT STRING YYYY/MM/DD HH24:MI:SSXFF
NLS_TIMESTAMP_TZ_FORMAT STRING YYYY/MM/DD HH24:MI:SSXFF TZR
NLS_TIME_FORMAT STRING HH24:MI:SSXFF
만약 American 으로 되어있는 경우 아래와 같이 alter system 명령을 이용해서 Korean 으로 수정
SQL> show param NLS_DATE_LANGUAGE
NAME TYPE VALUE
---------------------------- -------- ----------------------------------------
NLS_DATE_LANGUAGE STRING AMERICAN
SQL> alter system set NLS_DATE_LANGUAGE=Korean;
System altered.
SQL> show param NLS_DATE_LANGUAGE
NAME TYPE VALUE
---------------------------- -------- ----------------------------------------
NLS_DATE_LANGUAGE STRING KOREAN
2. WAS에서 Locale 설정을 한글로 설정한다
만약 아래와 같이 WAS를 설치한 OS계정의 locale이 C 로 설정되어 있는 경우
select to_char(sysdate, 'YYYY/MM/DD DY') from dual;
쿼리 수행시 영문으로 표시된다
[jeus@www:/home/jeus] $ locale
LANG=C
3. 테스트 페이지(selectTest.jsp 파일) 작성
참고로 아래에서 5번째 Line에서 datasource 이름이 tiberoDS로 설정되어있는데, 필요시 변경해서 사용한다.
코드가 길어질 까바 Exception처리는 누락시킴
<%@page contentType="text/html;charset=euc_kr"%>
<%@page import="javax.sql.*, javax.naming.*, java.sql.*"%>
<%
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("tiberoDS");
Connection con = ds.getConnection();
Statement stmt = con.createStatement();
String query = "SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD DY') COL1, TO_CHAR(SYSDATE, 'YYYY/MM/DD DAY') COL2 FROM DUAL";
ResultSet rs = stmt.executeQuery(query);
while(rs.next()){
String col1 = rs.getString("COL1");
String col2= rs.getString("COL2");
out.println("TO_CHAR(SYSDATE, 'YYYY/MM/DD DY') ==> " + col1);
out.println("<BR>");
out.println("TO_CHAR(SYSDATE, 'YYYY/MM/DD DAY') ==> " + col2);
}
rs.close();
stmt.close();
con.close();
%>
4. 테스트 결과
LANG=C 인 경우 요일이 영문으로 출력된다.
TO_CHAR(SYSDATE, 'YYYY/MM/DD DY') ==> 2018/08/01 WED
TO_CHAR(SYSDATE, 'YYYY/MM/DD DAY') ==> 2018/08/01 WEDNESDAY
LANG=ko_KR.utf8 인 경우 요일이 한글로 정상적으로 출력된다.
TO_CHAR(SYSDATE, 'YYYY/MM/DD DY') ==> 2018/08/01 수
TO_CHAR(SYSDATE, 'YYYY/MM/DD DAY') ==> 2018/08/01 수요일
5. 첨언
OS 마다 LANG을 설정하는 문자열이 좀 다르다.
터미널에 접속해서 "locale -a | grep -i ko"
명령을 이용하면 대충 잘 찾아보면 설정할 값을 쉽게 찾을 수 있다.
2018.08.11 작성
'미들웨어' 카테고리의 다른 글
미들웨어 장애 진단 : 네트워크 패킷 드랍에 대해 (0) | 2024.09.12 |
---|