달력

122021  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  

'working effectively with legacy code'에 해당되는 글 5건

  1. 2008.08.13 다 봤다. Working Effectively with Legacy Code (14)
  2. 2008.07.21 코드의 직교성(orthogonality) (5)
  3. 2008.04.02 DB건드리지 않고 테스트하기 고민중 (5)
  4. 2007.11.21 코드 변경 스타일 (6)
  5. 2007.11.20 기존 코드(legacy code)의 정체성 (2)

작년 11월부터 손에 가지고 다닌 책입니다.
다 읽기는 했지만 글자만 다 읽었습니다. ^^; 사실 솔직히 얘기하면 마지막 10% 부분은 많이 설렁설렁 읽었습니다.

읽고난 후 소감은 음... "해 냈다."입니다. core j2ee patterns 이어서 두 번 째 완독한 원서라고 할까요.

사용자 삽입 이미지


책은 누더기가 되었습니다. ^^;
이제 몸으로 읽을 때가 된 듯 합니다. 체득해야죠.
Posted by 케누 kenu허광남

댓글을 달아 주세요

  1. 달룟  댓글주소 수정/삭제 댓글쓰기 2008.08.13 18:57

    위편 3절이 생각나네요. 내용이 좋은 책인듯...

  2. sloth  댓글주소 수정/삭제 댓글쓰기 2008.08.13 22:38

    오.... 정말 힘든 일에 관해서 다룬책같습니다^^

  3. 김성안  댓글주소 수정/삭제 댓글쓰기 2008.08.14 10:44

    봉인되어 있는 새책이 있는데 저리 낡은 책을 보니 이상한 느낌이네요 =-=

  4. bliss  댓글주소 수정/삭제 댓글쓰기 2008.08.14 12:05

    와 추카. 이제 한글로 된 원고를. ㅎ

  5. 짱가  댓글주소 수정/삭제 댓글쓰기 2008.08.14 14:53

    형. 나도 나도~~~ ~~~~ ^________________________^

  6. songsungkyun  댓글주소 수정/삭제 댓글쓰기 2008.08.15 16:33

    축하드립니다.

    전 책이 화장실변기 빠져서
    책 두께가 두배가 되어버렸습니다.

    사진을 보니 정말 열심히 보신것 같네요.
    전 너무 수박 겉핥기식으로 봐서.

  7. Steven Yoo  댓글주소 수정/삭제 댓글쓰기 2008.09.26 12:06

    아! 이 책 어떻던가요? 평 올려주세요! 저도 이 책 추천받아서 읽어볼 생각이었어요.

어려운 단어 등장했습니다. 직교성. Orthogonality. 공업수학시간에 잠깐 배운 기억이 스쳐지나갑니다. 갑자기 이 단어가 요즘 제 뇌를 후벼팝니다. Working Effectively With Legacy Code 책의 후반부에 나오는 단어인데, 코드 리팩토링의 결정판은 궁극의 직교성이라고 얘기합니다.

말을 좀 쉽게 풀죠.
3차원 그래프라고 생각하시면 됩니다. x축, y축, z축이 있습니다. 왼쪽 그래프에서 보면 성별, 생일, 출생지가 있습니다. 세 기준이 각자의 영역에서 사람의 특성을 설명해주고 있죠. 각 기준은 독립적입니다. 다른 기준에 종속적이지 않습니다.
사용자 삽입 이미지
image from: http://www.itcon.org/1997/2/paper.htm

이것을 소스코드에 빗대어 설명하면 이렇습니다.
웹 페이지에는 HTML, CSS, Javascript가 있습니다. 각기 역할이 있죠. HTML은 컨텐츠 데이터, CSS는 렌더링 스타일, Javascript는 Behavior 즉 동작입니다. 각기 독특한 영역이 있는데, 이 코드를 분리해서 관리하는 것이 직교성이 있다고 얘기할 수 있습니다. 세 가지가 만나는 접점은 id 입니다.

이해가 좀 가시나요?

이럴 필요가 있는 것은 직교성이 무너졌을 때, 세 가지 코드는 뒤죽박죽 됩니다. 스타일 고치는데 Javascript 고쳐야하고, 동작을 고치는데, HTML과 CSS코드가 헤집어진다면 코드가 뒤섞여 있다는 뜻입니다.

휴~

어렵죠.

프로그래밍 코드의 영역에서도 마찬가지입니다. 비단 세 가지 축(3차원)만 있는 것이 아니라 다차원(Multi-demension)의 코드를 짤 때도 이런 컨셉으로 분리해서 짠다면 코드의 관리포인트를 분리해서 생각할 수 있습니다. 리팩토링이 바라보는 관점과 일견 같다고 할 수 있습니다.

관련 : Open/Closed Principle

참고: Working Effectively With Legacy Code, 285~286p
Posted by 케누 kenu허광남

댓글을 달아 주세요

  1. 신현석  댓글주소 수정/삭제 댓글쓰기 2008.07.21 15:21

    접점은 DOM이다...라고 하면 어떨까요?

  2. 알 수 없는 사용자  댓글주소 수정/삭제 댓글쓰기 2008.09.01 18:35

    직교성에 관한 설명 잘 봤습니다! 하지만, 어렵네요 ^^;

  3. 학생  댓글주소 수정/삭제 댓글쓰기 2008.10.24 00:53

    쉬운설명이군요 감사합니다

Working Effectively With Legacy Code 책을 다시 보기 시작했습니다.
이제 1/3 정도 읽었는데, 아주 벅찬 책입니다.

124페이지를 보면 다음과 같은 표현이 있습니다.

If we want to avoid talking to the database, we can subclass PermitRepository like this:
public class TestingPermitRepository extends PermitRepository {
...

심각하게 고민해봐야겠습니다.
Posted by 케누 kenu허광남

댓글을 달아 주세요

  1. 참◈서빈  댓글주소 수정/삭제 댓글쓰기 2008.04.03 01:08

    디비 대신 서브클래스 군으로 저장하는 방법을 선택할 경우에 사용하는 부분이 아닐까요....

  2. 와이즈앤트  댓글주소 수정/삭제 댓글쓰기 2008.04.03 17:32

    PermitRepository 라는 클래스를 찾아보니 Singleton pattern 으로 되어 있네요^^;; 얼마전에 비슷한 경우가 있어 Singleton pattern을 샘플로 한 글을 작성한 적이 있습니다. 좋은 공유가 되었으면 좋겠네요^^
    http://www.wiseant.net/tc/wiseant/193 : Singleton pattern의 응용 샘플

  3. ologist  댓글주소 수정/삭제 댓글쓰기 2008.04.04 13:42

    ㅎㅎㅎ재미있는 책이죠. mock이나 stub을 잘 활용하면 DB없이 테스트가 가능하겠죠.

    subclass or overridng 이용한 테스트는 만들기도 쉬울뿐만 아니라 차후에 고칠 확률도 적어져서 저는 선호하는 편입니다.

코드 변경 스타일

java 2007. 11. 21. 13:02
내용의 일부는 Working Effectively with Legacy Code 에서 발췌했습니다.

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

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

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

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

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

사용자 삽입 이미지

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

회귀테스트(regression test)가 가능한 테스트코드들이 필요하겠지요.
Posted by 케누 kenu허광남

댓글을 달아 주세요

  1. 윤좌진  댓글주소 수정/삭제 댓글쓰기 2007.11.21 15:55

    ㅋㅋ 아주그냥 공감 100배에요 :)

  2. 알 수 없는 사용자  댓글주소 수정/삭제 댓글쓰기 2007.11.21 17:34

    징검다리도 두드려보고 건너라는 옛 속담이 떠오르는 군요..ㅎㅎ

  3. 왕구라  댓글주소 수정/삭제 댓글쓰기 2007.11.21 20:11

    저도 공감이 갑니다. 제가 워낙에 덜렁 거리는 스타일이라 정말 저에게 필요한 자세가 아닌가 싶네요.. ㅋㅋ 좋은 글 잘 봣습니다.

레거시 코드, 또는 레거시 시스템이라고 합니다.
요즘 보기시작한 책이 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
Posted by 케누 kenu허광남

댓글을 달아 주세요

  1. songsungkyun  댓글주소 수정/삭제 댓글쓰기 2007.11.20 16:51

    참 표현이 딱딱 들어맞네요.
    저두 여러번 저런 느낌을 받았는데
    예전엔 레거시 괴물에 많이 허덕였는데
    점차 제가 짠 코드를 돌보는 일이 많아져서
    그나마 다행입니다.
    하지만 가끔은 저의 코드들도 레거시처럼 느껴질려고
    할때도 있네요.
    저두 레거시 괴물의 상세정보를 책으로 만나보고 싶네요.