시스템 환경변수 설정

이제 압축을 푼 후 새로 생성된 'D:\SDK\groovy-1.1-rc-1' 디렉토리를 Groovy의 홈디렉토리로 설정합니다. 저는 관리자 권한으로 명령 프롬프트를 실행한 후, 설정했습니다.

C:\>reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v GROOVY_HOME /d D:\SDK\groovy-1.1-rc-1
C:\Documents and Settings\MyHome>echo %GROOVY_HOME%
%GROOVY_HOME%
C:\Documents and Settings\MyHome>set GROOVY_HOME=D:\SDK\groovy-1.1-rc-1
C:\Documents and Settings\MyHome>echo %GROOVY_HOME%
D:\SDK\groovy-1.1-rc-1

첫째 줄은 시스템 환경 변수에 GROOVY_HOME을 추가하는 명령입니다. 마지막 옵션으로 쓰인 디렉토리 경로를 본인의 환경에 알맞게 고쳐서 실행하시면됩니다. 세번째 줄에서 set 명령으로 GROOVY_HOME을 다시 설정한 이유는 현재 이 명령을 수행하고 있는 유저에게는 GROOVY_HOME 환경변수가 적용이 안된 상태라서 임시로 변수를 설정한 것입니다(다시 로그인하면 set 명령 없이 환경변수가 설정됩니다).


신고

Groovy 처음 시작하기 : 설치

Scriptom 2.0 alpha에 관한 글을 작성하고 보니 너무 뜬금 없는 얘기가 된 것 같아서, 자바개발자를 위한 Groovy 설치법을 간단히 설명해 보려고 합니다. 그리고 아마도 다음 글에서는 Scriptom 설치에 관해서 쓸 것 같습니다.

Groovy 설치를 위한 선행조건
  • Java SDK 1.4 버젼 이상이 설치되어 있어야합니다
  • JAVA_HOME 환경 변수가 설정되어 있어야합니다(Java SDK의 설치 디렉토리를 가리키도록)
Groovy 설치

당연한 얘기지만 Groovy 홈페이지에서 배포본을 다운 받아야 합니다. 지금(2007.10.28) 받을 수 있는 가장 최신의 버젼이 Groovy 1.1-rc-1이라서 저는 이 배포본으로 예를 들도록 하겠습니다.
다운로드 받은 압축파일을 설치를 원하는 위치에 압축을 풀어줍니다. 저는 'D:\SDK' 디렉토리에 풀었습니다.

압축파일을 풀어준다

D:\SDK 디렉토리에 압축파일을 풀었다


이제 압축을 푼 후 새로 생성된 'D:\SDK\groovy-1.1-rc-1' 디렉토리를 Groovy의 홈디렉토리로 설정합니다. "내 컴퓨터" 아이콘을 우클릭한 후 "속성" 선택 - "고급" 탭 선택 - "환경 변수" 버튼을 클릭한 후 가장 아래에 있는 "새로 만들기" 버튼을 클릭합니다. 새 시스템 변수 창이 뜨면 변수 이름에 GROOVY_HOME을, 변수 값에 Groovy 배포본의 압축을 푼 후 생긴 디렉토리의 전체 경로를 입력합니다. 저는 'D:\SDK\groovy-1.1-rc-1'을 입력했습니다.

사용자 삽입 이미지

GROOVY_HOME 시스템 환경변수 설정


마지막으로 %GROOVY_HOME%\bin 디렉토리를 Path 시스템 환경변수에 추가해줍니다. 이미 존재하는 Path 변수를 선택하고 "편집" 버튼을 누른 후, 이미 입력되어 있는 변수 값의 끝에 세미콜론(;)을 추가한 후 다시 %GROOVY_HOME%\bin을 입력한 후 확인 버튼을 누릅니다. 중간에 추가하던 마지막에 추가하던 이미 입력된 다른 경로명과 세미콜론으로 경계를 지어 주어야한다는 점만 주의하면 됩니다.

사용자 삽입 이미지

Path에 %GROOVY_HOME%\bin을 추가


이제 명령 프롬프트 창을 하나 실행한 후, groovy -version 명령을 실행 해 봅니다.
"Groovy Version: 1.1-rc-1"이 출력되면 Groovy를 제대로 설치한 겁니다.

사용자 삽입 이미지

정상 설치 여부 확인





신고

Scriptom 2.0 alpha

Groovy 홈페이지에 오래간만에 들어가 봤더니 Scriptom 2.0 alpha버젼이 나와있더군요.  Scriptom은 ActiveX나 COM 컴포넌트를 Groovy에서 접근할 수 있게 해주는 훌륭한 모듈입니다.
루비의 'win32ole'로 엑셀을 만지는 재미를 Groovy에서도 느낄 수 있을까해서 예전에 사용해 봤었는데 루비와 비교해볼 때 기능이 약했던 기억이 있습니다.
하지만 Scroptom 2.0은 1.2 버젼과 비교해서 많은 면에서 발전이 있다고 합니다. 아직 alpha 버젼이지만 코드는 안정화된 상태고 기능구현도 완료되었다고 해서 금새 다운 받아서 예제를 실행시켜 봤습니다.

Scriptom 페이지에 Quick Start 예제로 나와있는 그루비 코드는 examples/speech 폴더에 각각 'Speak.groovy', 'SpeechInterfaces.groovy'라는 파일로 있었습니다. Quick Strat 예제답게 잘 실행됩니다.
 그런데, 가장 완성도 높은 예제라고 소개된 examples/excel 폴더의 'ExcelReport.groovy'는 아래와 같이 오류가 발생합니다.

D:\Repository\Groovy\zip\scriptom-2.0-alpha\examples\excel>groovy ExcelReport.groovy
  CREATING A SPREADSHEET FROM A TEMPLATE:
  Opening Excel template, inserting data, and creating a chart.
  The output document is 'D:\Repository\Groovy\zip\scriptom-2.0-alpha\examples\excel\report.xls'.
Caught: com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: Item
Description: 매개 변수의 개수가 잘못되었습니다.
        at ExcelReport$_run_closure2.doCall(ExcelReport.groovy:30)
        at ExcelHelper$_create_closure1.doCall(ExcelHelper.groovy:101)
        at ExcelHelper$_create_closure1.doCall(ExcelHelper.groovy)
        at ExcelHelper.create(ExcelHelper.groovy:69)
        at ExcelReport.run(ExcelReport.groovy:28)
        at ExcelReport.main(ExcelReport.groovy)

COM에서 발생한 예외라니! 나보고 어쩌라고...... 줄 30을 찾아보니 다음과 같았습니다.

def worksheet = workbook.Worksheets.Item[1]

한참을 멍하니 있다가, Excel Workbook의 Worksheets 컬렉션에서 Item을 호출하는건 Excel API를 바로 호출하는거니까 일반적인 컬렉션을 다루는 문법과는 다를 것이라는 생각에 대괄호를 소괄호로 바꿨습니다.

def worksheet = workbook.Worksheets.Item(1)
               .
               .
               .
def worksheet = workbook.Worksheets.Item('DATA') // 줄95

저장하고 다시 실행해 보니. 이번에는 줄 61에서 예외가 발생했습니다. 'Item'을 키워드로 파일 내용을 검색하다보니 눈에 띄었던 부분이었습니다.

worksheet.Cells.Item[row+1,1] = "$row/1/2007"

줄 61과 줄 65를 마찬가지 형식으로 변경했습니다.

worksheet.Cells.Item(row+1,1) = "$row/1/2007"
               .
               .
               .
worksheet.Cells.Item(row+1,col+1) = (row + col)

엉뚱한 에러가 납니다.

D:\Repository\Groovy\zip\scriptom-2.0-alpha\examples\excel>groovy ExcelReport.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, ExcelReport.groovy: 61:
"worksheet.Cells.Item((row + 1), 1)" is a method call expression, but it should be a variable expression at line: 61 column: 35. File: ExcelReport.groovy @ line 61, column 35.
       worksheet.Cells.Item(row+1,1) = "$row/1/2007"
                                                                ^
1 error

Item Property를 호출하여 Range 객체를 꺼낸 것까지는 좋았는데 문자열 할당을 하려면 Value Property에 해야한다는걸 깜빡했나 봅니다.

worksheet.Cells.Item(row+1,1).Value = "$row/1/2007"
               .
               .
               .
worksheet.Cells.Item(row+1,col+1).Value = (row + col) // 줄65

이제야 잘되는군요. :)

D:\Repository\Groovy\zip\scriptom-2.0-alpha\examples\excel>groovy ExcelReport.groovy
  CREATING A SPREADSHEET FROM A TEMPLATE:
  Opening Excel template, inserting data, and creating a chart.
  The output document is 'D:\Repository\Groovy\zip\scriptom-2.0-alpha\examples\excel\report.xls'.
        EVENT Change (1,2) = 1/1/2007
        EVENT Change (2,2) = 2.0
        EVENT Change (3,2) = 3.0
        EVENT Change (4,2) = 4.0
        EVENT Change (5,2) = 5.0
        EVENT Change (6,2) = 6.0
        EVENT Change (1,3) = 2/1/2007
               .
               .
               .

가장 완성도 높은 예제라고 했는데 왜 오류가 있을까요? 단순히 추측해보면 Groovy에서 List나 Map을 다루는 방식으로 COM의 Property(indexed properties)를 다룰 수 있도록 한다는 Scriptom 2.0의 개선사항 반영이 제대로 안된게 아닌가하는 생각이 듭니다.

+

COM Methods and Properties in Scriptom 이 문서를 보니까 확실히 알파버젼이라서 생기는 문제군요. 그렇다면 베타 버젼쯤에서는 이 예제가 멀쩡히 잘 돌아가겠지요?

+

2007.11.02
베타 버젼이 나와서 테스트 해 봤습니다. 줄 30과 줄 95의 소스가 약간 변경('workbook.Worksheets'가 'workbook.Sheets'로) 되었지만 여전히 제 PC에서는 같은 오류가 발생합니다. 'workbook.Worksheets'를 'workbook.Sheets'로 변경하지 않고 괄호 등만 위의 방식으로 변경하면 잘 실행됩니다만...... 이거 설마 제 PC에서만 안되는건가요? Excel 2003 버젼 쓰고 있습니다만...... :(

신고

SlickRun

SlickRunBayden Systems에서 무료로 제공하는 유용한 툴입니다.

쉽게 설명하자면 '윈도우키+R'를 누르면 나타나는 실행 창의 확장판이라고 할 수 있겠습니다. 저는 실행 창에서 notepad 쳐서 메모장을 실행시키거나 mspaint를 쳐서 그림판을 실행시키는 일이 자주있는데요. SlickRun을 설치하면 패스(path)에 등록되지 않은 어플리케이션도 'MagicWord'를 등록하면 쉽게 실행시킬 수 있습니다. 저는 이 툴을 사용한 후로 바탕화면의 바로가기 혹은 빠른 실행 아이콘을 사용하는 일이 많이 줄었습니다.

설치는 간단합니다. 무조건 Yes하면됩니다. 중간에 추가로 파일을 다운로드해서 설치할거냐고 물어보는데 그것도 Yes 해서 설치하면 됩니다.

사용방법도 간단합니다. 설치후 나타나는 남색 바(bar)를 클릭한 후 notepad, mspaint, cmd 등의 MagicWord를 입력하고 엔터키를 치면 됩니다. 바를 클릭하기가 귀찮으면 '윈도우키+Q'를 누르면 바에 커서가 가 있을겁니다.

설치후 보이는 남색 바

설치후 보이는 남색 바


매직워드는 자동완성도 지원하기 때문에 매우 편리합니다.

자동완성 기능 - 'no'만 입력했는데 전체 매직워드가 자동입력된 상태

자동완성 기능 - 'no'만 입력했는데 전체 매직워드가 자동입력된 상태

매직워드 등록은 간단합니다. 바의 끝부분을 우클릭하면 나타나는 컨텍스트 메뉴에서 'New MagicWord...'를 선택한 후 입력창이 나타나면 원하는 MagicWord를 입력하고 실행파일의 절대 경로나 URL을 입력하면됩니다. 절대경로는 레이블 Filename or URL을 클릭하면 파일선택 창이 뜨기 때문에 찾아서 선택하면 됩니다. 이게 불편하다고 생각되거나 이미 매직워드로 등록하고 싶은 어플리케이션이 실행중이라면 초록색 스포이드(?) 아이콘을 실행 중인 어플리케이션 창으로 드래그하면 창 색이 변경되면서 실행파일의 절대경로가 자동으로 입력되어 있는걸 볼 수 있을겁니다.

Total Commander를 'tc'라는 MagicWord로 등록했습니다

Total Commander를 'tc'라는 MagicWord로 등록했습니다


미리 입력되어 있는 매직워드 중 Filename이 iexplorer로 되어 있는 매직워드가 무엇인지 궁금하실 텐데요. 이런 매직워드는 웹사이트 검색을 위해서 사용합니다. 예를 들면, 아래 그림과 같이 입력하면 두번째 단어인 'java'가 검색어로 입력된 구글 창이 뜨게됩니다.

구글 검색

구글 검색


네이버를 검색하고 싶으시다면 매직워드 'naver'를 새로 등록하고 Filename or URL에는 iexplore를 입력합니다. 중요한건 Parameters인데 여기에는 아래와 같이 입력했습니다. '$W$'가 검색어로 변환되는 대치어입니다.

http://search.naver.com/search.naver?where=nexearch&query=$W$&frm=t1&sm=top_hty

네이버 검색

네이버 검색


아마 마우스로 손을 가져가기가 짜증날 때 이 툴을 자주 사용하게 될거라고 생각합니다. 마우스를 자주 안사용하는 분들, 특히 프로그래머에게는 매우 유용한 툴입니다. :)

신고

UTF8과 UCS2 간에 서로 변환할 수 없습니다

java.sql.SQLException: UTF8과 UCS2 간에 서로 변환할 수 없습니다
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:189)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:231)
    at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:957)
    at oracle.sql.LobPlsqlUtil.plsql_read(LobPlsqlUtil.java:202)
    at oracle.jdbc.dbaccess.DBAccess.lobRead(DBAccess.java:700)
    at oracle.sql.LobDBAccessImpl.getChars(LobDBAccessImpl.java:210)
    at oracle.sql.CLOB.getChars(CLOB.java:247)
    at oracle.sql.CLOB.getSubString(CLOB.java:159)
  • CLOB 컬럼에 정상적으로 insert된 컨텐츠가, 읽어올 때에는 오류가 발생 함.
  • OC4J 10g 버젼에서 오래된 jdbc driver(classes12.jar)를 사용하였을 때 발생 하는 것으로 추정.
  • Oracle 10g Release 2 버젼용 jdbc driver(ojdbc14.jar)로 변경하자 정상적으로 작동함.


신고