From b3ecb2c84127f068cb6d1273080505ba8af086d2 Mon Sep 17 00:00:00 2001 From: chichoon Date: Tue, 20 Jan 2026 20:02:11 +0900 Subject: [PATCH 1/3] feat: software architecture ch03: initial md --- .../chichoon/03.md | 52 ++++++++++++++++++ .../chichoon/images/03_01.png | Bin 0 -> 36234 bytes 2 files changed, 52 insertions(+) create mode 100644 2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/03.md create mode 100644 2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/images/03_01.png diff --git a/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/03.md b/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/03.md new file mode 100644 index 00000000..33733283 --- /dev/null +++ b/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/03.md @@ -0,0 +1,52 @@ +## Chapter 04: 아키텍처 분해 + +### 개요 + +- 컴포넌트 기반 분해 + - 어플리케이션의 논리적 구성 요소 단위 (컴포넌트 단위) 를 추출하고 이를 이용하여 아키텍처를 구성 + - 코드베이스가 컴포넌트 단위로 구성되어 있어 분해 가능할 경우 이쪽 선택 +- 전술적 분기 + - 애플리케이션 사본을 복사하고 필요없는 부분을 깎아내며 구성 + - 코드베이스 분해 불가능할 경우 (엉망일 경우) 이쪽이 적절한 선택 +- 도구를 이용하여 코드베이스의 특성을 파악하고 구조를 판별 + +### 추상도와 불안정도 + +- 코드베이스의 균형을 나타내는 척도 +- 추상도 + - 구현 대비 추상화가 이뤄진 정도 + - 추상 요소와 구상 요소의 개수로 측정한다 +- 불안정도 + - 코드베이스가 불안정한 정도 + - 커플링 (구심, 원심) 이 높을 경우 불안정도가 올라감 + - 컴포넌트끼리 강하게 엮여 있어 하나를 수정하면 다른 컴포넌트에 영향을 미칠 확률이 높다는 뜻 + +![image03-01](./images/03_01.png) + +- 메인 시퀀스로부터의 거리 + - 추상도와 불안정도 사이의 이상적인 관계 + - x절편, y절편, 기울기 1의 직선 + - 이 선에 가까울수록 이상적이다 (컴포넌트 균형이 적절하다) +- 메인 시퀀스로부터의 거리 그래프 기준으로 + - 오른쪽 위로 치우친 부분은 추상화가 과도한 (쓸모없는) 구역 + - 사용이 어려움 + - 왼쪽 아래로 치우친 부분은 추상화가 없다시피한 (고통스러운) 구역 + - 취약하고 관리가 어려움 + +``` +논의점: 추상도, 불안정도, 거리 등의 요소가 굉장히 수학적인 요소로 보이는데, 개발에는 정답이 없듯이 컴포넌트가 추상적인지, 불안정한지 여부를 판가름하는 기준도 매우 모호할 듯하다. 추상 클래스 등 명확하게 추상적인 요소가 없는 경우 이러한 수치들을 계산하고, 아키텍처 구성에 참고할 만한 자료로 삼는 것이 과연 가능할까 의문이 든다. +``` + +### 컴포넌트 기반 분해 + +- 컴포넌트 단위의 폴더구조 및 파일로 디렉터리를 구성 및 각 코드 분리 +- 모놀리식을 분산 아키텍처로 마이그레이션할 때 도움이 된다 + +### 전술적 분기 + +- 진흙잡탕 아키텍처를 다듬을 때, 추출보다는 필요없는 것을 떼어내는 것에 중점 +- 서로간의 의존성 때문에 추출에 한계가 있는 경우 +- A팀, B팀이 서로 각각 코드베이스 사본을 복사한 후, 각자의 팀에 필요한 코드만 남기고 나머지를 삭제하는 기법 + - 이렇게 하면 각 파트별 큰 구조는 유지하면서 모놀리식 구조를 덩어리로 쪼갤 수 있다 +- 분해보다 상대적으로 쉽지만 모놀리스 코드의 흔적이 계속 남아있을 가능성이 있다 +- 개발자가 노력을 기울이지 않으면, 조금 더 가벼워졌을 뿐인 (코드 용량만 줄어든) 진흙덩어리가 될 수도 있음 diff --git a/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/images/03_01.png b/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/images/03_01.png new file mode 100644 index 0000000000000000000000000000000000000000..9efd1ec263bf594f6917107ec798c01f0c026317 GIT binary patch literal 36234 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 literal 0 HcmV?d00001 From 0b6b89212d28c22ba74f4727cdb2a88174799ce2 Mon Sep 17 00:00:00 2001 From: chichoon Date: Tue, 20 Jan 2026 20:55:46 +0900 Subject: [PATCH 2/3] feat: software architecture ch04: initial md --- .../chichoon/04.md | 57 ++++++++++++++++++ .../chichoon/images/04_01.png | Bin 0 -> 83182 bytes 2 files changed, 57 insertions(+) create mode 100644 2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/04.md create mode 100644 2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/images/04_01.png diff --git a/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/04.md b/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/04.md new file mode 100644 index 00000000..ef5d135b --- /dev/null +++ b/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/04.md @@ -0,0 +1,57 @@ +## Chapter 05: 컴포넌트 기반 분해 패턴 + +### 개요 + +![04_01](./images/04_01.png) + +1. 컴포넌트 식별 및 사이징 + - 나눌 컴포넌트의 크기를 결정 +2. 공통 도메인을 갖는 컴포넌트 수집 + - 중복 가능성이 있는 로직 통합 +3. 컴포넌트 눌러펴기 + - 도메인, 서브도메인, 컴포넌트를 정리 +4. 컴포넌트 디펜던시 결정 + - 디펜던시를 다듬어 마이그레이션 실현가능성 및 작업량 결정 +5. 컴포넌트 도메인 생성 + - 컴포넌트를 애플리케이션 내부의 논리적 도메인들로 그룹핑 및 리팩터링 +6. 도메인 서비스 생성 + - 모놀리식 애플리케이션의 논리 도메인을 개별 배포된 도메인 서비스들로 이동 + - 모놀리식을 서비스 단위로 쪼개기 + +### 컴포넌트 식별 및 사이징 + +- 애플리케이션을 구성하는 컴포넌트를 식별하여 크기를 조절 +- 너무 크거나 너무 작은 컴포넌트를 찾아내는 작업 + - 큰 컴포넌트의 경우 다른 컴포넌트들과의 결합도가 높을 가능성이 높다 +- 컴포넌트 크기를 결정하는 지표 + - 문장 수 (조건문, 분기문 등, 세미콜론으로 구분) + - 파일 수 + - 이러한 수치들을 이용하여 컴포넌트의 비중 계산 + - 컴포넌트 사이즈를 일정하게 유지하기 위해 피트니스 함수나 툴을 쓰면 좋다 + - 어떤 컴포넌트가 추가되고 삭제되었는지 알려주는 툴 + - 코드베이스에서 차지하는 비중을 나타내고 임계치를 벗어나지 않게끔 돕는 툴 + - 컴포넌트가 코드베이스 컴포넌트들의 크기 평균치보다 크지 않게 알려주는 툴 + - etc + +- 사이즈는 애플리케이션 전반적으로 일정한 크기 유지가 필요함 +- 컴포넌트 식별하기 + - 컨벤션을 유지한 적절한 이름 + - 네임스페이스 (컴포넌트가 위치한 디렉터리 또는 패키지 등) + - 컴포넌트 비중 > 문장 수, 파일 수 + +- 예시에서 성한은 리포팅 컴포넌트의 비중이 지나치게 크다는 것을 발견하여 이를 적절한 세부 단위로 쪼개는 것으로 컴포넌트 크기를 고르게 만들었음 + +### 공통 도메인을 갖는 컴포넌트 수집 + +- 공통 도메인 로직을 발굴하여 단일 컴포넌트로 중앙화하는 패턴 +- 여러 서비스에서 같이 사용되는 기능을 통합해 두면, 추후 중복 서비스를 쉽게 제거할 수 있다 +- 이름이나 네임스페이스를 이용하여 구분 +- 공통 도메인 로직 통합 전후의 커플링 (결합도) 을 계산하면 컴포넌트의 비중 및 통합 필요성 여부 판단에 도움이 된다 + +### 컴포넌트 눌러펴기 + +- A 컴포넌트가 B 컴포넌트를 기반으로 생성되고, B 컴포넌트가 C 컴포넌트를 기반으로 생성되는 등 + - 예시: 설문 컴포넌트를 기반으로 설문 템플릿을 작성할 경우 + - +- 디렉터리 상에 리프 노드만 존재하게끔 평평하게 누르는 작업 +- diff --git a/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/images/04_01.png b/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/images/04_01.png new file mode 100644 index 0000000000000000000000000000000000000000..c94c0d3979fa7738132ded24f288dc909a7ed25f GIT binary patch literal 83182 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 b-J!GQmrW_6a$5lZ7K)mZmSVNMMcDrV5r8X! literal 0 HcmV?d00001 From fbb85512bd7fa52b64e7bf7408425eb23efdee0d Mon Sep 17 00:00:00 2001 From: chichoon Date: Wed, 21 Jan 2026 18:12:05 +0900 Subject: [PATCH 3/3] =?UTF-8?q?add=20=EB=8A=90=EB=82=80=EC=A0=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chichoon/03.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/03.md b/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/03.md index 33733283..6e44ec14 100644 --- a/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/03.md +++ b/2026/Fundamentals_of_Software_Architecture_2nd_Edition/chichoon/03.md @@ -50,3 +50,9 @@ - 이렇게 하면 각 파트별 큰 구조는 유지하면서 모놀리식 구조를 덩어리로 쪼갤 수 있다 - 분해보다 상대적으로 쉽지만 모놀리스 코드의 흔적이 계속 남아있을 가능성이 있다 - 개발자가 노력을 기울이지 않으면, 조금 더 가벼워졌을 뿐인 (코드 용량만 줄어든) 진흙덩어리가 될 수도 있음 + +``` +느낀점?: 마침 아주 최근에 큰 덩어리의 진흙 코드를 서비스별로 분기하는 작업을 진행했는데, 그 과정에서 덩어리를 서비스별로 복사하고 그중 필요없는 코드를 지우고 공통화할 수 있는 코드만 분리하여 덩어리를 경량화한 적이 있었음. 전술적 분기 파트를 읽으면서 해당 작업 생각이 났다. (내가 진행한 작업이 어찌보면 전술적 분기구나? 하는) + +난이도는 확실히 처음부터 작정하고 분리를 시도하는 것보다 간단한 편이고 시간도 많이 걸리지 않았지만, 덩어리 A를 분리하고 나서 덩어리 B를 작업하는 도중에 덩어리 A에 미처 덜어내지 못한 찌꺼기를 발견하는 등 코드 깎아내기에 어느 정도 익숙하지 않으면 실수하기가 쉬운 듯 하다. A 덩어리는 C, D, E 서비스를 분기할 때까지도 찌꺼기와 공통화가 덜된 요소들이 계속 발견되어 추가작업을 진행해야 했다.. 눈물.. +```