저자: 이아스님(
http://www.iasandcb.pe.kr)
크리스마스가 정말 코앞에 다가와 있습니다. 눈이 올 것이라는 기대감과 함께 소식을 전하겠습니다.
커먼즈 랭
자카르타 커먼스 프로젝트의 컴포넌트 중의 하나인 랭(Lang)을 소개합니다. 공식 홈페이지 주소는
http://jakarta.apache.org/commons/lang.html입니다. 주로 자바 언어의 부족한 점을 채우는 일을 많이 합니다. 특히, JDK 1.4이상에서만 지원되는 기능에 대한 대안적인 요소들이 많아, 앞으로 JDK 1.3이하에서 1.4이상과 같은 기능을 구현해야 할 때 요긴할 것입니다.
JCP news
- JSR-000200 Network Transfer Format for Java Archives 발의: 차세대 자바 압축 묶음 파일 형식에 대한 연구입니다. 관심있는 분의 참여 바랍니다.
- JSR-000199 Java Compiler API 발의: 자바 컴파일러의 효율적인 호출과 사용을 위한 API로서, 주 대상층은 JSP 엔진 개발쪽과 개발 도구쪽입니다. 기타 자바 소스로부터 클래스 파일을 만들어내는 분야에도 관련이 있습니다. 역시 관심있는 분의 참여 바랍니다.
- JSR 115 JavaTM Authorization Contract for Containers 최종 권고 2안을 내놓았습니다. J2EE 1.4의 기본 포함 품목입니다.
- 웹 서비스 관련하여 JSR-000110 Java APIs for WSDL은 최종 권고안, JSR-000109 Implementing Enterprise Web Services은 최종안이 나왔습니다. 둘 다 IBM이 주도하고 있어서 RI와 TCK를 모두 공개하였습니다.
서블릿 2.4의 국제화 규격
Jean-Francois Arcand(jfarcand@apache.org)가 오늘 서블릿의 국제화에 대한 중요한 논의를 개진했습니다. 아래는 그 원문입니다.
Servlet 2.4 section 5.4 (서블릿 2.4 규격 PDF 문서 5.4를 참고하세요.) will be modified: A servlet should set the locale and the character encoding of a response. The locale is set using the ServletResponse.setLocale method, and communicated to the client using the Content-Language header. (여기서부터 미묘하게 다릅니다.) The character encoding can be set explicitly using the ServletResponse methods setCharacterEncoding and setContentType, or implicitly using the ServletResponse.setLocale method, and is communicated to the client using the charset parameter of the Content-Type header. Explicit specifications take precedence over implicit specifications. (이 문장이 중요합니다.) ... The character encoding should be specified before the getWriter method of the ServletResponse interface is called; otherwise the default ISO-8859-1 is used.
That means if setContentType is called, then setLocale should do reset the content type. Same for setCharacterEncoding. If getWriter is called, then ignore any call to setContentType, setCharacterEncoding and setLocale.
즉, 메소드 호출의 우선 순위가 문제가 아니라, 응답에 대한 인코딩을 설정하는 명시적인 setCharacterEncoding(가장 명시적)과 setContentType(컨텐트 타입에 추가)이 암시적인 setLocale(언서 설정으로부터 인코딩 유추)에 우선한다는 뜻입니다. 이런 해석을 바탕으로 만들어진 톰켓의 해당 부분은 아래와 같습니다.
- jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/Response.java
- jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat5/Constants.java
- jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat5/CoyoteResponse.java
잘잘한 꼼수(?)들
최초 자바빈즈가 GUI 컴포넌트로 등장하였지만, 요새는 웹 애플리케이션의 자료 구조로 더 친숙합니다. 이런 측면에서의 입문서가
http://java.sun.com/webservices/docs/1.0/tutorial/doc/JSPBeans.html에 있습니다.
C의 mmap()을 구현한 자바의 Memory Mapped File 기반 버퍼링인 MappedByteBuffer를 쓰는 팁이
http://www.sys-con.com/java/articlenews.cfm?id=1768에 나와있습니다. JDK 1.4이상에서 대용량의 파일을 고속 처리하는 데에 유용하리라 사료됩니다. 다만, 작은 파일에는 부하만 걸리므로 주의하세요.
톰켓의 클러스터링에 대한 프로젝트가 있습니다.
http://sourceforge.net/projects/tomcat-jg가 공식 사이트입니다. 이 클러스터링의 프레임워크가 JavaGroups인데,
http://www.javagroups.com/javagroupsnew/docs/index.html에 자세히 소개되어 있습니다. 유사한 프로젝트로 JRMS
http://www.experimentalstuff.com/Technologies/JRMS/도 있네요.
타이거(J2SE 1.5) 관련 소식
JSR 201 Extending the JavaTM Programming Language with Enumerations, Autoboxing, Enhanced for loops and Static Import가 새로 발의되었습니다.
http://jcp.org/en/jsr/detail?id=201이 공식 사이트입니다. 자바 언어 규격의 강화를 목적으로, 주로 C와 C#이 제공하는 열거형(enum) 추가, 오토박싱(autoboxing), 정적 임포트(클래스명 없이 메소드와 필드 접근), for문 강화(콜렉션의 반복을 간편화)를 대상으로 합니다. 자세한 사항은
http://jcp.org/aboutJava/communityprocess/jsr/tiger/에서 브라우징 해보시기 바랍니다. 그런데 흥미롭게도
http://jcp.org/aboutJava/communityprocess/jsr/tiger/BizTerms.html에 J2SE 1.5의 라이센스 정책이 담겨 있는데, J2SE 1.5 SDK의 소스가 SCSL 방식으로 공개될 것이며, JAX-RPC의 RI와는 다르게 상업적 용도의 사용도 허락함과 동시에 0원을 부가할 것이라는군요(예정임). J2SE 1.5에는 이밖에도 형총칭성(제네릭스), 메모리 모델과 스레드 개정, 메타데이터 기능이 언어 차원에서 추가될 예정입니다.
덧붙이는 말
오늘 아침에 잠시 제가 번역한 서블릿 책의 독자서평을 훑어볼 기회가 있었습니다. 서블릿 동작에 애를 많이 쓰신 독자분(들)께는 톰켓 개발자를 대신하여 죄송하다는 말씀도 드리고 싶습니다. (릴리즈 노트를 보니 4.1.12이후에는 맨 마지막에 invoker 서블릿 문제에 대해 명시되어 있는데, 4.0.5이후에는 없더군요.)
항상 어떤 것에도 오호(惡好)는 갈리게 되어 있어 처음에는 호쪽이 아닌 오쪽의 서평을 보면 보통 마음이 상하기도 하였지만 이제는 오히려 오쪽의 소중함을 알게 됩니다. 지적이라는 것도 그렇지요. 저에게 "꽁수"가 아니고 "꼼수"라고 해주실 수 있는 분, 제 글을 싫어함에도 저에게 올바른 길을 보여주시는 분, 그분들에게 감사드리지 않으면 도대체 누구에게 감사드릴 수 있을까 생각해봅니다.
고맙습니다. 더 좋은 필자가 되기 위해 노력하겠습니다.