| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 28 | 29 | 30 |
- Dockerfile
- 우테코
- llm
- mysql
- 회고
- 알고리즘
- 로그인
- Lv.2
- 커밋 메시지
- fastapi
- openAI
- 해외봉사
- LV2
- 부트스트랩
- 세션로그인
- springboot
- 코딩테스트
- 서버 꺼짐
- 네팔
- crud
- Spring
- cors
- OOM
- spring boot
- 게시판
- 쿠키로그인
- docker
- 프로그래머스
- Java
- 프로젝트
- Today
- Total
s00jin 님의 블로그
7. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 엔티티 설계 및 구현 본문
7. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 엔티티 설계 및 구현
s00jin 2025. 8. 21. 15:42
데이터 베이스 연결
2025.06.26 - [프로젝트/하고 싶은거 다해보는 내 사이트] - 1. [MySQL/SpringBoot] 로컬 MySQL 연결하기
1. [MySQL/SpringBoot] 로컬 MySQL 연결하기
1. 로컬 MySQL 데이터베이스 생성로컬 MySQL에 데이터베이스를 먼저 만들고, 연결을 진행한다. 2. application.propertiesspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/
s00jin.tistory.com
전에 쓴 글에 로컬 MySQL 연결하는 법이 나왔있다.
MySQL 연결 후 jpa 라이브러리 사용을 위해 설치해준다.
build.gradle 에 아래 코드를 추가해준 후 새로 실행해준다.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
application.properties에 아래 코드를 추가해준다
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
위 설정을 추가해주면 서버를 새로 실행할때마다, 변경 사항이 있는 부분만 데이터베이스에 반영된다.
엔티티
게시판 엔티티
| id | 게시판 고유 번호 |
| subject | 제목 |
| content | 내용 |
| createDate | 생성일 |
댓글 엔티티
| id | 댓글 고유 번호 |
| content | 댓글 내용 |
| createDate | 생성일 |
| board | 어떤 게시판의 댓글인지 |
게시판 엔티티 구현
우선 게시판 관련 코드를 작성할 webBoard 패키지를 만들어줬다.
패키지 안에 가독성이 좋도록 domain 패키지를 만들고 그 안에 Board 파일을 생성 후 작성했다.
package org.mySite.webBoard.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter // todo : setter 제거하기
@Entity // 엔티티로 만들기 위해 애터네이션 적용
public class Board {
@Id // 기본키로 지정
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 200) // 열 길이 200으로 설정
private String subject;
@Column(columnDefinition = "TEXT") // columnDefinition은 열 데이터의 유형이나 성격을 정의 (TEXT = 텍스트를 열 데이터로 = 글자 수 제한 없음)
private String content;
private LocalDateTime createDate;
}
@Entity
- 엔티티로 만들기 위해 사용
@Id
- 기본키 지정
@GeneratedValue
- 데이터 저장시 속성 값을 일일이 입력하지 않아도 자동으로 1씩 증가하여 저장
- strategy = GenerationType.IDENTITY
- 고유한 번호를 생성하는 방법을 지정하는 부분
@Column
- 열의 세부 설정을 위해 사용
- length는 열의 길이를 설정할 때 사용
- columnDefinition은 열 데이터의 유형이나 성격을 정의할 때 사용
- TEXT : 텍스트를 열 데이터로 넣을 수 있음 (글자 수 제한 X)
코드를 작성하고 실행하면 데이터베이스에서 테이블이 생성된걸 확인할 수 있다.

엔티티의 속성 이름과 테이블의 열 이름의 차이
카멜 케이스 형식의 이름은 모두 소문자로 변경되고 단어가 언더바(_)로 구분되어 데이터베이스 테이블의 열 이름이 됨
* createDate → create_date
엔티티를 만들 때 Setter 메서드 사용은 지양
엔티티는 데이터베이스와 바로 연결되므로 데이터를 자유롭게 변경할 수 있는 Setter 메서드를 허용하는 것이 안전하지 않음
→ 데이터를 변경해야 할 경우 메서드를 추가로 작성
댓글 엔티티 구현
webBoard.domin 패키지 안에 Comment 파일을 만들어줬다.
package org.mySite.webBoard.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
@Entity
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(columnDefinition = "Text")
private String content;
private LocalDateTime createDate;
@ManyToOne
private Board board;
}
댓글 엔티티는 게시판 엔티티와 크게 달라진게 없다.
단지 게시판 엔티티를 참조하기 위해 board 가 추가됐다.
- @ManyToOne 엔티티를 사용해 게시판 엔티티와 연결된 속성이라는 것을 댓글 엔티티에 표시해준다
- N:1
- 데이터베이스에서 외래키 관계가 생성됨
댓글을 통해 게시판의 제목을 알고 싶다면
comment.getBoard().getSubject()
게시판에서 댓글 참조하기
댓글과 게시판이 N:1 관계이므로, 게시판과 댓글은 1:N 관계로 설정해줘야 한다.
- @ManyToOne → @OneToMany
- 게시판 하나에 댓글은 여러개이므로 Board 엔티티에 추가할 Comment 속성은 List 형태로 구성해야 함
수정된 Board 파일
package org.mySite.webBoard.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
import java.util.List;
@Getter
@Setter // todo : setter 제거하기
@Entity // 엔티티로 만들기 위해 애터네이션 적용
public class Board {
@Id // 기본키로 지정
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 200) // 열 길이 200으로 설정
private String subject;
@Column(columnDefinition = "TEXT") // columnDefinition은 열 데이터의 유형이나 성격을 정의 (TEXT = 텍스트를 열 데이터로 = 글자 수 제한 없음)
private String content;
private LocalDateTime createDate;
// 게시판에서 댓글 참조
@OneToMany(mappedBy = "board", cascade = CascadeType.REMOVE)
private List<Comment> commentList;
}
board.getCommentList() 호출 시 게시판에서 댓글 참조 가능하다
mappedBy
- 참조 엔티티의 속성명을 정의
- 즉 댓글 엔티티에서 게시판 엔티티를 참조한 속성인 board를 mappedBy에 전달
CascadeType.REMOVE
- 게시판 삭제 시 해당 게시판 댓글도 전부 삭제되도록
위 코드까지 다 작성후 실행하면, comment 테이블이 생성된 것을 확인할 수 있을 것이다

'프로젝트 > 하고 싶은거 다해보는 내 사이트' 카테고리의 다른 글
| 9. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 리스트 & 게시판 상세 페이지 구현하기 (0) | 2025.08.21 |
|---|---|
| 8. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | Repository 생성 및 JUnit 테스트 (0) | 2025.08.21 |
| 6. [로그인] JWT 인증 인가를 이용한 로그인 구현하기 | Spring Boot / JWT (1) | 2025.08.17 |
| 5. [로그인] SpringSecurity 로그인 구현하기 (5) | 2025.07.08 |
| 4. [로그인] 세션 로그인 구현하기 - Spring/SpringBoot (1) | 2025.07.07 |