티스토리 뷰
본 포스팅은 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발 강의를 참고하여 작성하였습니다.
소스 코드는 여기 있습니다. (commit hash: ac3027f)> git clone https://github.com/lcalmsky/spring-boot-app.git > git checkout ac3027f
ℹ️ squash merge를 사용해 기존 branch를 삭제하기로 하여 앞으로는 commit hash로 포스팅 시점의 소스 코드를 공유할 예정입니다.
Overview
애플리케이션의 메인 기능인 스터디 관리를 위해 스터디 도메인을 설계합니다.
도메인 설계
Study
Entity
의 속성 중 관계를 가지는 속성은 아래와 같습니다.
Set<Account> managers
: 관리자Set<Account> members
: 회원Set<Tag> tags
: 관심주제Set<Zone> zones
: 활동지역
객체 관점에서 Study
와 다른 Entity
의 관계는 다음과 같습니다.
Study
에서Account
쪽으로@ManyToMany
단방향 관계 두 개(managers, members)Study
에서Zone
으로@ManyToMany
단방향 관계Study
에서Tag
로@ManyToMany
단방향 관계
Entity 작성
study
패키지를 생성하고 하위에 Entity
클래스를 작성합니다.
/src/main/java/io/lcalmsky/app/study/domain/entity/Study.java
package io.lcalmsky.app.study.domain.entity;
import io.lcalmsky.app.account.domain.entity.Account;
import io.lcalmsky.app.account.domain.entity.Zone;
import io.lcalmsky.app.tag.domain.entity.Tag;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.Set;
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class Study {
@Id
@GeneratedValue
private Long id;
@ManyToMany
private Set<Account> managers; // (1)
@ManyToMany
private Set<Account> members;
@Column(unique = true)
private String path; // (2)
private String title;
private String shortDescription;
@Lob @Basic(fetch = FetchType.EAGER)
private String fullDescription; // (3)
@Lob @Basic(fetch = FetchType.EAGER) // (4)
private String image;
@ManyToMany
private Set<Tag> tags;
@ManyToMany
private Set<Zone> zones;
private LocalDateTime publishedDateTime;
private LocalDateTime closedDateTime;
private LocalDateTime recruitingUpdatedDateTime;
private boolean recruiting;
private boolean published;
private boolean closed;
private boolean useBanner;
}
- 관리자 변경 등을 고려해 관리자를 여러 명을 설정할 수 있게 합니다.
- 스터디 페이지 경로이므로 유니크해야 합니다.
- 긴 설명은 255자를 넘어갈 수 있으므로 @Lob을 사용합니다. @Lob은 원래 fetch 설정이 Eager이지만 명시적으로 적어줬습니다.
- 프로필 사진 때와 마찬가지로 @Lob으로 설정합니다.
다음 포스팅부터 본격적으로 스터디 기능을 구현해보겠습니다.
'SpringBoot > Web Application 만들기' 카테고리의 다른 글
스프링 부트 웹 애플리케이션 제작(40): 스터디 뷰 구현(쿼리 튜닝, N+1 Problem) (0) | 2022.04.13 |
---|---|
스프링 부트 웹 애플리케이션 제작(39): 스터디 생성 기능 구현 (0) | 2022.04.12 |
스프링 부트 웹 애플리케이션 제작(37): HTML 템플릿 생성 및 메일 전송 (5) | 2022.04.10 |
스프링 부트 웹 애플리케이션 제작(36): 메일 서비스 추상화 (0) | 2022.04.06 |
스프링 부트 웹 애플리케이션 제작(35): SMTP 설정(feat. Gmail) (0) | 2022.04.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스프링 부트
- @ManyToOne
- 함께 자라기 후기
- spring boot application
- 스프링 부트 튜토리얼
- 스프링부트
- spring boot jwt
- JSON
- 클린 아키텍처
- leetcode
- Jackson
- Spring Data JPA
- JPA
- 알고리즘
- 함께 자라기
- QueryDSL
- proto3
- 스프링 부트 회원 가입
- 스프링 데이터 jpa
- 스프링 부트 애플리케이션
- Spring Boot Tutorial
- Linux
- Spring Boot JPA
- intellij
- Spring Boot
- spring boot app
- Java
- 헥사고날 아키텍처
- r
- gRPC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함