네이버 클라우드 캠프/Spring

[Spring Boot] 게시판 구현하기(1)

graph-dev 2023. 6. 21. 15:49
728x90

스프링 부트

Spring framework는 지원이 잘 안되어, Spring Boot에 대해서 알아보았습니다.

 

게시판을 구현하기 위해 다양한 방식을 지원하지만, JPA를 활용해보겠습니다.

 

JPA는 객체, 즉 테이블을 구성하기 위해 Entity(엔터티, 엔티티)를 사용합니다. Board라는 엔티티(클래스)를 생성합니다.

코드를 살펴보겠습니다.

@Entity
@Table(name="T_BOARD")
@SequenceGenerator(
        name="BoardSeqGenerator",
        sequenceName = "T_BOARD_SEQ",
        initialValue = 1,
        allocationSize = 1
)
...

1) @Entity 어노테이션을 통해 엔티티 클래스로 지정할 수 있습니다.

2) @Table은 테이블 이름을 지정할 수 있으며, 그 이름은 name 이하에 언급해서 지정합니다.

3) @SequenceGenerator: 시퀀스를 생성해주며 MySQL 시퀀스라는 문법은 없어서 시퀀스 테이블을 생성해줍니다. 여기서 name이 시퀀스 제너레이터의 이름이며, sequenceName은 시퀀스 이름을 지정합니다. initalValue가 시퀀스의 시작값을 설정합니다.

 

package com.bit.springboard.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Entity
@Table(name="T_BOARD")
@SequenceGenerator(
        name="BoardSeqGenerator",
        sequenceName = "T_BOARD_SEQ",
        initialValue = 1,
        allocationSize = 1
)

 

다음은 컬럼을 정의해보겠습니다.

1) 컬럼에 @Id를 주면 PK(Primary Key)로 지정합니다.

2) 키 값을 지정하는 방식은 @GeneratedValue를 사용합니다.

3) GenerationType 속성에는 AUTO, IDENTITY, SEQUENCE, TABLE 등이 있습니다. 사용할 때, GenerationType.SEQUENCE 이렇게 GenerationType에 이어붙여서 활용합니다.

AUTO 기본값, 데이터베이스가 자동으로 키 값을 할당합니다.
IDENTITY AUTO_INCREMENT를 사용해서 키 값을 할당합니다.
SEQUENCE 시퀀스로 할당하고 항상 SequenceGenerator와 함께 사용합니다.
TABLE 키 값으로 사용될 값들을 별도의 테이블로 생성해서 관리합니다.
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Board {
    @Id
    @GeneratedValue (
            strategy = GenerationType.SEQUENCE,
            generator = "BoardSeqGenerator"
    )
    private int boardNo;
	...

}

 

다음은 컬럼에 대한 어노테이션입니다. @Column은 컬럼에 대한 특성을 지정합니다. name은 매핑할 컬럼을 지정하고, nullable은 null값 허용 여부를 설정합니다. nullable = false라면, NOT NULL로 결측치를 허용하지 못합니다. unique는 UK(Unique Key)로 설정할 수 있습니다.

@Column 컬럼 특성 지정
name 매핑할 컬럼 지정
nullable null값 허용 여부 설정(false = NOT NULL)
unique UK 설정

추가로, @Transient는 테이블의 컬럼으로 생성하지 않고 객체 내에서만 사용 가능한 멤버변수를 만듭니다.

public class Board {
...
    @Transient
    private String searchCondition;
    @Transient
    private String searchKeyword;

}

 

전체적인 코드는 다음과 같습니다.

package com.bit.springboard.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;


@Entity
@Table(name="T_BOARD")
@SequenceGenerator(
        name="BoardSeqGenerator",
        sequenceName = "T_BOARD_SEQ",
        initialValue = 1,
        allocationSize = 1
)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Board {

    @Id
    @GeneratedValue (
            strategy = GenerationType.SEQUENCE,
            generator = "BoardSeqGenerator"
    )
    private int boardNo;
    private String boardTitle;
    private String boardContent;
    private String boardWriter;
    private LocalDateTime boardRegdate = LocalDateTime.now();

    @Column(name="BOARD_CNT", nullable = false)
    private int boardCnt = 0;
    
    @Transient
    private String searchCondition;
    @Transient
    private String searchKeyword;

}