Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# 1장 '베스트 프랙티스'가 없다면?

## 주요 내용
하드파트: 어렵다와 단단하다의 뜻
아키텍처 설계는 한번 정해놓으면 쉽사리 바꿀 수 없게 되기에 그만큼 근본적이다.
마이크로서비스: 나는 해당하는 부분이 없지만 서버팀에서 서버 설계 시 각 파트별로 나눠서 작업했던 걸 본 기억이 있다

오케스트레이션
여러 서비스 호출의 순서, 성공/실패 판단, 보상 동작까지 하나의 흐름으로 책임지는 중앙 제어 로직

데이터는 모든 것: 데이터 설계가 가장 중요하다.
운영데이터와 분석데이터가 있다.
운영데이터는 회사 시스템이 돌아가는 데 필요한 데이터다. 정합성, 트랜잭션이 중요
분석데이터는 서비스를 이해, 개선, 판단을 위한 데이터로 트랜잭션과 무관하며 과거 누적 축적형 데이터로 현재 운영에 필요하진 않지만 장기적인 전략 수립 및 의사결정에 중요하게 활용되는 데이터다.

아키텍처 거버넌스
시스템이 커져도 방향을 잃지 않게 하는 '기술 헌법'이다.
잘못 이해한 경우 = 통제 지옥
잘 이해한 경우 = 자유를 유지하기 위한 최소 규칙

아키텍처 피트니스 함수
관리해주는 함수. 피트니스 클럽은 몸을 관리해주지만 피트니스 함수는 아키텍처를 관리해준다.
필연적으로 트레이드오프가 발생할 수밖에 없다. 더 빠르게-더 정확하게, 더 강하게-더 가볍게 등
목표가 하나라면 상관없지만 둘 이상이면 바로 트레이드오프가 발생한다.

피트니스 함수와 단위테스트는 비슷하지만 다르다.
비슷한 부분은 자동 검증 + 실패 시 즉시 차단이라는 것인데
피트니스 함수는 아키텍처의 특성을 검증하는 것이고
단위테스트는 로직의 정확성을 보는 것이다. 즉 도메인 로직을 본다.

코드 위생 도구인 소나큐브는 피트니스 함수의 재료를 턴키 방식으로 제공한다.
자바 진영의 아크유닛이라는 도구는 소나큐브와 다르게 경고 수준이 아닌
"이 구조는 금지"라는 규칙을 테스트로 정의해 차단할 수 있다.
닷넷 진영에도 넷아크테스트(NetArchTest)라는 도구가 있다.

피트니스 함수는 대부분 반복/자동화해 사용하지만 간혹 수동으로 실행해야 하는 경우도 있다.
민감한 법률 정보가 담긴 시스템은 합법성을 준수해야 하기에 변호사가 직접 검토해야 하므로 자동화할 수가 없다.

이런 아키텍처 피트니스 함수가 중요한 이유는 엔터프라이즈 수준의 거버넌스 사례를 볼 때 지속적으로 체크해야 하는 영역이기 때문이다.
제로데이 익스플로잇이 발견될 수도 있지만, 지속적인 피트니스 함수로 구조, 의존성, 권한 경계 등을 체크한다면 그 확산과 피해를 최소화할 수 있다.

피트니스 함수는 아키텍처 구조를 설계하는 사람에게 단비 같은 존재이다.
모든 코드를 직접 많이 볼 수는 없지만(코드의 디테일이 아니라 구조의 방향성을 보기 위함), 피트니스 함수를 통해 프로젝트의 구조와 상태를 검증할 수 있기 때문에 해당 프로젝트의 전반적인 방향성을 잡을 수 있다.

하지만 피트니스 함수의 과용은 금물이다.
너무 복잡한 피트니스 함수는 오히려 설계 의도를 흐리고, 개발자에게 '무엇을 지켜야 하는지'를 모호하게 만든다.

아키텍처와 설계는 구분되어야 한다.
아키텍처 결정 - 구조 설계

아키텍처의 기본 원칙을 이해할 때는 How보다 Why가 더 중요하다.
아키텍처 개념에 집중하면 구현부에 대한 상세한 이야기는 과감히 건너뛸 수 있다.
구현 과정을 일일이 따라가기 시작하면 논의 범위가 지나치게 방대해지기 때문이다.

아키텍처의 개념들은 다음과 같이 볼 수 있다.
서비스, 커플링, 컴포넌트, 동기통신, 비동기통신, 오케스트레이션, 코레오그래피(오케스트레이션과 반대), 원자성, 컨트랙트(계약) 등이 있다.

사가(Saga)는 영웅적인 업적을 기리는 긴 이야기라는 의미에서 유래했다.
결제 서비스와 배송 서비스가 있을 때, 결제 서비스는 성공했지만 배송 서비스가 실패한 경우, 오케스트레이션 사가를 통해 결제 취소라는 보상 트랜잭션을 실행하여 사가를 실패 상태로 종료한다.
Comment on lines +4 to +59
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

책의 주요 내용을 정리한 부분의 가독성을 높이기 위해 목록(bullet points)을 사용하는 것을 제안합니다. 각 항목을 - 또는 * 로 시작하는 목록 항목으로 만들고, 관련된 내용은 들여쓰기를 통해 하위 목록으로 구성하면 내용을 구조화하고 파악하기 쉽게 만들 수 있습니다.

예를 들어, 데이터에 대한 부분을 다음과 같이 변경할 수 있습니다:

- **데이터**: 데이터 설계가 가장 중요합니다.
    - **운영 데이터**: 시스템 운영에 필요한 데이터로, 정합성과 트랜잭션이 중요합니다.
    - **분석 데이터**: 서비스 이해, 개선, 판단을 위한 과거 누적 데이터입니다. 트랜잭션과 무관하며 장기적인 전략 수립에 활용됩니다.

전체적으로 이런 형식을 적용하면 요약 내용을 더 명확하게 전달할 수 있을 것입니다. 전체 변경 사항을 코드 제안으로 남겨두었으니 참고해주세요.

- **하드파트**: '어렵다'와 '단단하다'는 두 가지 의미를 가집니다.
- **아키텍처 설계**: 한번 정해놓으면 바꾸기 어려워 근본적인 결정입니다.
- **마이크로서비스**: 개인적인 경험은 없지만, 서버팀에서 각 파트를 나눠 설계하는 것을 본 적이 있습니다.

- **오케스트레이션**: 여러 서비스 호출의 순서, 성공/실패 판단, 보상 동작까지 하나의 흐름으로 책임지는 중앙 제어 로직입니다.

- **데이터**: 데이터 설계가 가장 중요합니다.
    - **운영 데이터**: 시스템 운영에 필요한 데이터로, 정합성과 트랜잭션이 중요합니다.
    - **분석 데이터**: 서비스 이해, 개선, 판단을 위한 과거 누적 데이터입니다. 트랜잭션과 무관하며 장기적인 전략 수립에 활용됩니다.

- **아키텍처 거버넌스**: 시스템이 커져도 방향을 잃지 않게 하는 '기술 헌법'입니다.
    - 잘못 이해한 경우: 통제 지옥
    - 잘 이해한 경우: 자유를 유지하기 위한 최소한의 규칙

- **아키텍처 피트니스 함수**: 아키텍처를 관리하고 검증하는 함수입니다.
    - **트레이드오프**: 목표가 둘 이상일 때 필연적으로 발생합니다. (예: 더 빠르게 vs 더 정확하게)

- **피트니스 함수 vs 단위 테스트**:
    - **공통점**: 자동 검증, 실패 시 즉시 차단
    - **차이점**:
        - 피트니스 함수: 아키텍처 특성 검증
        - 단위 테스트: 도메인 로직의 정확성 검증

- **피트니스 함수 도구**:
    - **소나큐브(SonarQube)**: 피트니스 함수의 재료를 턴키 방식으로 제공합니다.
    - **아크유닛(ArchUnit)** (Java): 경고 수준을 넘어 "이 구조는 금지"와 같은 규칙을 테스트로 정의하여 강제할 수 있습니다.
    - **넷아크테스트(NetArchTest)** (.NET): 닷넷 진영의 유사한 도구입니다.

- **피트니스 함수 실행**:
    - 대부분 자동화되지만, 수동 검토가 필요한 경우도 있습니다.
    - 예: 민감한 법률 정보가 포함된 시스템의 합법성 준수는 변호사가 직접 검토해야 합니다.

- **피트니스 함수의 중요성**:
    - 엔터프라이즈 거버넌스에서 지속적인 체크가 필요합니다.
    - 제로데이 익스플로잇 같은 보안 취약점 발견 시, 구조, 의존성, 권한 경계 등을 지속적으로 검사하여 피해 확산을 최소화할 수 있습니다.
    - 아키텍트가 모든 코드를 보지 않고도 프로젝트의 구조와 상태를 검증하고 방향성을 잡는 데 도움을 줍니다.

- **피트니스 함수 사용 시 주의점**:
    - 과용은 금물입니다. 너무 복잡한 함수는 설계 의도를 흐리고 개발자에게 혼란을 줄 수 있습니다.

- **아키텍처 vs 설계**:
    - 아키텍처 결정은 구조 설계에 해당하며, 둘은 구분되어야 합니다.

- **아키텍처 원칙**:
    - 'How'보다 'Why'가 더 중요합니다.
    - 구현 상세보다는 개념에 집중해야 논의 범위가 방대해지는 것을 막을 수 있습니다.

- **주요 아키텍처 개념**:
    - 서비스, 커플링, 컴포넌트, 동기/비동기 통신, 오케스트레이션, 코레오그래피, 원자성, 컨트랙트(계약) 등

- **사가(Saga) 패턴**:
    - '영웅적인 업적을 기리는 긴 이야기'에서 유래했습니다.
    - 예: 결제는 성공했으나 배송이 실패한 경우, 오케스트레이션 사가를 통해 '결제 취소'라는 보상 트랜잭션을 실행하여 일관성을 유지합니다.


## 논의 주제: 아키텍처 검증의 자동화와 수동 검토
피트니스 함수에서 자동화한 부분(소나큐브, 아크유닛 등)과 수동으로 검토해야 하는 부분이
있다고 나오는데 실무에서 이 두 부분에 대한 경험이 있으신가요?

어떤 것을 자동화하였고 어떤 것을 왜 사람이 직접 해야 했는지 궁금합니다.
Comment on lines +61 to +65
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI/CD 파이프라인에서 자동수행되는 소나큐브로 정적분석하는 것이 일종의 피트니스 함수를 적용한거라고 가정했을 때, 이부분에 대한 실무 경험은 있습니다 이걸 적용하는 이유는 작성한 코드를 PR 리뷰 시기에 정적분석 결과까지 같이 확인하기 위함으로 하고, 소나큐브에 세팅된 정책에 따라서, 알아서 판단해서 결과를 줄것이고, 이걸 보고 판단해서 수정하는것은 리뷰이(reviewee)의 몫이기 때문에 자동화 해도 문제 없다고 생각 됩니다

그 외 수동으로 검토해야하는 부분은 책에는 민감한 법률정보가 담긴 시스템 사례가 나오는데 실제 실무에서는 적용해본적은 없습니다

자동으로 해도되냐, 수동으로 해야하냐의 차이는 자동으로 했을 때의 영향도가 어떻냐에 따라서 다를것 같네요 (LLM 모델을 통한 바이브코딩을 할 때, yolo모드를 어떤 경우에 쓸것이냐?와 비슷한 맥락에서 이해해볼 수 있을거 같습니다)

Comment on lines +61 to +65
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

책에도 예시가 나오긴 하지만 수동 검토라는 건 자동화 할 수 없는 부분이라고 보는데
사실 저는 이 부분에서 AI에게 맡기면 해결되지 않을까? 라는 생각도 해봤습니다.

이 책의 번역본 출간 시점이 2022년 10월 1일이고
원서 출간 시점은 2021년 11월 30일 입니다.

ChatGPT가 나오기 전 LLM이 2020~2021년 쯤 유행했으니 이 책을 썼을 시점에는 ChatGPT가 없던 시대였습니다.

그러므로 수동 검토를 사람이 해야 한다고 한거라 생각합니다.
지금 시점이라면 수동 검토가 필요한 부분도 문맥을 이해하고 검토 결과를 내주는 ChatGPT를 사용했겠죠.

만약 이 책의 2nd edition이 나오면 저는 ChatGPT 관련 내용을 추가할 것이라 예상합니다.
그리고 나올 가능성이 높습니다.
왜냐하면 이 책의 전신인 < 소프트웨어 아키텍처 101 > 이 2nd edition으로 < 소프트웨어 아키텍처 The Basic > 으로 나왔기 때문입니다.

http://aladin.kr/p/0C7k2

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

추상화 정도, 회사의 현재 상황에 적절한 아키텍처인지 등 같이 맥락이 포함되는 항목들은 자동화하기 어려운 것 같습니다.
또, "기술 부채"가 미래에 얼마나 치명적일지 예상하여 당장 처리해야 하는지, 전략적으로 남겨둬야 할지 와 같이 수치로 표현 가능하지만 수동 검토가 필요한 케이스도 있을 것 같습니다.