게시글 기능 설계

package bh.board.article.entity;


import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.Builder;
import java.time.LocalDateTime;

@Table(name = "article")
@Getter
@Entity
@ToString
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Article {
    @Id
    private Long articleId;
    private Long boardId; // shard key

    private String title;
    private String content;
    private String writer;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;

    @Builder
    public Article(Long articleId, Long boardId, String title, String content, String writer, LocalDateTime createdAt, LocalDateTime updatedAt) {
        this.articleId = articleId;
        this.boardId = boardId;
        this.title = title;
        this.content = content;
        this.writer = writer;
        this.createdAt = createdAt;
        this.updatedAt = updatedAt;

    
    }

    public void update(String title, String content) {
        this.title = title;
        this.content = content;
        this.updatedAt = LocalDateTime.now();
    }

    
}

샤딩을 직접 구현하진 않지만 shard key를 두었다.

샤드 키가 게시판 id인 이유는 게시글 서비스는 게시판 단위로 게시글 목록이 조회되기 때문이다.

따라서 같은 게시판의 경우 하나의 샤드에서 조회함으로써 성능상 이점이 있다. 또한 여기서는 hash_based 샤딩이라 가정

분산 시스템을 가정했기 때문에 Primary Key를 AUTO_INCREMENT 또는 UUID를 사용하지 않고 오름차순 유니크 숫자를 애플리케이션에서 직접 생성한다.

SnowFlake

  • 분산 시스템에서 고유한 64비트 ID를 생성하는 알고리즘이다.

Last updated