Skip to Content

서문 — 이 책을 읽는 법

누구를 위한 책인가

이 책은 패턴은 아는데 “왜 쓰는지”는 모르는 개발자를 위해 썼다. 헥사고날 아키텍처의 그림을 그릴 줄 알고, 스프링으로 레이어드 애플리케이션을 매일 만들고, DDD라는 단어에 고개를 끄덕인다. 그런데 “우리 시스템에 그게 왜 필요한데?”라는 질문 앞에서는 “요즘 다 그렇게 하니까” 이상의 답이 궁하다. 주니어에서 미들로 넘어가는 백엔드 개발자, 몇 년 전의 나 자신이기도 하다.

전제하는 지식도 계약으로 적어두자: 객체지향의 기본(인터페이스, 다형성)과 한두 해의 백엔드 실무 경험이면 충분하다. 특정 프레임워크 지식은 요구하지 않는다. 예제가 자바와 스프링의 어휘를 빌리는 곳이 있지만, 논지는 언어 중립이다. 반대로 시니어 아키텍트에게 이 책의 내용 다수는 이미 아는 것일 텐데, 그 경우 이 책의 쓸모는 지식이 아니라 서사 쪽에 있다. 아는 것들이 왜 그 순서로 태어났는가.

그런 독자에게 아키텍처 책이 흔히 실패하는 방식은 정해져 있다. 스타일의 카탈로그를 펼치는 것이다. 레이어드는 이렇게, 헥사고날은 이렇게, 각각의 장단점은 표로. 카탈로그는 시험에는 도움이 되지만 설계에는 도움이 되지 않는다. 설계에 필요한 것은 “무엇이 있는가”가 아니라 “그것이 왜, 어떤 문제 때문에 태어났는가”이기 때문이다. 계기를 알아야 내 상황이 그 계기와 같은지 판단할 수 있다.

이 책의 프레임과 그 한계

그래서 이 책은 모든 아키텍처를 하나의 질문으로 읽는다. “이전 방식의 어떤 고통이 이것을 낳았는가?” 레이어드는 진흙공의 고통에서, 헥사고날은 레이어드의 고통에서, 마이크로서비스는 모놀리스 조직의 고통에서. 각 장의 제목 아래에는 언제나 앞 장의 병이 깔려 있다.

이 역사는 선형 진보가 아니다. 프레임에 대한 경고를 저자가 먼저 하는 것이 정직하겠다. “고통이 만든 진화”라는 말은 자칫 “새것이 항상 낫다”로 읽히는데, 실제 역사는 두 가지 다른 모양이었다. 하나는 수렴이다. 헥사고날·어니언·클린은 계단이 아니라, 서로 다른 문제의식에서 출발한 세 사람이 같은 원리에 도착한 사건이다. 다른 하나는 진자다. 모놀리스에서 마이크로서비스로 갔던 업계는 상당 부분 되돌아왔고, 다만 돌아온 자리는 출발점이 아니라 나선의 한 칸 위였다. 고통을 풀면 새 고통이 생긴다. 그 왕복까지가 역사다.

한 가지 더. “고통”이라는 말을 이 책은 감상적으로 쓰지 않는다. 4장에서 품질 속성이라는 측정 언어를 배우는 순간부터, 모든 고통은 이름을 갖는다. 변경용이성의 결핍, 테스트가능성의 결핍, 배포독립성의 결핍. 측정할 수 없는 불만은 설계를 움직이지 못한다.

구성

Part 1(Step 01~04)은 원론이다. 아키텍처라는 단어의 역사와 정의, 그것이 풀려는 문제(변경), 모든 스타일을 관통하는 하나의 원리(의존성 방향), 그리고 측정 언어(품질 속성). 이 네 장이 이후 모든 장의 도구 상자다. 특히 Step 03의 “화살표” 없이는 Part 2가 읽히지 않으니 건너뛰지 말길.

Part 2(Step 05~12)는 발전사다. 구조가 없을 때의 자연 상태(진흙공)에서 출발해, 레이어드 → DDD → 헥사고날·어니언·클린 → 조직(Conway) → 분산 → 데이터를 지나, 진화적 아키텍처로 닫는다. 매 장은 같은 틀이다: 앞 장의 고통 → 응답 → 그 응답이 낳은 새 고통.

Part 3(Step 13~15)은 실전이다. 같은 요구사항을 두 아키텍처로 구현해 diff와 테스트로 비교하고(코드는 architecture 모듈에 있으며 전부 실행된다), 달리는 시스템을 고치는 법(브라운필드)을 다루고, 선택과 기록(ADR)으로 닫는다.

본문의 모든 Java 예제와 테스트는 GitHub의 Hyeonqz/Hyeonq-Lab · architecture 모듈 에 있고 실제로 실행된다. 그린필드 3종(레이어드/헥사고날), 데이터 패턴(아웃박스·멱등·원장), 규칙 축적 드리프트 시연, ArchUnit 적합도 함수까지 17개 테스트가 통과한다.

읽는 순서에 대한 경고 하나. 이 책의 장들은 서로 업고 간다. 매 장이 앞 장의 도구(화살표, 품질 속성, 전단층, 애그리거트…)를 이름만 부르고 재사용하므로, 발췌해서 읽으면 뒷장이 반만 읽힌다. 특히 Part 1(Step 01~04)은 반드시 순서대로. Part 2부터는 관심 장으로 건너뛰되, 막히면 그 장이 회수하는 앞 장으로 돌아가면 된다.

각 장의 골격은 같다: 여는 질문 → 본문 → 흔한 오해 바로잡기 → 요약과 다음 장 예고 → 원전 표. 오해 절만 이어 읽어도 하나의 짧은 책이 된다. 원전 표의 문헌들은 부록 C에 연표로 모아뒀다. 이 분야는 연도를 틀리게 유통되는 이야기가 유난히 많아서, 연표 자체가 오독 방지 장치다.

이 책의 후렴

열다섯 장에 걸쳐 반복되는 문장이 셋 있다. 미리 적어둔다.

  1. 아키텍처란 되돌리기 비싼 결정들과 그 근거이며, 구조는 그 흔적이다. (Step 01)
  2. 좋은 아키텍처는 중요한 결정을 신중히 먼저 내리고, 바뀔 법한 결정을 최대한 늦게 내릴 수 있게 한다. (Step 02)
  3. 모든 것은 트레이드오프다 — 목표는 최선이 아니라 가장 덜 나쁜 것이다. (Step 04)

책을 덮은 뒤에 남는 것이 이 세 문장이라면, 이 책은 제 몫을 한 것이다.

Last updated on