내용의 일부는 Working Effectively with Legacy Code 에서 발췌했습니다.

시스템 소스 코드의 변경은 자주 일어나는 일입니다. 개발자에 따라서 두 가지 형태로 일이 진행된다고 하는군요.
  1. Edit & Pray
  2. Cover & Modify

첫번째 항목을 보면서 많이 웃었습니다. 심하게 공감을 했기 때문이죠. 수정하고 기도하는 자세로 소스코드의 변경 작업을 하는 부류가 대부분이라고 생각이 됩니다. 적어도 80% 이상의 개발자들이 해당되지 않나 개인적으로 추산해봅니다.

설명에서 이어지는 것은 열심히 포크로 이리저리 찔러본다고 합니다. 열심히 찔러 보고 그 다음에 기도를 드리는 것이죠. 아니, 기도 드리는 마음으로 이리저리 찔러보는 것일 수도 있겠죠. 盡人事待顧客(사람이 할 일을 다 한 후 사용자를 기다린다)이라고 할까요.

두번째 방법의 스타일은 이상적인 방법입니다. 그리고 마땅히 해야될 방법이기도 합니다. 커버라는 말은 공중곡예의 안전망을 친다라는 뜻과도 같습니다. 엄호사격을 영어로하면 Cover fire 입니다. 이때의 커버도 마찬가지이죠. 암벽등반을 하는 사람들 얘기를 들어보면 두 손 두 발 중에서 세 지점이 안정하다는 것을 확인하면 나머지 하나를 움직여서 나아간다고 합니다. 변경에 따른 사이드 이펙트를 줄이자는 것이지요.

마치 무협 판타지에서 나오는 결계(結界)를 치고 싸우는 것과 같다고 할까요.

사용자 삽입 이미지

image from: http://fireblood.egloos.com/1252976 

회귀테스트(regression test)가 가능한 테스트코드들이 필요하겠지요.
레거시 코드, 또는 레거시 시스템이라고 합니다.
요즘 보기시작한 책이 WORKING EFFECTIVELY WITH LEGACY CODE 입니다.
http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200410110002
 
자바지기 박재성님의 블로그를 보고 부쩍 읽고 싶은 마음이 생겨서 구입을 했습니다. 원서라 조금씩 책장을 넘기고 있는데, 표현이 예술입니다. ^^; 구구절절이 제 마음을 후벼파는군요.

  • 누군가 나에게 맡겨놓은 코드
  • 자기가 직접 짜지 않은 누군가가 만들어 놓은 코드
  • 많은 의문의 그림자와 중압감을 내포한 코드
  • 얽히고 설킨, 아둔하게 짜놓은, 갈아엎고 싶지만 그럴 자신이 안 생기는 코드
  • 기능이라도 하나 추가할라치면 몇일 밤을 새게 만드는 코드
  • 도저히 손댈 수 없어서 팀에서 누구라도 나서지 않는 코드
  • 손대면 손댈수록 나락으로 빠져버리는 코드
  • 차라리 날 죽여줘 라고 절규하게 만드는 코드
  • 개선한다는 생각 자체에 몸서리 치게 만드는 코드

레거시 코드를 잘 묘사하지 않았나요.
책을 읽어가면서 요약해서 글을 올려보고 싶군요.
사용자 삽입 이미지

늪 괴물과 레거시 코드의 공통점


image from: http://wow.allakhazam.com/db/mob.html?wmob=766
ctrl + 1 은 Quick Fix 입니다.
ctrl + 3 은 Quick Access 라고 합니다.
ctrl + 2 는 Quick Assist 인데, 1, 3 보다 제한적입니다.
ctrl + shift + L 을 누르면 단축키 목록이 보입니다. 여기서 한 번 더 ctrl + shift + L 을 누르면 단축키를 바꿀 수 있는 창이 뜹니다.
이전에 보았던 대로 type filter text 영역에 quick 이라고 타이핑 하면 다음과 같은 결과를 볼 수 있습니다.

사용자 삽입 이미지

이클립스 단축키 지정


솔직히 ctrl+2 , F, L, R 이 있는데 잘 모르겠습니다.
help 열어서 quick assist 찾아봤는데, 단축키하고 무슨 연관이 있는지 모르겠습니다. ㅡㅡ;

고로 이 포스팅은 OTL 입니다.
이클립스에서 ctrl+1 은 Quick Fix로 잘 알려져 있습니다. 커서가 있는 라인의 오류를 수정할 가이드를 제시해주는 기능이죠.
이클립스 유로파 즉 3.3 버전에 추가된 기능이 있는데, ctrl+3 입니다. (ctrl+F3가 아니구요.)
이클립스 전 영역에서 접근성을 강화한 기능입니다.

ctrl+3 을 클릭하면 아래와 같은 창이 뜹니다. 여기에 보여지는 것은 에디터(Editors), 뷰(Views), 퍼스펙티브(Perspectives), 커맨드(Commands), 메뉴(Menus), 새로만들기(New), 환경설정(Preferences), 프로퍼티(Properties) 영역입니다.

사용자 삽입 이미지


font 라고 타이핑하면 Preferences의 Colors and Fonts 항목이 보입니다.
사용자 삽입 이미지


클릭을 하면 바로 폰트 설정 창이 뜨게 되죠. 메뉴를 통해서 단계별로 가지 않아도 가능합니다.
사용자 삽입 이미지


이클립스 3.3 너무 강력해진 것 아닌가요.
범죄의 재구성이라는 영화가 있죠. 프로그램 소스의 재구성이 Refactoring 입니다. Re + factor + ing 이죠.
마틴파울러 아저씨의 책이 유명한데요. 이 때부터 리팩토링이 중요한 이슈로 인정받게 되었습니다.
정리되지 않은 소스는 변경이나 기능 추가시 부작용이 많이 일어나게 됩니다. 이를 최소화하고 다룰 수 있는 정돈된 상태를 유지하기 위해서 리팩토링을 하는 것이죠.

음식이 입에 잔뜩 있는데, 더 먹어야 된다고 입안에 쑤셔넣을 수는 없는 것이죠. 물도 마시고, 입안을 정리해야 추가로 먹을 맛있는 음식을 제대로 먹을 수 있습니다. 소스도 마찬가지인데 급하다고 정리하지 않고, 코드를 쑤셔 넣으면 탈납니다.

리팩토링. 소중한 프로그램이라면 중요한 것입니다.

ECLIPSE REFACTORING

  1. Rename
  2. Move
  3. Change Method Signature
  4. Extract Method
  5. Extract Local Variable
  6. Extract Constant
  7. Inline
  8. Convert Anonymous Class to Nested
  9. Convert Member Type to Top Level
  10. Convert Local Variable to Field
  11. Extract Superclass
  12. Extract Interface
  13. Use Supertype Where Possible
  14. Push Down
  15. Pull Up
  16. Introduce Indirection
  17. Introduce Factory
  18. Introduce Parameter Object
  19. Introduce Parameter
  20. Encapsulate Field
  21. Generalize Declared Type
  22. Infer Generic Type Arguments
  23. Migrate JAR File
  24. Create Script
  25. Apply Script
  26. History

from: http://127.0.0.1:52091/help/ntopic/org.eclipse.jdt.doc.user/reference/ref-menu-refactor.htm (eclipse 시동하고 보입니다.)

Eclipse Code Refactoring

toz 강남대로점

2007/11/01(목) 19:30~21:30 (2시간)

10,000원

15명


메일로 신청받습니다.

kenu 골뱅 okjsp.pe.kr


이름:

닉네임:

이메일:

휴대폰:


간만입니다.

처음으로 JSP를 만들어보겠습니다. WebConent 디렉토리를 마우스 오른버튼으로 클릭해서 New > JSP 항목을 선택합니다.

JSP는 WebContent 아래 만듭니다.

JSP는 WebContent 아래 만듭니다.


New JavaServer Page 창이 뜹니다. Java하고 Server하고 찰싹 붙어있네요. 자바서버의 페이지라는 뜻이겠죠. 그래서 확장자는 자동으로 붙여줍니다. simple이라고 입력하면 .jsp는 자동으로 붙여서 파일이 생깁니다. Next 버튼을 클릭해서 다음으로 이동합니다.

확장자는 알아서 만들어 줍니다.

확장자는 알아서 만들어 줍니다.


Java, F'cked up by Apple.

메일링 리스트에서 이리도 공분을 자아내는 날은 처음이었습니다. 10월 26일 애플의 새로운 OS X , 레오파드가 출시된 날이었지요. 몇 달 동안 기다려온 가장 대중적이고, 가장 훌륭한 마케팅으로 손꼽히는 그런 OS였습니다.

나왔죠.

그런데, 빠진 게 있습니다. 자바 개발자들에게 말이죠. 일반 사용자는 모르는 일이고, 알 필요도 없는 일입니다.
사용자 삽입 이미지

바로 java "6"가 들어가 있지 않고, 구닥다리(? 벌써 이 말을 들어야 했던가요. 사실 저도 잘 못씁니다.) java "5" 가 깔려 있습니다. 제가 아는 바로는 OS X 10.5 인 레오파드에서 돌아가는 Java 6는 Preview 버전 밖에 없습니다. 정식 버전은 없는 것이죠.

그래서 다음과 같이 자바 개발자 블로그세상은 난리가 났습니다.

Title

Views

Blog

Apple OS X Leopard: Realizing our worst fears

85

Ghetto Java

Apple OS X Leopard doesn’t have Java 6

84

Javablog

Java Apple, Everything you need to know

81

New Adventures In Software

I feel betrayed

67

Labora

Java and Apple: Fallen from love

58

Stephans Blog

Quietly, Shale seeks merger with MyFaces

54

Ghetto Java

Comic: Apple’s Pathetic Java Support? Oh Really?

53

It's Just a Bunch of Stuff That Happens

Making BufferedReader Iterable

52

View from the Fringe

Java desktop wishlist for 2008

52

Pushing Pixels

Please Steve, may I have some Java?

51

Pure Danger Tech

Fluent Programming in Ruby

48

davidflanagan.com

Code That Defines Apple and Java 6

46

Javalobby Front Page

Chumby: Digital picture frame for parents and much more

45

Alex's Outer Thoughts » Java

Joining Sun Developer Network Is a Win-Win for Developers

45

java.net Weblogs

Where it JDK 1.6?

43

Latest entries from kirk.blog-city.com

My "Ajax Experience"

42

DZone: java

We are on Mac OS X 10.5 Leopard now…….

41

Dongyi == 冬屹

My work here is done...

40

Raw

True Nature

39

java.net Weblogs


절반에 가까운 포스팅이 이번 일에 대한 짜증, 실망, 분노, 좌절을 표현한 블로깅입니다.

반대로 Ruby on Rails를 가장 개발하기 좋은 OS가 레오파드라고 선전하고 있다고 하는데, 순간 자바 개발자들은 바보가 된 느낌입니다.

Java 5는 2004년에 정식 출시 되었고, Java 6는 2006년에 정식 출시 되었습니다. 현재 http://java.sun.com 에서 공식적으로 지원하는 버전이 Java 6이지요. 2008년 내년엔 Java 7이 정식으로 출시될 것을 기다리고 있는 중입니다. 이러한 데 최신의 OS에서 Java 6가 찬밥 대우를 받으니 충격인 것이죠.

자바 개발자들은 MS쪽 개발자들보다 더 애플의 맥을 좋아라 하는데, 이번 애플의 작태는 좀 잔인했습니다.

두고 볼 만한 재밌는 일입니다.


related:
http://developer.apple.com/ 애플 개발자 지원 페이지
http://javablogs.com/ 자바 개발자 메타 블로그
CVS에 이은 또 하나의 버전 컨트롤 시스템(Version Control System; VCS)인 Subversion 의 이클립스 플러그입니다.

클라이언트 프로그램의 종류는 서브버전 사이트에서 소개하는 페이지에 굉장히 많습니다.
http://subversion.tigris.org/links.html#clients

subversive는 제법 안정적인 이클립스 클라이언트로 알려져있습니다.
http://www.polarion.org/index.php?page=overview&project=subversive 사이트가 홈페이지입니다.
이클립스의 update URL은 다음과 같습니다.
http://www.polarion.org/projects/subversive/download/1.1/update-site/
3.2 버전 이상의 이클립스에서 사용되는 플러그인에 대한 Update 주소입니다.
참고: update URL을 통한 플러그인 설치방법

설치 도중 8개의 옵션 중 하나를 빼줘야 하는 경우도 있습니다. 참고하세요.
사용자 삽입 이미지

그 다음부터는 쉽게 넘어가실 수 있을 것입니다.

파이어폭스의 파이어버그나 ie의 피들러 또는 상용인 httpwatch 등을 통해서 웹브라우저에서 일어나는 통신의 안 보이는 부분을 볼 수 있습니다. 헤더 영역의 정보 같은 것이죠.

이클립스 WTP에서도 같은 기능을 지원합니다. TCP/IP 모니터뷰를 이용하면 지정된 포트에서 발생하는 교신 정보를 눈으로 확인할 수 있습니다.

설정은 다음과 같이 Preferences 에서 tcp 필터 단어를 입력하면 메뉴가 보입니다.
Add 버튼을 클릭하고 상단의 Local Monitoring port 를 8090 등 사용하지 않는 포트를 입력합니다. 모니터링할 서비스 정보를 입력합니다. 로컬의 톰캣을 모니터링하기 위해서 localhost 포트는 8080 이라고 입력했습니다.

사용자 삽입 이미지


등록을 마치면 해당 모니터링 항목을 선택하고 우측의 Start 버튼을 클릭해서 모니터링을 시작합니다.
사용자 삽입 이미지


모니터링하는 포트로 호출을 합니다. 8090이라고 정했기 때문에 http://localhost:8090/index.jsp 주소로 접근하면 TCP/IP Monitor 뷰가 자동으로 뜨게 됩니다.
사용자 삽입 이미지


TCP/IP Monitor 탭을 더블클릭해서 크게 확대해서 보면 서버로 요청한 주소 목록과 선택한 주소의 헤더 정보와 주고받은 내용들이 하단에 나옵니다.
사용자 삽입 이미지


이미지를 선택하면 해당 이미지도 볼 수 있습니다.
사용자 삽입 이미지


유용하게 쓰시기 바랍니다.

+ Recent posts