Skip to content
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

도메인 주도 설계란 무엇인가? 1주차 - 하업서 #507

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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
58 changes: 58 additions & 0 deletions 2025/Domain-Driven Design Quickly/hemil0102/1장.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# 도메인 주도 설계란 무엇인가?

소프트웨어의 목적은 현실 세계의 문제나 어떤 일들을 더 잘 굴러가게 하는 것이다.
따라서 현실 세계를 이해하지 않은채로 좋은 소프트웨어가 나올 수 없다.

기획, 디자인, 리서치 비개발 직군의 중요성이 어쩌면 과거보다 더 대두되는 시기이다.
빠르게 변화하는 현실 세계에서 핵심 요소들을 추려내 도메인 모델을 설계한다는 것이,
어떻게 보면 개인의 다양성과 사회의 변화 등을 고려해보면 쉽지는 않을 것 같다.
그럼에도 불구하고 어떤 요구사항을 분석하고 모델을 설계하며 개발은 계속 이루어진다.

이 책은 읽어보았을 때 코드 없이 설명만 적어놔서 처음엔 읽기 불편했는데,
요즘은 GPT의 도움으로 책의 설명을 넣으면 코드를 작성해주니,
코드를 보고나서야 맥락들이 잘 이해되었다.

예전에 클린아키텍처를 처음 접했을 때와 비슷한 느낌이 들었던게,
둘 다 어떤 계층형 아키텍처로 약속된 구조를 잡기 때문이 아닐까 생각이 들고,
둘 다 비슷한 용어들을 공유한다.

그도 그럴 것이 아키텍처가 여러가지가 있겠지만,
소프트웨어의 목적이 현실 세계의 문제를 해결하는 것과 어떤 반본적인 프로세스를 달성하기 위해서라면,
목적이 같기 때문에 결국 아키텍처도 닮아가는게 아닐까란 생각을 했다.

그래서 어떤 아키텍처를 사용하는 것보다는
클린 아키텍처든 DDD든... 그 안에서 말하고자하는 디테일을 보면 좋겠다는 생각을 했다.
다만 클린 아키텍처는 1번 사용해봤고 DDD는 이론만 보는 상태에서 엄청난 디테일을 추구하기엔 지금 단계에서는 어려운 것 같다.
그럼에도 모델, 데이터 무결성, 유비쿼터스 언어 등등 무엇을 중요시하면 좋을지 큰 틀을 알게되서 좋았다.

도메인 주도 설계라고는 하지만,
지금까지 소프트웨어를 만들면서 도메인을 생각 안한 적은 없었기에,
알게 모르게 익숙한 내용도 있었고,
조금은 더 정갈된 느낌으로 계층을 나누는 것과
소프트웨어 품질 향상을 위한 기법들이 당장은 눈에 잘 안들어와도,

회사에서 요즘 프로토타입 앱을 만들거나 모듈을 설계할 때,
뭔가 하나씩 조금씩 넣어보면 좋을 것 같다는 생각을 한다.

특히 아직은 코드 구현으로 바로 들어가는 것이 아니라,
모델을 설계한 다음 모델에 대한 검증이 이뤄진 이후에 코드 작성을 하려는 노력을 하는데,
이런 부분이 책에서 말하는 내용과 일치해서 공감을 많이 했다.

### 1장 도메인 주도 설계란 무엇인가?
현실 세계의 무언가를 소프트웨어로 구현하기 위해 필수 개념들을 도출하는 것
Copy link
Contributor

Choose a reason for hiding this comment

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

이책을 접할수 있어서 좋았던 점은
어렴풋이 이러한 개념이 있을것 같다고 생각했는데
그게 도메인 주도 설계더군요.


### 2장 유비쿼터스 언어
이해관계자가 도메인 모델을 통해 공통의 언어로 소통하는 것
지속적인 소통을 하며 모델과 코드를 발전시켜 나가는 것

### 3장 모델 주도 설계
소프트웨어의 품질, 확장성, 유지보수, 역할과 책임, 데이터 무결성과 같은 요소를 위해
계층을 나누고, 관련 기법들을 활용하는 것

### 논제
1. 클린 아키텍처나 DDD나 현실 세계의 어떤 문제를 해결하거나 개선한다는 점에서 두 아키텍처는 닮아 있다고도 생각하는데... 둘 다 도메인 영역이 존재하고 레퍼지토리도 있고, 부분 부분 영역이 다를 뿐 ... 저장소에서 데이터를 끌어와서 로직에서 처리하고 외곽 사용자에게 UI를 통해 표현되는 점은 또는 그 반대의 흐름은 큰 맥락에서 같아보입니다.

두 아키텍처의 큰 차이점과 공통점은 뭐라고 생각하시나요?
클린 아키텍처 개발자가 했던 말 중에 결국에 30년을 소프트웨어 개발을 했는데 마지막에 내가 사용하는 아키텍처는 비슷비슷했어 그게 클린 아키텍처야 라는 말을 했는데, 동의하시나요?
Comment on lines +53 to +56
Copy link
Collaborator

@TaeHyoungKwon TaeHyoungKwon Mar 20, 2025

Choose a reason for hiding this comment

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

우선 저는 클린 아키텍쳐에 대해서 잘 모르기 때문에, 차이점과 공통점에 대해서 확실하게 단정지어서, 말을 할 순 없을것 같네요

하지만, 한가지 확실하게 말할 수 있는 것은 DDD와 클린아키텍쳐는 서로 비교대상이 아니며, DDD가 클린 아키텍쳐보다 훨씬 더 큰 범위를 다룬다는 점 입니다

클린아키텍쳐는 제가 아는 수준에선, 코드 레벨에서의 아키텍쳐 구조를 어떻게 유연하게 설계할 것인가에 초점이 맞춰져 있습니다. 코드레벨에서 설계와 구현에 치중 되어있다고 볼 수 있을 것 같습니다

반면에, DDD는 복잡한 도메인을 가진 소프트웨어를 어떻게 다양한 직군의 사람들과 협력해서 설계 할 것이고(도메인 모델링), 이 결과물로 나온 도메인 모델을 기준으로 도메인 객체들 간에 협력과 경계 설정 등 할것인지(전략적 설계), 이 전략적 설계를 바탕으로, 실제적인 구현을 어떻게 할 것인지(전술적 설계) 까지를 아우른 것으로 볼 수 있을 것 같습니다

클린아키텍쳐에도 레이어를 나누고, 엔티티, 서비스 리파지토리가 존재하고, DDD에도 똑같이 존재하기 때문에 비슷한 아키텍쳐라고 느끼셨다면, DDD의 구체적인 구현을 어떻게 할 것인지에 대한 전술적 설계에만 해당되는 내용일 것으로 보입니다

관련해서는 아래 글을 보시면 이해에 도움이 될 것 같습니다

Copy link
Collaborator

Choose a reason for hiding this comment

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

클린 아키텍처 개발자가 했던 말 중에 결국에 30년을 소프트웨어 개발을 했는데 마지막에 내가 사용하는 아키텍처는 비슷비슷했어 그게 클린 아키텍처야 라는 말을 했는데, 동의하시나요?

글의 출처가 어떻게 되나요? (클린아키텍쳐 책을 봤는데도 어디서 나온말인지 모르겠네요) 말씀주신 부분만 봐서는 문맥을 정확히 알 수가 없을 것 같습니다

Copy link
Contributor

Choose a reason for hiding this comment

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

클린 아키텍처나 DDD나 현실 세계의 어떤 문제를 해결하거나 개선한다는 점에서 두 아키텍처는 닮아 있다고도 생각하는데

소프트웨어 자체가 현실 세계의 문제를 해결하기 위함이니 그 어떤 이론이 와도 똑같을 것 같습니다.
그리고 제가 알기로는 클린 아키텍처는 저자가 제시하는 여러 원칙을 지키면 어떤 형태던 상관없는 것으로 알고있습니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

클린 아키텍처 개발자가 했던 말 중에 결국에 30년을 소프트웨어 개발을 했는데 마지막에 내가 사용하는 아키텍처는 비슷비슷했어 그게 클린 아키텍처야 라는 말을 했는데, 동의하시나요?

글의 출처가 어떻게 되나요? (클린아키텍쳐 책을 봤는데도 어디서 나온말인지 모르겠네요) 말씀주신 부분만 봐서는 문맥을 정확히 알 수가 없을 것 같습니다

음 제 기억에는 출처가 클린 아키텍처 책 서두였던 걸로 기억해요. 저자가 클린 아키텍처를 소개하면서 게임 개발도 하고 여러 소프트웨어 개발도 해보고 하니 궁극적으로 클린 아키텍처와 비슷한 형태로 아키텍처를 계속 사용하게 되더라~ 라고 봤었는데 지금은 책이 없어서 확인 불가입니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

클린 아키텍처나 DDD나 현실 세계의 어떤 문제를 해결하거나 개선한다는 점에서 두 아키텍처는 닮아 있다고도 생각하는데

소프트웨어 자체가 현실 세계의 문제를 해결하기 위함이니 그 어떤 이론이 와도 똑같을 것 같습니다. 그리고 제가 알기로는 클린 아키텍처는 저자가 제시하는 여러 원칙을 지키면 어떤 형태던 상관없는 것으로 알고있습니다.

네 뭔가 아키텍처가 비슷한데, DDD는 단지 아키텍처라기 보다는 조금 더 포괄적으로 소프트웨어 개발 방법론?을 말하는 것 같아요.

Copy link
Member

Choose a reason for hiding this comment

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

제가 클린 아키텍처 책이 있기 때문에 찾아보고 알려드리면 다음 내용을 잘못 생각해서 해석하신게 아닌가 싶네요.

내 인생 첫 줄의 코드를 작성한 게 1964년 ... 지금은 2016년이 되었으니, 무려 반세기 이상 코드를 작성한 셈이다.
...
나는 수많은 앱을 만들었다. 수많은 시스템을 구축했다. 그리고 이 모두를 경험하고 고민한 끝에 놀라운 무언가를 깨달았다.
아키텍처 규칙은 동일하다!

30년(X) -> 반세기(O)
클린 아키텍처였다 (X) -> 아키텍처 규칙은 동일하다! (O)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

제가 클린 아키텍처 책이 있기 때문에 찾아보고 알려드리면 다음 내용을 잘못 생각해서 해석하신게 아닌가 싶네요.

내 인생 첫 줄의 코드를 작성한 게 1964년 ... 지금은 2016년이 되었으니, 무려 반세기 이상 코드를 작성한 셈이다.
...
나는 수많은 앱을 만들었다. 수많은 시스템을 구축했다. 그리고 이 모두를 경험하고 고민한 끝에 놀라운 무언가를 깨달았다.
아키텍처 규칙은 동일하다!

30년(X) -> 반세기(O) 클린 아키텍처였다 (X) -> 아키텍처 규칙은 동일하다! (O)

오호 맞습니다. 이런 맥락이었는데 기억이 많이 바뀌어있네요 ㅋ.ㅋ
아키텍처 규칙은 동일한데 이러이러하다로 본게 맞아요.
그래서 아 아키텍처들은 종국엔 비슷한건가... 이런 생각을 했던 것 같습니다.

Comment on lines +52 to +56
Copy link
Contributor

Choose a reason for hiding this comment

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

저는 뭔가 방법론 + 설계 방법에 가깝다는 생각이 들었습니다. 클린 아키텍처는 설계 방법이라면 DDD는 결국 "설계에는 소통이 빠지면 안되더라"를 말하고 싶어한다는 생각이 들었습니다.