jstl 에서 dateformat으로 표현할때는 <tmf:formatDate>를 사용합니다.

시간을 나타낼때는 보통 다음과 같이 24시간제를 자주 사용하곤 했습니다.

표현법은 java 의 SimpleDateFormat 을 따릅니다.

<fmt:formatDate value="${a.regDate}" pattern="yyyy-MM-dd KK:mm:ss"/>

 or

<fmt:formatDate value="${a.regDate}" pattern="yyyy-MM-dd HH:mm:ss"/>

 

하지만 위의 표현은 틀린것이라는 것을 최근에 알았습니다.

0~23시까지 나타내는 HH를 사용하던 버릇 그대로 1~24시까지 나타낼때도 대문자 KK를 그대로 사용하고 있었는데, 이게 대문자가 아닌 소문자 k라는 것을 최근에 알았던 것입니다.

그런데 저만 그런것이 아닌것 같습니다. 검색해서 찾아보면 몇몇 블로그에서 서로 다르게 가이드 하고 있습니다.

 

직접 두번, 세번 확인한 결과

 

h : 1~12

H : 0~ 23

k : 1~ 24

K :0 ~11

 

입니다.

 

다음 표는 java 1.4.2 정식문서에 있는 것입니다.

 

Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800



 

1. odbc를 통한 erwin 에서의 DB접속을 통한 Reverse Engineering ==> 결과는 ODBC 설정 실패.

 

(우선 왜 무슨 생각으로 이런 시도를 했는지 먼저 의문입니다.  Oracle Client를 설치하면 erwin에서 바로 접속이 가능한데...)

 

1.1 Oracle Instant Client 다운로드 ( Basic, ODBC 두개를 다운로드. ) & 압축을 풉니다.

( 압축을 풀변 모두 같은 디렉토리로 풀립니다.)

 

32bit파일

instantclient-basic-nt-11.2.0.3.0.zip

instantclient-odbc-nt-11.2.0.3.0.zip

 

64bit 파일

instantclient-basic-windows.x64-11.2.0.3.0

instantclient-odbc-windows.x64-11.2.0.3.0

 

이전 제 블로그글에서도 언급했지만 대부분의 오라클 클라이언트는 32bit면 됩니다. 왜냐하면 말 그대로 client가 32비트용인 경우가 대부분이니까요.

하지만 ODBC는 64bit 도 있으므로 64bit로 설치했습니다.

 

1.2 압축을 푼 파일중에 odbc_install.exe 를 실행합니다.

 

1.3 환경변수에  PATH, NLS_LANG,ORACLE_HOME, TNS_ADMIN 를 잡습니다.

Oracle이 설치되지 않았기에 ORACLE_HOME, TNS_ADMIN은 같은 디렉토리가 될것입니다.

 

C:\oracle\instantclient_11_2

ORACLE_HOME = C:\oracle\instantclient_11_2

TNS_ADMIN = C:\oracle\instantclient_11_2 

PATH = .......;%ORACLE_HOME%

NSL_LANG:KOREAN_KOREAQ.AL32UTF8

 

1.3 tnsnames.ora 파일 생성

 

ORCL=
(DESCRIPTION=
 (ADDRESS_LIST=
 (ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))
 )
 (CONNECT_DATA= (SERVER=DEDICATED)(SERVICE_NAME=ORCL)
 )
)
 

 

 

이전에 MySQL, MSSQL  ODBC 설정보다는 좀 많습니다. 오라클이라고 티내는것은 아닌지...

 

NLS_LANG 은 Oracle이 설치된 서버의 환경에 따라 조금씩 달라질 수 있습니다.

일반적으로 기본적인 설정은 다음과 같이 될수 있습니다.

 

윈도우에서 Default로 오라클이 설치된 경우 - KOREAN_KOREA.KO16MSWIN949

UTF8로 설치된 경우라면 - KOREAN_KOREA.AL32UTF8

 

정확한건 서버 세팅에 따라 달라지니 확인해보시면 됩니다.

 ==> lang 확인 쿼리 : SELECT USERENV ('language') FROM DUAL

 

이렇게 설정을 하고나면 정상적으로 odbc 설정에 추가가 되어야 하는데, dll 에러를 내면서 추가가 되질 않습니다.

32bit, 64bit모두다 설치해 보았고 odbc도 32bit, 64bit 모두 시작해서 설정을 해보았으나 dll에러로 결국은 실패.

 

 

 

그러다 생각한것이 서두에 언급한대로 아~ 이런것이 삽질이구나를 깨달았습니다.

erwin에서 DB 접속을 하려면 MySQL, MS-SQL은 ODBC를 통해서 연결하지만 Oracle은 굳이 ODBC를 사용하지 않아도 되는데, 한동안 Oracle을 사용하지 않았더니 생각이 거기에 미치질 못한것 같습니다.

 

우찌되었든 마음을 다잡고 다시 32bit Oracle Client를 설치합니다.

이전의 환경설정은 그대로 적용됩니다.

 

 

2. Oracle Client를 통한 Reverse Engineering in ERWin

 

2.1 새로운 Model을 만듭니다.

 

view 는 Physical을 선택합니다.

 

 

 

Menu ==> Tool ==> Reverse Engineering 을 선택합니다.

 

 

 

 

Logical/Physical을 선택하고  Target Database는 Oracle 을 선택합니다.

보통은 Physical만 선택하지만 이번 Reverse를 통해서는 Comment에 있는 내용을 Logical로 넣어보고자 하기 때문에 Logical/Physical을 선택합니다.

Target Database는 당근 Oracle입니다.

 

 

 

A :어디로부터 Reverse를 할것이냐인데, Default는  Database입니다. 만약 DDL Script문이 있다면 Script File로 선택하고 해당 DDL Script문을 선택하면 될것입니다. 이 방법은 저도 다음에 한번 해봐야 겠습니다.

B : 접속한 계정이 접근할수 있는 DB가 여러개라면 이부분을 선택할 필요가 있습니다. 그렇지 않다면 Current User로 보통 설정을 합니다.

C : Infer 부분은 PK와 Relation에 대한 처리여부를 묻는건데요. 저는 PK는 체크를 하지만 Relations는 보통 체크하지 않는 편입니다.

 Reverse 결과에 너무많은 Relation이 걸려 FK로 잡혀 수정조차 곤란하게 되버려 체크를 하지 않는 편입니다.

 

 

 

 

다음은 접속계정정보를 넣습니다.

처음엔 Parameters 의 Value가 입력박스처럼 나오지 않고 Dasable된 것처럼 나와  참 어리둥절 해지는데요.

마우스로 클릭해서 해당 접속 URL을 넣습니다.

 

 

Connect를 클릭하면 보통은 아래와 같은 Error 내용이 떡 나와버립니다. 말 그대로 뷰가 없는 경우 나오는 오류같은데, 처음 설정에서 View를 빼고 여기까지 왔어야 할것 같은데, 걍 무시하고 확인을 클릭해도 진행은 됩니다.

View 뿐만 아니라 이런 창이 계속해서 나오는데, 모두 확인해주면 다음으로 진행됩니다.

 

 

 

이부분에서 마치 프로그램이 응답하지 않고 뻗어버린것처럼 한참을 기다려야 합니다. 인내심을 같고 기다리면 다음으로 진행됩니다.

기다리는 동안 다른걸 하려고하지는 마세요. PC전체가 홀딩된 것 처럼 제대로 동작을 하지 않습니다.

 

 

 

끝까지 진행이 되고 나면 드디어 Physical ERD가 정상적으로 표현됩니다.

 

다음엔 Comment를 이용한 Logical을 불러오는 부분을 진행하도록 하겠습니다.

 

 



Spring 에서 RESTful을 지원하면서 사용빈도가 높아진(개인적인 견해)  @PathVariable Annotation이 사용에 있어서 주의할 점이 있습니다.

 

일반적으로 다음과 같이 사용을 합니다.

 

@RequestMapping(value = "/test/{aaa}/{bbb}", method = RequestMethod.GET)
 public String homeTest(Locale locale, Model model, @PathVariable String aaa,@PathVariable String bbb) {
  
  logger.info("Welcome home! The client locale is {} {}.", aaa, bbb);
  ... 중략 ... 
  return "home";
 }

 

 

위의 코드는 일반적으로는 오류없이 실행이 됩니다.

하지만 다음과 같이 이클립스의 컴파일러 옵션을 변경한 상태에서 컴파일 & 실행을 하게 될 경우 다음과 같은 오류가 발생합니다.

 

 

디폴트는 위의 체크박스가 모두 체크되어 있는 상태입니다.

 

오류내용은 다음과 같습니다. 결과적으로 해당 URL을 인식하지 못합니다. 때문에 해당 클래스의 메소드까지 전달되지도 못하는 상태라 디버그도 찍히지 않습니다.

 

 

 

차이점은 뭘까요?

 

@PathVariable을 사용하는 데 있어서의 차이점입니다.

위와 같은 옵션에서도 오류가 없게 하려면 다음과 같이 사용을 해야합니다.

 

@RequestMapping(value = "/test/{aaa}/{bbb}", method = RequestMethod.GET)
 public String homeTest(Locale locale, Model model, @PathVariable("aaa") String abcd,@PathVariable("bbb") String bcd) {
  
  logger.info("Welcome home! The client locale is {} {}.", abcd, bcd);
  ... 중략 ... 
  return "home";
 }

 

 

경우에 따라서 서버의 컴파일러 옵션이 디버깅을 지원하지 않은 상태일때를 만날 수 가 있는데, 이런 경우를 피하기 위해서는 가급적 위와 같은 형태로 @PathVariable을 사용하길 권장합니다.

 

SpringFramework 공식사이트인 springsource.org 에서도 다음과 같은 내용을 확인할 수 있습니다.

 

"Or if the URI template variable name matches the method argument name you can omit that detail. As long as your code is not compiled without debugging information, Spring MVC will match the method argument name to the URI template variable name:"

 

자세한 내용 :  springsource.org

 

 

추가.

실제 관련 프로젝트 중 IBM AIX 서버에서 ant build(ibm java 1.6)후 WebSphere 에서 실행하는데, 모든 기능이 정상임에도 불구하고 위와 관련된 내용만 오류가 발생하는 사례가 있었습니다. 물론 권장내용대로 수정 후 오류는 없어졌습니다. 

 

혹시 개발PC에서는 잘 되는데, 서버로 가져가면 안되는 경우가 발생한다면 이부분을 확인하시기 바랍니다.

 

 



« PREV : 1 : ··· : 19 : 20 : 21 : 22 : 23 : 24 : 25 : ··· : 61 : NEXT »