웹 사이트에 한국어 검색 기능과 함께 한국어 인덱싱 기능을 추가하기 위하여 여러가지 라이브러리를 찾아보던 중, 자바 기반으로 작성된 한국어 형태소 분석기 라이브러리를 발견하였습니다. (http://cafe.naver.com/korlucene) Apache Lucene 위에서 실행될 수 있도록 만든 라이브러리였고 저는 이 라이브러리의 코드 중 일부를 발췌하여 J#으로 포팅하려는 계획을 세웠습니다.

그러나, 현재 배포되는 J# 2.0 Second Edition까지도 Generic을 선언하지 못한다는(!) 중대한 결점을 알게 되었고, 같은 기능을 하는 C# 코드를 작성하기 위하여 시도해보았지만 Java의 Iterator와 .NET의 IEnumerator 인터페이스의 미묘한 의미차이 때문에 포팅 중에 많은 시간을 들이게 되어 결국 더 진척시키지 못했습니다.

그리고 마지막으로 택한 방법인 IKVM을 이용한 컨버젼에서 매우 만족스러운 결과를 얻게 되어 글을 올려봅니다. IKVM은 현재 JDK 1.6 버전에 대응되는, .NET Framework 위에서 구동되는 자체 Java Virtual Machine과 함께, Java Compiler에 의하여 만들어진 Java Byte Code를 MSIL로 변환하는 기술, 그리고 JDK 1.6 라이브러리에 대응되는 OpenJDK로 구성된 소프트웨어 개발 도구입니다. Apache Lucene 라이브러리 전체와 한국어 형태소 분석 라이브러리를 포함하여 모두 IKVM을 통하여 가져오는 데에 성공하였습니다.

제가 작업한 절차는 다음과 같습니다.

  • http://www.ikvm.net/index.html 에서 IKVM.NET 런타임을 다운로드 받습니다. x86 버전과 x64 버전이 모두 제공되며, 이 글을 작성하는 현 시점에서 0.40 버전이 릴리즈되었습니다.
  • http://www.apache.org/dyn/closer.cgi/lucene/java/ 에서 Java 버전의 Lucene을 다운로드하여, 이 중에서 lucene-core-x.x.x.jar 파일을 가져왔습니다.
  • http://cafe.naver.com/korlucene 에서 한국어 형태소 분석기 JAR 파일을 다운로드하였습니다.
  • ikvmc 도구를 통하여 다음과 같이 명령어를 지정하여 대응되는 DLL 파일을 생성하였습니다.
    ikvmc -target:library [형태소 분석기 JAR 파일] [Lucene Core JAR 파일]
  • 위와 같이 명령을 지정하여 나타나는 결과 DLL 파일을 다음의 DLL들과 같이 프로젝트에 참조 추가합니다. - 또는 - IKVM 관련 DLL을 모두 GAC에 등록해도 됩니다.
    • IKVM.OpenJDK.Core.dll
    • IKVM.OpenJDK.Misc.dll
    • IKVM.OpenJDK.Security.dll
    • IKVM.OpenJDK.SwingAWT.dll
    • IVKM.OpenJDK.Text.dll
    • IKVM.OpenJDK.Util.dll
    • IKVM.OpenJDK.XML.dll
    • IKVM.Runtime.dll
  • org.apache.lucene.analysis.kr 네임스페이스의 클래스들을 활용하여 작업을 실행할 수 있었습니다.

여기서 주목할만한 부분은, ikvmc가 단순히 대응되는 코드만을 작성하는 것이 아니라, JAR 파일 내부에 포함된 리소스 파일에 대한 정보도 닷넷 프레임워크 리소스로 변환하여 저장하고 여기에 대응되는 코드도 자동으로 맞추어주기 때문에 IKVM을 위하여 자바 프로그램을 다시 수정하는 작업은 필요하지 않습니다.

위와 같은 방법을 통하여 기존에 작성한 Java Code들을 손쉽게 .NET Framework 안으로 통합할 수 있습니다. 그리고 ikvmstub을 이용하면 Java Code에서 .NET Framework의 핵심 라이브러리들을 자유롭게 활용할 수도 있습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)