-
Notifications
You must be signed in to change notification settings - Fork 5
소프트웨어 아키텍처 The Hard Parts 1주차 - 김지수 #581
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| # 1장 '베스트 프랙티스'가 없다면? | ||
|
|
||
| ## 주요 내용 | ||
| 하드파트: 어렵다와 단단하다의 뜻 | ||
| 아키텍처 설계는 한번 정해놓으면 쉽사리 바꿀 수 없게 되기에 그만큼 근본적이다. | ||
| 마이크로서비스: 나는 해당하는 부분이 없지만 서버팀에서 서버 설계 시 각 파트별로 나눠서 작업했던 걸 본 기억이 있다 | ||
|
|
||
| 오케스트레이션 | ||
| 여러 서비스 호출의 순서, 성공/실패 판단, 보상 동작까지 하나의 흐름으로 책임지는 중앙 제어 로직 | ||
|
|
||
| 데이터는 모든 것: 데이터 설계가 가장 중요하다. | ||
| 운영데이터와 분석데이터가 있다. | ||
| 운영데이터는 회사 시스템이 돌아가는 데 필요한 데이터다. 정합성, 트랜잭션이 중요 | ||
| 분석데이터는 서비스를 이해, 개선, 판단을 위한 데이터로 트랜잭션과 무관하며 과거 누적 축적형 데이터로 현재 운영에 필요하진 않지만 장기적인 전략 수립 및 의사결정에 중요하게 활용되는 데이터다. | ||
|
|
||
| 아키텍처 거버넌스 | ||
| 시스템이 커져도 방향을 잃지 않게 하는 '기술 헌법'이다. | ||
| 잘못 이해한 경우 = 통제 지옥 | ||
| 잘 이해한 경우 = 자유를 유지하기 위한 최소 규칙 | ||
|
|
||
| 아키텍처 피트니스 함수 | ||
| 관리해주는 함수. 피트니스 클럽은 몸을 관리해주지만 피트니스 함수는 아키텍처를 관리해준다. | ||
| 필연적으로 트레이드오프가 발생할 수밖에 없다. 더 빠르게-더 정확하게, 더 강하게-더 가볍게 등 | ||
| 목표가 하나라면 상관없지만 둘 이상이면 바로 트레이드오프가 발생한다. | ||
|
|
||
| 피트니스 함수와 단위테스트는 비슷하지만 다르다. | ||
| 비슷한 부분은 자동 검증 + 실패 시 즉시 차단이라는 것인데 | ||
| 피트니스 함수는 아키텍처의 특성을 검증하는 것이고 | ||
| 단위테스트는 로직의 정확성을 보는 것이다. 즉 도메인 로직을 본다. | ||
|
|
||
| 코드 위생 도구인 소나큐브는 피트니스 함수의 재료를 턴키 방식으로 제공한다. | ||
| 자바 진영의 아크유닛이라는 도구는 소나큐브와 다르게 경고 수준이 아닌 | ||
| "이 구조는 금지"라는 규칙을 테스트로 정의해 차단할 수 있다. | ||
| 닷넷 진영에도 넷아크테스트(NetArchTest)라는 도구가 있다. | ||
|
|
||
| 피트니스 함수는 대부분 반복/자동화해 사용하지만 간혹 수동으로 실행해야 하는 경우도 있다. | ||
| 민감한 법률 정보가 담긴 시스템은 합법성을 준수해야 하기에 변호사가 직접 검토해야 하므로 자동화할 수가 없다. | ||
|
|
||
| 이런 아키텍처 피트니스 함수가 중요한 이유는 엔터프라이즈 수준의 거버넌스 사례를 볼 때 지속적으로 체크해야 하는 영역이기 때문이다. | ||
| 제로데이 익스플로잇이 발견될 수도 있지만, 지속적인 피트니스 함수로 구조, 의존성, 권한 경계 등을 체크한다면 그 확산과 피해를 최소화할 수 있다. | ||
|
|
||
| 피트니스 함수는 아키텍처 구조를 설계하는 사람에게 단비 같은 존재이다. | ||
| 모든 코드를 직접 많이 볼 수는 없지만(코드의 디테일이 아니라 구조의 방향성을 보기 위함), 피트니스 함수를 통해 프로젝트의 구조와 상태를 검증할 수 있기 때문에 해당 프로젝트의 전반적인 방향성을 잡을 수 있다. | ||
|
|
||
| 하지만 피트니스 함수의 과용은 금물이다. | ||
| 너무 복잡한 피트니스 함수는 오히려 설계 의도를 흐리고, 개발자에게 '무엇을 지켜야 하는지'를 모호하게 만든다. | ||
|
|
||
| 아키텍처와 설계는 구분되어야 한다. | ||
| 아키텍처 결정 - 구조 설계 | ||
|
|
||
| 아키텍처의 기본 원칙을 이해할 때는 How보다 Why가 더 중요하다. | ||
| 아키텍처 개념에 집중하면 구현부에 대한 상세한 이야기는 과감히 건너뛸 수 있다. | ||
| 구현 과정을 일일이 따라가기 시작하면 논의 범위가 지나치게 방대해지기 때문이다. | ||
|
|
||
| 아키텍처의 개념들은 다음과 같이 볼 수 있다. | ||
| 서비스, 커플링, 컴포넌트, 동기통신, 비동기통신, 오케스트레이션, 코레오그래피(오케스트레이션과 반대), 원자성, 컨트랙트(계약) 등이 있다. | ||
|
|
||
| 사가(Saga)는 영웅적인 업적을 기리는 긴 이야기라는 의미에서 유래했다. | ||
| 결제 서비스와 배송 서비스가 있을 때, 결제 서비스는 성공했지만 배송 서비스가 실패한 경우, 오케스트레이션 사가를 통해 결제 취소라는 보상 트랜잭션을 실행하여 사가를 실패 상태로 종료한다. | ||
|
|
||
| ## 논의 주제: 아키텍처 검증의 자동화와 수동 검토 | ||
| 피트니스 함수에서 자동화한 부분(소나큐브, 아크유닛 등)과 수동으로 검토해야 하는 부분이 | ||
| 있다고 나오는데 실무에서 이 두 부분에 대한 경험이 있으신가요? | ||
|
|
||
| 어떤 것을 자동화하였고 어떤 것을 왜 사람이 직접 해야 했는지 궁금합니다. | ||
|
Comment on lines
+61
to
+65
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. CI/CD 파이프라인에서 자동수행되는 소나큐브로 정적분석하는 것이 일종의 피트니스 함수를 적용한거라고 가정했을 때, 이부분에 대한 실무 경험은 있습니다 이걸 적용하는 이유는 작성한 코드를 PR 리뷰 시기에 정적분석 결과까지 같이 확인하기 위함으로 하고, 소나큐브에 세팅된 정책에 따라서, 알아서 판단해서 결과를 줄것이고, 이걸 보고 판단해서 수정하는것은 리뷰이(reviewee)의 몫이기 때문에 자동화 해도 문제 없다고 생각 됩니다 그 외 수동으로 검토해야하는 부분은 책에는 민감한 법률정보가 담긴 시스템 사례가 나오는데 실제 실무에서는 적용해본적은 없습니다 자동으로 해도되냐, 수동으로 해야하냐의 차이는 자동으로 했을 때의 영향도가 어떻냐에 따라서 다를것 같네요 (LLM 모델을 통한 바이브코딩을 할 때, yolo모드를 어떤 경우에 쓸것이냐?와 비슷한 맥락에서 이해해볼 수 있을거 같습니다)
Comment on lines
+61
to
+65
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 책에도 예시가 나오긴 하지만 수동 검토라는 건 자동화 할 수 없는 부분이라고 보는데 이 책의 번역본 출간 시점이 2022년 10월 1일이고 ChatGPT가 나오기 전 LLM이 2020~2021년 쯤 유행했으니 이 책을 썼을 시점에는 ChatGPT가 없던 시대였습니다. 그러므로 수동 검토를 사람이 해야 한다고 한거라 생각합니다. 만약 이 책의 2nd edition이 나오면 저는 ChatGPT 관련 내용을 추가할 것이라 예상합니다.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 추상화 정도, 회사의 현재 상황에 적절한 아키텍처인지 등 같이 맥락이 포함되는 항목들은 자동화하기 어려운 것 같습니다. |
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
책의 주요 내용을 정리한 부분의 가독성을 높이기 위해 목록(bullet points)을 사용하는 것을 제안합니다. 각 항목을
-또는*로 시작하는 목록 항목으로 만들고, 관련된 내용은 들여쓰기를 통해 하위 목록으로 구성하면 내용을 구조화하고 파악하기 쉽게 만들 수 있습니다.예를 들어, 데이터에 대한 부분을 다음과 같이 변경할 수 있습니다:
전체적으로 이런 형식을 적용하면 요약 내용을 더 명확하게 전달할 수 있을 것입니다. 전체 변경 사항을 코드 제안으로 남겨두었으니 참고해주세요.