메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

이아스님이 제공하는 자바 헤드라인

한빛미디어

|

2002-08-06

|

by HANBIT

9,719

저자: 이아스님(http://iasandcb.hihome.com)

공개 프로젝트 소개-애플, 폴리스너츠, 호메로스

먼저 제가 시작한 공개 프로젝트 홍보(^^)를 좀 하겠습니다.
  • 애플: "게임 개발자를 위한 물리학" 예제의 자바 포팅
  • 폴리스너츠 : 국산 휴대용 게임기인 GP32용 J2ME 플랫폼 포팅
  • 호메로스 : (자동) 임시 저장 기능을 지원하는 게시판 글쓰기 모듈
특히 호메로스는 경량(thin)-중량(rich) 클라이언트를 모두 지원하여 간단히 웹 서비스, 특히 SOAP과 JAXM에 대한 이해를 돕고, 클라이언트 독립적인 서버 제작에 대한 감을 잡게 해줄 것입니다. 관심있는 여러분들의 많은 참여 바랍니다.

퍼스널 프로파일(Personal Profile) 1.0 (JSR-62), 무선 메시지 처리(Wireless Messaging) API (JSR-120) 최종 권고안(proposed final draft) 공개

각각 해당 JSR 공식 사이트에 가시면 받으실 수 있습니다. (참고로 JSR-XXX의 공식 사이트는 http://www.jcp.org/jsr/detail/XXX.jsp입니다.)

알려진 대로 퍼스널 프로파일은 구 퍼스널 자바를 J2ME의 컨피규레이션-프로파일 이원화 정책에 맞게 각색한 것입니다. 따라서 권고안에서 우리는 다음과 같은 특징들을 엿볼 수 있습니다.
  • 퍼스널 자바와 마찬가지로 AWT(JDK 1.1대의) 중량 컴포넌트 모델을 따르고 있습니다.
  • 따라서 그간 퍼스널 자바에서 돌아간(혹은 돌아갈) 애플릿과 애플리케이션을 자연스럽게 퍼스널 프로파일로 이전할 수 있죠.
  • 기묘한 구성: 기본적으로 J2ME CDC-FP 위에 있으면서도, J2SE 1.3.1의 java패키지에는 상위 호완성(upward-compatibility)를 가지고 있습니다.
  • 3가지 애플리케이션 모델: 기존의 퍼스널 자바가 제공하던 애플릿(Applet), 애플리케이션(main) 방식과 더불어 Xlet이 생겼습니다. MIDP에서의 MIDlet과 유사한 형태의 이 모델은 역시 PP의 기반 환경인 소형 단말기에 최적화되어 있습니다.
  • 이미지 포멧은 GIF, JPEG, PNG 모두를 지원합니다.
  • J2SE와 다른 점: java.awt의 몇 가지 클래스의 기능에 대해 제약이 걸려 있습니다.
문제는 "이런 퍼스널 프로파일을 어떤 단말기들이 구현해줄까?"입니다. 팜5 시리즈가 막강한 파워로 CLDC-MIDP가 아닌 CDC-PP를 지원할지, WinCE(포켓PC)에는 MS가 아닌 누가 PP를 올려줄지… 현재 CDC-FP가 팜이나 포켓이 아닌 리눅스 x86용으로 RI가 있다는 사실은 뭔가 석연치 않은 미래가 있다는 것을 암시하고 있는 것 같습니다.

(곁들인 뉴스입니다만, CDC-FP RI 1.0.1이 나왔습니다. http://wwws.sun.com/software/communitysource/j2me/cdc/download.html에서 다운 받으실 수 있습니다. 설치 권장 사양은 레드햇 리눅스 7.2, 인텔 686(펜티엄 2이상?)급을 요구합니다. 소스와 문서, 포팅 안내서까지 자료가 풍부합니다.)

JSP 2.0 구현체 등장!

http://developer.java.sun.com/developer/earlyAccess/jsp/에 가시면 받으실 수 있습니다.

JSP 2.0 Preview EA 1이라는 정식 명칭을 가지고 있는 이 구현체는 흥미롭게도 톰켓 4에 기반하고 있습니다. 순수히 개발-테스트용이라는 전제하여 배포되고 있으며 다음과 같은 구절을 공개 노트에 담고 있습니다.
"톰켓 5.0판이 곧 서블릿 2.4와 JSP 2.0을 구현하는 제품 품질 수준의 웹 서버를 제공할 것이다."
특이할 만한 점들로는 다음과 같은 것을 들 수 있습니다.
  • 제스퍼2 엔진 탑재(톰켓 4.1대에서부터 달기 시작한 JSP엔진)
  • JSP 2.0 API 수록(공개 초안 1판 준수)
  • 표현식어(Expression Language) 기본 내장, JSTL에서뿐만 아니라 JSP의 전 구문에서 사용 할 수 있음
이밖에도 커스텀 태그와 관련된 JSP 2.0 사항도 대폭 확충되었습니다. 아무튼 궁금하신 분이라면 바로 설치해보는 것이 최고라고 할 수 있습니다! 그런데 JSP 2.0이 J2SE 1.4를 필요로 하시는 것 아시죠?

이 JSP 2.0 PI(Preview Implementation)을 띄우면 다음과 같은 콘솔 화면이 나옵니다.
2002-07-23 오후 12:53:40 org.apache.commons.modeler.Registry loadRegistry
정보: Loading registry information
2002-07-23 오후 12:53:40 org.apache.commons.modeler.Registry getRegistry
정보: Creating new Registry instance
2002-07-23 오후 12:53:41 org.apache.commons.modeler.Registry getServer
정보: Creating MBeanServer
2002-07-23 오후 12:53:45 org.apache.coyote.http11.Http11Protocol init
정보: Initializing Coyote HTTP/1.1 on port 8080
2002-07-23 오후 12:53:45 org.apache.jk.server.JkMain init
정보: Starting Jk2, base dir= .. conf=..\conf\jk2.properties
2002-07-23 오후 12:53:45 org.apache.jk.server.JkMain start
정보: APR not loaded, disabling jni components: java.io.IOException: no jkjni in
java.library.path
2002-07-23 오후 12:53:45 org.apache.jk.common.ChannelSocket init
정보: JK: listening on tcp port 8019
2002-07-23 오후 12:53:45 org.apache.jk.common.ChannelUn init
정보: No file, disabling unix channel
2002-07-23 오후 12:53:45 org.apache.jk.server.JkMain start
정보: Jk running ID=0 ... init time=391 ms
Starting service Tomcat-Standalone
J2EE SDK/1.4
2002-07-23 오후 12:54:01 org.apache.coyote.http11.Http11Protocol start
정보: Starting Coyote HTTP/1.1 on port 8080
여기에서 우리는 다음과 같은 사항을 알 수 있습니다.
  • JMX을 기본으로 쓰고 있다.
  • 코요테 커넥터를 쓴다.
  • J2EE SDK/1.4 !!! - 톰켓 5는 J2EE 1.4 RI의 기본 구성요소이다.
이렇게 띄우고 나서는 예제를 확인해보시면 JSP 2 스타일의 모습을 미리 보실 수 있습니다.

과연 JSP 2가 막강 자금력+대형 ERP가 선사하는 근사한 분업화를 중소회사와 중소 프로젝트에까지 실현해줄런지... "꿈은 이루어진다"라는 카드 섹션이 기억 나는군요.

디비독 소개

썬의 자바 기술페이지 기사에서 소개된 dbdoc은 그동안 자바독이 맡아왔던 자바 문서화 기능을 더욱 강화하며 웹에 적합한 사용자 인터페이스와 문서 관리를 가능하게 해주는 멋진 솔루션입니다. 공식 사이트는 dbdoc.org 입니다.

앤트 팁

저는 요즈음 앤트(ant)를 통해 자바 웹 애플리케이션 제작 작업을 하고 있습니다. install-reload-remove의 개념을 아주 충실히 따르고 있기 때문에 특히 톰켓과의 연동은 놀라운 정도입니다.

그렇지만 처음 앤트의 자바 컴파일 태스크(task-앤트에서의 단위 작업을 지칭)를 통한 클래스 파일에는 디버그 정보가 없어서 서블릿이나 기타 클래스에서 예외가 발생한 경우, 해당 소스 코드의 줄번호를 볼 수 없더군요!

그래서 앤트 문서를 확인해 본 결과, 앤트의 자바 컴파일 태스크는 기본적으로 디버그용 부가 정보 추가 설정을 off로 하고 있었습니다. 물론 웹 애플리케이션의 설치-배치가 의미하는 것은 실제 서비스를 위한 실행이고 따라서 클래스에 부가 정보를 넣는 것은 의미가 없는 정도가 아니라 지양해야 하는 것이겠지만 개발-실험시에는 무척 요긴한 설정임에 분명합니다.

ant를 통해 컴파일할 때 디버그 정보(예외 발생시 소스 코드 줄 번호 표시) 지원하려면 아래와 같이 debug 속성을 on값으로 설정해주면 됩니다.

오라클 JDBC 드라이버와 톰켓 4와의 연동 문제

오라클 JDBC 드라이버인 classes12.zip은 J2SE 1.4+톰켓 4.0.4가 잘 불러오지 못합니다(톰켓 4.1대도 마찬가지). 아마도 zip파일을 처리하는 데에서 오는 문제가 아닐까 싶은데요, jar를 통해 묶으면 해결할 수 있습니다. 예를 들어 db 디렉토리에 classes12.zip을 풀어놓고

jar -cvMf oracle-jdbc-driver.jar -C db .

위와 같이하면 입력하면 db 디렉토리 밑에 있는 클래스 파일을 패키지명과 함께 잘 살려 묶어줍니다. 이것을 WEB-INF/lib에 두면 됩니다.

JSTL에 관한 참고 자료상의 오류

록스의 JSTL 조기 채택자(Early Adaptor) 책과 썬의 JSTL 입문서(tutorial)을 보면

라는 핵심 태그가 나옵니다만, 이번 JSTL 1.0 규격에는 빠져있습니다. 그 이유에 대해서 규격 문서가 명확하게 언급하고 있지는 않지만 썬의 입문서를 보면 언뜻 알 수도 있을 것 같습니다. http://java.sun.com/webservices/docs/1.0/tutorial/doc/JSTL5.html#65106을 보시면 기본적으로 JSTL에서 선언하는 변수(variable)은 문자열(java.lang.String) 객체 형(type)입니다. 그런데 JSP를 하다 보면 문자열만 다루는 것은 아니라서 변수의 형을 다르게 설정할 필요가 생기는데, 이 때


위와 같이 하려고 했으나 지금 규격에서는 안된다는 것이죠. 그렇다면 도대체 어떻게 변수의 형을 잡을 수 있을까요? 힌트 또한 JSTL 입문서에 있는데, 태그를 씁니다.


(위의 문서를 살펴보면
The JSP scoped attribute can be set either from attribute value:



or from the body of the tag:


... 

여기에서 id는 잘못된 것입니다. var가 맞습니다. 또한

Conditional Tags
The if tag allows the conditional execution of its body according to value of a test attribute. The following example from catalog.jsp tests whether the request parameter Add is empty. If the test evaluates to true, the page queries the database for the book record identified by the request parameter and adds the book to the shopping cart:




select * from PUBLIC.books where id = ?






...
<% cart.add(bid, addedBook); %>
...

위에서 태그도 현 JSTL 규격에는 맞지 않습니다. 과 같이 해주어야 합니다.)

을 같이 쓰면 좋은 점이 또 하나 있습니다. 기본적으로 JSTL에서는 변수에 대한 선언을 으로 명시적으로 하지 않아도 자신을 호출하는 페이지(혹은 서블릿)에서 request, session, application 객체에 setAttribute등으로 실어 넘겨주면, 등의 EL안에서 바로 접근할 수 있습니다. 예를 들어

AServlet에서 request.setAttribute("item", item);

->A.jsp로 전달(forward)

A.jsp에서 바로

해도 OK!

그런데 이런 상황에서
<%= item.getName() %>
과 같이 쓰면 바로 오류가 발생합니다. 이는 JSTL이 다루는 변수와 JSP가 다루는 (빈의)변수가 다른 차원에서 존재하기 때문인데 그 두 차원간의 가교 역할을 하는 것이 바로 태그인 셈이죠. 그래서 이나 혹은 암시적으로 넘어온 변수(속성)의 이름-값(key-value)은 JSTL에서 다루고 이나 <% %>등에서 선언한 변수의 이름-값은 JSTL, JSP에서 다루기 때문에 따라서 JSTL에서 다루는 변수를 JSP전체에서 접근하게 하려면 으로 한번 물꼬를 터줘야 한다는 논리입니다.

JSTL의 공간이 JSP의 공간의 부속공간(subspace)라는 것이 결론이 되겠네요.

다음기사 예고

혹시 2달 전 자바계를 뜨겁게 달구었던 "JCO와 썬의 제휴" 소식을 기억하고 계십니까? 그간 북미, 유럽, 일본, 심지어 후발주자에 가까운 중국에까지 썬의 지원권에서 밀리는 듯한 느낌을 지울 수 없었던 우리 자바인들에게는 참으로 쾌거에 가까운 낭보였습니다. 허나 2개월이 지난 지금 후속 조치에 대해 JCO나 썬에서도 이렇다할 뉴스가 없어 궁금하던 차에, JCO의 대외 담당관이신 양희정님을 만날 기회가 있었습니다. 이 만남에서 썬이 JCO에게 제휴를 제의하기부터 지금까지의 진행상황, 그리고 향후 사업 과제에 대해 자세하고도 열정넘치는 이야기를 나누었습니다. 다음주 자바 헤드라인 특집 "JCO, 한국 자바의 미래를 건다"에서는 당면한 한국 자바 업계의 문제점을 향한 JCO의 당찬 첫걸음을 속시원히 들여다보실 수 있습니다. 다음주 자바 헤드라인, 기대해주십시오.
TAG :
댓글 입력
자료실

최근 본 상품0