끄적끄적 코딩일지

[Spring]이미지 월드컵 만들기(3) - DB Entity 설계하기 본문

Project/[Spring] 이미지 월드컵 만들기

[Spring]이미지 월드컵 만들기(3) - DB Entity 설계하기

BaekGyuHyeon 2022. 5. 18. 13:08

이미지 월드컵의 주요 기능을 생각해 보자

기본적으로 로그인 기능 넣고

일단 한 게임안에 다수의 사진이 들어가야한다.

사진에는 간단한 타이틀이 붙는다.

 

그리고 게임이 끝났을때는

각 사진마다 승리한 비율을 표시해준다.

흠.... 일단 초기 설계이나까 이정도만 생각해 보자

 

일단 계정 정보를 저장하고 있는 Member부터 설계해 보자

entity 페키지를 만들고 Member class를 만들었다.

1. Member(회원) 

@Entity를 통해 spring에서 해당클레스가 entity임을 알수 있도록하고

기본키(primary key)는 generatevalue를 통해 자동생성으로 하였다.

사용자 이름, 로그인 id,로그인 pw, 생성 날짜등의 column을 선언하였다.

 

 

2. WorldCupGame(월드컵 게임)

name(월드컵 이름),playcount(진행 횟수) 등의 정보를 담는다.

- 다른 Entity와 Mapping 하기

일단 한 회원이 여러 게임을 만들 수 있지만 한 게임은 여러 회원이 만들수 없도록 했다. 즉 게임 관점에서는 회원정보와 ManyToOne(N:1)의 관계이다.

또한 JoinColumn으로 회원정보의 id 값을 WorldCupGame Table에서 Column으로써 가지도록 한다.

 

그다음 한 게임안에 여러개의 사진이 속해야한다. 단 한 사진이 여러개의 게임에 속할수 없도록 한다. 이는 OneToMany(1:N)관계로써

OneToMany를 사용해서 정의하도록 하자.

게임이 삭제되면 게임에 속해있는 사진도 삭제되어야 하기 때문에 casecade 옵션을 주도록 하자 

또한 fetch 속성으로 EAGER으로 게임정보을 불러올때 사진 정보도 같이 불러오도록 하자

지금은 LAZY으로 바꾸어 필요할때만 사진 정보를 불러오도록 했다. 필요하다면 동적으로 정보를 불러오면 그만이라는 생각이 들었다.

 

3. WorldCupItem(월드컵 출전 이미지)

 id, title,image,wincount(1등한 횟수)정보가 포함된다.

 

 

4. Comment(뎃글)

월드컵을 끝낼시 1등시킨 사진에 대하여 뎃글을 남기도록 설계를 했다.

한 회원이 여러 뎃글을 작성할수 있도록

(뎃글 시점에서) ManyToOne(N:1)으로 Mapping을 하였다.

 

프로젝트를 진행하면서 더 추가될수도 있지만 여기까지 기본적인 Entity 설계를 맞췃다.

Spring을 한번 실행을 하여 Database에 Table이 잘 추가됬는지 확인해 보자.

Posgresql 기준으로 PgAdmin을 사용하여 확인해 보았다.

Table이 잘 추가된것을 확인했다. 다음 글에서는 Spring에서 해당 데이터를 CRUD(Create Read Update Delete)를 할수 있도록 Repository와 Service, Controller을 작성해 보겠다.