1. 요구사항 분석

  1. 배경
    1. 회원들 중 페이지네이션 기능만으로는 원하는 관심상품을 쉽게 찾기 어렵다는 애로사항이 많이 접수됨
    2. 폴더 별로 관심상품을 저장/관리할 수 있는 기능을 추가하기로 함
  2. 요구사항
    1. 폴더 생성
      1. 회원별 폴더를 추가할 수 있다.
      2. 폴더를 추가할 때 1개~N개를 한번에 추가할 수 있다.

  1. 관심상품에 폴더 설정
    1. 관심상품에 폴더는 N개 설정할 수 있다.
    2. 관심상품이 등록되는 시점에는 어느 폴더에도 저장되지 않는다.
    3. 관심상품 별로 1번에서 생성한 폴더를 선택하여 추가할 수 있다.
  2. 폴더 별 조회
    1. 회원은 폴더 별로 관심상품 조회가 가능하다.
    2. 조회 방법
      1. '전체': 폴더와 상관 없이 회원이 저장한 전체 관심상품들을 조회 가능하다.
      2. '폴더별': 폴더별 저장된 관심상품들을 조회 가능하다.

 

 

 

 

 

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 로 설정하기로 함

+ Recent posts