한빛미디어 - https://www.hanbit.co.kr/store/books/look.php?p_code=B9812407060
아키텍처라는 분야에 대해서는 항상 낯설고 어색한 감이 있기 때문에 해당 분야에 대해 한번쯤은 접해보고 싶다는 마음에 리뷰 책으로 고르게 되었습니다. 2달만에 쓰는 리뷰라 괜히 구성을 좀 다르게 작성해보겠습니다. (?) 이번 리뷰는 책 내용 중 1장 베스트 프랙티스가 없다면? 파트에 대해 중점적으로 작성했습니다. :)
마이크로서비스 시대
요즘과 같이 분산 시스템에서 가장 관심받고 있는 스타일의 아키텍처는 마이크로서비스입니다. 책에서는 아래의 3가지 배경이 공유 리소스와 중앙집중식 오케스트레이션에서 마이크로서비스 시대를 열었다고 설명합니다.
- 오픈소스, 리눅스(상업적으로 무료 이용 가능)
- 퍼핏과 셰프와 같은 형상관리 도구의 등장
- 컨테이너 및 오케스트레이션 도구의 인프라 등장
운영 데이터? 분석 데이터?
한 기업의 중요한 자산이라 볼 수 있는 데이터는 의사 결정에 적극적으로 활용되고 있습니다. 책에서는 2가지의 데이터를 명확히 구분합니다. 먼저 운영 데이터는 판매, 거래성 데이터, 재고 등 비즈니스 활동에 쓰이는 데이터를 의미합니다. 일반적으로 데이터베이스에서 데이터를 삽입, 수정, 삭제하는 OLTP 성격의 데이터입니다. 분석 데이터는 예측, 트렌드 분석, 기타 BI 용도로 주로 데이터 과학자와 비즈니스 분석가가 사용하는 데이터를 의미합니다. 해당 데이터들은 대부분 트랜잭션과 무관하고 관계형 데이터가 아닌 경우가 많습니다. 전략 수립과 의사 결정에서 중요하게 활용되는 데이터들에 해당합니다.
ADR(아키텍처 결정 레코드)
아키텍처 결정을 문서화하는 방법으로 ADR을 활용합니다. 마크다운과 같은 문서 포맷으로 작성하며 콘텍스트, 결정, 결과를 작서압니다. 책의 곳곳에 ADR이 활용되어 아 이런게 ADR이구나 라고 감을 잡을 수 있었습니다. 책의 설명 중 낯선 표현들이 있었습니다. "의사 결정이 결정한 대로 잘 지켜지는지 관리하기 위해 현대의 엔지니어링 프랙티스와 아키텍처 피트니스 함수를 활용하면 공통적인 거버넌스 관심사를 자동화할 수 있다"는 Tip인데 흠.. 표현이 익숙치는 않아서 책의 설명을 위주로 일단 그대로 받아들이고 넘어갔습니다. 왜 엔지니어링 프랙티스 이렇게.. 영문을 그대로 가져왔는지 괜히 영알못에게 마음의 장벽을 추가하는 표현이었습니다...?!
아키텍처 피트니스 함수
그 뒤에 다행이도 아키텍처 피트니스 함수에 대한 설명이 이어져서 좋았습니다. 피트니스 함수로 할 수 있는 일은 설계와 품질 원칙을 자동화하는 것입니다. 그리고, 피트니스 함수는 아키텍트로 하여금 아키텍처 특성의 예기치 않은 변화에 대비할 수 있게 해줍니다. 피트니스 함수를 살펴보기 전에 자동화가 주는 장점을 알아둘 필요가 있습니다. 자동화의 장점은 생산적인 피드백과 함께 신속한 작업속도를 얻을 수 있다는 점입니다. 자동화의 대표주자가 바로 DevOps입니다. 수많은 반복 작업을 자동화하여 운영자의 편리성을 톡톡히 챙겨가고 있습니다.
아키텍처 피트니스 함수는 어떤 아키텍처 특성이나 그것들을 조합한 아키텍처 특성의 무결성을 객관적으로 평가하는 임의의 메커니즘으로 정의되기도 합니다. 피트니스 함수의 범위는 2가지로 분류되는데 어떤 아키텍처 특성과 같이 원자적 피트니스 함수와 조합한 아키텍처 특성인 전체적 피트니스 함수가 있습니다. 원자적 피트니스 함수는 하나의 아키텍처 특성만 별도로 처리하며, 전체적 피트니스 함수는 보안과 성능과 같이 시너지가 발생하는 복합적인 성격을 띄는 여러 아키텍처의 특성을 조합하고 이 결과가 부정적 영향을 미치지 않도록 하는 함수입니다. 또한 객관적인 무결성 평가에서 객관성이란 단순히 정성적으로만 표현되는 것이 아니라, 정량적인 수치로 객체의 값이 제공되어 아키텍처의 특성을 정의하는 것을 의미합니다. 따라서 객관적인 무결성 평가라는 것은 하나의 아키텍처 특성에 대해 정의를 측정할 수 있는 방법을 기반으로 대응시킨 것이라고 생각해볼 수 있습니다. 임의의 메커니즘이란 피트니스 함수를 구현할 때 다양한 도구를 이용할 수 있다는 점을 의미합니다.
(+) 단위 테스트와 피트니스 함수를 구분하자!
단위 테스트의 목표는 도메인 설계를 검증하는 것이며, 피트니스 함수는 아키텍처 특성을 검증하는 것입니다. 대부분 이 테스트를 하려면 도메인 지식이 필요한가라는 질문에 예라면 단위, 기능, 유저, 인수 테스트를 아니오라면 피트니스 함수를 선택한다고 합니다. 하지만, 어떤 피트니스 함수는 도메인에 영향을 미치기도 하고 반대로 단위 테스트가 아키텍처 특성을 검증하는 경우도 있어 단순히 구조에 대한 문제는 피트니스 함수라고만 생각할 수는 없습니다. 하지만 두 개를 구분할 때 목표가 다른 점을 생각하면 구분하기 쉽습니다.
책에서 추가적으로 피트니스 함수에 대해 구체적으로 설명해주고 있습니다. 이어지는 내용들을 간단하게 요약하면 아래와 같이 정리할 수 있습니다.
- 피트니스 함수는 객관적인 결과를 얻는 것이 중요합니다. 하지만 객관적 = 정적인 것을 의미하지 않습니다.
- 피트니스 함수는 간혹 수동으로 실행해야하는 함수가 있어 사람이 직접 검증해야하는 경우도 있습니다.
- 보안 취약성과 같은 상황에서 즉각적인 대응을 하기 위해서 피트니스 함수에서 연속성은 중요한 고려사항입니다.
이외에도 책에서는 아키텍처와 설계, 서비스, 커플링, 컴포넌트, 동기 통신, 비동기 통신, 오케스트레이션, 코레오그래피, 원자성, 계약(컨트랙트), 비티케팅 워크플로, 티케팅 워크플로와 같은 용어 정의를 짚고 넘어간다는 점이 좋습니다. 저 같은 경우 아키텍처라는 개념이 낯설었기 때문에 1장에서 용어의 정의나 비슷해보이는 용어들에 대해 다시 비교하고 설명해주는 친절함이 이 책에서 가장 좋게 본 점이었습니다. 또한 하나의 아키텍처를 예시로 하여 문제 상황 시뮬레이션, 컴포넌트, 데이터 모델과 같이 문제 상황을 구체적으로 묘사해준다는 점도 책의 장점 중 하나였습니다.
전체적인 목차를 봤을때 꽤나 구체적인 책입니다. 참고로 이 책의 전 단계에 해당하는 책은 소프트웨어 아키텍처 101이라고 합니다. 책 설명 중간중간에 몇몇 개념은 해당 책을 참고하라고 하기 때문에 소프트웨어 아키텍처 101과 소프트웨어 아키텍처 The Hard Parts를 같이 읽으면 아키텍처에 대한 지식을 더 차근차근 쌓아갈 수 있을거 같습니다. 관련해서 관심있으신 분은 두 개의 책을 함께 보는 것을 추천드립니다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."