토비의 클린 스프링 강의를 함께 학습하며 도메인 모델, DDD, 헥사고날 아키텍처 등 백엔드 설계의 핵심 개념을 이해하고 프로젝트에 적용하는 것을 목표로 합니다.
아래 노션에 작성된 내용은 스터디 진행을 위한 대략적인 계획으로, 함께 이야기하며 학습 방향과 진행 방식에 맞게 자유롭게 수정해 나가면 좋을 것 같습니다.
<aside>
토비의 클린 스프링 강의에서 다루는 내용
Part1
Toby's Clean Spring - Domain Model Pattern and Hexagonal Architecture Part 1| tobyilee - Course on Inflearn
Part1에서는
- 도메인 모델과 DDD 기반 설계
- 요구사항에서 도메인 개념과 비즈니스 규칙을 발견하고 이를 객체와 코드로 모델링
- 보편 언어(Ubiquitous Language)를 활용한 도메인 모델 문서화
- 헥사고날 아키텍처와 의존성 설계
- 핵심 도메인 로직과 Web, DB 같은 외부 기술을 분리
- 계층별 책임과 의존성 방향, Port/Adapter 구조 이해
- 애그리거트와 모듈 구조 설계
- Aggregate, Aggregate Root, 불변식과 일관성 경계 이해
- 애그리거트를 기준으로 응집도 높은 모듈 구성
- JPA를 활용한 도메인 객체 구현
- JPA Entity를 도메인 모델로 활용하는 방법
- Repository 패턴과 도메인/JPA 모델의 분리 기준
- 과도한 JPA 의존성을 줄이고 도메인 로직을 깔끔하게 유지하는 방법
- 테스트와 아키텍처 검증
- 도메인 로직을 외부 환경과 독립적으로 테스트
- Spring Web 예외 처리 및 테스트
- 정적 분석과 아키텍처 테스트를 이용한 의존성·구조 규칙 검증
Part2
Toby's Clean Spring - Domain Model Pattern and Hexagonal Architecture Part 2| tobyilee - Course on Inflearn
Part2에서는
- 기존 도메인 모델의 설계 개선과 점진적 리팩터링
- Part 1의 설계를 다시 검토하고 설계 트레이드오프 이해
- 도메인 값 객체와 애플리케이션 DTO 분리
- 테스트를 유지하면서 안전하게 구조를 변경하는 점진적 리팩터링
- 헥사고날 아키텍처의 Port와 애플리케이션 컴포넌트 설계
- ISP를 적용해 소통 의도에 따라 Port를 분리하는 방법
- Aggregate와 Application Service를 독립적인 컴포넌트로 구성
- 컴포넌트 간 단방향 의존관계와 참조 방식 설계
- 복잡한 도메인의 Aggregate 설계와 TDD
- 상태 전이, 복합 식별자, 컬렉션 기반 비즈니스 로직 모델링
- 보편 언어를 활용한 Aggregate 경계와 책임 설계
- 복잡한 도메인 로직을 TDD 방식으로 구현
- 테스트 개선과 아키텍처 규칙 자동 검증
- ArchUnit을 활용한 순환 의존 및 Aggregate 접근 규칙 검증
- Instancio, Fixture, Base Class 등을 활용한 테스트 코드 개선
- 아키텍처 원칙을 문서에만 두지 않고 빌드 단계에서 자동 검증
- DIP·JPA를 활용한 확장 가능한 구조와 성능 문제 해결
- DIP와 Required Port를 이용한 컴포넌트 간 순환 의존 해결
@OrderColumn, @EntityGraph 등을 활용한 Aggregate 영속화
- Hibernate 통계를 활용한 쿼리 검증 및 N+1 문제 탐지·개선
</aside>
<aside>
‼️ 스터디 참여에 필요한 것
강의는 스터디에서 별도로 제공하지 않으며, 각자 개별적으로 준비해 주셔야 합니다.
🎯 스터디 진행 기간
우선 12월 까지 진행 기간으로 잡고있습니다 (약 2개월)
⏰ 스터디 계획
<aside>
강의 수강 → 프로젝트 개발 → 리뷰 및 리펙토링 , 확장
</aside>
- 스터디 전 강의 학습 및 핵심 개념 정리
- 스터디 전 함께 학습할 강의 분량을 정하고, 해당 범위까지 각자 수강하고자합니다.!
- 학습을 하면서 강의에서 다룬 개념, 내용을 정리
- 강의 실습 프로젝트 분석
- 강의에서 구현한 기능과 프로젝트 구조를 분석
- 도메인 모델, 계층별 역할, 의존관계 등 강의 실습 프로젝트 분석 및 정리.
- 실습 프로젝트 요구사항 확장
- 기존 실습 프로젝트를 기반으로 새로운 요구사항과 기능을 추가
- 추가할 기능의 기능명세서를 작성하고 구체화
- 기능 구현
- 작성한 요구사항을 바탕으로 도메인과 구조를 직접 설계하고 구현합니다.
- 강의에서 학습한 DDD, 헥사고날 아키텍처, 애그리거트 등의 개념 적용 (복습)
- PR 기반 코드 리뷰
- 구현한 기능은 PR을 통해 서로 리뷰하며 각자의 설계와 구현 방식을 공유합니다.
- 리뷰 과정에서 자유롭게 논의하며 기능과 구조를 확장·리팩터링을 하면 좋을것같습니다.!
</aside>
<aside>
👋🏻 협업 방식
- Repository를 생성하여 하나의 프로젝트를 함께 확장해 나갈 예정입니다.
- 주 1회 Discord를 통해 학습한 내용을 공유하거나 프로젝트 진행에 대해 논의하는 시간을 가질 예정입니다 🙂
- 기능 분담, PR 및 리뷰 방식 등 세부적인 협업 규칙은 첫 모임에서 함께 논의하여 결정할 예정입니다
👥 이런 분과 함께하고 싶어요
- Spring을 활용한 백엔드 프로젝트 경험이 있으신 분
- DDD, 헥사고날 아키텍처, 멀티모듈 등 설계와 구조에 대해 더 깊게 공부해보고싶은 분이나 관심있으신분
- 열심히 꾸준히 참여할수있는 분이라면 환영합니다 !
지원 및 문의
아래 오픈 채팅 방에 지원 및 문의를 남겨주세요 ~!
토비의 클린 스프링 스터디 모집
</aside>
<aside>
🙊 PR 리뷰 진행
- 구현한 기능은 PR 단위로 공유하고 서로 코드 리뷰를 진행합니다.
- PR에는 단순 작업 내역뿐만 아니라 이번 구현에서 중점적으로 고민한 부분과 강의에서 학습한 개념을 어떻게 적용했는지 함께 작성하면 좋을것같습니다 :)
- 설계나 구현 과정에서 고민했던 부분, 다른 스터디원의 의견이 필요한 부분은 리뷰 요청 사항 또는 질문으로 남겨주세요 !
- 리뷰 과정에서 나온 의견을 바탕으로 필요한 부분을 수정·리팩터링하고, 서로 다른 설계와 구현 방식을 공유하며 학습해나고싶습니다
PR 작성 내용
- 작업 내용 및 변경 사항
- 강의 내용과 연결하여 적용한 개념
- 구현하면서 중점적으로 고민한 부분과 선택한 이유
- 리뷰어가 집중해서 봐주었으면 하는 부분
- 구현하면서 생긴 궁금한 점 또는 함께 논의하고 싶은 내용