diff --git a/board/docs/board-erd.svg b/board/docs/board-erd.svg
index 85e2c69e..0c498de3 100644
--- a/board/docs/board-erd.svg
+++ b/board/docs/board-erd.svg
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/board/src/main/java/com/example/board/config/JpaConfig.java b/board/src/main/java/com/example/board/config/JpaConfig.java
new file mode 100644
index 00000000..57c36619
--- /dev/null
+++ b/board/src/main/java/com/example/board/config/JpaConfig.java
@@ -0,0 +1,18 @@
+package com.example.board.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.domain.AuditorAware;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+
+import java.util.Optional;
+
+@EnableJpaAuditing
+@Configuration
+public class JpaConfig {
+
+ @Bean
+ public AuditorAware auditorAware() {
+ return () -> Optional.of("bobby"); // TODO: 인증기능 구현 시 수정
+ }
+}
diff --git a/board/src/main/java/com/example/board/domain/Article.java b/board/src/main/java/com/example/board/domain/Article.java
index 0e7db6e6..8a8966d9 100644
--- a/board/src/main/java/com/example/board/domain/Article.java
+++ b/board/src/main/java/com/example/board/domain/Article.java
@@ -1,15 +1,80 @@
package com.example.board.domain;
-import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+import javax.persistence.*;
+import java.time.LocalDateTime;
+import java.util.Objects;
+
+@Getter
+@ToString
+@Table(indexes = {
+ @Index(columnList = "title"),
+ @Index(columnList = "hashtag"),
+ @Index(columnList = "createdAt"),
+ @Index(columnList = "createdBy")
+})
+@Entity
public class Article {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
+
+ @Setter
+ @Column(nullable = false)
private String title; // 제목
+
+ @Setter
+ @Column(nullable = false, length = 10000)
private String content; // 본문
+
+ @Setter
private String hashtag; // 해시태그
+ @CreatedDate
+ @Column(nullable = false)
private LocalDateTime createdAt; // 생성일시
+
+ @CreatedBy
+ @Column(nullable = false, length = 100)
private String createdBy; // 생성자
+
+ @LastModifiedDate
+ @Column(nullable = false)
private LocalDateTime modifiedAt; // 수정일시
+
+ @LastModifiedBy
+ @Column(nullable = false, length = 100)
private String modifiedBy; //수정자
+
+ protected Article() {}
+
+ private Article(String title, String content, String hashtag) {
+ this.title = title;
+ this.content = content;
+ this.hashtag = hashtag;
+ }
+
+ public static Article of(String title, String content, String hashtag) {
+ return new Article(title, content, hashtag);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof Article article)) return false;
+ return id != null && id.equals(article.id);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id);
+ }
}