들어가기 앞서
•
강의 유튜브 링크
•
강의 자료
•
Github 링크
이번 주차 진행 전 확인해주세요!
이번 주차 실습에 필요한 코드는 week3 브랜치 내에 작성되어 있어요. 위에 첨부한 깃허브 링크를 참고해주세요! 실습 코드 안에 있는 TODO 주석을 중점으로 봐 주시면 좋아요. 제가 작성한 과제 정답 코드는 다음 강의가 올라가기 전날 오후에 week3-done 브랜치로 업로드 해드릴 예정이에요.
안녕하세요, 실전 백엔드 스터디 멘토 유도훈입니다. 

추석 연휴는 잘 쇠셨나요? 저는 열심히 연휴 후유증을 이겨내려 노력 중입니다…🥹
이번 주는 이런 걸 배웠어요.
패키지 이름이 바뀌었죠? 저희는 원래 controller, service, … 와 같은 패키지 안에 코드들을 넣었는데, 이제는 presentation, application, domain, infrastructure로 바뀌었어요.
전자는 종류를 기준으로 묶었다면, 후자는 이게 어느 위치에 있어야 하는지를 기준으로 묶었다고 생각하시면 좋아요. service가 repository를 사용하는 건 정상적이지만, 같은 코드가 application이 infrastructure를 쓰는 게 되는 순간 DDD 설계에서는 위반이 돼요. 코드는 한 글자도 바뀌지 않았지만 판정이 뒤집히게 되는 것이죠.
그리고 Port를 둘 자리가 명확해져요. 요구(interface)는 domain에, 기술은 infrastructure에 명확히 둘 수 있게 되었어요. 이렇게 interface를 이용한 Port와 구현하는 Adapter를 두는 것이 DIP를 구현할 수 있는 방법 중 하나였고, 이를 통해 순수 Java만의 공간을 만드는 아키텍처를 헥사고날 아키텍처라고 해요. 다만, 저희는 도메인에 @Entity와 같은 jakarta.persistence JPA는 제거하지 않았어요.
다음 4주차부터는 지현님이 담당하실 예정이에요. 4주차에는 영속성 컨텍스트와 트랜잭션, 동시성 제어에 대해 더 깊게 알아볼 거예요!
강의나 과제에 질문이 있다면 디스코드 #정규스터디-질문방 채널 혹은 개인 디스코드 메시지(닉네임: 도훈)로 연락 주세요!
과제
목표
•
WIL 작성
•
Order 쪽에도 DIP 적용하기 (코드 제출)
WIL 작성
3주차 강의 및 실습 내용을 week3/wil.md에 정리해주세요.
꼭 300자 이상 작성해주셔야 해요!!
아래는 엑스칼리드로우에서 그린 내용인데요, 이번 기회에 미리 알아두시면 앞으로 있을 실전 스터디 내용이 좀 더 귀에 잘 들어오실거에요..!
•
Spring Data JPA와 JPA는 다른 것인가?
•
Hibernate는 무엇인가?
Order 쪽에도 DIP 적용하기
강의에서는 Product쪽만 했죠? 똑같은 걸 Order 쪽에도 해보시면 돼요.
1.
domain/order/OrderRepository 인터페이스를 정의한다.
2.
infrastructure/persistence/OrderRepositoryAdapter를 만들어 구현한다.
3.
OrderService의 주입 타입을 바꾼다.
4.
테스트용 FakeOrderRepository를 만든다.
5.
OrderServiceTest에서 @SpringBootTest와 같은 어노테이션을 모두 없애고 테스트용 Fake를 주입한 뒤에도 테스트가 잘 실행되는지 확인한다.
참고사항
TODO 코드 위치
TODO 위치
이번 주의 TODO는 강의 영상에서 전부 채웠어요, 각 TODO에서 무엇을 했는지 다시 한 번 돌아봐요!
단계 | 구현 위치 | 할 일 |
W3-1 | domain/product/ProductRepository | 메서드 정의하기 (JPA, Spring Data 타입 금지) |
W3-2 | application/product/ProductService
application/order/OrderService | 주입 타입을 domain 의 ProductRepository 로 교체하기 (두 파일!) |
W3-3 | infrastructure/persistence/ProductRepositoryAdapter | 인터페이스를 implements하여 구현하고 @Repository 붙이기 |
W3-4 | test/application/product/FakeProductRepository | HashMap 기반 가짜 저장소 만들기 |
W3-5 | test/application/product/ProductServiceTest | 어노테이션 세 개 걷어내고 @Autowired도 제거한 뒤 Fake 주입하기 |
제출해야 할 파일과 파일 경로
•
작성한 코드
•
wil.md - 배운 점 300자 이상!
[여러분들의 저장소 이름]
├── readme.md
├── .gitignore
├── commerce // 실습 코드, 필수
└── week1/
├── wil.md
└── hw1.md
└── week2/
└── wil.md
└── week3/
└── wil.md // 필수
Plain Text
복사
부록
week3 브랜치가 안 보여요!
다음 공지를 참고해주세요!
마감 기한
와우스터디에서 확인해주세요.
제출 방법
자신의 레포지토리에 weekn 폴더를 생성해 wil.md 파일을 제출합니다.
더 자세한 사항은 아래 링크를 참조해주세요.





