๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring๐Ÿ€/API ๊ธฐ๋Šฅ ๊ตฌํ˜„

[SpringBoot] ๋Œ“๊ธ€ API ๊ตฌํ˜„ํ•˜๊ธฐ

by @ENFJ 2024. 4. 4.

๋Œ“๊ธ€ api ๊ตฌํ˜„ํ•˜๊ธฐ

 

๊ฒฐ๊ณผ

 


์—”ํ‹ฐํ‹ฐ(Entity)

> ํŒŒ์ผ๋ช… : Coment.java

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;


@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "noticeComment")
public class Comment {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "notice_id")
    private NoticeEntity notice;

    private String userName;
    private String content;
}

 

import ๋ฌธ:

  • ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

@Getter, @Setter, @AllArgsConstructor, @NoArgsConstructor:

  • Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ, ๊ฐ๊ฐ ํ•„๋“œ์— ๋Œ€ํ•œ getter, setter ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ , ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž์™€ ์ธ์ž ์—†๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

@Entity:

  • JPA(Entity Manager๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Java ORM ๊ธฐ์ˆ )์—์„œ ์—”ํ‹ฐํ‹ฐ์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

@Table(name = "noticeComment"):

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” "noticeComment" ํ…Œ์ด๋ธ”์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

@Id, @GeneratedValue(strategy = GenerationType.IDENTITY):

  • ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ์—”ํ‹ฐํ‹ฐ์˜ ์ฃผํ‚ค(identity key)์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. GenerationType.IDENTITY ์ „๋žต์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜์กดํ•˜์—ฌ ์ฃผํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

private Long id;:

  • ๋Œ“๊ธ€์˜ ์‹๋ณ„์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•„๋“œ์ž…๋‹ˆ๋‹ค.

@ManyToOne(fetch = FetchType.LAZY), @JoinColumn(name = "notice_id"):

  • NoticeEntity์™€์˜ ๋‹ค๋Œ€์ผ(N:1) ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. fetch = FetchType.LAZY๋Š” ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ง€์—ฐ๋กœ๋”ฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. @JoinColumn(name = "notice_id")๋Š” ์™ธ๋ž˜ ํ‚ค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  1. private NoticeEntity notice;:
    • ํ•ด๋‹น ๋Œ“๊ธ€์ด ์–ด๋–ค ๊ณต์ง€์‚ฌํ•ญ์— ์†ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•„๋“œ์ž…๋‹ˆ๋‹ค.
  2. private String userName;:
    • ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•„๋“œ์ž…๋‹ˆ๋‹ค.
  3. private String content;:
    • ๋Œ“๊ธ€์˜ ๋‚ด์šฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•„๋“œ์ž…๋‹ˆ๋‹ค.

DTO

CommentDTO๋Š” ์ฃผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ์˜ ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๋งŒ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class CommentDTO {
    private Long id; // ๋Œ“๊ธ€์˜ ์‹๋ณ„์ž
    private String userName; // ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•œ ์‚ฌ์šฉ์ž ์ด๋ฆ„
    private String content; // ๋Œ“๊ธ€ ๋‚ด์šฉ 
}

 

CommentDTO๋Š” ์ฃผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ์˜ ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๋งŒ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์œ„์˜ CommentDTO๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€ ์กฐํšŒ ์‹œ DTO๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์„œ๋น„์Šค๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ CommentDTO๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ“๊ธ€์„ ์กฐํšŒํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ ์ž…๋‹ˆ๋‹ค.