인프런 이정환님의 React 강의를 통해 만든 감정 일기장 React 프로젝트에 Monolithic 기반 아키텍처 Spring Boot 백엔드 서버에 연동 한다.

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "members")
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_id", nullable = false)
private String userId;
@Embedded
private Password password;
@Column(name = "name", nullable = false)
private String name;
@Embedded
private Email email;
@Enumerated(EnumType.STRING)
private SocialType socialType;
@OneToMany(mappedBy = "member", orphanRemoval = true, cascade = CascadeType.ALL)
private List<MemberRole> memberRoles = new ArrayList<>();
@Builder
public Member(String userId, Password password, String name, Email email, SocialType socialType) {
this.userId = userId;
this.password = password;
this.name = name;
this.email = email;
this.socialType = socialType;
}
public static Member of(String userId, Password password, String name, Email email, SocialType socialType) {
return Member.builder()
.userId(userId)
.password(password)
.name(name)
.email(email)
.socialType(socialType)
.build();
}
}
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "MEMBER_ROLE")
@Entity
public class MemberRole {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_id")
private Role role;
private MemberRole(Member member, Role role) {
this.member = member;
this.role = role;
}
public static MemberRole of(Member member, Role role) {
return new MemberRole(member, role);
}
}
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "roles")
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "role_name")
private String roleName;
@Column(name = "role_desc")
private String roleDescription;
public Role(String roleName, String roleDescription) {
this.roleName = roleName;
this.roleDescription = roleDescription;
}
public static Role of(String roleName, String roleDescription) {
return new Role(roleName, roleDescription);
}
}
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "ROLE_RESOURCES")
@Entity
public class RoleResources {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_id")
private Role role;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "resources_id")
private Resources resources;
private RoleResources(Role role, Resources resources) {
this.role = role;
this.resources = resources;
}
public static RoleResources of(Role role, Resources resources) {
return new RoleResources(role, resources);
}
}
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "RESOURCES")
@Entity
public class Resources {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "resources_name")
private String resourceName;
@Column(name = "http_method")
private HttpMethod httpMethod;
@OneToMany(mappedBy = "resources", cascade = CascadeType.ALL, orphanRemoval = true)
private List<RoleResources> roleResources = new ArrayList<>();
@Builder
public Resources(String resourceName, HttpMethod httpMethod) {
this.resourceName = resourceName;
this.httpMethod = httpMethod;
}
public static Resources of(String resourceName, HttpMethod httpMethod) {
return new Resources(resourceName, httpMethod);
}
}
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "diary")
@Entity
public class Diary {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "subject", length = 300)
private String subject;
@Column(name = "content", nullable = false, length = 5000)
private String content;
@Enumerated(EnumType.STRING)
@Column(name = "emotion_status", nullable = false)
private EmotionStatus emotionStatus;
@Column(name = "diary_date", nullable = false)
private LocalDate diaryDate;
@Column(name = "diary_year_month", nullable = false, length = 6)
private String diaryYearMonth;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id", nullable = false)
private Member member;
public void update(String subject, String content, EmotionStatus emotionStatus, LocalDate diaryDate) {
this.subject = subject;
this.content = content;
this.emotionStatus = emotionStatus;
this.diaryDate = diaryDate;
this.diaryYearMonth = DateUtil.getYearMonth(diaryDate);
}
@Builder
public Diary(String subject, String content, EmotionStatus emotionStatus, LocalDate diaryDate, Member member) {
this.subject = subject;
this.content = content;
this.emotionStatus = emotionStatus;
this.diaryDate = diaryDate;
this.diaryYearMonth = DateUtil.getYearMonth(diaryDate);
this.member = member;
}
public static Diary of(String subject, String content, EmotionStatus emotionStatus, LocalDate diaryDate, Member member) {
return Diary.builder()
.subject(subject)
.content(content)
.emotionStatus(emotionStatus)
.diaryDate(diaryDate)
.member(member)
.build();
}
}

front-end : https://github.com/onlydev7777/emotion-diary-react
back-end : https://github.com/onlydev7777/emotion-diary-monolithic