[SpiderMonkey] 다운로드 및 컴파일 방법

IT/일반 2011/05/10 23:42 Posted by Gony Taegony
제품 내부에 embeded시켜 사용가능한 JavaScript 엔진이 필요하여 찾아보던 중 Mozilla 재단의 SpiderMonkey 라고 하는 오픈 소스를 컴파일해서 사용해 봤다. 혹시 필요하신 분들 참고 하시길~ 

1. Mozilla Build Tool  (Mozilla 에서 제공한 별도의 컴파일 환경이 필요하다.)
   https://developer.mozilla.org/En/Developer_Guide/Build_Instructions/Windows_Prerequisites#Microsoft_Visual_C.2b.2b_(MSVC)

2. NSPR 소스 다운로드
    JavaScript를 Multi-Thread 환경에서 쓸 경우가 아니라면 사용할 필요가 없다. 
    http://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v4.8.7/src/nspr-4.8.7.tar.gz
3. SpiderMonkey 소스 다운로드
    https://developer.mozilla.org/En/SpiderMonkey/1.8.5

4. NSPR compile (Mozill Build에서 제공한 MinGW를 사용한다.)

    mkdir build-release
    ../configure --disable-debug --enable-optimize --enable-win32-target=WIN95
    make
5. SpiderMonkey 1.8.5 compile with NSPR  (Mozill Build에서 제공한 MinGW를 사용한다.)
    : 아래 파일 경로는  실제 파일 경로이다. 자기가 실제로 설정한 경로를 넣어주면 된다.

    mkdir build-release
    ../configure --disable-debug --enable-optimize --enable-win32-target=WINNT --enable-ctypes --enable-threadsafe \
                         --with-nspr-cflags="-I \
                           D:\project\Library\mozilla\nsprpub\build-release\dist\include\nspr" \
                        --with-nspr-libs=" \
                           D:\project\Library\mozilla\nsprpub\build-release\dist\lib\nspr4.lib \

                           D:\project\Library\mozilla\nsprpub\build-release\dist\lib\plds4.lib \

                           D:\project\Library\mozilla\nsprpub\build-release\dist\lib\plc4.lib"

Apple Magic Mouse

IT/일반 2009/10/28 11:01 Posted by Gony Taegony
처음에 맥북프로를 사용하면서 멀티터치패드가 상당히 마음에 들었다.
넓은 패드도 그렇고 멀티핑거 기능도 쓰임새가 아주 많았다.
하지만 아무래도 마우스를 완전히 대체하기엔 어쩔 수 없는 한계가 있는지라 마이티 마우스를 사용했다. 그런데 사용하다보니 마우스의 휠을 없애버리고 맥북프로의 멀티터치패드처럼 멀티핑거를 지원하면 좋겠다는 생각이 들었다.
그러면 쓰기는 더 편해질 것이고 휠이 없어지는 것이기 때문에 고장도 덜 발생할 것 같았다.
하나 더 얘기하자면 디자인도 더 깔끔해지고 말이쥐~
그런데 진짜로 나와버렸다.
매직 마우스~ 오~ 지름신이~ ^^;


레오파드에서 root 권한 사용하기

IT/일반 2009/08/12 03:57 Posted by Gony Taegony
vim 에디터를 이용해서 /etc/bashrc 파일을 수정하려고 했더니 w! 명령도 먹히질 않았다.
그래서 sudo 명령을 써봤는데 패스워드를 물어본다.
그러고보니 난 root 권한 패스워드를 설정한 기억이 없는데 ... ^^;

그래서 찾아보니 root 계정은 기본적으로 가려져 있는 것으로 보였다.
이걸 활성화 시켜야 한다.
만약에 피치못할 사정으로 반드시 root 계정을 사용해야 한다면 아래와 같이 수행하면 된다.

사용자 삽입 이미지






이 후 권한 사용시 sudo -i 또는 sudo [수행할 명령]을 입력 후 설정한 패스워드를 넣어주면 된다.

[뱀발바닥]
사실 위에 보이는 캡쳐 화면을 만들어 올리는데도 시간이 좀 걸렸다.
기본적으로 화면 캡쳐를 하면 tiff 파일로 만들어지는데 이 놈이 웹에서는 보이질 않는다.
때문에 jpeg파일로 바꾸고 싶은데 방법을 찾질 못했다.
구글신에게 물어보니 automator라고 하는 어플을 소개해 주셨다.
기본적으로 존재하는 명령들을 조합하여 새로운 기능을 만들어내는 개념이다.
참고한 사이트는 요기다. http://macheart.tistory.com/tag/leopard
요기를 참조하여 겨우 캡쳐한 tiff 파일을 jpeg파일로 변경하는데 성공했다.

그런데 알고보니 미리보기 프로그램에서 파일 포멧을 변경해서 저장할 수 있었다.
아직 맥에서의 상단에 고정된 메뉴가 익숙하지 않아 그쪽은 보지도 않는 바람에 찾질 못한거였다.
결론적으로 그냥 삽질하다가 automator라고 하는 새로운 프로그램을 사용하게 된거다. ㅋ

노트북 재설치

IT/일반 2009/05/24 03:07 Posted by Gony Taegony
지금 쓰는 노트북에 OS를 설치한지 2년이 약간 넘는다.
요즈음들어 좀 버벅거리더니 이젠 Word를 띄우면 그냥 죽어버린다.
설치한지도 좀 되고 해서 금요일 저녁부터 백업을 하고 지금 다시 설치중이다.
백업을 하려고 보니 USB 하드라고 있는게 고작 30 기가 정도다.
어쩔 수 없이 네트웍으로 다른 컴에 백업을 했다.
어제는 이거 하느라 시간 다 보냈다. ㅎㅎ
대충 추려도 백업 용량이 한 80 메가 정도는 되는 것 같다.

오늘은 드디어 백업을 완료하고 숙원(?)이던 포멧에 들어갔다.
처음엔 windows 2008 standard 버전을 설치했다.
그런데 회사에서 쓰는 백신을 깔자마자 처음본게 호환성 문제 창이었다.
개인용으로 쓰는 노트북이면 상관없는 업무용이라 초장부터 이러는 건 아니다 싶어
다시 다 밀어버리고 XP로 설치했다.
그리고나서 한게 드라이버 설치였는데 이게 참 너무 많았다.
귀찮기도 하고 해서 주요 드라이버만 설치하고 나머지 드라이버들은
그냥 자동 설치 프로그램을 설치하려고 했다.
그런데 또 이놈이 .NET 프레임웍을 사용한단다. -_-;
아놔~ 굳이 또 .NET을 쓰는 이유는 뭘까나? 요즘 대세인가? ㅎㅎ
뭐 암튼 .NET이 필요하다니 설치는 해야겠고
일단 Visual Studio를 설치하고 나머지 드라이버를 설치하기로 했다.
Visual Studio 설치하면 .NET도 설치되니까 말이다.
그런데 Visual Studio 설치하다보니 약간 화가났다.
Visual Studio는 각 버전별로 전부 새로 설치해야하기 때문이다.
회사에서 사용하는 버전은 Visual Studio 6, Visual Studio 2003 .NET 버전이다.
하지만 차후 관리하는 제품 코드를 전부 Visual Studio 2005나 2008로 옮길 생각이고
개인적인 욕심도 있어서 2005, 2008을 함께 설치하고 있다.
그러니깐 지금 개발툴만 4개를 설치하고 있는거다.
하다보니 이거 너무 불편하다.
그냥 라이브러리만 버전별로 따로 설치하고 UI 같은 부분은 하나만 설치해도 될 것 같은데
왜 이렇게 만들어놨는지 모르겠다. 쩝~
Visual Studio 6 야 너무 다른 버전이라 그렇더라도 2003 부터는 좀 통일해도 될 듯한데 ...
우찌하리 파는 넘이 그렇게 만들었고 난 그걸 써야하니 ~ ㅋㅋㅋ
거기다 오늘 설치하려고 보니 2003, 2005 버전은 어디갔는지 보이질 않았다. ㅜㅜ
어쩔 수 없이 두 개 버전은 어렵게 다운을 받아 설치 중이다.
크기도 전부 GB 단위라 이게 받는게 시간이 좀 많이 걸렸다.
영화를 몇 편 봤는지 원~
이짓거리를 하고 나니 오늘 하루는 다 가버렸다. -_-
물론 아직까지도 Visual Studio 업데이트 중이다.
400 메가 정도인데 다운 받는 속도가 겁나게 느리다.

내일은 다시 오피스 설치하고 남은 드라이버만 설치하면 기본적인 설치는 끝날 듯 싶다.
한가지 문제는 내가 쓰는 Mozilla ThunderBird 라는 프로그램이 좀 불편해서 아웃룩으로
다시 바꾸려고 하는데 이게 기존 데이터에 대한 변환이 될지 잘 모르겠다.
아웃룩이 너무 무거워서 메일 전용으로 이 놈을 썼는데 좀 많이 불편하다.
버전업도 별로 안되는 것 같공~ 이거 옮기려면 시간 좀 걸릴 듯 싶다.
천둥새로 계속 쓰다가 방법 찾으면 아웃룩으로 옮겨야할 것 같다.

내일은 코딩도 좀 해야하고 좀 바쁠 듯 싶다.
주말은 좀 한가하게 보내야하는데 이번 주말은 컴만 들여다 보고 말았다.
다음주엔 흠~ 뭐 다른 일이 있으려나~ ㅎㅎ

4월 한 달간 ~

IT/일반 2009/04/19 21:58 Posted by Gony Taegony
4월 1일부터 지금까지 사이트 업무를 진행중이다.
신규 제품이라 개발에 참여한 인원은 대부분 사이트에서 테스트를 진행하고 있다.
아무래도 하드웨어와 섞인 부분이 많은지라
기본적인 기능 테스트 이외의 부분은 사이트에 나와서 할 수 밖에 없다.
현재는 가오픈 상태이고 발견된 문제점을 해결하고 월말쯤 정식 서비스를 오픈할 예정이다.
이번 프로젝트는 상당히 어려운 점이 많았다.
우리가 구성하는 시스템의 가장 앞단에 위치하는 시스템을 만드는 업체가 계속해서 문제를 발생시키는 바람에 2주 정도는 그냥 시간을 날려버렸다.
결국 업체가 바뀌어서 문제는 해결되었지만 나머지 뒷단 시스템에 대한 테스트가 상당히 지연이 되어버렸다. 불행히도 이게 내가 만든 모듈이 들어있는 부분이다.
다행히 가오픈을 하긴 했지만 테스트 기간이 짧아 상당히 신경이 쓰이는 부분이다.
아직까진 모듈자체의 문제점은 발견되질 않지만 잠재된 문제들이 있다면 가오픈 기간동안 나와주기만을 바래야 할 것 같다. ^^;
일단 프로젝트는 어느 정도 진행이 완료되어 가고 있지만 내가 생각하기에 아니다 싶은 부분이 있어 몇 자 적어본다.

1. 관리자들의 의사 결정
 난 솔직히 밤샘작업을 하는 부분에 대해서 반감은 없다.
 물론 되도록 안하는게 좋기야 하겠지만 일정상 어쩔 수 없는 경우가 많다.
 사람이 세운 계획이라는게 뜻대로 되는 것 보단 되지 않는 부분이 더 많기 때문이다.
 더구나 여러 업체들이 함께 진행하는 경우엔 말이다.
 계획에는 일정이라는 부분도 포함되어 있기 때문에 기간을 맞추기 위해서는 어쩔 수 없이
 밤샘작업은 발생할 수 밖에 없다고 생각한다. 그런데 이번 건은 좀 심하다는 생각이든다.
 앞서 말했다시피 가장 앞단을 담당하는 업체가 교체되었다.
 이 업체 때문에 2주일을 까먹어버렸고 오픈 취소되고 소송까지 건다는 얘기도 나왔었다.
 이게 가오픈 약 일주일 반쯤 전 얘기다.  왜 이런문제가 발생했을까?
 그 업체에 대한 기술적 평가나 제품에 대한 테스트 진행이 전혀 되지 않았다.
 그런 제품을 사이트에 들고 들어왔으니 계속 죽고 버그 생기고 하는게 당연하다.
 처음엔 그 쪽 엔지니어를 탓했지만 그럴게 아니라는 생각이 들었다.
 도데체 관리자들 (이 프로젝트를 진행한)은 무슨 생각으로 일을 이렇게 까지 만든 것일까?
 그냥 된다고 사이트에 넣어버리고서 엔지니어들이 알아서 진행하라고 하면 다인가?
 어떻게 해서 이런 업체에 대한 의사결정이 이루어졌는지 이해가 가질 않는다.
 업체에 대한 선택이 기간상 어쩔 수 없는 부분이 있었나?
 그럼 그 기간이라는 부분을 왜 그런식으로 잡았을까?
 내가 앞서 사람이 하는 일이라 어쩔 수 없는 부분이 있다고 했지만 그건 누가 봐도
 도저히 예측 못할 일이 벌어졌을 때의 일을 말하는 것이다.
 이런 일을 예측 못했다고 하면 그 사람들은 그 자리에 있으면 안돼는 사람들이다.
 그 사람들도 나름대로의 이유가 있을 것이겠지만 (핑계없는 무덤이 있겠는가!)
 지금 내 위치에서는 이렇게 밖에 생각할 수 없다.
 근데 정말 궁금하다. 왜 그랬을까? -_-;

2. 기술적인 부분에 대한 책임
 현재 프로젝트에 대해 처음 얘기가 나왔을 때 신나게 진행하던 분들이 있었다.
 말그대로 신나게 프로젝트에 대한 그림을 그렸다.
 그런데 지금은 손을 빼버리고 남아 있는 사람들끼리 끙끙 앓으면서 진행했다.
 뭐 솔직히 그래도 해결은 됐다.
 그런데 말이다 자기가 그렇게 했으면 최소한 문제가 발생한 부분에 대한 분석 정도는
 해야 하는거 아닌가 하는 생각이든다.
 내가 정말 열받는 건 문제가 다 해결될 시점에 전화 한 번 해서는
 어떻게 되가냐고 물어본다는 거다.
 사이트 나와달라고 하면 내가 가서 할 일이 뭐있냐고 한다.
 뭐하러 물어보나 그냥 사이트 멤버들이 알아서 할거고
 P.M도 여기 있는데 그냥 여기서 알아서 하게 냅두지~
 자기가 다 그려놓고 나한테 당연히 되야할게 되는지 물어보는건 뭔가~
 될지 안될지 모르는거 그려놓은건가? 아니면 혹시나 하는 마음에 책임회피하는건가?
 그냥 다시는 그 사람이 벌이는 일을 하지 않았으면 하는 바램만 생긴다.
 오~ 신이여 내 마음 속의 화를 잠재우소서~ ㅠㅠ

뭐 상당히 많은 얘기를 쓰게 될 줄 알았는데 프로젝트도 마무리되가고 하니 이 정도만 쓰겠다.
솔직히 지난 달 말엔 누가 건드리면 폭발하기 일보 직전이었다.
그런데 이젠 많이 가라 앉았고 궂이 더 생각해내서 이전 감정으로 가고 싶진 않다.
사람은 개개인 마다 생각이 다르고 또 그래서 싸우고 화해하고 하는 일을 반복한다.
그런데 이 높으신 양반들은 내가 어떻게 해야 잘 지낼 수 있을지 잘 모르겠다.
대놓고 싸울 수도 없고 말이다.
쩝~ 회사 정리 해고 한다는 말도 있고 증말 돌아가시겠네~ ㅋㅋㅋ

iPhone 크로스컴파일 환경 설정

IT/일반 2009/03/16 00:00 Posted by Gony Taegony
요즈음 하루에 조금씩 환경구축을 해보고 있다.

처음엔 크로스컴파일러가 설치된 Cygwin을 받기위해
http://www.iphonegameover.com/cygwin 에서 다운받아 설치하려고 하였으나
계속해서 설치중 에러가 발생하여 직접 컴파일 환경을 설정해 나가기로 했다.
참고한 사이트는 아래 두 사이트 이다.

http://code.google.com/p/iphone-dev/wiki/Building
http://www.modmyi.com/wiki/index.php/Installing_toolchain_for_windows

위 사이트에 있는 순서대로 진행하면 될 듯하여 시작했는데
각 단계별로 소스를 받아 컴파일하고 설치하는 과정이 너무 길어서 하루에 다하기는 힘들다.
컴파일 시켜놓고 멍하니 모니터보기도 뭐해서 켜놓고 자기도 했다.
다음 날 출근을 해야하기 때문에 ... ^^;
우여곡절끝에 오늘 드디어 마지막 단계까지 왔다.
그런데 마지막에 에러가 하나 떴다. 쩝~ 어쩌라는건지 통 모르겠다.
중간에 뭔가 빼먹은 것 같기도 하고 환경세팅이 잘못된 것 같기도하고... @@
아무튼 해결할 방법을 찾지못했다. 아쉽지만 처음부터 다시 해봐야 할 것 같다.
어짜피 설치한 경로가 맘에 안들어 다시 할 요량이었으니 다시 한 번 차근차근 해봐야겠다.

쩝~ 누가 이런걸 비참한 셋방살이라고 하던데~ ㅋㅋ 좀 비참하긴 하다.
그냥 맥북 있으면 해결될 일을~ ^^; 누가 맥북하나 선물 안해주려나~ ㅋ

Handle 누수 잡아내기

IT/일반 2008/12/26 17:53 Posted by Gony Taegony
최근 제품 기능 패치 후 부하테스트를 진행했다. 결과는 아래와 같이 나왔다.
사용자 삽입 이미지






















위 그림에서 하얗게 나온 그래프가 핸들의 개수이다.
약 15시간 테스트를 진행했는데 핸들이 비정상적으로 증가했다.
메모리 누수되는 부분이 있는지만 확인하려다가 그냥 핸들수도 체크항목에 넣어본건데 당황스러운 결과가 나왔다. -_-; 다행히 메모리 누수는 없는 것으로 판단이 됐지만 핸들 누수는 조금 의외였다. 혹시 방법이 있을까 싶어서 이리저리 검색해보다가 WinDbg로 확인하는 방법을 알아냈다. 이거 아니었으면 큰일 날 뻔했다. 그것도 연말에 말이쥥~ ^^;
아래와 같은 순서로 진행했다.

1. WinDbg를 실행한다.
  : 아래와 같이 실행할 파일을 선택한다.
사용자 삽입 이미지

 


























2. 아래와 같이 선택한 프로그램이 실행되며 pause 상태로 초기화된다.
  : !htrace -enable 명령을 입력하여 htrace를 활성화한다.
  : 이 명령은 이후 핸들의 open/close 상태를 기록하도록 한다.
 : 명령이 성공하면 아래와 같이 성공 메시지가 출력된다.
사용자 삽입 이미지



















3. 현재 pause 상태이므로
   g 명령을 입력하거나 메뉴에서 Degug > Go (F5)를 선택하여 프로그램을 진행시킨다.
사용자 삽입 이미지



















4. 일정 시간동안 프로그램을 수행한 후
   메뉴의 Debug > Break 를 선택하여 pause 상태로 만든다.
   그리고나서 명령창에 !htrace 를 입력한다.
사용자 삽입 이미지



















5. !htrace 를 입력하면 아래와 같이 핸들값들에 대한 open/close 로그가 출력된다
 : Open/close 한 모듈과 함수명도 출력이 된다.
 : 프로그램에 따라 상당히 많은 양이 출력된다.
사용자 삽입 이미지

 

















6. !htrace 명령을 수행하면 로그가 나오긴 하는데 상당히 많은 로그가 출력된다.
   글쎄 이걸 일일이 찾기는 좀 힘들어 보인다. 이 때는 !htrace -diff 명령을 수행한다.
  : 이 명령은 open 후 close 되지 않은 핸들을 출력한다.
사용자 삽입 이미지

 

















7. !htrace -diff 명령의 결과 아래와 같이 출력된다.
  : CProcess::KillProcess 함수에서 open한 핸들이 close되지 않았음을 알 수 있다.
 : Open 되었으나 close 되지 않은 핸들과 어느 모듈에서 호출했는지까지 보여준다.
   주의할 점은 !htrace -enable 명령을 내린 시점부터 현시점까지
   close되지 않았기 때문에 누수일 확률이 높다는 것이지 무조건 누수는 아니라는 것이다.  
   (당연한 얘기지만 ...^^;)
사용자 삽입 이미지

 

















8. 진행조건
  : WinDbg의 기본 환경은 미리 세팅한 상태이다. (File > Symbol File Path 항목)
  : 테스트를 진행한 프로그램의 PDB 파일은 실행 파일과 같은 폴더에 위치해 있다.
  : 만일 !htrace -diff 명령을 내려도 로그가 너무 많다면 일단 3번 항목을 수행하여
    프로그램을 진행시킨다. 그 후 적절한 시점 (프로그램에 따라 개발자가 판단해야함)에
    4번 항목을 수행하여 프로그램을 pause 시키고 2번 항목 (!htrace -enable)부터 수행한다.

WinDbg는 프로그램 비정상 종료시 Dr.Watson 로그를 분석할 때만 이용했는데 이런 기능도 있는지 미쳐몰랐다. 아무튼 이 놈때문에 쉽게 잡을 수 있어서 다행이다. 이젠 놀아야쥐 ~ ^^;

내가 맡은 제품에 대하여 ...

IT/일반 2008/12/13 14:30 Posted by Gony Taegony
내가 맡고 있는 제품은 좀 많은 사람의 손을 거친 제품이다.
그리고 항상 급하게 SI성으로 개발을 한 듯한 느낌이 많이든다.
뭐랄까 다른 사람이 하던 걸 받아서 얼른 기능 추가만 하고 손을 뺀듯한 느낌이랄까 --;
그래서 그런지 요즘 기능 추가를 하다보면 난감할 때가 많다.
몇 가지 정도 추려보면 아래와 같다.

1. 예외 처리 구문
[code cpp]
BOOL Initialize () {
    while (true) {
        if (break 되는 조건) {
            break;
        }
        try {
            Process_X ();
        }
        catch (...) {
            // 예외 처리
        }
    }
    return TRUE; 
}
[/code]
위의 함수는 스레드 함수이다.
특정한 조건이 만족되어 break 되기 전까지 계속 while 구문을 수행한다.
보면 바로 알 수 있듯이 예외처리를 위해 Process_X 함수에 try catch 구문을 사용했다.
문제는 Process_X 라는 함수를 호출하면 내부에 무수히 많은 함수들이 호출된다는 것이다.
게다가 그 함수들은 예외 처리가 정확하게 되어있지 않다.
따라서 하위의 함수들 중 어느 부분에서 예외가 생기더라도 Process_X 함수의 예외 처리 구문을 타게된다. 몇 개는 어쩔 수 없는 넣은 부분이 보인다. 그러나 그것도 또 하위 함수들을 무수히 호출한다. --; 그렇게되면 정확한 예외처리가 불가능하다. 가능한 점은 while 루프를 도는 도중에 예외가 발생하여 스레드가 죽거나 멈추는 일은 줄여준다는 정도이다. 하지만 그런다고 해결될 문제는 아니다. 겉으로만 문제가 없을 뿐 하위 함수에서 발생하는 예외 상황에 맞는 처리를 할 수가 없다. 지금 생각해보면 전임자도 이걸 도저히 할 엄두가 나질 않았던 것 같다. 시간이 없었을 것이다. 지금의 나처럼 말이다. 이런 식으로 시간에 쫓기면서 개발하는 상황이면 누구라도 하기 힘들 것 같다.

2. 중복 코드
[code cpp]
void UpdateData1 () {
    ICSrevice IMQ;
    HResult hr = CreateInstanceEx ();
    // 생략
    if (FAILED (hr)) {
    // 오류 처리
    }
    // 생략
    IMQ.AttachDispatch ((LPDISPATCH) mqi.pItf);
    IMQ.MethodA ();
    IMQ.ReleaseDispatch ();
}

void UpdateData2 () {
    ICSrevice IMQ;
    HResult hr = CreateInstanceEx ();
    // 생략
    if (FAILED (hr)) {
    // 오류 처리
    }
    // 생략
    IMQ.AttachDispatch ((LPDISPATCH) mqi.pItf);
    IMQ.MethodB ();
    IMQ.ReleaseDispatch ();
}
[/code]
위와 같이 UpdateData1 과 UpdateData2 가 있다고 하자.
위의 구문에서 문제가 되는 부분은 앞에서 언급했듯이 예외 처리 항목이 없다는 것이다.
CreateInstanceEx는 외부의 COM+ 객체를 생성하는 구문인데 뜻하지 않게 외부 장비가 다운되는 경우 또는 재부팅을 하게 되는 경우 예외가 발생하게 된다. 아까 말했듯이 이런 경우 적절한 예외 처리를 해주어야하는데 최상위 함수의 catch 구문으로 빠지게 된다.
그리고 원래 하려고 했던 작업은 그냥 버려지게 된다.
여기에 더해서 두 함수가 틀린 부분을 보면 MethodA 와 MethodB 밖에 없다.
똑같은 interface를 호출하고 그 객체의 멤버함수만 다른 걸 호출한다.
공통으로 생성되도록 하면 될 것을 모두 다 그대로 copy&paste한 후 수정을 해놔서
똑같은 예외 처리를 UpdateData1, UpdateData2 둘 다 해주어야 한다.

3. 전지전능한 클래스
급하게 수정하거나 하다보면 일단 돌아가게나 하자는 식으로 많이 하게 된다.
내가 생각하기에 이 클래스가 탄생하게된 배경인 것 같다.
파일 처리, 쿼리문 작성, 각 스레드 관리, INI 환경 파일 처리, 상태 처리 구문, 이미 존재하는 클래스에 넣기엔 애매한 함수들 이 모두 이 클래스에 존재한다.
INI 처리 함수는 도데체 몇 줄인지 마우스 휠을 한참돌려야 끝이 보인다.
가끔 여기를 수정하는데 페이지 다운키라도 잘못 누르면 어딜 수정했는지 헷갈려서 헤맬때가 많다. 몇몇 클래스는 이 전지전능한 클래스의 사촌뻘쯤 되보이기도 한다.
문제는 나도 시간에 쫓겨 어쩔 수 없이 거기다 함수를 넣고 있다는 거다.

4. 1번, 2번, 3번 항목이 너무 많이 존재한다.
솔직히 말해 1, 2번이 몇 개 없다고 하면 그냥 고치면 된다.
3번도 그냥 클래스를 기능별로 쪼개면 된다.
하지만 솔직히 지금은 너무 많아서 고칠 엄두가 나질 않는다.
이게 그래도 몇 년동안 사이트에서 잘 돌아가던 제품이라 나름(?) 검증이된 상태이다.
내 생각에 내가 생각하는 문제들을 고치게되면 원래 의도했던 부분이 변질될 수도 있기 때문에 많은 테스트 과정을 거쳐야한다. 대략 1달 정도는 테스트만 해야할 것으로 보인다.
손을 본다고 하면 대략 2달 정도 라고 보면 1/4 분기는 그냥 다 간다고 봐야한다.
고치느니 새로 만들지라는 생각이 들정도다.
유지보수까지 생각한다면 새로 만드는게 더 짧아보인다.

그런데 말이다 오늘도 할 사람이 없다고 나한테 일거리를 또 하나 줬다.
어쩔 수 없는 상황 때문에 맡긴 했지만 별로 개운치가 않다.

내가 맡고 있는 제품에 대해서 내년에 고객으로부터 무슨 요구를 받을지 나도 모르겠다.
대충 몇 가지는 있어보인다.
그 요구를 들어주기 위해서는 제품에 대한 구조개선 작업이 반드시 진행되어야 한다.
이 상태로 더 이상의 추가 기능은 나도 이제 좀 힘들다는 생각이 들기 때문이다.
새로운 제품 개발 계획도 있긴 하지만 그건 미룬다고 하더라도 이런 식으로 계속 진행된다면 새로 만들던 구조를 개선하던 계획한대로 진행이 될까하는 생각이든다.

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

IT/일반 2008/09/28 00:38 Posted by Gony Taegony
제1회 대한민국 SW개발자 컨퍼런스 에 다녀왔다.
오전 기조연설, 축사, Round Table을 본 후, 참석한 session은 아래와 같다.

개발환경을 위한 Oracle Unbreakable Linux와 Oracle VM
C/S, Web and RIA 개발환경의 변화
ALM-일정관리, 개발, 빌드에서 테스트까지 자동화
개발자의 새로운 지평 오픈 솔라리스

오전부터 궂이 참석한 이유는 기조연설을 안철수 카이스트 석좌 교수님께서 하셨기 때문이었다. 예전에 한 번 동영상으로 강연내용을 들어보았지만 역시나 특유의 차분한 말투로 나름대로 의미있는 얘기를 해주셨다.
정확히 하신 말씀 그대로는 아니지만 나름대로 기억을 더듬어보면 아래와 같다.
"대세라는 말이 참 덧없는 말이라고 생각합니다. 현재의 대세는 10년 20년 뒤에는 또 다른 분야가 대세가 될 것이기 때문입니다."
"우리나라의 경제규모상 대세가 아니더라도 자기만의 분야에 대해서 잘한다면 크게 걱정하실건 없습니다.."  
첫번째 말은 지금 SW의 상황을 너무 비관하지말라는 말로 들었고 두번째 말은 SW가 대세가 아니라도 잘한다면 크게 걱정할건 없다는 의미로 들렸다.
남들에겐 뭐 당연한 얘기로 들릴 순 있겠지만 요세 한참 이것저것 고민이 많은 경력직 개발자로서 위안을 얻을 수 있는 말이었다. 개인적으로 요세 상당히 소심해져 있다. ^^;
기타 다른 얘기들은 여기저기서 좀 많이 들어본 말이라 패스~

점심 시간은 교재를 구입한 분들에게만 지금되어서 어디서 먹을까 하고 고민했는데 나중에 그냥 구입하지 않은 분들 (나 포함 ^^)에게도 지급이되어 맛나게 먹었다.
나에겐 약간 양이 부족했지만 공짜니깐 ~ ㅎㅎ

Oracle Unbreakable Linux와 Oracle VM은 오라클 사에서 개발 및 배포되는 리눅스와 그 지원정책 그리고 가상화 기술에 대한 내용이었다. 요세 한참 가상화 기술에 대한 얘기가 많은데 (회사에서 MS의 어플리케이션 가상화에 관심을 가지고 있어서리~) 여기서도 듣게 되니 이게 요세 화두이긴 한 것 같다. 얼마나 큰 화두인지는 모르겠지만... ㅋㅋ
이제 오라클을 DB 회사로만 생각하면 안될 것 같다. 오라클은 쓸기회가 별로 없긴 했지만 그래도 너무 늦게 안게 아닌가하는 생각이 들었다.

RIA는 Rich Internet Application으로 요세 내가 교육 받고 있는 MS의 SilverLight/WPF와 관련이 있다길래 들어봤는데 RIA에 대한 기본적인 개념을 잡을 수 있는 세션이었다. 내가 예전에 주로하던 방식이 ASP + ActiveX 였는데 ActiveX 설치문제, 보안 문제, ActiveX로 인한 브라우져의 안정성 문제 등이 자주 발생했었다. 이런 부분을 해결 할 수 있을 것 같아 한 번 해보고 싶은 분야다.

ALM (Application Life-Cycle Management) 에서 소개된 내용들은 한 번 경험해 봤으면 하는 생각이 들었다. 지금 회사에 적용하기엔 좀 무리가 있고 개인적으로 하고 있는 프로젝트에 적용할 수 있는지 생각해봐야겠다. 이쪽 관련해서는 아는게 별로 없기도 하고 자바쪽과 관련된 내용이 많아서 시도해보기는 쉽지 않을 듯 싶다.

오픈솔라리스는 리눅스/유닉스에 대해서 기본적인 설명과 오픈솔라리스의 장점에 대해 소개했다. 결론은 솔라리스 많이 쓰라는 얘기~ ^^;

오후에 진행된 세션들은 전체적으로 깊이 있는 내용이기 보다는 소개 정도의 레벨이었다고 생각이 된다. 잘 모르는 분야도 있었지만 깊이있게 들어가는 내용이 아니라 가벼운 마음으로 들을 수 있었던 것 같다.

이상으로 컨퍼런스 참관기를 마친다.