PrismaORM GetPayload Generic Typing

aliases
No value
tags
No value
description
No value
status
No value
project
false
area
false
resource
true
title
PrismaORM GetPayload Generic Typing
created
2026-01-09T14:46:24
updated
2026-01-09T14:50:12

Prisma GetPayload ๊ธฐ๋ฐ˜ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ํƒ€์ž… ์ •์˜ ๊ฐ€์ด๋“œ

1. ๋ฌธ์„œ ๋ชฉ์ 

์ด ๋ฌธ์„œ๋Š” Prisma Client ์‚ฌ์šฉ ์‹œ
Prisma.<Model>GetPayload<T> ํƒ€์ž…์„ ์–ด๋–ป๊ฒŒ, ์™œ, ์–ด๋””๊นŒ์ง€ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ช…ํ™•ํžˆ ๊ทœ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์„œ๋‹ค.

ํŠนํžˆ ๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.


2. ๋ฌธ์ œ ์ •์˜: Prisma ๋ชจ๋ธ ํƒ€์ž…์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ํƒ€์ž…์ด ์•„๋‹ˆ๋‹ค

Prisma๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

import { TicketHistory } from '@prisma/client';

์ด ํƒ€์ž…์€ ๋‹ค์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

์ฆ‰, ์ด ํƒ€์ž…์€ โ€œํ…Œ์ด๋ธ” ์ •์˜โ€ ์ด์ง€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๊ฐ€ ์•„๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด ํƒ€์ž…์„ Service / UseCase / Controller์—์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ ,
์ด ์‹œ์ ๋ถ€ํ„ฐ ํƒ€์ž… ์•ˆ์ •์„ฑ์€ ์‚ฌ์‹ค์ƒ ํฌ๊ธฐ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.


3. GetPayload<T>์˜ ์—ญํ• ๊ณผ ์ฑ…์ž„

3.1 ์ •์ฒด์„ฑ

Prisma.<Model>GetPayload<T>

์ด ํƒ€์ž…์€ ๋‹ค์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

Prisma Client๊ฐ€ ํŠน์ • ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฐ๊ณผ ๊ฐ์ฒด์˜ ์ •ํ™•ํ•œ ํƒ€์ž…

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€:


3.2 ์ œ๋„ค๋ฆญ T์˜ ์˜๋ฏธ

T๋Š” Prisma query argument์˜ ํƒ€์ž…์  ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋‹ค.

{
  select?: ...
  include?: ...
}

4. ์˜ˆ์ œ ๋ถ„์„

export type TicketHistoryWithRecordingConsents =
  Prisma.TicketHistoryGetPayload<{
    include: {
      recordingConsent: {
        select: {
          phone: true;
          consent: true;
        };
      };
    };
  }>;

์ด ํƒ€์ž…์€ ๋‹ค์Œ์„ ํƒ€์ž… ๋ ˆ๋ฒจ์—์„œ ์„ ์–ธํ•œ๋‹ค.

์ฆ‰, ์ด ํƒ€์ž…์€ ๋‹ค์Œ Prisma ์ฟผ๋ฆฌ์™€ 1:1 ๋Œ€์‘ํ•œ๋‹ค.

prisma.ticketHistory.findMany({
  include: {
    recordingConsent: {
      select: { phone: true, consent: true },
    },
  },
});

์ด ๋Œ€์‘ ๊ด€๊ณ„๊ฐ€ ๊นจ์ง€๋Š” ์ˆœ๊ฐ„, ํƒ€์ž… ์ •์˜๋Š” ์ž˜๋ชป๋œ ๊ฒƒ์ด๋‹ค.


5. include์™€ select์˜ ์—ญํ•  ๋ถ„๋ฆฌ

5.1 include

5.2 select

5.3 ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜คํ•ด


6. Nullable ๊ด€๊ณ„์— ๋Œ€ํ•œ ์ธ์‹

Prisma์—์„œ ๊ด€๊ณ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ nullable์ด๋‹ค.

recordingConsent: {
  phone: string;
  consent: boolean;
} | null

์ด | null์€ ํƒ€์ž… ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ ํ˜„์‹ค ๋ฐ˜์˜์ด๋‹ค.

ํƒ€์ž…์€ ๊ฑฐ์ง“๋ง์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
๊ฑฐ์ง“๋ง์„ ํ•˜๋Š” ๊ฑด ๊ฐœ๋ฐœ์ž๋‹ค.


7. ์‚ฌ์šฉ ์œ„์น˜ ๊ฐ€์ด๋“œ๋ผ์ธ

7.1 ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ณณ

์ด ํƒ€์ž…์€ **โ€œ์กฐํšŒ ๊ฒฐ๊ณผ ๋ช…์„ธโ€**๋กœ ์‚ฌ์šฉํ•œ๋‹ค.


7.2 ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๊ณณ

GetPayload๋Š” Prisma์— ์ข…์†๋œ ํƒ€์ž…์ด๋‹ค.
๋„๋ฉ”์ธ์œผ๋กœ ์˜ฌ๋ผ์˜ค๋Š” ์ˆœ๊ฐ„, ์˜์กด์„ฑ ์—ญ์ „ ์›์น™์ด ๊นจ์ง„๋‹ค.


8. ๋„ค์ด๋ฐ ๊ทœ์น™ (๊ฐ•์ œ)

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์€ ํ”ผํ•œ๋‹ค.

TicketHistoryWithSomething

์ด๋ฆ„๋งŒ ๋ณด๊ณ :

ํŒ๋‹จ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ถŒ์žฅ ํŒจํ„ด

TicketHistoryWithRecordingConsentRow
TicketHistoryRecordingConsentProjection
TicketHistoryWithRecordingConsentForAdminQuery

**โ€œ์ฟผ๋ฆฌ ์ปจํ…์ŠคํŠธโ€ ๋˜๋Š” โ€œ์ฝ๊ธฐ ๋ชฉ์ โ€**์ด ๋ฐ˜๋“œ์‹œ ๋“œ๋Ÿฌ๋‚˜์•ผ ํ•œ๋‹ค.


9. ์ด ํƒ€์ž…์˜ ๋ณธ์งˆ

์ •๋ฆฌํ•˜๋ฉด ์ด ํƒ€์ž…์€:

์ด๋‹ค.

์ด ํƒ€์ž…์€ ์˜ค์ง ํ•˜๋‚˜๋‹ค.

โ€œ์ด ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ณ„์•ฝ์„œโ€

์ฟผ๋ฆฌ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ํƒ€์ž…๋„ ๋ฐ”๋€Œ์–ด์•ผ ํ•œ๋‹ค.
ํƒ€์ž…์ด ๊ณ ์ •๋˜๊ธธ ์›ํ•œ๋‹ค๋ฉด, ๊ทธ๊ฑด ์ด๋ฏธ DTO ๊ณ„์ธต์˜ ์ฑ…์ž„์ด๋‹ค.


10. ๊ฒฐ๋ก 

ํƒ€์ž…์€ ํŽธ์˜๋ฅผ ์œ„ํ•ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
์˜๋„๋ฅผ ๊ณ ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค.


๋‹ค์Œ์œผ๋กœ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ฃผ์ œ๋Š” ๋ช…ํ™•ํ•˜๋‹ค.

Connected Pages
PrismaORM GetPayload Generic Typing
Prisma GetPayload ๊ธฐ๋ฐ˜ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ํƒ€์ž… ์ •์˜ ๊ฐ€์ด๋“œ
  • 1. ๋ฌธ์„œ ๋ชฉ์ 
  • 2. ๋ฌธ์ œ ์ •์˜: Prisma ๋ชจ๋ธ ํƒ€์ž…์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ํƒ€์ž…์ด ์•„๋‹ˆ๋‹ค
  • 3. GetPayload์˜ ์—ญํ• ๊ณผ ์ฑ…์ž„
    1. 3.1 ์ •์ฒด์„ฑ
    2. 3.2 ์ œ๋„ค๋ฆญ T์˜ ์˜๋ฏธ
  • 4. ์˜ˆ์ œ ๋ถ„์„
  • 5. include์™€ select์˜ ์—ญํ•  ๋ถ„๋ฆฌ
    1. 5.1 include
    2. 5.2 select
    3. 5.3 ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์˜คํ•ด
  • 6. Nullable ๊ด€๊ณ„์— ๋Œ€ํ•œ ์ธ์‹
  • 7. ์‚ฌ์šฉ ์œ„์น˜ ๊ฐ€์ด๋“œ๋ผ์ธ
    1. 7.1 ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ณณ
    2. 7.2 ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๊ณณ
  • 8. ๋„ค์ด๋ฐ ๊ทœ์น™ (๊ฐ•์ œ)
    1. ๊ถŒ์žฅ ํŒจํ„ด
  • 9. ์ด ํƒ€์ž…์˜ ๋ณธ์งˆ
  • 10. ๊ฒฐ๋ก