1. 요구사항 분석
- 배경
- 회원들 중 페이지네이션 기능만으로는 원하는 관심상품을 쉽게 찾기 어렵다는 애로사항이 많이 접수됨
- 폴더 별로 관심상품을 저장/관리할 수 있는 기능을 추가하기로 함
- 요구사항
- 폴더 생성
- 회원별 폴더를 추가할 수 있다.
- 폴더를 추가할 때 1개~N개를 한번에 추가할 수 있다.
- 폴더 생성
- 관심상품에 폴더 설정
- 관심상품에 폴더는 N개 설정할 수 있다.
- 관심상품이 등록되는 시점에는 어느 폴더에도 저장되지 않는다.
- 관심상품 별로 1번에서 생성한 폴더를 선택하여 추가할 수 있다.
- 폴더 별 조회
- 회원은 폴더 별로 관심상품 조회가 가능하다.
- 조회 방법
- '전체': 폴더와 상관 없이 회원이 저장한 전체 관심상품들을 조회 가능하다.
- '폴더별': 폴더별 저장된 관심상품들을 조회 가능하다.
2. 테이블 설계
폴더 테이블에 필요한 정보
- 폴더명: 회원이 등록한 폴더 이름을 저장
- 회원ID: 폴더를 등록한 회원의 ID 를 저장
- A 회원이 생성한 폴더는 A 회원에게만 보여야 함
- 회원과 폴더의 관계
- '회원과 폴더'의 관계는 '회원과 관심상품' 관계와 동일
3. Entity 구현 (JPA의 연관 관계를 바탕으로)
3-1. 회원 Entity 관점
- 회원 1명이 여러 개의 폴더를 가질 수 있음
- "@OneToMany" 로 설정
public class User {
@OneToMany
private List<Folder> folders;
}
- 회원이 가진 폴더들을 조회
List<Folder> folders = user.getFolders();
3-2. 폴더 Entity 관점
- 폴더 여러 개를 회원 1명이 가질 수 있음
- "@ManyToOne"
public class Folder{
@ManyToOne
private User user;
}
- 폴더를 소유한 회원을 조회
folder.getUser();
3-3. 객체의 관계를 맺어주면, DB 의 관계 설정 맺어줌
- 객체) 회원과 폴더의 관계
- 폴더를 소유한 회원 id 가 아닌 객체를 저장
- DB) 회원과 폴더의 관계
- 외래키를 통한 관계 형성
3-4. JPA 연관관계 Column 설정방법
@ManyToOne
@JoinColumn(name = "USER_ID", nullable = false)
private User user;
- @JoinColumn 내 속성값 설정
- name: 외래키 명
- nullable: 외래키 null 허용 여부
- false (default)
- 예) 폴더는 회원에 의해서만 만들어짐. user 값이 필수
- true
- 예) 공용폴더의 경우, 폴더의 user 객체를 null 로 설정하기로 함
- false (default)
'프로그래밍 > SpringBoot' 카테고리의 다른 글
list 값 줄별로 출력하기 forEach(System.out::Println) (0) | 2022.07.02 |
---|---|
JPA 의 연관관계 (0) | 2022.06.17 |
Spring Data Jpa 페이징 (0) | 2022.06.16 |
Spring Data JPA (0) | 2022.06.08 |
통합 테스트(Integration Test) - 예제) 관심상품 통합 테스트 (0) | 2022.06.06 |