[팀 - 아만드 3주차 액션 피드백 내용 공유]
스프링 강의 및 과제를 하면서 느꼈던 내용에 대해 크게 5부분으로 구성했습니다.
1. 알게 된 내용 (용어)
- Spring, Spring Boot, Spring Framework 구분
- IoC / IoC 컨테이너 / DDD / DI
- 결합도와 런타임 의존성 / 클래스 의존성
- Domain, Entity, VO, DTO 구분
- Aggregate, Repository, Service
- ApplicationContext, Bean 관계
- EnvironmentCapable
- Bean Scope
2. 강의 예제 코드 설명
- OrderContext : 주문에 대한 전반적인 도메인 객체에 대한 생성 책임, 여러 생성에 대해 책임
- 일종에 IoC 컨네이너
- 객체들의 의존 관계 설정이 이루어짐, 객체들에 대해 생성과 파괴를 모두 확인
- 객체화가 시키면서 생성에 대한 필요한 의존 관계를 맺어줌
- OrderService : 자신이 직접 어떤 레파지토리를 사용할지 선택하지 않고 VoucherService 또한 직접 생성하지 않음.
- 이 Instance를 만드는 제어권을 OrderContext에게 넘김 (IoC)
- Voucher : 할인 정책을 담고 있는 도메인 인터페이스
3. 과제에 대한 해결 방법
- 콘솔 사용하기
- 필요사항 정리하기 (create / list/ exit)
- 설계에 대한 그림 그려보기 (간단한 클래스 다이어그램 or 수기)
- 코딩 및 리뷰
4. 어려웠던 내용 및 공부해야 할 내용
- 토비의 스프링
- AOP와 WebApplicationContext
- BeanFactory와 ApplicationContext의 차이점
- 동성 : 프로젝트 설계, 객체를 나누는데 어려움
- 동건
- 버퍼 처리를 할때 IO Exception에 대한 내용 설명이 추가 필요
- 객체가 어디까지 역할과 책임을 갖는지 고민 필요
- 메서드는 메세지를 전달해주는 역할을 해야 함. 그렇기 때문에 데이터 위주의 설계 또는 구현 보다는 객체를 전달하고 받는 과정을 생각해야 함.
- 왜 객체를 나누어서 사용하고, 왜 이런 객체가 필요한지에 대해 고민하면서 코드를 작성하는 습관을 갖는 것이 중요!
- 수현 : 개념 상 어려웠던 것보다는 과제하면서 설계하는게... 메인 로직 설계가 어려움.
- 지나 : DDD 계층별로 나누어서 클래스 별 역할을 나누는 것 → 객체로 구분하는 것 어려움.
- 수빈 : 스프링 구현, 설계 어려움
- 상순 : 설계 어려움
→공통점은 스프링 프로젝트 설계 어려움, 객체 분리에 대해 어려움
→객체가 갖는 책임을 생각하면서 설계 필요, 잘 짜여진 소스 코드를 보고 참고 필요
5. 프로젝트 설계하기
- 먼저 요구사항을 세분화하여 작성
- 세분화한 요구사항에 대해 역할과 책임을 생각하며 클래스를 분리
- 분리된 클래스를 작성하면서, 해당 기능이 왜 해당 클래스에서 사용되어야 하는지 납득할 수 있는 이유를 생각하며 작성 필요
본인이 왜 이런 코드를 작성했는지 고민하는 시간 투자 필요!