[리뷰] 지속적 배포



한빛미디어 출판사의 "지속적 배포(발렌티나 세르빌 저/이일웅 역)"를 읽고 작성한 리뷰입니다.

표지


배포와 릴리스 영역의 대명사인 Lean, DevOps, CI/CD 등의 개념과 장점을 대통합하여 SW를 항상 릴리스 가능한 상태로 유지하는 기술을 다룬다. SW 개발 분야의 반드시 필독해야 할 명작.

이 책은 SW 개발 방법론을 다루는 “리팩터링, 실용주의 프로그래머, 클린 코드, 디자인 패턴” 등의 고전과 어깨를 나란히 하는 명작이다. 그럼에도 앞서 언급한 도서와 달리 저평가된 것 또한 사실이다. 아무래도 제목만보고 SW 개발 전 과정에 덜 중요하게 인식되는 배포라는 단어가 포함되어서 일까?

SW 개발 관련 도서의 최대 취약점은 애매모호한 추상성에 있다. 추상화는 여러 복잡한 내용들을 간결하게 전달할 수 있지만 그만큼의 레벨에 진입하지 못한 독자들에게는 전달력이나 가독성 측면에서 어려움을 안긴다. 실제화된 코드나 경험이 있지 않고는 저자들의 통찰을 쉽게 빼먹기 힘들다.

이 책의 가장 큰 장점은 추상화 개념들을 구체화된 코드로 이해시켜준다는 데에 있다. 그것도 무려 “리액트, 스프링부트, SQL“이라는 각 계층별 현시점 가장 널리쓰이는 예제로 알려준다. 일찍이 이런 책을 본 적이 없다.

구체적인 예시는 직관력을 이용해 이해하기 쉽다는 장점이 있는 반면 숲을 보기 어렵다는 맹점이 있다. 더불어 내가 지금 어디쯤 위치하고 있는지 책을 읽으며 해메기 마련이다. 반면, 추상화된 개념은 전체를 아우르는 숲이나 실무를 접하면 알고 있는 개념만으로 문제를 해결하기 어렵다.

이 책은 이 두마리 토끼를 모두 잡을 수 있는 명작이다. 특히 유관 도서들이 꿋꿋하게 추상성을 지향해 온 반면 이 책은 구체적인 예시를 놓치지 않는다. 코드 수준의 접근은 물론 부록에는 다양한 기업들의 문제점과 해결책을 살펴보는 케이스 스터디 자료를 포함한다.

이 책이 다루는 주요 내용은 배포와 릴리스 영역에서 등장한 Lean, DevOps, CI/CD 등의 개념과 장점을 대통합하여 SW를 항상 릴리스 가능한 상태로 유지하는 기술을 다룬다. 이를 전반부, 중반부, 후반부로 인상깊었던 주요 쟁점을 요약해보려 한다.

전반부에서는 잘개 쪼개는 방식의 장점을 설명한다. 아래 그림의 원피스 플로 개념에서 볼 수 있듯이 큰 배치 방식에서는 작업이 한꺼번에 쌓여 대기하는 동안 비용이 누적되고, 실패나 오류가 뒤늦게 발견될 위험이 있다. 결과적으로 고객 가치 창출 속도가 느려지고, 전체 시스템 효율성이 낮아지는 문제가 발생한다. 원피스플로

이를 개선하기 위해 작은 배치 방식으로 작업을 나누면, 대기 시간과 리드타임이 단축되고, 지속 협업과 피드백이 활성화된다. 마치 컨베이어 벨트처럼 한 번에 하나씩 처리하는 식으로 시스템을 최적화함으로써, 오류 가능성을 줄이고 시장 대응력을 높일 수 있게된다.

또한, 프로듀서-컨슈머 시스템에서는 변경 사항이 어떻게 영향을 미치는지 명확히 파악하고, API 변경의 최소화와 체계적인 테스트 자동화를 적용해야 한다. 단계별로 충분한 테스트와 버전관리 전략을 구축해, API 삭제나 확장 시 컨슈머에 미치는 영향을 줄일 수 있다. 대규모 시스템이나 마이크로서비스 환경에서 API 변경 관리 및 소프트웨어 파이프라인 최적화가 얼마나 중요한지 보여주는 좋은 사례다. 확장축소패턴적용

더불어 배포와 릴리스가 명확히 구분되지 않으면, 개발팀은 코드가 실제 사용자에게 언제 노출되는지 확신하지 못해 혼란을 겪을 수 있다. 따라서, 배포와 릴리스를 명확히 분리한 운영 정책, 즉 기능 토글/관리자 설정 등으로 릴리스 시점을 조정할 수 있게 설계해야 한다. 배포와 릴리스

저자는 개발자와 운영팀 간의 커뮤니케이션 프로세스를 강화해, 배포는 자주 하되 릴리스는 전략적으로 결정하는 현대적 배포 문화(CI/CD, 지속적 배포/릴리스 체계)를 채택하는 것이 효과적임을 강조한다.

또한, 아래의 “지속적 배포를 하지 않는 팀의 반복되는 재작업“도 눈여겨 볼 부분이다. 동일 기능에 문제가 반복적으로 발견되면서 재작업이 누적되고, 팀 전체의 생산성이 크게 저하되는 모양을 볼 수 있다. 재작업

이를 개선하기 위해 지속적 배포(Continuous Deployment) 및 자동화된 테스트 도입을 통해 기능 개발 후 즉시 배포와 검증이 호환되도록 구조를 개선해야 하며, CI/CD 시스템 등을 활용해 배포 절차를 자동화하고, 모든 코드 변경이 빠르고 안전하게 적용되게 함으로써 반복 재작업의 악순환을 근본적으로 해소할 수 있다.

파트2 이후로는 보다 구체적인 실전 사례를 포함한다. 아래 그림은 전자상거래 예시를 바탕으로 장바구니 추가 버튼 기능이 여러 레이어(프론트엔드, 백엔드, 퍼시스턴스)에 걸쳐 어떻게 변경되는지를 보여준다. 또한, 기능 구현 시 각 연관된 요소가 어떻게 영향을 받고, 모든 레이어의 업데이트가 필요한 복잡한 현실을 시각적으로 설명하는 좋은 예시이다. 여러레이어종속성

기능 추가가 단순한 UI 버튼 배치만으로 끝나지 않고 각 레이어의 여러 컴포넌트가 서로 얽혀 있어 변경이 복잡하게 전파되기에, 프론트엔드, 백엔드, 퍼시스턴스(데이터 저장소)를 아우르는 통합 설계와 일관된 인터페이스, 공통 이벤트 처리 구조를 도입함으로써 수정 범위와 복잡성을 줄일 필요가 있음을 보여준다.

이를 통해 테스트 자동화 및 코드 리뷰를 통해 전체 업데이트 상황을 체계적으로 점검하고, 변경 사항이 모든 계층에 올바르게 적용됐는지 검증하는 프로세스가 필요함을 알 수 있다.

아래 이미지는 소프트웨어 개발에서 각 유저 스토리에 대해 기능 요건(CFR)이 어떻게 영향을 미치는지를 층별로 표현한 구조도이다. 여러레이어종속성

기능 구현 시 CFR(예: 보안, 성능, 테스트 등) 고려가 소홀하면, 실제 배포 및 운영 과정에서 장애, 유지보수 난이도, 품질 저하 등 다양한 문제가 반복적으로 발생할 수 있다. 따라서, 주요 CFR 요소별 체크리스트를 만들어, 모든 기능 개발 단계마다 선행 점검 및 검증을 필수화하는 체계를 갖춰야 한다.

이어지는 중반부는 이 책의 하이라이트라고 할 수 있는 구체적인 예제 중심의 솔루션이 등장한다.

아래 데이터베이스와 API 설계 변화, 그리고 확장·이동·축소 등 여러 시나리오에서 products 테이블과 basket 테이블, 그리고 장바구니 추가 API가 어떻게 변경되는지를 단계별로 보여주는 예시를 보자. 여러레이어종속성

데이터베이스와 API가 확장·축소·구조 변경될 때마다 products와 basket 테이블, 그리고 연동 API에 대한 수정 사항이 다수 발생하여 시스템 전반에 복잡한 연관 효과가 이어질 수 있기에, 테이블과 API 설계를 모듈화・추상화하여, 각 확장/축소/이동 단계에서 영향 범위를 최소화하는 방식으로 리팩터링과 구조 개선을 병행해야 한다.

또한, 데이터 손실도 중요한 이슈이다. 아래 그림은 데이터베이스 스키마 변경과 이중 쓰기 전략의 기본 원리를 설명한다. 새로운 컬럼 추가 후, API・UI에서 두 컬럼을 모두 지원하여 안정적으로 데이터 이전을 수행하는 전략을 보여주는 예시이다. 이중쓰기전략

특히, 개인적으로는 프로덕션에서 테스트를 수행하는 방식이 궁금했기에 파트4를 가장 눈여겨 보았다. 웹 브라우저 환경에서 쿠키와 헤더를 이용한 기능 토글 정보 전달 방식의 차이를 예시가 이 파트를 설명하는 좋은 예시이다. 이중쓰기전략

즉, 프로덕션 환경에서 기능 토글이나 쿠키 등 사용자별 조건 데이터를 활용해 실시간 테스트(A/B 테스트 등)를 수행하는 방식을 강조한다.

실제 서비스 운영 중에 브라우저의 쿠키 또는 요청 헤더에 특정 값을 넣어, 사용자의 요청에 따라 다르게 동작하는 화면이나 기능(추천 상품 등)을 동적으로 노출함으로써, 프로덕션 환경 자체에서 안전하게 새로운 기능이나 개선 사항을 테스트할 수 있도록 설계해야 함을 보여준다.

후반부는 파트5 사례연구이다. 오토스카우트24, N26 같은 글로벌 기업들이 지속적 배포를 도입하면서 생긴 긍정적 효과와 시행착오를 다루며 지속적 배포가 어떻게 조직 문화 및 업무 프로세스에 영향을 미치는지 실제 사례와 함께 상세히 안내한다. 진정한 DevOps 문화를 파악할 수 있게 도움을 주는 사례이다. 사례연구

그 외에도 위에 다루지는 않았지만 DORA 성과지표 관리, 빠르게 파이프라인을 유지하는 스킬, 스테이트리스 유지, 이벤트 기반 아키텍처 전환, 동시성과 롤백 최소화, 하드 스킬 외에도 조직 문화 중심의 소프트 스킬 등 한페이지 한페이지가 모두 주옥같은 내용이 가득하다.

좋은 싫든 AI 시대가 도래했다. 커서와 같은 바이브 코딩 도구를 사용한 이라면 모두 느끼겠지만 커서에게 지시를 내릴 때도 잘개 쪼개어 통합하는 스킬이 중요하다.

SW 공학 방법론이 너무 추상적이기에 개발 실무에서 시간 대비 얻는 것이 미약하여 외면되어 왔지만 AI의 등장으로 코딩 및 실무 중심 서적보다 더욱 중요한 위치로 자리매김하는 중이다. 바이브 코딩 도구라는 유능한 부하직원이 생겼기에 설계능력은 앞으로 매우 중요해질 것이다. 그런 점에서도 이 책은 필독서라 하겠다.







© 2019.04. by theorydb

Powered by theorydb