스프링 부트, JPA, Thymeleaf를 이용한 페이징 처리 1 - 도메인 설계

사용자 게시판이기 때문에 사용자게시물에 대한 Entity가 필요할 것이다.

물론 사용자와 게시물을 같은 테이블에 다 때려 박아도 이 간단한 예제에서는 문제가 없겠지만 프로그램은 항상 유지 보수 및 기능 확장을 생각해야하기 때문에 UserEntity, BoardEntity 두 개의 Entity로 아래와 같이 설계를 하였다.

  • UserEntity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.devson.pagination.web.domain;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Getter
@NoArgsConstructor
@Entity
@Table(name = "USER") // 없을 경우 USER_ENTITY로 생성됨
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;

@Builder
public UserEntity(String name) {
this.name = name;
}
}
  • BoardEntity
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
package com.devson.pagination.web.domain;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Getter
@NoArgsConstructor
@Entity
@Table(name = "BOARD") // 없을 경우 BOARD_ENTITY로 생성됨
public class BoardEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID")
private UserEntity writer;

@Builder
public BoardEntity(String title, UserEntity writer) {
this.title = title;
this.writer = writer;
}
}

BoardEntity의 경우 하나의 사용자가 다수의 게시물을 갖기 때문에 @ManyToOne으로 매핑하였다.
그리고 User의 ID를 외래키로 가져야하므로 @JoinColumn 어노테이션을 달아 놓았다.

위 두 Entity는 아래와 같은 ERD로 표현할 수 있다.

이제 서버를 실행시켜 h2-console(http://localhost:8080/h2-console )에 접속해 원하는대로 테이블이 생성되었는지 확인해보자

이제 도메인 설계는 끝났고 다음으로 화면을 생성해보자

Share