확장메뉴
주요메뉴


닫기
사이즈 비교
소득공제
레거시 코드 활용 전략

레거시 코드 활용 전략

: 손대기 두려운 낡은 코드, 안전한 변경과 테스트 기법

[ 재출간 ] 에이콘 소프트웨어 테스팅이동
리뷰 총점7.8 리뷰 5건 | 판매지수 1,746
베스트
IT 모바일 top100 6주
정가
40,000
판매가
36,000 (10% 할인)
eBook이 출간되면 알려드립니다. eBook 출간 알림 신청
분철서비스 시작 시 알려드립니다. 분철서비스 알림신청

품목정보

품목정보
발행일 2018년 09월 28일
쪽수, 무게, 크기 540쪽 | 1000g | 188*235*26mm
ISBN13 9791161752075
ISBN10 1161752072

책소개 책소개 보이기/감추기

목차 목차 보이기/감추기

저자 소개 (3명)

책 속으로 책속으로 보이기/감추기

레거시 코드란 무엇일까? 지금까지 이 단어의 뜻을 정의하지 않고 사용했다. 엄밀히 말하면, 레거시 코드는 다른 누군가로부터 이어받은 코드라고 정의할 수 있다. 회사 차원에서 다른 회사로부터 구입한 코드일 수도 있고, 부서 이동으로 인해 다른 팀원에게 인계된 코드일 수도 있다. 이처럼 레거시 코드는 다른 누군가의 코드를 의미하지만, 프로그래머들에게 이 단어는 그 이상의 의미를 갖고 있다. 레거시 코드라는 단어는 시간의 흐름과 함께 더 많은 의미와 무게를 갖게 된 것이다.
레거시 코드라는 말을 들으면 여러분은 어떤 생각이 드는가? 나와 비슷한 생각이 든다면, 여기저기 얽힌 난해한 구조 때문에 제대로 이해하지 못하면서도 수정해야만 하는 코드가 떠오를 것이다. 겉보기에는 쉬워 보였던 기능을 추가하느라 며칠 밤을 지샌 추억이 떠오를 수도 있고, 더 이상 어떻게 할 수 없는 코드에 질려서 무력감에 빠진 모습이 떠오를 수도 있다. 이런 상황에서 당신의 노력은 무가치한 일처럼 느껴진다. 레거시 코드의 정의는 사실 누가 그 코드를 작성했는가와 무관하다. 코드는 다양한 방법으로 부패하며, 대부분의 경우 다른 팀으로부터 가져온 코드인지 여부와는 무관하다.
소프트웨어 업계에서 레거시 코드란 이해할 수 없고 수정하기도 힘든 코드를 지칭하는 속어처럼 사용될 때가 많다. 하지만 지난 수년간 고객들과 심각한 코드 문제들을 해결하는 공동 작업을 통해 나는 레거시 코드를 다르게 정의하게 됐다.
내게 레거시 코드란, 단순히 테스트 루틴이 없는 코드다. 다만 이 정의는 다소 불완전하다. 코드의 좋고 나쁨이 테스트와 어떤 관계가 있을까? 이 질문에 대한 답은 간단하다. 이것이 바로 이 책 전반에 걸쳐 자세히 설명할 핵심이다.
이 책은 어떤 코드베이스에서도 확신을 갖고 수정 작업을 하는 방법을 설명하는 책이다. 이 책의 각 장은 코드를 이해하고, 테스트 루틴을 사용하며, 리팩토링을 수행하고, 기능을 추가하는 기법들을 설명할 것이다.
고객들은 대규모의 코드베이스 작업에 어려움을 겪고 있었기 때문에 개발 작업을 통제하고 제품을 정상적으로 인도할 수 있는 방법론을 필요로 했다. 하지만 시간이 흐르면서, 고객이 바뀌어도 내가 하는 작업은 매번 비슷하다는 사실을 깨닫게 됐다. 이런 느낌은 어느 금융 회사 개발 팀과 협업하면서 최고조에 달했다. 내가 합류하기 전부터 이 개발 팀은 단위 테스트의 필요성을 인식하고 있었지만, 실제 사용 중이던 테스트 루틴은 데이터베이스에 몇 번이나 접근해서 대규모의 코드를 실행하는 전체 시나리오 테스트였다. 당연히 테스트 루틴을 작성하기가 쉽지 않았고, 실행에 너무 오랜 시간이 걸리기 때문에 이 개발 팀은 테스트 루틴을 자주 실행하지 않고 있었다. 이런 현실을 개선하기 위해 팔을 걷어붙이고 테스트 코드의 크기를 줄이는 작업을 하다가 나는 데자뷰(기시감)를 느끼게 됐다. 지금까지 함께 일했던 모든 팀들과 이런 종류의 작업을 했던 것 같았으며, 이 작업은 코드를 적절히 통제하기 위해 어쩔 수 없이 거쳐야만 하는 단순 반복적이고 지루한 작업이었다. 그래서 나는 이러한 문제를 어떻게 해결했는지 책으로 남김으로써, 비슷한 어려움에 처한 다른 팀들이 코드를 좀 더 편하게 개선할 수 있도록 도울 필요가 있다는 결론을 얻었다.
이 책에 사용된 예제들은 대부분 자바, C++, 혹은 C로 작성됐다. 이 언어들을 선택한 것은 자바는 가장 많이 사용되는 언어이기 때문이고, C++는 레거시 환경에서 특별한 도전 과제를 던지는 언어이기 때문이며, C는 절차형 레거시 코드에서 자주 볼 수 있는 문제들을 배울 수 있게 해주는 언어이기 때문이다. 이를 통해 레거시 코드에서 발생하는 문제점의 대부분을 포괄할 수 있다. 독자가 이 언어들을 사용하지 않더라도 예제는 도움이 될 수 있다. 델파이, 비주얼 베이직, 코볼, 포트란 등의 언어들에서도 활용 가능한 기법들이기 때문이다.
이 책의 기법들이 현업에 도움이 될 뿐 아니라 프로그래밍의 재미를 회복하는 계기도 되길 바란다. 프로그래밍은 매우 보람 있고 즐거운 작업이다. 현업의 일상 업무에서 이런 기분을 느끼지 못하고 있다면, 이 책에서 제공되는 기법들을 통해 재발견하고 팀 전체에 전파하기를 희망한다. --- 작가의 말

지식과 도구가 미천해 많은 시간을 들여 테스트하고 디버깅했다. printf문을 써가며 변수 값을 일일이 확인했으며, 작은 개선 사항을 테스트하기 위해 전체 코드를 컴파일하기도 했습니다. 물론 이 과정을 통해 버그는 하나씩 사라져갔지만, 코드는 점점 더 관리하기 어려워졌다. 결국, 마지막에는 작은 요구 사항을 반영하는 데도 많은 시간을 소비해야만 했다.
이 책은 이와 같은 상황에서 사용할 수 있는 여러 가지 기법을 알려준다. 어느 곳에 테스트 루틴을 놓고, 어떤 리팩토링 기법을 사용해야 하는지 알 수 있는 통찰력을 길러줄 것이다. 독자 여러분도 소프트웨어를 개발했던 경험이 있다면 이와 같은 일들을 수없이 겪었을 것이다. 하지만 대부분의 개발자들은 일관된 기준 없이 상황에 따라, 혹은 개개인의 역량에 따라 다르게 처리하면서, 일정에 쫓겨 이를 돌아볼 겨를조차 없을 것이다. 캡슐화, 상속 등과 같은 적절한 코딩을 위한 시간 투자보다는 빠른 기능 구현을 통한 납기준수가 우선시되는 현실 때문이다.
이 책의 조언이 여러분의 작업 환경에 그대로 적용되지는 않을 것이다. 사용하는 언어도 많이 바뀌고, 개발 방법도 많이 변화됐다. 하지만 어느 분야에서든 레거시 코드는 존재하고, 관리하기 어려운 코드임은 분명하다. 또한 이 책의 많은 부분에서 리팩토링과 관련된 내용을 다룬다. 리팩토링에 대한 배경지식이 있다면 좀 더 이해하기 쉽겠지만, 없다면 이 책을 통해 리팩토링의 방식을 어느 정도 체험해볼 수 있을 것이다. 여러분이 작업하는 코드에 일괄적으로 적용하기는 어렵겠지만, 기회가 될 때마다 조금씩 레거시 코드에 반영한다면 시간이 지날수록 안전한 코드로 개선돼 있을 것이다. 즉, 코드는 여러분의 통제하에 놓이게 될 것이고, 필요할 때 새로운 요구 사항을 신속히 반영할 수 있을 것이다. --- 옮긴이의 말
--- 본문 중에서

줄거리 줄거리 보이기/감추기

1부, ‘코드 변경의 메커니즘’은 소프트웨어 코드를 변경하는 네 가지 이유와 단위 테스트, 레거시 코드를 변경하는 순서, 봉합 모델 등 소프트웨어 변경 기법에 관해 다룬다.
2부, ‘소프트웨어 변경’은 레거시 코드 작업과 관련된 매우 일반적인 질문을 다루고 있으며, 각 장의 제목은 특정한 문제를 가리킨다. 이 때문에 제목이 다소 길어졌지만, 독자들이 필요한 내용을 쉽게 찾는 데 도움이 될 것이다.
2부의 앞뒤로는 도입부에 해당하는 몇 개의 장들(1부, ‘코드 변경의 메커니즘’)과 레거시 코드를 다룰 때 유용한 리팩토링에 관한 내용(3부, ‘의존 관계 제거 기법’)을 배치했다. 도입부의 장들, 특히 4장, ‘봉합 모델’은 꼭 읽길 바란다. 2부에서 사용되는 기법들의 배경지식과 관련 용어들을 설명하기 때문이다. 문맥상 이해되지 않는 용어가 있다면 부록의 ‘용어 사전’을 참조한다.
3부, ‘의존 관계 제거 기법’에서 소개하는 리팩토링 기법들은 테스트 루틴이 없는 상황에서 테스트 수행을 목표로 한다는 점에서 특별하다. 더 많은 선택지를 갖고 레거시 코드를 다루기 위해서라도 3부의 각 장을 읽어볼 것을 권장한다.

출판사 리뷰 출판사 리뷰 보이기/감추기

추천평 추천평 보이기/감추기

유능한 소프트웨어 개발자라면 누구나 요구 사항이 변경될 것을 감안해 설계하고자 한다.

이것은 해결하기 매우 어려운 문제처럼 보인다. 실제로 너무 어렵기 때문에 거의 모든 시스템은 서서히 부패해 결국 망가져버린다. 이 부패는 침투력이 매우 강하며, 이처럼 부패한 프로그램을 가리키는 특별한 이름이 존재한다. 바로 ‘레거시 코드(legacy code)’다.

레거시 코드, 이 단어는 프로그래머의 마음속에 구토를 일으키는 단어다. 마치 끈적이는 거머리와 날카로운 침을 가진 날벌레들로 뒤덮인 덤불 천지의 음산한 늪지대를 걸어가는 것과 같은 이미지를 연상시킨다. 암흑, 점액, 고인 물, 악취라고 불러도 좋다. 우리가 처음 느꼈던 프로그래밍의 강렬한 기쁨도 레거시 코드를 다뤄야 하는 고통에 희석되기 십상이다.

최초에 작성했던 코드가 레거시 코드로 전락하지 않도록 막는 방법을 찾기 위해 수많은 사람들이 노력해왔다. 프로그래머가 시스템의 간결함을 유지하는 데 도움을 줄 수 있는 원칙이나 패턴, 실행 방법 등을 설명하는 책은 이미 많다. 하지만 이 책의 저자 페더스는 지금까지 간과됐던 것에 대한 통찰력을 제시하고 있다. 예방만으로는 충분하지 않다. 최선의 원칙을 숙지하고 최선의 패턴을 사용하며 최선의 실행 방법을 따르는 가장 잘 훈련된 개발 팀조차 때때로 일을 망칠 수 있다. 부패는 계속 쌓여가므로 부패를 방지하는 것만으로는 충분하지 않다. 부패를 되돌릴 수 있어야 하는 것이다.
이것이 바로 이 책의 주제다. 즉, 이 책은 부패를 되돌리는 방법을 다룬다. 복잡하게 얽힌 불명료한 시스템을 단계별로 점진적인 방법을 통해 단순하면서 잘 구조화돼 있고 훌륭하게 설계된 시스템으로 변모시키는 방법을 알려준다.

다만, 지나친 흥분은 가라앉히자. 부패를 되돌리는 것은 쉽지 않으며 단기간에 가능하지도 않다. 이 책에서 제시하는 기술이나 패턴, 도구들은 효과적이지만 그만큼 많은 노력과 시간, 인내, 주의를 요구한다. 이 책은 결코 만병통치약을 제시하지 않는다. 하룻밤 사이에 시스템에 쌓인 모든 부패를 되돌리는 방법은 없다. 대신, 여러분이 앞으로의 개발 업무에서 갖춰야 할 원칙과 개념 및 태도, 그리고 품질이 나빠지고 있는 시스템을 점진적으로 개선하는 데 도움이 되는 방법을 설명할 것이다.
- 로버트 C. 마틴

회원리뷰 (1건) 회원리뷰 이동

한줄평 (4건) 한줄평 이동

총 평점 8.0점 8.0 / 10.0

배송/반품/교환 안내

배송 안내
반품/교환 안내에 대한 내용입니다.
배송 구분 예스24 배송
  •  배송비 : 무료배송
포장 안내

안전하고 정확한 포장을 위해 CCTV를 설치하여 운영하고 있습니다.

고객님께 배송되는 모든 상품을 CCTV로 녹화하고 있으며, 철저한 모니터링을 통해 작업 과정에 문제가 없도록 최선을 다 하겠습니다.

목적 : 안전한 포장 관리
촬영범위 : 박스 포장 작업

  • 포장안내1
  • 포장안내2
  • 포장안내3
  • 포장안내4
반품/교환 안내

상품 설명에 반품/교환과 관련한 안내가 있는경우 아래 내용보다 우선합니다. (업체 사정에 따라 달라질 수 있습니다)

반품/교환 안내에 대한 내용입니다.
반품/교환 방법
  •  고객만족센터(1544-3800), 중고샵(1566-4295)
  •  판매자 배송 상품은 판매자와 반품/교환이 협의된 상품에 한해 가능합니다.
반품/교환 가능기간
  •  출고 완료 후 10일 이내의 주문 상품
  •  디지털 콘텐츠인 eBook의 경우 구매 후 7일 이내의 상품
  •  중고상품의 경우 출고 완료일로부터 6일 이내의 상품 (구매확정 전 상태)
반품/교환 비용
  •  고객의 단순변심 및 착오구매일 경우 상품 반송비용은 고객 부담임
  •  직수입양서/직수입일서중 일부는 변심 또는 착오로 취소시 해외주문취소수수료 20%를 부과할수 있음

    단, 아래의 주문/취소 조건인 경우, 취소 수수료 면제

    •  오늘 00시 ~ 06시 30분 주문을 오늘 오전 06시 30분 이전에 취소
    •  오늘 06시 30분 이후 주문을 익일 오전 06시 30분 이전에 취소
  •  직수입 음반/영상물/기프트 중 일부는 변심 또는 착오로 취소 시 해외주문취소수수료 30%를 부과할 수 있음

    단, 당일 00시~13시 사이의 주문은 취소 수수료 면제

  •  박스 포장은 택배 배송이 가능한 규격과 무게를 준수하며, 고객의 단순변심 및 착오구매일 경우 상품의 반송비용은 박스 당 부과됩니다.
반품/교환 불가사유
  •  소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우
  •  소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우 : 예) 화장품, 식품, 가전제품, 전자책 단말기 등
  •  복제가 가능한 상품 등의 포장을 훼손한 경우 : 예) CD/LP, DVD/Blu-ray, 소프트웨어, 만화책, 잡지, 영상 화보집
  •  소비자의 요청에 따라 개별적으로 주문 제작되는 상품의 경우
  •  디지털 컨텐츠인 eBook, 오디오북 등을 1회 이상 다운로드를 받았을 경우
  •  eBook 대여 상품은 대여 기간이 종료 되거나, 2회 이상 대여 했을 경우 취소 불가
  •  중고상품이 구매확정(자동 구매확정은 출고완료일로부터 7일)된 경우
  •  LP상품의 재생 불량 원인이 기기의 사양 및 문제인 경우 (All-in-One 일체형 일부 보급형 오디오 모델 사용 등)
  •  시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우
  •  전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에 해당되는 경우
소비자 피해보상
  •  상품의 불량에 의한 반품, 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은 소비자분쟁해결기준(공정거래위원회 고시)에 준하여 처리됨
환불 지연에
따른 배상
  •  대금 환불 및 환불 지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의 소비자 보호에 관한 법률에 따라 처리
  •  쿠폰은 결제 시 적용해 주세요.
1   36,000
뒤로 앞으로 맨위로 공유하기