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

Jay Park
Jay ParkCTO en 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 de 8

Recomendados

(독서광) 비전공자도 이해할 수 있는 AI 지식 por
(독서광) 비전공자도 이해할 수 있는 AI 지식(독서광) 비전공자도 이해할 수 있는 AI 지식
(독서광) 비전공자도 이해할 수 있는 AI 지식Jay Park
1.3K vistas9 diapositivas
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점 por
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점Wonha Ryu
4.5K vistas44 diapositivas
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안 por
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
73.7K vistas39 diapositivas
훌륭한 개발자로 성장하기 por
훌륭한 개발자로 성장하기훌륭한 개발자로 성장하기
훌륭한 개발자로 성장하기Changyol BAEK
2.8K vistas176 diapositivas
Context2Vec 기반 단어 의미 중의성 해소, Word Sense Disambiguation por
Context2Vec 기반 단어 의미 중의성 해소, Word Sense DisambiguationContext2Vec 기반 단어 의미 중의성 해소, Word Sense Disambiguation
Context2Vec 기반 단어 의미 중의성 해소, Word Sense Disambiguation찬희 이
728 vistas57 diapositivas
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월) por
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)Suhyun Park
31.8K vistas45 diapositivas

Más contenido relacionado

La actualidad más candente

(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초 por
(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초
(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초Jay Park
2.2K vistas10 diapositivas
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색 por
[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색NAVER D2
9.2K vistas68 diapositivas
Micro Service Architecture의 이해 por
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
21.3K vistas35 diapositivas
사용자 스토리 기반의 스크럼 por
사용자 스토리 기반의 스크럼사용자 스토리 기반의 스크럼
사용자 스토리 기반의 스크럼Junyi Song
22.2K vistas23 diapositivas
[223]기계독해 QA: 검색인가, NLP인가? por
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
3.8K vistas122 diapositivas
Python을 활용한 챗봇 서비스 개발 2일차 por
Python을 활용한 챗봇 서비스 개발 2일차Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Taekyung Han
2.2K vistas63 diapositivas

La actualidad más candente(20)

(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초 por Jay Park
(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초
(책 소개) 가상 면접 사례로 배우는 대규모 시스템 설계 기초
Jay Park2.2K vistas
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색 por NAVER D2
[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
NAVER D29.2K vistas
Micro Service Architecture의 이해 por Terry Cho
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
Terry Cho21.3K vistas
사용자 스토리 기반의 스크럼 por Junyi Song
사용자 스토리 기반의 스크럼사용자 스토리 기반의 스크럼
사용자 스토리 기반의 스크럼
Junyi Song22.2K vistas
[223]기계독해 QA: 검색인가, NLP인가? por NAVER D2
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
NAVER D23.8K vistas
Python을 활용한 챗봇 서비스 개발 2일차 por Taekyung Han
Python을 활용한 챗봇 서비스 개발 2일차Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차
Taekyung Han2.2K vistas
Python을 활용한 챗봇 서비스 개발 1일차 por Taekyung Han
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차
Taekyung Han4.8K vistas
스프링 부트와 로깅 por Keesun Baik
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
Keesun Baik22.5K vistas
코드로 인프라 관리하기 - 자동화 툴 소개 por 태준 문
코드로 인프라 관리하기 - 자동화 툴 소개코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개
태준 문9.6K vistas
02.[참고]오픈소스sw라이선스가이드라인 por Hankyo
02.[참고]오픈소스sw라이선스가이드라인02.[참고]오픈소스sw라이선스가이드라인
02.[참고]오픈소스sw라이선스가이드라인
Hankyo1.8K vistas
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기 por Ahreum Kim
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
Ahreum Kim676 vistas
IDM in telecom industry por Ajit Dadresa
IDM in telecom industryIDM in telecom industry
IDM in telecom industry
Ajit Dadresa1.5K vistas
학생 개발자, 인턴십으로 성장하기 por 재원 최
학생 개발자, 인턴십으로 성장하기학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기
재원 최9.3K vistas
스크럼(Scrum) por 영기 김
스크럼(Scrum)스크럼(Scrum)
스크럼(Scrum)
영기 김5.7K vistas
한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기 por Hangil Kim
한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기
한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기
Hangil Kim965 vistas
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS) por Brian Hong
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
AWS와 함께 한 쿠키런 서버 Re-architecting 사례 (Gaming on AWS)
Brian Hong36K vistas
d.ts 만들기 por DaeSeon Jeong
d.ts 만들기d.ts 만들기
d.ts 만들기
DaeSeon Jeong14.6K vistas
Практическое руководство для переводчиков от бюро переводов «Трактат» por Tetyana Struk TrainStation
Практическое руководство для переводчиков от бюро переводов «Трактат»Практическое руководство для переводчиков от бюро переводов «Трактат»
Практическое руководство для переводчиков от бюро переводов «Трактат»
Friendlyを使ったwindowsアプリテスト自動化 por Tatsuya Ishikawa
Friendlyを使ったwindowsアプリテスト自動化Friendlyを使ったwindowsアプリテスト自動化
Friendlyを使ったwindowsアプリテスト自動化
Tatsuya Ishikawa12.4K vistas

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

[2012 03 17]clean_code 14장 점진적개선 por
[2012 03 17]clean_code 14장 점진적개선[2012 03 17]clean_code 14장 점진적개선
[2012 03 17]clean_code 14장 점진적개선Jong Pil Won
1.2K vistas14 diapositivas
ecdevday7 por
ecdevday7ecdevday7
ecdevday7Kenu, GwangNam Heo
1.9K vistas16 diapositivas
훌륭한 프로그래머 되는 법 por
훌륭한 프로그래머 되는 법훌륭한 프로그래머 되는 법
훌륭한 프로그래머 되는 법Kai [Kyung Seok] Song
3.6K vistas25 diapositivas
(독서광) 필독! 개발자 온보딩 가이드 por
(독서광) 필독! 개발자 온보딩 가이드(독서광) 필독! 개발자 온보딩 가이드
(독서광) 필독! 개발자 온보딩 가이드Jay Park
1.1K vistas8 diapositivas
NDC2019 - 게임플레이 프로그래머의 역할 por
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할Hoyoung Choi
2.5K vistas95 diapositivas
Clean code chapter1 por
Clean code chapter1Clean code chapter1
Clean code chapter1ukjinkwoun
690 vistas34 diapositivas

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

[2012 03 17]clean_code 14장 점진적개선 por Jong Pil Won
[2012 03 17]clean_code 14장 점진적개선[2012 03 17]clean_code 14장 점진적개선
[2012 03 17]clean_code 14장 점진적개선
Jong Pil Won1.2K vistas
(독서광) 필독! 개발자 온보딩 가이드 por Jay Park
(독서광) 필독! 개발자 온보딩 가이드(독서광) 필독! 개발자 온보딩 가이드
(독서광) 필독! 개발자 온보딩 가이드
Jay Park1.1K vistas
NDC2019 - 게임플레이 프로그래머의 역할 por Hoyoung Choi
NDC2019 - 게임플레이 프로그래머의 역할NDC2019 - 게임플레이 프로그래머의 역할
NDC2019 - 게임플레이 프로그래머의 역할
Hoyoung Choi2.5K vistas
Clean code chapter1 por ukjinkwoun
Clean code chapter1Clean code chapter1
Clean code chapter1
ukjinkwoun690 vistas
(독서광) 프로그래머의 뇌 por Jay Park
(독서광) 프로그래머의 뇌(독서광) 프로그래머의 뇌
(독서광) 프로그래머의 뇌
Jay Park1.5K vistas
SWDeveloprStory201601 por Suho Kwon
SWDeveloprStory201601SWDeveloprStory201601
SWDeveloprStory201601
Suho Kwon158 vistas
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018 por devCAT Studio, NEXON
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON8.3K vistas
커뮤니티와 함께한 예비개발자 성장기- 조성수님 por NAVER D2
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
NAVER D27.7K vistas
Better softwareengineer han por DaeMyung Kang
Better softwareengineer hanBetter softwareengineer han
Better softwareengineer han
DaeMyung Kang4K vistas
Dev rookie codecomplete-1 por 대영 노
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1
대영 노139 vistas
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기 por NAVER Engineering
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
NAVER Engineering1.9K vistas
애자일 프랙티스 por 한 경만
애자일 프랙티스애자일 프랙티스
애자일 프랙티스
한 경만71 vistas
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리) por Eunchan Lee
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
SAYAHAE - 상품평 분석 및 추천 서비스 (자연어 처리)
Eunchan Lee1.2K vistas
Slack과 Rust로 Amazon ECS에서 서비스 배포하기 por Eunchong Yu
Slack과 Rust로 Amazon ECS에서 서비스 배포하기Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Slack과 Rust로 Amazon ECS에서 서비스 배포하기
Eunchong Yu677 vistas
C++ 코드 품질 관리 비법 por 선협 이
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
선협 이27.1K vistas
CSS3 천기누설 por Toby Yun
CSS3 천기누설CSS3 천기누설
CSS3 천기누설
Toby Yun2.2K vistas

Más de Jay Park

(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰 por
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰Jay Park
586 vistas9 diapositivas
(독서광) 테니스 이너 게임 por
(독서광) 테니스 이너 게임(독서광) 테니스 이너 게임
(독서광) 테니스 이너 게임Jay Park
725 vistas9 diapositivas
(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결 por
(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결
(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결Jay Park
888 vistas8 diapositivas
(독서광) 모던 리눅스 교과서 por
(독서광) 모던 리눅스 교과서(독서광) 모던 리눅스 교과서
(독서광) 모던 리눅스 교과서Jay Park
1.1K vistas8 diapositivas
(독서광) 상자 밖에 있는 사람 por
(독서광) 상자 밖에 있는 사람(독서광) 상자 밖에 있는 사람
(독서광) 상자 밖에 있는 사람Jay Park
669 vistas10 diapositivas
(독서광) 자바 알고리즘 인터뷰 with 코틀린 por
(독서광) 자바 알고리즘 인터뷰 with 코틀린(독서광) 자바 알고리즘 인터뷰 with 코틀린
(독서광) 자바 알고리즘 인터뷰 with 코틀린Jay Park
1.1K vistas9 diapositivas

Más de Jay Park(20)

(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰 por Jay Park
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
(독서광) 책 vs 책: 코딩 테스트 합격자 되기 vs 파이썬 알고리즘 인터뷰
Jay Park586 vistas
(독서광) 테니스 이너 게임 por Jay Park
(독서광) 테니스 이너 게임(독서광) 테니스 이너 게임
(독서광) 테니스 이너 게임
Jay Park725 vistas
(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결 por Jay Park
(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결
(독서광) 인간 vs. AI 정규표현식 문제 풀이 대결
Jay Park888 vistas
(독서광) 모던 리눅스 교과서 por Jay Park
(독서광) 모던 리눅스 교과서(독서광) 모던 리눅스 교과서
(독서광) 모던 리눅스 교과서
Jay Park1.1K vistas
(독서광) 상자 밖에 있는 사람 por Jay Park
(독서광) 상자 밖에 있는 사람(독서광) 상자 밖에 있는 사람
(독서광) 상자 밖에 있는 사람
Jay Park669 vistas
(독서광) 자바 알고리즘 인터뷰 with 코틀린 por Jay Park
(독서광) 자바 알고리즘 인터뷰 with 코틀린(독서광) 자바 알고리즘 인터뷰 with 코틀린
(독서광) 자바 알고리즘 인터뷰 with 코틀린
Jay Park1.1K vistas
(독서광) 리그 오브 레전드 플레이어 중심주의 por Jay Park
(독서광) 리그 오브 레전드 플레이어 중심주의(독서광) 리그 오브 레전드 플레이어 중심주의
(독서광) 리그 오브 레전드 플레이어 중심주의
Jay Park826 vistas
(독서광) 오늘날 우리는 컴퓨터라 부른다 por Jay Park
(독서광) 오늘날 우리는 컴퓨터라 부른다(독서광) 오늘날 우리는 컴퓨터라 부른다
(독서광) 오늘날 우리는 컴퓨터라 부른다
Jay Park848 vistas
(독서광) 사실은 이것도 디자인입니다 por Jay Park
(독서광) 사실은 이것도 디자인입니다(독서광) 사실은 이것도 디자인입니다
(독서광) 사실은 이것도 디자인입니다
Jay Park1.2K vistas
(독서광) 프로덕트 매니지먼트 por Jay Park
(독서광) 프로덕트 매니지먼트(독서광) 프로덕트 매니지먼트
(독서광) 프로덕트 매니지먼트
Jay Park1K vistas
(독서광) 슬기로운 파이썬 트릭 por Jay Park
(독서광) 슬기로운 파이썬 트릭(독서광) 슬기로운 파이썬 트릭
(독서광) 슬기로운 파이썬 트릭
Jay Park1K vistas
(독서광) 유혹하는 글쓰기 por Jay Park
(독서광) 유혹하는 글쓰기(독서광) 유혹하는 글쓰기
(독서광) 유혹하는 글쓰기
Jay Park937 vistas
(독서광) Docs for Developers 기술 문서 작성 완벽 가이드 por Jay Park
(독서광) Docs for Developers 기술 문서 작성 완벽 가이드(독서광) Docs for Developers 기술 문서 작성 완벽 가이드
(독서광) Docs for Developers 기술 문서 작성 완벽 가이드
Jay Park1.1K vistas
(독서광) 개발자를 넘어 기술 리더로 가는 길 por Jay Park
(독서광) 개발자를 넘어 기술 리더로 가는 길(독서광) 개발자를 넘어 기술 리더로 가는 길
(독서광) 개발자를 넘어 기술 리더로 가는 길
Jay Park1.4K vistas
(독서광) 인공지능 소프트웨어 품질 보증을 위한 테스트 기법 por Jay Park
(독서광) 인공지능 소프트웨어  품질 보증을 위한 테스트 기법(독서광) 인공지능 소프트웨어  품질 보증을 위한 테스트 기법
(독서광) 인공지능 소프트웨어 품질 보증을 위한 테스트 기법
Jay Park1.1K vistas
(독서광) Node.js 백엔드 개발자 되기 por Jay Park
(독서광) Node.js 백엔드 개발자 되기(독서광) Node.js 백엔드 개발자 되기
(독서광) Node.js 백엔드 개발자 되기
Jay Park1.2K vistas
(독서광) 싱크 어게인 por Jay Park
(독서광) 싱크 어게인(독서광) 싱크 어게인
(독서광) 싱크 어게인
Jay Park924 vistas
(독서광) 면역 por Jay Park
(독서광) 면역(독서광) 면역
(독서광) 면역
Jay Park1.1K vistas
그림으로 배우는 StatQuest 머신러닝 강의 por Jay Park
그림으로 배우는 StatQuest 머신러닝 강의그림으로 배우는 StatQuest 머신러닝 강의
그림으로 배우는 StatQuest 머신러닝 강의
Jay Park795 vistas
(독서광) 우리가 사랑한 한국 PC 게임 por Jay Park
(독서광) 우리가 사랑한 한국 PC 게임(독서광) 우리가 사랑한 한국 PC 게임
(독서광) 우리가 사랑한 한국 PC 게임
Jay Park798 vistas

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

  • 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 박재호