목표
- 스프링 부트와 JPA를 활용한 웹 애플리케이션 구축 학습
- 도메인 주도 설계를 통한 스프링 starter 웹 앱을 구성
요구사항과 도메인 모델
도메인 모델 설계의 경우 먼저 UI나 프로토타입이 존재한다는 가정 하에 다음과 같이 이루어짐
- 기능 분석
구현 기능 추출
- 도메인 모델
기능 별 도메인 연관 관계 구성
- 엔티티 분석
도메인을 구현 속성 정의
- 테이블 설계
객체 지향 모델을 띄고 있는 엔티티를 RDB로 옮겨오는 작업
둘의 패러다임이 다르기 때문에 매핑 관계 수정이 필요
강의 키워드
- 클래스들이 모두 가지고 있어야하는 내장 필드는 값타입(Address)로 구성, 기본편에 나와있으니 볼 것
- N:N 매핑은 쓰면 안됨, 1:N으로 풀어내야 함
- 가급적 양방향 말고 단방향 연관 관계를 사용하는 것이 정석
- 개발자들의 객체 지향 실수
회원이 주문을 한다 했을 때 회원이 주문을 가진다고 생각
하지만 실제 회원이 있어야 주문이 있는게 아니라 주문이 일어날 때 회원이 필요, 동급임
- 실제 DB 쿼리도 회원 주문 내역이 필요하면 회원의 주문 내역으로 들어가는게 아닌 주문 내역을 뽑는데 회원을 필터로 거는거임
- 상속을 가지는 테이블 관계 매핑은 싱글 테이블 전략 사용
- 객체 관계는 서로 컬렉션을 소유하면 N:N 매핑을 할 수 있음
하지만 관계형 DB는 그게 불가능하고 결국 둘과 1:1 매핑 할 테이블이 하나 더 있어야 함
1:N:N:1 의 관계
- 관계형 DB에선 무조건 foreign key가 있는 N의 테이블이 연관관계 아이디를 가져갈 수 밖에 없음 이것도 기본편에서 무지 강조 했으니 기본편 ㄱㄱ
- 연관관계 매핑은 C언어의 포인터 같은거임!!!!!!!