게시판에 댓글을 생성, 조회, 수정, 삭제하는 댓글 CRUD 기능을 구현한다.
14.1 댓글 기능의 개요
14.1.1 댓글과 게시글의 관계
one-to-many(일대다) 관계: 하나의 게시글에 여러 댓글이 달린다. (댓글 입장에서는 다대일)
article 테이블과 comment 테이블
📍article테이블
📍comment 테이블
➡️ article 테이블과 comment 테이블이 id 기준으로 관계를 맺고 있다.
- 대표키(PK, Primary Key, 기본키): 자신을 대표하는 id처럼 자신을 대표하는 속성
- 대표키는 동일 테이블 내 중복값이 없어야 함
- 외래키(FK, Foreign Key): 연관 대상을 가리키는 속성
- comment 테이블에는 연관 대상을 가리키는 article_id가 더 있다.
- 외래키를 따라가면 해당 댓글이 어떤 게시글에 달린 것인지 알 수 있다.
- 외래키는 항상 연관된 테이블의 대표키를 가리킨다.
14.1.2 댓글 엔티티와 리포지토리 설계
✔️ JPA(Java Persistence API): 자바로 DB에 명령을 내리게 하는 도구. 데이터를 객체 지향적으로 다루는 기술이다.
- 엔티티: DB 데이터를 담는 자바 객체로, 엔티티 기반으로 테이블이 생성된다.
- 리포지토리: 엔티티를 관리하는 인터페이스로, 데이터 CRUD의 기능 제공
↑
CommentRepository도 만들어야 하는데, CrudRepository가 아닌 JpaRepository 상속받는다.
✔️ JpaRepository: ListCurdRepository와 ListPagingAndSortingRepository를 상속받은 인터페이스
- CRUD 기능
- 엔티티를 페이지 단위로 조회 및 정렬하는 기능
- JPA에 특화된 여러 기능
✔️ 각 인터페이스의 기능
- Repository: 최상위 리포지토리 인터페이스
- CrudRepository 및 ListCrudRepository: 엔티티의 CRUD 기능 제공
- PagingAndSortingRepository 및 ListPagingAndSortingRepository: 엔티티의 페이징 및 정렬 기능
- JpaRepository: 엔티티의 CRUD기능과 페이징 및 정렬 기능, JPA에 특화된 기능 추가 제공
14.2 댓글 엔티티 만들기
14.2.1 댓글 엔티티 만들기
package com.example.firstproject.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Entity
@Getter // 각 필드 값을 조회할 수 있는 getter 메서드 자동 생성
@ToString // 모든 필드를 출력할 수 있는 toString메서드 자동 생성
@AllArgsConstructor // 모든 필드(멤버 변수)를 매개변수로 갖는 생성자 자동 생성
@NoArgsConstructor // 매개변수가 아예 없는 기본 생성자 자동 생성
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // DB가 자동으로 1씩 증가
private Long id;
@ManyToOne // comment 엔티티와 article엔티티는 다대일 관계!
@JoinColumn(name="article_id") // 외래키 매핑(article의 대표키인 id와 매핑)
private Article article; // 해당 댓글의 부모 게시물
@Column // 해당 필드를 테이블의 속성으로 매핑
private String nickname; // 댓글 단 사람
@Column
private String body; // 댓글 본문
}
✔️ Comment 엔티티 만들었으므로 테이블 생성
➡️ id, body, nickname, article_id 열을 가진 comment 테이블이 만들어진 것을 확인할 수 있다!
14.2.2 댓글 조회 쿼리 연습하기
📍특정 게시글의 모든 댓글 조회
📍특정 닉네임의 모든 댓글 조회
'CS > 스프링부트3 자바 백엔드 개발 입문' 카테고리의 다른 글
[REST API와 테스트 코드 작성하기] 13장 | 테스트 코드 작성하기 (0) | 2025.03.06 |
---|---|
[REST API와 테스트 코드 작성하기] 12장 | 서비스 계층과 트랜잭션 (0) | 2025.03.05 |
[REST API와 테스트 코드 작성하기] 11장 | HTTP와 REST 컨트롤러 (0) | 2025.03.01 |
[REST API와 테스트 코드 작성하기] 10장 | REST API와 JSON (0) | 2025.02.27 |
[게시판 CRUD 만들기] 9장 | CRUD와 SQL 쿼리 종합 (0) | 2025.02.27 |