Skip to content
Open
Changes from all commits
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,46 @@
# 소프트웨어 아키텍처 The Hard Parts
## 4장 ~ 5장
---
## 논의 내용
* 책에서 나오는 단계처럼 [컴포넌트 도메인을 생성]하고 [도메인 서비스를 생성]한 이후에는 특정 도메인 서비스가 너무 크다고 느껴지는 각자의 기준이 무엇인지 논의해보고 싶습니다. 즉 해당 서비스가 다시 "미니 모놀리스(Mini-monolith)"가 되어가는 것은 아닌지 미리 판단할 수 있는 신호는 무엇일까요?
Comment on lines +4 to +5
Copy link
Collaborator

Choose a reason for hiding this comment

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

즉 해당 서비스가 다시 "미니 모놀리스(Mini-monolith)"가 되어가는 것은 아닌지 미리 판단할 수 있는 신호는 무엇일까요?

새로운 도메인 개발 요구사항이 들어왔을 때, 처음에 의도한 MS의 책임 범위 보다, 더 많은 기능구현을 해야해서, 책임이 크기가 커질 수밖에 없는 상황에서 MS를 만들것인지 책임의 범위를 넓힐것인지를 고민하는 시기가 미니 모놀리스가 되어가는 것은 아닌지 판단할 수 있는 신호 일거 같습니다


저는 기존에 업계에 퍼져있는 MSA는 선이고, 모놀리스는 악이다 라는 관점으로 보는 것은 적절치 않다고 보는 편 입니다. 상황에 따라서 적절한 해결책이 있을뿐이라고 생각합니다

미니 모놀리스가 되어간다라고 하는게, MSA 관점에서는 나쁜신호로 볼 수 있지만, 회사의 사정에 따라서는 그 상황에서 최선의 선택일 수도 있기 때문입니다.

인원이 넉넉한 큰 회사라면, 새로운 도메인 요구사항을 충족하는 새 MS 를 만드는 선택을 함으로써, 미니 모놀리스가 되지 않도록 조치할 수 있을거 같고, 새롭게 만들어지는 MS를 관리할 팀의 인원 새로 채용하거나, 팀을 구성하면 되기 때문에, 관리 측면에서 이점이 있을거 같습니다

반면에 인원이 넉넉치 않은 작은 회사의 경우에는 같은 상황에서, MS를 추가로 만드는 선택 대신에, 기존에 존재하는 MS 중에서 젤 적합한 MS를 찾아서, 그 MS가 책임을 가지도록 하는 식으로 하지 않을까 생각되는데요. MS로 과하게 분리했을 때, 발생하는 코드와 인프라 유지보수성과 비용, 간단한 작업을 굳이 여러 MS에 각각 구현 해야하는 문제를 해결할 수 있는 해결책의 관점으로도 볼 수 있다고 생각합니다

Copy link
Member

Choose a reason for hiding this comment

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

한가지 일을 잘 하는 서비스라면 사실 크다는 것의 기준은 소스 코드의 양 혹은 기능(API)의 갯수 정도이지 않을까 싶습니다.
여기서 한 가지 이상의 일, 다른 도메인에서 할 법한 일이 끼어들고 있는지의 여부로 판단하면 좋을 것 같네요.
하나의 서비스 단위로 잘 분리했다면 거기에 뭔가 다른 도메인의 코드를 넣는 것 역시 쉽지 않은 일이라고 보는데, 그러면 안되겠죠.

Copy link
Member

Choose a reason for hiding this comment

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

제 기준에서는 특정 서비스 내부에 추가 기능을 개발해야 하는 때가 올때 그 시점에서의 코드의 덩치나, 추가 기능을 붙임으로써 하위 기능의 덩치가 너무 커져버린다고 느껴지면 or 해당 기능 내에서의 컴포넌트나 함수간 의존성이 지나치게 높아지면 그 하위 기능을 새로운 서비스로 빼야겠다고 느껴지는 것 같은데 이건 화면 관점에서의 내용이긴 합니다

제품 전체의 관점에서 봤을 때 하나의 서비스가 하나의 모놀리스 덩어리가 될 정도로 커질 만한 일이 흔할지는 잘 감이 안오네요 ㅡ,,ㅡ


## Chapter 4 - 아키텍처 분해

모듈화의 명분을 도출한 후, 크고 복잡한 모놀리식 애플리케이션을 나누기 위해서는 아키텍처 분해라는 방법이 필요하다.
책에서는 “컴포넌트 기반 분해”와 “전술적 분기” 두 가지 분해 전략을 소개한다.

**컴포넌트 기반 분해**
(애플리케이션의 논리적 구성 요소인) 컴포넌트를 정제/추출한 후 분산 아키텍처를 점진적으로, 제어 가능한 방향으로 구성하면서 다양한 리팩터링 패턴을 적용하는 방법

**전술적 분기**
먼저 애플리케이션의 레플리카(사본)를 만들고 필요 없는 부분을 하나씩 잘라내며 서비스를 조금씩 완성해 나가는 방법

이 중 어느 방법 하나가 가장 효과적이라고 말할 수는 없고, 기존 모놀리식 애플리케이션 코드가 얼마나 잘 구성돼 있는가에 따라 답이 달라진다.

## Chapter 5 - 컴포넌트 기반 분해 패턴

해당 장을 읽기 전까지 간간히 언급되었던 컴포넌트를 조금이나마 더 이해할 수 있게 되었다.
여기에 도메인, 서브 도메인, 컴포넌트 간의 차이 및 관계가 어떻게 되는지도 처음으로 깨닫게 되어 정말 재밌게 읽었다.
컴포넌트 기분 분해는 코드베이스가 체계가 어느 정도 잡혀 있고 네임스페이스(디렉토리)별로 그룹핑돼 있는 모놀리식 애플리케이션을 분리할 때 매우 효과적이다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'컴포넌트 기분 분해'에 오타가 있습니다. 문맥상 '컴포넌트 기반 분해'가 맞는 표현으로 보입니다.

Suggested change
컴포넌트 기분 분해는 코드베이스가 체계가 어느 정도 잡혀 있고 네임스페이스(디렉토리)별로 그룹핑돼 있는 모놀리식 애플리케이션을 분리할 때 매우 효과적이다.
컴포넌트 기반 분해는 코드베이스가 체계가 어느 정도 잡혀 있고 네임스페이스(디렉토리)별로 그룹핑돼 있는 모놀리식 애플리케이션을 분리할 때 매우 효과적이다.

책은 다음과 같은 순서로 점진적으로 분해하는 방법을 소개한다.

* **컴포넌트 식별 및 사이징 패턴**
* 컴포넌트 기반 패턴인만큼 컴포넌트를 식별하고 관리하고 적절하게 크기를 정한다.
* **공통 도메인 컴포넌트 수집**
* 애플리케이션 전체에 중복될 가능성이 있는 공통 비즈니스 도메인 로직을 통합해 분산 아키텍처에서 잠재적인 중복 서비스를 줄인다.
* **컴포넌트 눌러 펴기 패턴**
* 도메인, 서브도메인, 컴포넌트를 축소/확장해서 소스 코드 파일을 잘 정의된 컴포넌트 내부에만 둔다.
* **컴포넌트 디펜던시 결정 패턴**
* 컴포넌트 디펜던시를 식별하고 다듬어 모놀리식 아키텍처 -> 분산 아키텍처 마이그레이션의 실현 가능성과 전체 작업량을 결정한다.
* **컴포넌트 도메인 생성 패턴**
* 컴포넌트를 애플리케이션 내부의 논리적인 도메인들로 그룹핑하고 컴포넌트 네임스페이스 및 디렉터리를 특정 도메인에 알맞게 리팩토링 한다.
* **도메인 서비스 생성 패턴**
* 모놀리식 애플리케이션의 논리 도메인을 개별 배포된 도메인 서비스들로 옮겨 모놀리식 아키텍처를 물리적으로 분리한다.

각 패턴당 정의를 알려주고, 관리용 피트니스 함수를 의사코드로 예를 들어주는게 특이했다.
하지만 피트니스 함수의 의사코드 자체로는 바로 실무에 적용하기는 무리가 있어보이고, 참고해서 툴을 이용하여 구현해낼 수 있을 것 같았다.
이때 순간적으로 AI를 적극 활용하여 피트니스 함수의 기능을 수행하도록 할 수 있지 않을지 생각났다.
결국 피트니스 함수는 CI/CD 파이프라인에 포함되므로, AI plugin 등도 함께 추가할 수 있지 않을지 아이디어가 떠올랐다.

이전에는 모놀리식 아키텍처를 분산 아키텍처로의 마이그레이션 과정을 상상해보거나 감을 잡기 어려웠다.
그러나 이번 장을 통해서 마이그레이션은 그냥 감으로 진행하는 것이 아니라, 구조적으로, 점진적으로, 통제 가능한 방향으로 해야하 한다는 것을 알게 되었고, 컴포넌트 기반 분해 패턴이 핵심 요령이라는 것을 배웠다.
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

'해야하 한다는' 부분에 오타가 있습니다. '해야 한다는'으로 수정하는 것이 자연스럽습니다.

Suggested change
그러나 이번 장을 통해서 마이그레이션은 그냥 감으로 진행하는 것이 아니라, 구조적으로, 점진적으로, 통제 가능한 방향으로 해야하 한다는 것을 알게 되었고, 컴포넌트 기반 분해 패턴이 핵심 요령이라는 것을 배웠다.
그러나 이번 장을 통해서 마이그레이션은 그냥 감으로 진행하는 것이 아니라, 구조적으로, 점진적으로, 통제 가능한 방향으로 해야 한다는 것을 알게 되었고, 컴포넌트 기반 분해 패턴이 핵심 요령이라는 것을 배웠다.