Technical NOTE

JSP에서 DB를 이용해 요일을 한글로 가져오기 본문

미들웨어

JSP에서 DB를 이용해 요일을 한글로 가져오기

테크니컬노트 2018. 8. 1. 15:06
반응형

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 작성

반응형