-
1. [TodoList] - 도메인 설계AppCenter/TodoList 2023. 5. 15. 23:51반응형
앱센터 프로젝트로 만들게 된 TodoList API
간단한 프로젝트지만 여러가지 기술을 사용해 볼 수 있는 좋은 기회니 하나하나 정리해보자.
프로젝트 내용
User, Todo CRUD API 구축
사용 기술
1. Spring JPA
2. Spring Security + JWT
3. MySQL
시작하기에 앞서 User 와 Todo ERD를 설계해보았다.
처음 설계해보는 ERD 라 어떻게 설계할지 고민이 많았는데 마침 ERD 클라우드 라는 좋은 설계 사이트가 있어서 쉽게 만들 수 있었다.
User 클래스
12345678910111213141516171819202122232425262728@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)public class User {@Id@GeneratedValueprivate Long id;@Column(nullable = false,length = 20)private String name;@Column(nullable = false, length = 20)private String password;@Column(nullable = false)private String email;@OneToMany(mappedBy = "user")private List<Task> taskList = new ArrayList<>();@Builderpublic User(String name, String password, String email) {this.name = name;this.password = password;this.email = email;}}cs @NoArgsConstructor 의 엑세스 레벨을 PROTECTED로 설정했다.
이렇게 할 경우 무분별한 객체 생성을 막아 객체 생성 전 한번 더 체크할 수 있게 한다.
예를들어 위의 User 클래스를 생성할 때
User user = new User(); user.setpassword("hello") user.setemail("dudqk9696@naver.com")
위와같이 생성하게 되면 name 필드가 생성되지 않아 불완전한 객체가 된다.
이를 방지하기 위해 NoArgsConstructor 의 엑세스레벨을 PROTECTED 로 설정했다.
Task 클래스
123456789101112131415161718192021222324252627282930313233343536373839404142434445@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@AllArgsConstructorpublic class Task {@Id @GeneratedValueprivate Long id;@Column(nullable = false, length = 20)private String title;private String contents;@Column(nullable = false)private Boolean isCompleted;@Column(nullable = false)private LocalDateTime deadline;@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "user_id")private User user;@Builderpublic Task(Long id, String title, String contents, Boolean isCompleted, User user, LocalDateTime deadline) {this.id = id;this.title = title;this.contents = contents;this.isCompleted = isCompleted;this.user = user;this.deadline = deadline;}public void setContents(String contents) {this.contents = contents;}public void setTitle(String title) {this.title = title;}public void setDeadline(LocalDateTime parseDatetime) {this.deadline = parseDatetime;}}cs User 한명은 여러가지의 Task 를 가질 수 있기 때문에 위의 ERD에서 봤듯 User와 Task를 일대다 관계로 두었고, Task 는 연관된 User 데이터를 가져오기 위해 외래키를 가진다.
도메인에서는 더 알아야할것이 없어 Service & Repository 에 대한 설명으로 넘어가자
728x90반응형'AppCenter > TodoList' 카테고리의 다른 글
TodoList - RestControllerAdvice + ExceptionHandler를 이용한 예외처리 (0) 2023.07.11 3. [TodoList] - dto 설계 (0) 2023.05.17 2. [TodoList] - Service & Repository 설계 (0) 2023.05.16