Sep 23 2008

‘제1회 대한민국 SW 개발자 컨퍼런스’ 일단 사전등록 완료

분류: Dev.Info 태그: ,, Heart @ 12:12 오전

Trackback : http://dev.heartsavior.net/archives/213/trackback/

@ 제 1회 대한민국 SW 개발자 컨퍼런스

표를 완전 펌해봤는데 워드프레스에서 다 깨져서 안되겠다;; 그냥 링크만…

내가 처음에 봤을 때만 해도 조대협님이 ALM 발표하시는 걸로 알고 있었는데 변경된 것 같다.
조대협님 블로그를 보면 개발환경 자동화에 관해서는 내공이 정말 상당하실 것 같은데 많이 아쉽다.
(사실 가장 기대되는 파트였는데… 음냐…)

그나저나 가던지 안가던지 안철수님의 특별강연은 어떤 방법이던지 한 번 듣고 싶은데…
정말 마인드가 특별한 분인 것 같다.

그날 저녁 약속이 있긴 한데… 같이 갈 사람 모집해봐야지. 못구하면 어쩔 수 없고…ㅡㅜ


Sep 19 2008

JNI 를 통해 사용하는 VC++ 라이브러리를 디버깅하기

분류: Lang.Java 태그: ,, , , , , Heart @ 4:21 오후

Trackback : http://dev.heartsavior.net/archives/205/trackback/

JNI를 사용하는 프로젝트 수행 중에 JNI 단독으로 테스트할 때는 일어나지 않는 오류가 계속 일어나길래, JNI 가 사용하는 VC++ 라이브러리 내부를 디버깅하는 방법을 찾아 보았다.

@ Java Native Interface (JNI) - Debugging C code in a dll

설명이 잘 되어있긴 한데, 정리는 좀 덜 되어 있어서 실제로 디버깅 테스트를 해 보고 절차를 정리해 보았다.

IDE는 Visual C++ 6 를 기준으로 설명한다. 다만, 설정해야 할 부분이 별로 없으므로 아래의 설정은 타 IDE에도 적용이 가능할 것 같다.

1. Project Settings 에서 JNI 구현이 되어 있는 프로젝트를 선택함
2. Settings For: 를 Debug로 맞춘 다음(혹은 Debug 옵션들이 선택된 Custom Configuration도 상관없음) Debug 탭 선택
3. Executable for debug session: JRE 의 java.exe 나 javaw.exe 를 선택
4. Working directory 에 JNI를 사용하는 프로젝트의 root 디렉토리를 전체 경로로 기록
(Eclipse 의 경우 debug / run 시에 해당 디렉토리를 Working directory 로 사용하므로 그에 맞춰주는 것임)
5. Program arguments 에
-Xrunjdwp:transport=dt_socket,server=y,address=<Eclipse 에서 원격 디버깅을 붙을 port>,suspend=n -classpath <jar파일들;class 디렉토리들(Eclipse라면 bin)> <Main 클래스 경로(패키지.클래스명)> <main() 의 arguments> 기록
(classpath 를 적을 때 Working directory 의 상대 경로로 적어도 된다.)

* 중요 포인트 : JNI 라이브러리를 로드하는 부분( System.loadLibrary() 나 System.load() ) 에서 IDE에서 빌드하는 결과 파일을 로드하도록 해 주어야 한다.
참고로, 라이브러리 경로를 절대 경로로 표현하려면 System.loadLibrary() 대신 System.load() 를 사용하여야 하고, 이 때는 경로에 확장자도 붙여 준다.

디버그할 때는 VC++ 에서 Configuration 을 위에서 설정한 대상(Debug) 으로 맞추고 F5를 눌러 실행하면 JVM이 실행된 Console 이 뜬다.  VC++ 에서 break 걸리면 VC++ 디버거 사용 방법대로 디버깅 하면 된다.

VC++ 6 에서 실행할 때 native method 를 호출하는 위치까지는 진행되어야 breakpoint라도 걸린다. (F11로 실행해 봐야 JVM Disassembly 가 뜨기 때문에 별 도움이 안됨.)

위와 같은 방법으로 JNI 를 통해 호출되는 라이브러리를 디버깅할 수 있다.

—-

다음으로, 양 쪽으로 모두 디버그 하는 방법을 알아보자. (Eclipse 3.3 기준)

VC++ 6 은 위와 설정이 같다.

Eclipse 에서는 아래와 같이 설정한다. (다른 IDE를 쓴다면 해당 IDE 가 원격 디버깅하는 방법대로 하면 됨)

1. Open Debug Dialog 를 실행한다.
2. Remote Java Application 을 선택하고 New 를 선택한다.
3. Main 탭에서 Project 를 선택하고, Connection Properties 에서 Port 를 VC++ 에서 설정한 port 를 적는다.

해당 Debug Configuration 을 실행하면 VC++ 가 실행한 JVM 에 원격 디버거로 붙게 된다.

주의해야 할 점은, 프로그램 로직이 짧으면 Eclipse 가 연결하려는 시도 중에 프로그램이 끝나버린다.
또한, VC++ 에서 break 가 걸린 상태에 Eclipse에서 연결을 시도하면, VC++ 에서 break 풀릴 때까지 Eclipse 는 연결이 안되는 것 같다. 즉, 연결에 대한 처리가 delay 되는 것 같다. (확실하지는 않음. 혹시 아시는 분은 리플로 알려주시면 감사하겠습니다.)

양 쪽으로 디버깅할 때에는, Java 프로그램이 시작할 때 native 의 초기 진입점(native method) 을 바로 실행하도록 하면 양쪽으로 디버그를 걸기가 좀 편하다.
초기 진입점에 breakpoint 걸고, VC++에서 멈춰져 있는 상태가 되면 Eclipse 에서 원격 디버거로 연결하고, VC++ 에서 바로 F5를 눌러 초기 진입점을 빠져나가면 (뭐 이리 복잡하냐 -_-) 이후로는 양쪽으로 breakpoint 에서 멈추게 된다.

어쨌든 절차도 복잡하고… 가장 좋은 방법은 JNI 로 사용할 라이브러리를 ‘디버깅할 일이 없도록’ 하는 것이겠다.

ps. 특정 IDE 에서 컴파일해야 하는 게 아니라면 Eclipse 의 CDE를 통해 Eclipse 내부에서 북치고 장구치는 것도 가능하다.

@ Integrated Debugger for Java*/JNI Environments


Sep 16 2008

회사와 병특의 관계는 이런 게 아닐까…

분류: Dev.Think 태그: ,, Heart @ 1:50 오전

Trackback : http://dev.heartsavior.net/archives/202/trackback/

@ 산업기능요원(병특) 에 대한 자격지심 가지지 마라. 이 짓도 나름 피곤하다. ㅡ_ㅜ

윗 글을 쓸 때 사실 약간 흥분해서 병특의 입장에서 변호하는 글이 되어 버렸다.

처음에 GPG에서 해당 리플을 볼 때 들었던 생각은, ‘자격지심인가보다’ 와 ‘병특한테 당한게 많은가’ 이었다.

가끔 병특들이 오후 6시만 되면 칼퇴근을 하느니 오후 1시에 나오느니 하는 불만을 표출하는 글을 게시판에 쓰는 사람들이 간혹 있어서 하는 이야기이다. 병특을 욕하는 사람들이 전체를 보지 못하듯이, 나도 전체를 보지는 못하고 있을 것 아닌가? 이런 사람도 충분히 있을 수 있는 이야기라고 생각한다.
(그리고 정직원 중에서도 이런 사람들이 있을 수 있겠지.)

나는 회사와 병특의 관계는 이런 게 아닐까 생각한다.

회사가 병특을 뽑는데 가지는 이득은, ‘싸게 부린다’ 가 아니라 ‘병특이 아니라면 회사 이름도 모를만한 인력을 오래도록 묶어두고 회사 발전에 힘쓰게 할 수 있다’ 에 있는 것이라고 생각한다.(GPG 글 링크의 Neogeo 라는 분의 의견을 존중한다.)

병특을 하면서 얻을 수 있는 이점은, 경력적인 부분을 채우면서 대체 복무도 수행하고, 연봉제를 통해 개인 자산을 먼저 구축할 수 있는 점이라 생각한다.

그래서 상호간에 마인드에 대해서는 지켜줘야 될 부분이 있다.

병특과 회사가 윈윈하려면, 아니 적어도 좋게 끝내려면,

병특도 다니는 동안에는 정직원의 마인드로 다녀야 하는거고, 회사도 병특에게 정직원의 대우를 해 줘야 한다.

고 생각한다.

결국 양 쪽 중 한 쪽이 이를 어기니까 불신이 생겨서 서로 못 잡아먹어서 안달인 것이 아닐까?

ps. 병특을 뽑아놓으니 나간다느니 하는 것으로 불만이 많은 것 같은데, 일반 정직원을 뽑아도 마찬가지 현상이 발생한다. 이걸 가지고 병특한테 뭐라고 하는건 뭔가 이상한 그림이라고 생각되지 않는가?


« 앞 쪽뒷 쪽 »


WordPress Loves AJAX