N+1

๋ž ๋œจยท2025๋…„ 2์›” 14์ผ

๐Ÿ”Ž Overview

ย 3์ฃผ๊ฐ„์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ์Šค์Šค๋กœ ๊ต‰์žฅํžˆ ์–ป์€ ๊ฒŒ ๋งŽ์€ ํ”„๋กœ์ ํŠธ์˜€๋‹ค.
์ดํ›„ ํ”„๋กœ์ ํŠธ ํšŒ๊ณ ์—์„œ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด์ง€๋งŒ, ์–ด๋ ต๊ณ  ํž˜๋“  ์ผ๋“ค๋„ ๋งŽ์•˜์œผ๋‚˜ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์–ด๋А์ •๋„ ๊ดœ์ฐฎ์€ ํ€„๋ฆฌํ‹ฐ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฝ‘์•„๋‚ธ ๋“ฏํ•˜์—ฌ ์กฐ๊ธˆ ๋งˆ์Œ์ด ๋†“์ธ๋‹ค.

ย  ์ด๋ฒˆ ์šฐ๋ฆฌ ํŒ€ ํ”„๋กœ์ ํŠธ ์ฃผ์ œ๋Š” ํ˜ธํ…” ์˜ˆ์•ฝ์ด๋‹ค. ์ด ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์ž๋Š” ํ˜ธํ…” ๋ฐ ๊ฐ์‹ค ๋„๋ฉ”์ธ์˜ ์ž‘์—…์„ ๋งก์•„์„œ ์ง„ํ–‰ํ•˜์˜€๋‹ค.
๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ๊ฐ€์žฅ ๋งŽ์ด ์ƒ๊ฐํ•ด๋ณธ ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ์„ฑ๋Šฅ์ด๋‹ค. ํ˜ธํ…”๊ณผ ๊ฐ์‹ค์ด๋ผ๋Š” ๊ต‰์žฅํžˆ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข€ ๋” ํšจ๊ณผ์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์„๊นŒ.

ย  ์ง€๊ธˆ ํ”„๋กœ์ ํŠธ์—๋Š” default_batch_fetch_size ๊ฐ€ ์ ์šฉ๋˜์–ด์žˆ๋‹ค.
์ฒ˜์Œ์—๋Š” ์ด๊ฑฐ ํ•˜๋‚˜๋กœ N+1 ๋ฌธ์ œ๋ฅผ ์ „๋ถ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์†Œ๋ฆฌ๋ฅผ ๋“ฃ๊ณ  ๋”์šฑ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ฟผ๋ฆฌ ์ƒ์„ฑ์— ์ง‘์ค‘ํ–ˆ์ง€๋งŒ, ๊ฐ•์‚ฌ๋‹˜๊ณผ์˜ Q&A ์ดํ›„๋กœ ๋ฐฐ์น˜๋ฅผ ์ ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

ย  ์ถ”๊ฐ€๋กœ, 1:N ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ์ข‹์„๊นŒ์— ๋Œ€ํ•ด์„œ๋„ ๋งŽ์€ ๊ณ ๋ฏผ์ด ์žˆ์—ˆ๋‹ค.
JOIN ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ Batch Fetching ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•  ์ˆ˜ ์žˆ์„๊นŒ.
DB์—์„œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ๋‚ด๋ถ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ณ€ํ™˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ, DB ์—์„œ ๋ชจ๋“  ์ž‘์—…์„ ๋๋‚ด๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ๋” ์ข‹์„๊นŒ.
์ง€๊ธˆ ์ด ํ”„๋กœ์ ํŠธ์—๋Š” ์–ด๋–ค ๊ฒƒ์ด ๋” ์ข‹์„๊นŒ.

ย  ํ˜„์žฌ๋Š” ํ˜ธํ…”์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ํ˜ธํ…” ์ด๋ฏธ์ง€์˜ ์ธ๋„ค์ผ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด, ์ด๋ฏธ์ง€ DB์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ ์กฐ๊ฑด๋ฌธ์— ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.
์ง€๊ธˆ ๋‹น์žฅ์€ ์‹ฑ๊ธ€ ์„œ๋ฒ„์˜ ์†Œ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์„ ๊ฐ€์ง€๊ณ  ์ง„ํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ–ˆ์ง€๋งŒ, ์ง€๊ธˆ์˜ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์ดํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์›์ธ์ด ๋˜๊ธฐ์— ์ˆ˜์ •ํ•ด์•ผํ•  ๋ถ€๋ถ„์ด๋‹ค.

ย ์ด๋ ‡๋“ฏ, ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ๊ฐ„๋‹จํ•œ CRUD ์ž‘์—…์ผ์ง€๋ผ๋„ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ๊ณ ๋ ค๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ๊ณ ๋ฏผ์ด ํ•„์š”ํ–ˆ๋‹ค.

ย ์•ž์œผ๋กœ ์ˆ˜์—†์ด ์ง๋ฉดํ•  ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ๋”์šฑ ๋” ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, N+1 ์— ๋Œ€ํ•œ ํ™•์‹คํ•œ ํ•™์Šต์ด ํ•„์š”ํ•˜๋‹ค.
ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚œ ๊ธฐ๋…์œผ๋กœ N+1 ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.


๐Ÿ“– N+1 ๋ฌธ์ œ

  • ORM ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ, 1๊ฐœ์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ถ”๊ฐ€์ ์œผ๋กœ N๊ฐœ์˜ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
  • ์ฃผ๋กœ JPA ์™€ ๊ฐ™์€ ORM ์—์„œ, ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ Lazy Loading ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋ฐœ์ƒ
@Entity
@Builder
public class Hotel {
	@Id
    @GeneratedValue(strategy = GenerationType.Identity) // ์ดํ›„ ์ƒ๋žต
    private Long id;
    
    @Column
    private String hotelName;
    
    @OneToMany(mappedBy = "hotel")
    @Builder.Default
    private List<Room> rooms = new ArrayList<>();
}

@Entity
public class Room {
	// ...
    
    private String roomName;
    
    @ManyToOne
    private Hotel hotel;
}
  • ์•Œ๋‹ค์‹œํ”ผ, @OneToMany ์˜ ๊ธฐ๋ณธ FetchType ์€ Lazy
  • hotelRepository.findAll() ๋กœ ์ „์ฒด Hotel ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์‹œ
    • ์—ฌ๊ธฐ์„œ SELECT ์ฟผ๋ฆฌ๊ฐ€ 1๋ฒˆ ๋ฐœ์ƒ
  • Hotel ์—๋Š” ํ˜„์žฌ ์‹ค์ œ Room ๋“ค์˜ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ•ด๋‹น Room ๋“ค์˜ ์ฃผ์†Œ๊ฐ’์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” Proxy ๊ฐ์ฒด๋ฅผ ๊ฐ–๊ณ  ์žˆ์Œ
  • ์ดํ›„ Room ์˜ ์ •๋ณด๋ฅผ ์–ป์œผ๋ ค๊ณ  ํ•  ์‹œ
    • Room ์— ๋Œ€ํ•œ SELECT ์ฟผ๋ฆฌ๋ฅผ ์—ฌ๊ธฐ์„œ ๋‹ค์‹œ ์‹คํ–‰

๊ฒฐ๊ณผ์ ์œผ๋กœ Hotel ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ 1๋ฒˆ, Room ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ N ๋ฒˆ, ์ด N+1 ๋ฒˆ์˜ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋จ

  • ์ฟผ๋ฆฌ์˜ ์ด ๊ฐœ์ˆ˜๊ฐ€ ์ ๋‹ค๋ฉด ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ํฐ ๊ทœ๋ชจ์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ๋œ ์ฟผ๋ฆฌ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ

  • ์ฆ‰, ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ์•„์ฃผ ์ค‘์š”ํ•œ ๋ถ€๋ถ„


๐Ÿ’ก N+1 ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1๏ธโƒฃ. Fetch Join

  • 1:N ์—ฐ๊ด€๊ด€๊ณ„์—์„œ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ
  • ํ•„์š”ํ•  ๋ฐ์ดํ„ฐ๋“ค์„ ๋ชจ๋‘ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
  • N+1 ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•
  • ๋‹จ, ํŽ˜์ด์ง•์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ
  • ๋˜ํ•œ Repsitory ์—์„œ ํ•œ ๋ฒˆ์— DTO ๋กœ ๋ฐ˜ํ™˜ ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
    • ์ด๋Š” Fetch Join ๋ฐฉ์‹์€ ์—”ํ‹ฐํ‹ฐ ๊ทธ๋ž˜ํ”„๋ฅผ ํ•œ ๋ฒˆ์— ๋กœ๋”ฉํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ
    • DTO ํ”„๋กœ์ ์…˜์€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒŒ ์•„๋‹Œ, ํŠน์ • ํ•„๋“œ๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹
    • Fetch Join ์€ ์—”ํ‹ฐํ‹ฐ ์ „์ณฌ๋ฅผ ์กฐํšŒํ•ด์•ผ ๋™์ž‘ํ•˜๋ฏ€๋กœ, DTO ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ

@Query("SELECT h FROM Hotel h JOIN FETCH h.rooms")
List<Hotel> findAllHotels();
  • ์‹ค์ œ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋  ๋•Œ JOIN Room r ON h.id = r.hotel_id ๊ฐ€ ๋ฐœ์ƒ


2๏ธโƒฃ. Batch

  1. @BatchSize ๋ฅผ ํ†ตํ•œ ๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ ์กฐ์ •
@OneToMany(mappedBy = "hotel")
@BatchSize(size = 50)
private List<Room> rooms;

  1. Global ์„ค์ •์„ ํ†ตํ•œ ๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ ์กฐ์ •
spring:
  jpa:
    properties:
      hibernate.default_batch_fetch_size: 50
  • ๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ๋ฅผ 50์œผ๋กœ ๊ณ ์ •
  • SELECT * FROM Room WHERE room_id IN (1, 2, 3.... 49, 50) ๊ฐ™์ด ์‹คํ–‰ ( IN ์ด ์‚ฌ์šฉ๋จ)
  • ํ•œ ๋ฒˆ Hotel ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ 50๊ฐœ์˜ Room ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ด
  • 50๊ฐœ ์ดํ›„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” ๋˜ ๋‹ค์‹œ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ


3๏ธโƒฃ. @EntityGraph

  • Fetch Join ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•
  • ๋ณต์žกํ•œ ๊ฒฝ์šฐ ํ•œ๊ณ„๊ฐ€ ์กด์žฌ
@EntityGraph(attributePaths = {"Room"})
@Query("SELECT h FROM Hotel h JOIN FETCH h.rooms")
List<Hotel> findAllHotels();

๐Ÿ“‘ ์—ฌ๋Ÿฌ ๊ฐœ์˜ @OneToMany

  • ํ•˜๋‚˜์˜ Entity ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ @OneToMany ๊ฐ€ ๋‹ฌ๋ ค์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ
  • ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ 2๊ฐ€์ง€

1๏ธโƒฃ BatchSize ์กฐ์ •

@OneToMany(mappedBy = "hotel")
@BatchSize(size = 50)
private List<Room> rooms;

@OneToMany(mappedBy = "hotel")
@BatchSize(size = 50)
private List<Review> reviews;

ํ˜น์€

spring:
  jpa:
    properties:
      hibernate.default_batch_fetch_size: 50
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ BatchSize ์กฐ์ •์„ ํ†ตํ•ด ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•

2๏ธโƒฃ ์ฟผ๋ฆฌ ๋ถ„๋ฆฌ

  • @OneToMany ๊ด€๊ณ„๋Š” ๋”ฐ๋กœ ์กฐํšŒํ•˜๊ณ , ์ดํ›„์— ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ์กฐ๋ฆฝํ•˜๋Š” ๋ฐฉ์‹

  1. ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ
@Query("""
	SELECT new com.ll.hotel.domain.hotel.hotel.dto.HotelWithImageDto(h, i)
	FROM Hotel h
	LEFT JOIN Image i
	ON i.referenceId = h.id
	AND i.imageType = :imageType
	WHERE h.hotelStatus <> 'UNAVAILABLE'
	AND (i.createdAt = (
		SELECT MIN(i2.createdAt)
		FROM Image i2
		WHERE i2.referenceId = h.id
		AND i2.imageType = :imageType
		)
	OR i is NULL)
	AND h.streetAddress LIKE %:streetAddress%
	""")
Page<HotelWithImageDto> findAllHotels(@Param("imageType") ImageType imageType,
                                          @Param("streetAddress") String streetAddress, PageRequest pageRequest);
  • Image ํ…Œ์ด๋ธ”์˜ ์ด๋ฏธ์ง€ ํƒ€์ž…์ด ํ˜ธํ…”์ธ ์ด๋ฏธ์ง€๋“ค ์ค‘ ํ•ด๋‹นํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ด๋ฏธ์ง€(์ธ๋„ค์ผ)๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ
  • ์ด ์ฟผ๋ฆฌ๋Š” ํ˜„์žฌ๋Š” ๋ฐ์ดํ„ฐ์…‹์ด ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์Œ
  • ํ•˜์ง€๋งŒ ์ดํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ปค์ง€๋ฉด ๋งค ํ˜ธํ…”๋งˆ๋‹ค ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ

  1. ์ด๋ฅผ ๋ถ„๋ฆฌํ•œ ์ฟผ๋ฆฌ
@Query("""
	SELECT h
    FROM Hotel h
    WHERE h.hotelStatus <> 'UNAVAILABLE'
    AND h.streetAddress LIKE %:streetAddress%
    """)
Page<Hotel> findHotels(@Param("streetAddress") String streetAddress, Pageable pageable);

@Query("""
	SELECT i
	FROM Image i
	WHERE i.imageType = :imageType
    AND i.createdAt IN (
    	SELECT MIN(i2.createdAt)
        FROM Image i2
        WHERE i2.referenceId IN :hotelIds
        AND i2.imageType = :imageType
        GROUP BY i2.referenceId
		)
	""")
List<Image> findFirstImages(@Param("imageType") ImageType imageType, @Param("hotelIds") List<Long> hotelIds);
  • ์กฐ๊ฑด์— ๋งž๋Š” ํ˜ธํ…”๋“ค์„ ๋จผ์ € ์กฐํšŒ
  • ํ•ด๋‹นํ•˜๋Š” ํ˜ธํ…”์˜ ID ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•ด๋‹น ํ˜ธํ…”๋“ค์˜ ์ฒซ ๋ฒˆ์งธ ์ด๋ฏธ์ง€๋“ค๋งŒ ๋ฐฐ์น˜๋กœ ์กฐํšŒ
  • ์ดํ›„ ์ด ๋‘ ๊ฒฐ๊ณผ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ๋งค์นญํ•˜์—ฌ HotelWithImageDto ๋กœ ๋ณ€ํ™˜
  • ์ด๋ ‡๊ฒŒ ๋˜๋ฉด, ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ํ˜ธํ…”๋งˆ๋‹ค ์ค‘๋ณต ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์„ฑ๋Šฅ์˜ ์ด์ ์ด ์žˆ์Œ
  • ํ˜„์žฌ๋Š” ๋ฐ์ดํ„ฐ์…‹์ด ๋งŽ์ง€ ์•Š๊ณ  ์‹ค์ œ ์„œ๋น„์Šค๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์ ํŠธ ๋ ˆ๋ฒจ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ฟผ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์Œ
  • ๋ฐ์ดํ„ฐ์…‹์ด ๊ทธ๋ ‡๊ฒŒ ํฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒŒ ๋” ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ํŒ๋‹จ
  • 3์ฐจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋” ์ƒ๊ฐํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Œ
  • ํ˜„๋Œ€ ๊ณผํ•™์˜ ๋ฐœ์ „์œผ๋กœ ์ธํ•ด ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์ฑ™๊ธฐ๋Š” ๊ฒŒ ์›ฌ๋งŒํ•ด์„  ์ข‹์„ ๊ฒƒ์œผ๋กœ ํŒ๋‹จ ์ค‘

์ฐธ๊ณ ) OpenAI. (2024).ChatGPT(4o)[Large language model].https://chatgpt.com/

profile
๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€