(책 소개) 레거시 코드 활용 전략

Jay Park
Jay ParkCTO um EX-EM
레거시 코드 활용 전략
레거시 코드 활용 전략
저자 서문이 모든 것을 말해준다:
레거시 코드라는 말을 들으면 여러분은 어떤 생각이 드는가? 나와 비슷한 생각이 든다면,
여기저기 얽힌 난해한 구조 때문에 제대로 이해하지 못하면서도 수정해야만 하는 코드가
떠오를 것이다. 겉보기에는 쉬워 보였던 기능을 추가하느라 며칠 밤을 지샌 추억이 떠오를
수도 있고, 더 이상 어떻게 할 수 없는 코드에 질려서 무력감에 빠진 모습이 떠오를 수도
있다. 이런 상황에서 당신의 노력은 무가치한 일처럼 느껴진다. 레거시 코드의 정의는 사
실 누가 그 코드를 작성했는가와 무관하다. 코드는 다양한 방법으로 부패하며, 대부분의
경우 다른 팀으로부터 가져온 코드인지 여부와는 무관하다.
소프트웨어 업계에서 레거시 코드란 이해할 수 없고 수정하기도 힘든 코드를 지칭하는 속
어처럼 사용될 때가 많다. 하지만 지난 수년간 고객들과 심각한 코드 문제들을 해결하는
공동 작업을 통해 나는 레거시 코드를 다르게 정의하게 됐다.
내게 레거시 코드란, 단순히 테스트 루틴이 없는 코드다. 다만 이 정의는 다소 불완전하다.
코드의 좋고 나쁨이 테스트와 어떤 관계가 있을까? 이 질문에 대한 답은 간단하다. 이것이
바로 이 책 전반에 걸쳐 자세히 설명할 핵심이다.
2004년도에 처음 출간된 이 책을 굳이 2021년에 소개하는 이유
레거시 코드 활용 전략
이 책의 목차
오늘도 현장에서 레거시 코드와 전투를 벌이고 있는 모든 개발자들을 위한 종합 선물 세트
• 1장 코드 변경의 메커니즘
• 2장 소프트웨어 변경
• 3장 피드백 활용
• 4장 감지와 분리
• 5장 도구
• 6장 고칠 것은 많고 시간은 없고
• 7장 코드 하나 바꾸는 데 왜 이리 오래 걸리지
• 8장 어떻게 기능을 추가할까?
• 9장 뚝딱! 테스트 하네스에 클래스 제대로 넣기
• 10장 테스트 하네스에서 이 메소드를 실행할 수 없다
• 11장 코드를 변경해야 한다
• 12장 클래스 의존 관계, 반드시 없애야 할까?
• 13장 변경해야 하는데, 어떤 테스트를 작성해야 할지 모르겠다
• 14장 나를 미치게 하는 라이브러리 의존 관계
• 15장 애플리케이션에 API 호출이 너무 많다
• 16장 변경이 가능할 만큼 코드를 이해하지 못하는 경우
• 17장 내 애플리케이션은 뼈대가 약하다
• 18장 테스트 코드가 방해를 한다
• 19장 내 프로젝트는 객체 지향이 아니다
• 20장 이 클래스는 너무 비대해서 더 이상 확장하고 싶지 않다
• 21장 반복되는 동일한 수정, 그만할 수는 없을까?
• 22장 ‘괴물 메소드’를 변경해야 하는데 테스트 코드를 작성하지
못하겠다
• 23장 기존 동작을 건드리지 않았음을 어떻게 확인할 수 있을까?
• 24장 어찌해야 할지 모르겠다. 나아질 것 같지 않아
레거시 코드 활용 전략
무엇이 이 책을 흥미롭게 만드는가?(1)
우리가 항상 고민해야 하는 사항
1. 코드 변경을 최소화하면서 테스트 루틴을 넣을 장소는 어디인가?
✓ 코드를 직접 편집하지 않고도 프로그램의 동작을 변경할 수 있는 위치인 봉합 지점 확보(전처리 봉합,
링크 봉합, 객체 봉합)
2. 어디서나 테스트가 가능한 단독 환경을 구축하기 위한 방법은 무엇인가?
✓ 데이터베이스, 네트워크, 각종 입출력 시스템 등 외부 의존성 줄이기
3. 테스트끼리 상호 작용을 최소로 만드는 방법은 무엇인가?
✓ 모듈 사이에서 강결합을 제거하는 방법으로 내부 의존성 줄이기
4. 최대한 빨리 빌드하고 최대한 빨리 테스트하기 위한 방법은 무엇인가?
✓ 인터페이스나 플러그인 아키텍처를 도입해 개방-확장 원칙을 추구하는 방법으로 빌드 의존성 줄이기
5. 단위 테스트가 없는 상황에서 리팩터링을 위한 부트스트래핑을 하는 방법은 무엇인가?
✓ 적절한 IDE의 리팩터링 기능 활용
✓ 꼼꼼한 작업
레거시 코드 활용 전략
무엇이 이 책을 흥미롭게 만드는가?(2)
레거시 코드를 이렇게 뜯고 저렇게 뜯고 아무튼 수정이 가능하게 만드는 해법을 제공한다
• 코드를 수정하려니까 테스트가 필요하고, 테스트를 넣으려니까 코드를 수정해야 하는 절대절명의 위기에서 우리는 무엇을 어떻게 해야
하나?
• 기존 코드와 정확하게 동일한 동작을 보증하기 위해 개발과 QA 담당자들은 무엇에 신경을 써야 하나?
• 의존성을 어떻게 격리하고 핵심 비즈니스 논리를 어떻게 정 중앙에 격리(클린 아키텍처)할지에 대한 실질적인 방안은 무엇인가?
• 마이크로서비스 아키텍처로 가기 위해 모놀리스를 분해할 때 업무의 경계면을 어떻게 따라가는지 머리가 아팠다면, 실제 코드에서 낮
은 결합도와 높은 응집력을 유지한채로 기능을 분리하는 묘수는 무엇인가?
• 콘웨이의 법칙에 따라 조직의 형태를 그대로 닮아가는(으악!) 코드 기반을 어떻게 정상화를 시킬 것인가?
• 여러 가지 다양한 패턴으로 실제 어떻게 코드를 수정해서 (볼츠만) 엔트로피를 줄이는지에 대한 실무적인 팁과 힌트가 가득 들어 있다!
레거시 코드 활용 전략
대상 독자
레거시 코드라면 질린 개발자
• 레거시와 함께 평화롭게 살고 싶은 개발자
• 리팩토링과 테스트의 중요성을 머리로는 이해하지만 아직 가슴까지 내려오지 않은 개발자
• 야근에 특근에 철야를 하지 않고서 유지보수를 어떻게 할 수 있는지 궁금한 개발자
• 기존 코드를 기반으로 마이크로서비스 아키텍처를 도입하는 과정에서 멘붕이 온 개발자
• 개발자들에게 마음의 평화를 주는 멋진 책
레거시 코드 활용 전략
결론
레거시는 함께 살아가야 하는 집이고 터전이다.
• 지속적으로 레거시 코드가 펌웨어화되어 하드웨어 발전에 따라 낡아 가는 상황에서 방어해야 한다.
• 리팩터링과 기능 추가 과정에서 테스트가 가능하게 개선해야 한다.
• 이 과정에서 클린 코드 기법을 도입해 가독성을 높여 유지보수가 가능하게 해야 한다.
• 마이클 페더스의 힌트: Michael Feathers: I think the main one(의존성을 깨기 위한 가장 중요한 기법) really is parameterized
constructor. – InfoQ 2021년 Podcast에서
• 여기서 잠깐 자체 광고: 클린코드/리팩터링과 레거시 코드의 개선을 위한 (초/중급 개발자 대상) 강의와 세미나가 필요하시면 언제든지
저에게 문의 주세요(다음 페이지 참고).
발표자 소개
기술 배경
전문 검색 엔진, 임베디드 시스템(리눅스 커널 디바이스 드라이버), 빅데이터/인공지능 연구 개발,
고성능 고가용성 데이터베이스
주요활동
IT 전문서 번역 (클린 코드, 피플웨어, 해커: 광기의 랩소디, 게임 엔진 블랙 북 등)
개발강의 (삼성전자, SK C&C, 삼성SDC, 현대자동차 기술 세미나와 교육)
활동채널
블로그: https://jhrogue.blogspot.com
슬라이드 셰어: https://www.slideshare.net/jrogue/presentations
유튜브: https://www.youtube.com/c/박재호dev
문의 jrogue@gmail.com
박재호
1 von 8

Más contenido relacionado

Was ist angesagt?(20)

Azure App ServiceAzure App Service
Azure App Service
BizTalk3604.7K views
Apache Traffic ServerApache Traffic Server
Apache Traffic Server
supertom20.8K views
Introduction to Google Cloud PlatformIntroduction to Google Cloud Platform
Introduction to Google Cloud Platform
dhruv_chaudhari4.6K views
Azure Cloud PPTAzure Cloud PPT
Azure Cloud PPT
Aniket Kanitkar74.9K views
Azure rev002Azure rev002
Azure rev002
Rich Helton935 views

Similar a (책 소개) 레거시 코드 활용 전략(20)

(책 소개) 레거시 코드 활용 전략

  • 2. 레거시 코드 활용 전략 저자 서문이 모든 것을 말해준다: 레거시 코드라는 말을 들으면 여러분은 어떤 생각이 드는가? 나와 비슷한 생각이 든다면, 여기저기 얽힌 난해한 구조 때문에 제대로 이해하지 못하면서도 수정해야만 하는 코드가 떠오를 것이다. 겉보기에는 쉬워 보였던 기능을 추가하느라 며칠 밤을 지샌 추억이 떠오를 수도 있고, 더 이상 어떻게 할 수 없는 코드에 질려서 무력감에 빠진 모습이 떠오를 수도 있다. 이런 상황에서 당신의 노력은 무가치한 일처럼 느껴진다. 레거시 코드의 정의는 사 실 누가 그 코드를 작성했는가와 무관하다. 코드는 다양한 방법으로 부패하며, 대부분의 경우 다른 팀으로부터 가져온 코드인지 여부와는 무관하다. 소프트웨어 업계에서 레거시 코드란 이해할 수 없고 수정하기도 힘든 코드를 지칭하는 속 어처럼 사용될 때가 많다. 하지만 지난 수년간 고객들과 심각한 코드 문제들을 해결하는 공동 작업을 통해 나는 레거시 코드를 다르게 정의하게 됐다. 내게 레거시 코드란, 단순히 테스트 루틴이 없는 코드다. 다만 이 정의는 다소 불완전하다. 코드의 좋고 나쁨이 테스트와 어떤 관계가 있을까? 이 질문에 대한 답은 간단하다. 이것이 바로 이 책 전반에 걸쳐 자세히 설명할 핵심이다. 2004년도에 처음 출간된 이 책을 굳이 2021년에 소개하는 이유
  • 3. 레거시 코드 활용 전략 이 책의 목차 오늘도 현장에서 레거시 코드와 전투를 벌이고 있는 모든 개발자들을 위한 종합 선물 세트 • 1장 코드 변경의 메커니즘 • 2장 소프트웨어 변경 • 3장 피드백 활용 • 4장 감지와 분리 • 5장 도구 • 6장 고칠 것은 많고 시간은 없고 • 7장 코드 하나 바꾸는 데 왜 이리 오래 걸리지 • 8장 어떻게 기능을 추가할까? • 9장 뚝딱! 테스트 하네스에 클래스 제대로 넣기 • 10장 테스트 하네스에서 이 메소드를 실행할 수 없다 • 11장 코드를 변경해야 한다 • 12장 클래스 의존 관계, 반드시 없애야 할까? • 13장 변경해야 하는데, 어떤 테스트를 작성해야 할지 모르겠다 • 14장 나를 미치게 하는 라이브러리 의존 관계 • 15장 애플리케이션에 API 호출이 너무 많다 • 16장 변경이 가능할 만큼 코드를 이해하지 못하는 경우 • 17장 내 애플리케이션은 뼈대가 약하다 • 18장 테스트 코드가 방해를 한다 • 19장 내 프로젝트는 객체 지향이 아니다 • 20장 이 클래스는 너무 비대해서 더 이상 확장하고 싶지 않다 • 21장 반복되는 동일한 수정, 그만할 수는 없을까? • 22장 ‘괴물 메소드’를 변경해야 하는데 테스트 코드를 작성하지 못하겠다 • 23장 기존 동작을 건드리지 않았음을 어떻게 확인할 수 있을까? • 24장 어찌해야 할지 모르겠다. 나아질 것 같지 않아
  • 4. 레거시 코드 활용 전략 무엇이 이 책을 흥미롭게 만드는가?(1) 우리가 항상 고민해야 하는 사항 1. 코드 변경을 최소화하면서 테스트 루틴을 넣을 장소는 어디인가? ✓ 코드를 직접 편집하지 않고도 프로그램의 동작을 변경할 수 있는 위치인 봉합 지점 확보(전처리 봉합, 링크 봉합, 객체 봉합) 2. 어디서나 테스트가 가능한 단독 환경을 구축하기 위한 방법은 무엇인가? ✓ 데이터베이스, 네트워크, 각종 입출력 시스템 등 외부 의존성 줄이기 3. 테스트끼리 상호 작용을 최소로 만드는 방법은 무엇인가? ✓ 모듈 사이에서 강결합을 제거하는 방법으로 내부 의존성 줄이기 4. 최대한 빨리 빌드하고 최대한 빨리 테스트하기 위한 방법은 무엇인가? ✓ 인터페이스나 플러그인 아키텍처를 도입해 개방-확장 원칙을 추구하는 방법으로 빌드 의존성 줄이기 5. 단위 테스트가 없는 상황에서 리팩터링을 위한 부트스트래핑을 하는 방법은 무엇인가? ✓ 적절한 IDE의 리팩터링 기능 활용 ✓ 꼼꼼한 작업
  • 5. 레거시 코드 활용 전략 무엇이 이 책을 흥미롭게 만드는가?(2) 레거시 코드를 이렇게 뜯고 저렇게 뜯고 아무튼 수정이 가능하게 만드는 해법을 제공한다 • 코드를 수정하려니까 테스트가 필요하고, 테스트를 넣으려니까 코드를 수정해야 하는 절대절명의 위기에서 우리는 무엇을 어떻게 해야 하나? • 기존 코드와 정확하게 동일한 동작을 보증하기 위해 개발과 QA 담당자들은 무엇에 신경을 써야 하나? • 의존성을 어떻게 격리하고 핵심 비즈니스 논리를 어떻게 정 중앙에 격리(클린 아키텍처)할지에 대한 실질적인 방안은 무엇인가? • 마이크로서비스 아키텍처로 가기 위해 모놀리스를 분해할 때 업무의 경계면을 어떻게 따라가는지 머리가 아팠다면, 실제 코드에서 낮 은 결합도와 높은 응집력을 유지한채로 기능을 분리하는 묘수는 무엇인가? • 콘웨이의 법칙에 따라 조직의 형태를 그대로 닮아가는(으악!) 코드 기반을 어떻게 정상화를 시킬 것인가? • 여러 가지 다양한 패턴으로 실제 어떻게 코드를 수정해서 (볼츠만) 엔트로피를 줄이는지에 대한 실무적인 팁과 힌트가 가득 들어 있다!
  • 6. 레거시 코드 활용 전략 대상 독자 레거시 코드라면 질린 개발자 • 레거시와 함께 평화롭게 살고 싶은 개발자 • 리팩토링과 테스트의 중요성을 머리로는 이해하지만 아직 가슴까지 내려오지 않은 개발자 • 야근에 특근에 철야를 하지 않고서 유지보수를 어떻게 할 수 있는지 궁금한 개발자 • 기존 코드를 기반으로 마이크로서비스 아키텍처를 도입하는 과정에서 멘붕이 온 개발자 • 개발자들에게 마음의 평화를 주는 멋진 책
  • 7. 레거시 코드 활용 전략 결론 레거시는 함께 살아가야 하는 집이고 터전이다. • 지속적으로 레거시 코드가 펌웨어화되어 하드웨어 발전에 따라 낡아 가는 상황에서 방어해야 한다. • 리팩터링과 기능 추가 과정에서 테스트가 가능하게 개선해야 한다. • 이 과정에서 클린 코드 기법을 도입해 가독성을 높여 유지보수가 가능하게 해야 한다. • 마이클 페더스의 힌트: Michael Feathers: I think the main one(의존성을 깨기 위한 가장 중요한 기법) really is parameterized constructor. – InfoQ 2021년 Podcast에서 • 여기서 잠깐 자체 광고: 클린코드/리팩터링과 레거시 코드의 개선을 위한 (초/중급 개발자 대상) 강의와 세미나가 필요하시면 언제든지 저에게 문의 주세요(다음 페이지 참고).
  • 8. 발표자 소개 기술 배경 전문 검색 엔진, 임베디드 시스템(리눅스 커널 디바이스 드라이버), 빅데이터/인공지능 연구 개발, 고성능 고가용성 데이터베이스 주요활동 IT 전문서 번역 (클린 코드, 피플웨어, 해커: 광기의 랩소디, 게임 엔진 블랙 북 등) 개발강의 (삼성전자, SK C&C, 삼성SDC, 현대자동차 기술 세미나와 교육) 활동채널 블로그: https://jhrogue.blogspot.com 슬라이드 셰어: https://www.slideshare.net/jrogue/presentations 유튜브: https://www.youtube.com/c/박재호dev 문의 jrogue@gmail.com 박재호