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

한빛출판네트워크

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

IT/모바일

자바 서블릿 프로그래밍 COS의 국제화에 대하여

한빛미디어

|

2001-10-22

|

by HANBIT

8,361

by 이창신 『자바 서블릿 프로그래밍, 개정판』"4장. 정보의 추출"에 소개된 com.oreilly.servlet(이하 COS)의 업로드 모듈은 이 책의 첫 판이 나온 이래로 계속 보강되어 국내는 물론 세계에 걸쳐 널리 사용되고 또 분석되어 왔다. 하지만 실상 국내에서는 그리 전폭적인 인기를 구가하지 못했는데 그 이유는 아무래도 첫 판에 소개된, 그리고 그 이후로 제작자인 제이슨이 배포한 COS에 국제화 지원 기능의 결정적인 부분이 누락되어 있었기 때문이다. 여기서 잠깐 나의 서블릿 개발사와 업로드 모듈의 관계를 서술해보려 한다. 1999년 초, 처음 서블릿을 통해 구현하였던 자료실에서 나는 『자바 서블릿 프로그래밍 21일 완성』(1998년, 삼각형 프레스)에 나온 업로드 모듈을 썼다. 지금도 선명히 기억하는 것은 책에 나온 대로 했더니 죽어도 안 되어 처음부터 샅샅이 파헤친 끝에 고쳐나갔더니 원래 모습은 온데 간데 없고 새로운 모듈이 탄생하고 말았다는 사실이다. 바로 그 자료실의 이름이 "자이브(Jive)" 였다.
자바 서블릿 프로그래밍, 개정판
1999년 중반 처음 업계에 진출하여서는 먼저 일하시던 분이 소개해주신 업로드 라이브러리를 썼는데, 누가 만들었었는지는 분명하지 않지만, 상당히 잘 돌아갔던 것으로 기억한다. 한글 문제도 물론 없어 아주 만족스러웠다. 그 라이브러리는 당시 여러 자바 게시판을 통해 퍼졌던 걸로 기억하지만, 정확한 출처도 없이 우리의 기억에서 사라져버렸다. 그리고는 한 동안 업로드 쪽은 다룰 일이 없었는데, 2000년 말경 COS가 다시 눈에 띄었다. 처음 이 책의 1판인 『자바 서블릿 프로그래밍』을 보았을 때에는 전혀 감을 못잡았는데, 여러 가지 테스트를 거쳐 한글 처리 문제의 원인을 파악하고는 그의 수정에 착수하여 2000년 11월 28일 COS의 비영어권 지원 라이브러리 버전이 http://iasandcb.hihome.com/cosi/를 통해 배포되기 시작했다. 그런데 다소 황당한 소식이 전해졌다. 『Java Servlet Programming, 2nd Edition』이 나오면서 COS의 라이센스에 대한 문제가 묘해졌다. http://www.servlets.com/cos/에도 나와있듯이 COS의 상업적 사용은 이 책의 최신판 구입을 전제로 하고 있다. 나도 이 말을 듣고는 감이 잘 오지 않았다. 정말 이 책을 사라고 하는 건지, 아니면 리이센스 정책이 아예 없으면 곤란하니까 요식행위로 붙여놓은 건지, 아니면 COS의 유지 보수와 Q&A에 대한 정당한 댓가를 지불하라는 뜻인지, 독자에게는 어떻게 보이는가? 궁금하다. 따라서 COS에 근거를 둔 COSI도 무척 애매한 입장에 처해졌다. 그래서 『Java Servlet Programming, 2nd Edition』의 번역자를 모집하던 시점에 내가 참여를 원했던 것이다. 원래는 COS와 관련있는 "4장. 정보의 추출"만을 맡고 싶었는데, 그렇게는 안 되겠다며 한빛미디어가 설득하는 통에 이렇게 책 전부를 번역하게 되고 말았다. 아무튼 이리하여 COSI의 라이센스 정책도 COS를 그대로 따라 이 책의 원서나 번역서 최신판을 구입하는 것으로 정하는 것이 합리적이라고 생각한다(원서를 가진 분에게 번역서까지 구입을 강요하는 것은 적절하지 않다고 여겨졌다). 사실 COSI(com.oreilly.servlet International)를 COS와는 별도로 배포하는 것은 썩 좋은 모양새는 아니다. COS 전체를 뜯어 고쳐야 하는 것도 아니고, COSI 사이트에도 나와있지만, 겨우 3개의 클래스만 일부분 수정하면 되는데, 국제화의 필요성을 제이슨에게 역설했지만 감감 무소식이었다. 무척 바쁘시고 고명하신 분인 것만은 분명하지만, 아무래도 자국의 문제가 아닌지라 그리 와 닿는 사안은 아니다는 판단이었던지, 그리고 다른 비영어권 개발자들의 발호도 없었던지 지금까지도 COS는 업로드 부분의 국제화에는 별다른 성의를 보이지 않고 있다. 이에 나는 비영어권 COS 이용 개발자를 대표하여 COS의 제작 겸 관리자인 제이슨 헌터씨에게 공식적으로 정중하게 국제화의 사안을 고려해주기를 촉구한다. 이 글을 쓰고 있는 시점에서 COS의 최신 버전은 2001년 6월 19일 공개판이다. 이 패키지에 포함된 MultipartParser의 초반 주석에 보면 다음과 같은 말이 나온다.
 It cannot handle internationalized content (such as non Latin-1 filenames). 
즉 한글 파일명은 다룰 수 없다는 뜻이다. 이는 우리 나라의 인터넷 사용 환경에서는 치명적인 문제이므로, 간단히 해결하고 싶다면 MultipartParser.java에서 384번째 줄의 "ISO-8859-1"를 "EUC-KR"로 바꾸면 한글 파일도 처리할 수 있다. 묘하게도 같은 COS에 들어있으면서도 ParamPart같은 경우는 인코딩을 인수로 받아 국제화를 지원하는데, 아무래도 처리상의 속도를 걱정한 결과가 아닌가 추측도 든다. 정리하면 COS에서 한글 지원은 COS의 소스를 받아 위의 조치만 취한 후 컴파일한 클래스를 쓰면 충분하다. 하지만 조금만 손을 보면 인코딩을 설정할 수 있도록 해 비영어권 개발자들이 모두 COS를 탈 없어 쓸 수 있는 것이다. COSI는 정확히 COS에서 cos.oreilly.servlet.MultipartRequest, cos.oreilly.servlet.multipart.MultipartParser, 그리고 cos.oreilly.servlet.multipart.ParamPart만을 건드리고 있다. 따라서 COSI의 배포도 이들 3개 파일의 소스 단위와 COS에서 위의 3개 파일만 바꿔 패키징한 단위의 2가지 방식이 존재한다. ParamPart의 경우에는 앞으로도 큰 변화가 없을 듯 해 나도 한시름 덜었지만, 업로드 기능의 핵심 클래스인 MultipartParser는 거의 매 업그레이드마다 변신에 변신을 거듭하고 있어 따라잡기도 쉽지 않다(어서 제이슨이 국제화를 반영해주었으면 좋겠다). 고로 근본적인 수정은 이 클래스에서 다 일어난다고 봐도 무방하다. 하지만 실제로 개발자가 사용하는 클래스는 MultipartRequest이기 때문에 인코딩을 넘겨줄 수 있는 생성자를 추가해야 한다. 세 클래스가 공통적으로 encoding이라는 멤버 필드 변수를 가진다는 점에 주목해주었으면 좋겠다. 이 부분은 상당히 첨예한데, 국제화를 지원한다는 점에서는 좋지만, 영어권 사용자라든가 아니면 한 언어만을 다루는 경우에는 메모리와 성능상의 낭비로 여겨질 가능성도 있다(이것이 아마 영어권 개발자들이 국제화에 인색한 이유이기도 할 것이다). 가장 바람직한 방안이야 물론 유니코드(인코딩상 UTF-8)를 쓰는 것이겠지만, 지원하는 사이트도 거의 없고, 과연 인터넷에 바벨탑이 올라갈지도 의문이다. 따라서 COSI의 사용은 다음과 같은 고려 사항이 반드시 수반되어야겠다. 추가 필드 설정과 메소드의 증가에도 불구하고 국제화 기능이 유용하며, 메모리와 성능상의 잠재적 저하는 감수할 수 있다면 COSI를 선택해도 좋을 것이다. 하지만 단지 하나의 특정 언어(예를 들어 한국어를 위한 EUC-KR인코딩) 지원만을 원하고 잉여의 작업은 지양하고 싶은 경우에는 COSI보다는 COS의 MultipartParser만을 고치는 편이 나을 것이다. COSI는 앞으로도 비영어권 사용자들을 위해 COS의 국제화를 계속 지원할 것이며 『자바 서블릿 프로그래밍, 개정판』의 원저자, 제이슨 헌터에게 국제화를 COS에 수용하도록 지속적으로 촉구할 참이다. COSI의 최신판와 그에 관련된 자세한 정보는 위에 소개된 사이트에서 구할 수 있다. 목마른 사람이 우물 판다지만, 세계 각지 도처에서 불철주야 매진하고 있는 자바 개발자간들의 국제화 문제에 대한 공감은 아직 멀고도 험한 것인지, 오늘도 묵묵히 모국어 지원에 힘쓰는 비영어권 개발자들의 모습이 눈에 선하다. 그들의 노고는 언젠가 역사가 알아 줄 것이다. 언제일지는 모르지만.
TAG :
댓글 입력
자료실

최근 본 상품0