Pipes
Last updated
Last updated
νμ΄νλ @Injectable()
λ°μ½λ μ΄ν°λ‘ μ£Όμμ΄ λ¬λ¦° ν΄λμ€μ
λλ€. νμ΄νλ PipeTransform
μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ ν©λλ€.
νμ΄νμλ λ κ°μ§ μΌλ°μ μΈ μ¬μ© μ¬λ‘κ° μμ΅λλ€.
transformation: μ λ ₯ λ°μ΄ν°λ₯Ό μνλ μΆλ ₯μΌλ‘ λ³ν
validation: μ λ ₯ λ°μ΄ν°λ₯Ό νκ°νκ³ μ ν¨νλ€λ©΄ λ³κ²½μμ΄ κ·Έλλ‘ μ λ¬νμμμ€. κ·Έλ μ§ μμΌλ©΄ λ°μ΄ν°κ° μ ννμ§ μμ λ μμΈλ₯Ό λμ§λλ€
λ κ²½μ° λͺ¨λ νμ΄νλ 컨νΈλ‘€λ¬ κ²½λ‘ μ²λ¦¬κΈ°μ μν΄ μ²λ¦¬λλ μΈμ
μμ μλν©λλ€. Nestλ λ©μλκ° νΈμΆλκΈ° μ§μ μ νμ΄νλ₯Ό μ½μ
νκ³ νμ΄νλ λ©μλλ‘ ν₯νλ μΈμλ₯Ό μμ ν©λλ€. μ΄ μμ μμ λͺ¨λ λ³ν λλ μ ν¨μ± κ²μ¬ μμ
μ΄ μν λ ν (μ μ¬μ μΌλ‘) λ³ν λ μΈμλ₯Ό μ¬μ©νμ¬ κ²½λ‘ μ²λ¦¬κΈ°κ° νΈμΆλ©λλ€.
info ννΈ νμ΄νλ μμΈ μμ λ΄μμ μλν©λλ€. μ΄κ²μ νμ΄νκ° μμΈλ₯Ό λμ§ λ μμΈ κ³μΈ΅ (μ μ μμΈ νν° λ° νμ¬ μ»¨ν μ€νΈμ μ μ©λλ μμΈ νν°μ μν΄ μ²λ¦¬λ¨μ μλ―Έν©λλ€. μμ κ°μ΄ νμ΄νμμ μμΈκ° λ°μνλ©΄ μ΄νμ 컨νΈλ‘€λ¬ λ©μλκ° μ€νλμ§ μμ΅λλ€.
Nestμλ μ¦μ μ¬μ© κ°λ₯ν 3 κ°μ§ νμ΄ν (ValidationPipe), ParseIntPipe λ° ParseUUIDPipeκ° μμ΅λλ€. κ·Έκ²λ€μ @nestjs/common
ν¨ν€μ§μμ λ΄λ³΄λ΄μ§λλ€. κ·Έλ€μ΄ μ΄λ»κ² μλνλμ§ λ μ μ΄ν΄νκΈ° μν΄ μ²μλΆν° λ€μ λ§λ€μ΄ λ΄
μλ€.
ValidationPipe
λΆν° μμνκ² μ΅λλ€. μ²μμλ λ¨μν μ
λ ₯ κ°μ κ°μ Έ μμ λμΌ κΈ°λ₯μΌλ‘ λμνλ κ°μ κ°μ μ¦μ λ°νν©λλ€.
info ννΈ
PipeTransform <T, R>
μT
κ° μ λ ₯value
μ μ νμ λνλ΄κ³R
μtransform()
λ©μλμ λ¦¬ν΄ μ νμ λνλ΄λ μΌλ° μΈν°νμ΄μ€μ λλ€.
λͺ¨λ νμ΄νλ transform()
λ©μλλ₯Ό μ 곡ν΄μΌ ν©λλ€. μ΄ λ°©λ²μλ λ κ°μ§ λ§€κ° λ³μκ° μμ΅λλ€.
value
metadata
value
λ νμ¬ μ²λ¦¬ λ μΈμ (λΌμ°νΈ μ²λ¦¬ λ°©λ²μ μν΄ μμ λκΈ° μ μ)μ΄λ©° metadata
λ λ©ν λ°μ΄ν°μ
λλ€. λ©ν λ°μ΄ν° κ°μ²΄μλ λ€μκ³Ό κ°μ μμ±μ΄ μμ΅λλ€.
μ΄λ¬ν μμ±μ νμ¬ μ²λ¦¬ λ μΈμλ₯Ό μ€λͺ ν©λλ€.
warning κ²½κ³ λ³ν μ€μ TypeScript μΈν°νμ΄μ€κ° μ¬λΌμ§λλ€. λ°λΌμ λ©μλ λ§€κ° λ³μμ μ νμ΄ ν΄λμ€ λμ μΈν°νμ΄μ€λ‘ μ μΈλλ©΄
metatype
κ°μObject
κ°λ©λλ€.
CatsController
μ create()
λ©μλλ₯Ό μμΈν μ΄ν΄ 보μ.
createCatDto
λ³Έλ¬Έ λ§€κ° λ³μμ μ΄μ μ λ§μΆκ² μ΅λλ€. μ νμ CreateCatDto
μ
λλ€.
create λ©μλλ‘ λ€μ΄μ€λ λͺ¨λ μμ²μ μ ν¨ν λ³Έλ¬Έμ΄ ν¬ν¨λλλ‘ ν©λλ€. λ°λΌμ createCatDto κ°μ²΄μ μΈ λ©€λ²λ₯Ό νμΈν΄μΌν©λλ€. λΌμ°νΈ νΈλ€λ¬ λ©μλ λ΄μμ μ΄λ₯Ό μν ν μ μμ§λ§ SRP (λ¨μΌ μ± μ κ·μΉ)λ₯Ό μλ°ν©λλ€. λ λ€λ₯Έ λ°©λ²μ μ ν¨μ± κ²μ¬ ν΄λμ€λ₯Ό μμ±νκ³ κ±°κΈ°μμ μμ μ μμνλ κ²μ΄μ§λ§ κ° λ°©λ²μ μμ λΆλΆμμ μ΄ μ ν¨μ± κ²μ¬κΈ°λ₯Ό μ¬μ©ν΄μΌν©λλ€. μ ν¨μ± κ²μ¦ λ―Έλ€μ¨μ΄λ₯Ό μμ±νλ κ²μ μ΄λ»μ΅λκΉ? μ΄ λ°©λ²μ μ’μ μμ΄λμ΄μΌ μ μμ§λ§ μ 체 μ ν리μΌμ΄μ μμ μ¬μ©ν μμλ μΌλ° λ―Έλ€μ¨μ΄λ₯Ό μμ± ν μλ μμ΅λλ€ (λ―Έλ€μ¨μ΄λ νΈμΆλ νΈλ€λ¬ λ° κ·Έ λ§€κ° λ³μ μ€ νλ).
μ΄κ²μ νμ΄νμ μ΄μμ μΈ κ²½μ° μΈ κ²μΌλ‘ νλͺ λμμ΅λλ€. κ³μν΄μ νλ λ§λ€μ΄ λ΄ μλ€.
κ°μ²΄ μ ν¨μ± κ²μ¬μ μ¬μ©ν μμλ λͺ κ°μ§ λ°©λ²μ΄ μμ΅λλ€. ν κ°μ§ μΌλ°μ μΈ μ κ·Ό λ°©μμ μ€ν€λ§ κΈ°λ° μ ν¨μ± κ²μ¬λ₯Ό μ¬μ©νλ κ²μ λλ€. Joi λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ μ½μ μ μλ APIλ₯Ό μ¬μ©νμ¬ λ§€μ° κ°λ¨ν λ°©μμΌλ‘ μ€ν€λ§λ₯Ό λ§λ€ μ μμ΅λλ€. Joi κΈ°λ° μ€ν€λ§λ₯Ό μ¬μ©νλ νμ΄νλ₯Ό μ΄ν΄ λ³΄κ² μ΅λλ€.
νμν ν¨ν€μ§λ₯Ό μ€μΉνμ¬ μμνμμμ€.
μλ μ½λ μνμμ μ€ν€λ§λ₯Ό μμ±μ
μΈμλ‘ μ·¨νλ κ°λ¨ν ν΄λμ€λ₯Ό λ§λλλ€. κ·Έλ° λ€μ Joi.validate()
λ©μλλ₯Ό μ μ©νλ©΄ μ 곡λ μ€ν€λ§μ λν΄ λ€μ΄μ€λ μΈμμ μ ν¨μ±μ κ²μ¬ν©λλ€.
μμμ μΈκΈνλ―μ΄ μ ν¨ νμ΄ν(Validation Pipe)λ κ°μ λ³κ²½νμ§ μκ³ λ°ννκ±°λ μμΈλ₯Ό λ°μμν΅λλ€.
λ€μ μΉμ
μμλ @UsePipes()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ μ£Όμ΄μ§ 컨νΈλ‘€λ¬ λ©μλμ μ μ ν μ€ν€λ§λ₯Ό μ 곡νλ λ°©λ²μ μ΄ν΄ λ΄
λλ€.
νμ΄νλ₯Ό λ°μΈλ© (μ μ ν 컨νΈλ‘€λ¬ λ νΈλ€λ¬μ μ°κ²°)νλ κ²μ λ§€μ° κ°λ¨ν©λλ€. μ°λ¦¬λ @UsePipes()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νκ³ νμ΄ν μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ Joi μ ν¨μ± κ²μ¬ μ€ν€λ§λ₯Ό μ λ¬ν©λλ€.
warning κ²½κ³ μ΄ μΉμ μ κΈ°μ μλ TypeScriptκ° νμνλ©° μ±μ΄ vanilla JavaScriptλ₯Ό μ¬μ©νμ¬ μμ±λ κ²½μ°μλ μ¬μ©ν μ μμ΅λλ€.
κ²μ¦ κΈ°μ μ λ체 ꡬνμ μ΄ν΄ λ΄ λλ€.
Nestλ class-validator λΌμ΄λΈλ¬λ¦¬μ μ μλν©λλ€. μ΄ λλΌμ΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ λ°μ½λ μ΄ν° κΈ°λ° κ²μ¦μ μ¬μ©ν μ μμ΅λλ€. λ°μ½λ μ΄ν° κΈ°λ° κ²μ¦μ μ²λ¦¬λ μμ±μ λ©ν νμ
(metatype)
μ μ‘μΈμ€ν μ μκΈ° λλ¬Έμ νΉν Nestμ νμ΄ν κΈ°λ₯κ³Ό κ²°ν©λ λ λ§€μ° κ°λ ₯ν©λλ€. μμνκΈ° μ μ νμν ν¨ν€μ§λ₯Ό μ€μΉν΄μΌν©λλ€.
μ΄κ²λ€μ΄ μ€μΉλλ©΄, CreateCatDto
ν΄λμ€μ λ°μ½λ μ΄ν° λͺ κ°λ₯Ό μΆκ° ν μ μμ΅λλ€.
Info ννΈ ν΄λμ€ μ ν¨μ± κ²μ¬κΈ° λ°μ½λ μ΄ν°μ λν μμΈν λ΄μ©μ μ¬κΈ°λ₯Ό μ°Έμ‘°νμμμ€.
μ΄μ ValidationPipe
ν΄λμ€λ₯Ό λ§λ€ μ μμ΅λλ€.
warning μλ¦Ό μμμ, μ°λ¦¬λ class-transformer λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ΅λλ€. class-validator λΌμ΄λΈλ¬λ¦¬μ λμΌν μ μμ μν΄ λ§λ€μ΄ μ‘μΌλ―λ‘ κ²°κ³Όμ μΌλ‘ λ§€μ° μ μλν©λλ€.
μ΄ μ½λλ₯Ό μ΄ν΄ λ³΄κ² μ΅λλ€. λ¨Όμ , transform()
ν¨μλ async
μ
λλ€. Nestλ λκΈ°μ νμ΄νμ λΉλκΈ°μ νμ΄νλ₯Ό λͺ¨λ μ§μνκΈ° λλ¬Έμ κ°λ₯ν©λλ€. μ°λ¦¬λ ν΄λμ€ μ ν¨μ± κ²μ¬κΈ° μ ν¨μ± κ²μ¬ μ€ μΌλΆκ° λΉλκΈ° μΌ μ μκΈ° λλ¬Έ (μ½μ νμ©)μ μ΄λ₯Ό μνν©λλ€.
λ€μμΌλ‘ μ°λ¦¬λ λ©ν νμ
νλ (ArgumentMetadata
μμ μ΄ λ©€λ²λ₯Ό μΆμΆ)λ₯Ό metatype
νλΌλ―Έν°λ‘ μΆμΆνκΈ° μν΄ κ΅¬μ‘° μ‘°μ μ μ¬μ©νκ³ μμ΅λλ€. μ΄κ²μ μμ ν ArgumentMetadata
λ₯Ό μ»μ λ€μ λ©ν νμ
λ³μλ₯Ό ν λΉνκΈ° μν μΆκ° λͺ
λ Ήλ¬Έμ κ°λ κ²μ λν κ°λ¨ν μ€λͺ
μ
λλ€.
λ€μμΌλ‘ ν¬νΌ ν¨μ toValidate()
μ μ£Όλͺ©νμμμ€. μ²λ¦¬μ€μΈ νμ¬ μΈμκ° κΈ°λ³Έ JavaScript μ νμΈ κ²½μ° μ ν¨μ± κ²μ¦ λ¨κ³λ₯Ό μλ΅ν΄μΌ ν©λλ€ (μ€ν€λ§λ₯Ό μ²¨λΆ ν μ μμΌλ―λ‘ μ ν¨μ± κ²μ¦ λ¨κ³λ₯Ό ν΅ν΄ μ€ν€λ§λ₯Ό μ€νν μ΄μ κ° μμ΅λλ€).
λ€μμΌλ‘ ν΄λμ€ λ³νκΈ° ν¨μ plainToClass()
λ₯Ό μ¬μ©νμ¬ μΌλ° JavaScript μΈμ κ°μ²΄λ₯Ό μ νμ΄ μ§μ λ κ°μ²΄λ‘ λ³ννμ¬ μ ν¨μ± κ²μ¬λ₯Ό μ μ© ν μ μμ΅λλ€. λ€νΈμν¬ μμ²μμ μ μ§λ ¬νλλ μμ λ³Έλ¬Έμλ μ ν μ λ³΄κ° μμ΅λλ€. ν΄λμ€ μ ν¨μ± κ²μ¬κΈ°λ μ΄μ μ DTOμ λν΄ μ μν μ ν¨μ± κ²μ¬ λ°μ½λ μ΄ν°λ₯Ό μ¬μ©ν΄μΌ νλ―λ‘ μ΄ λ³νμ μνν΄μΌ ν©λλ€.
λ§μ§λ§μΌλ‘ μμμ μΈκΈνλ―μ΄ μ ν¨ νμ΄ν(Validation Pipe)μ΄λ―λ‘ λ³κ²½λμ§ μμ κ°μ λ°ννκ±°λ μμΈλ₯Ό λ°μμν΅λλ€.
λ§μ§λ§ λ¨κ³λ ValidationPipe
λ₯Ό λ°μΈλ©νλ κ²μ
λλ€. μμΈ νν°μ μ μ¬ν νμ΄νλ λΆμλ² λ²μ, 컨νΈλ‘€λ¬ λ²μ λλ μ μ λ²μμΌ μ μμ΅λλ€. λν νμ΄νλ₯Ό λ§€κ° λ³μ λ²μλ‘ μ§μ ν μ μμ΅λλ€. μλ μμμ νμ΄ν μΈμ€ν΄μ€λ₯Ό κ²½λ‘ λ§€κ° λ³μ @Body()
λ°μ½λ μ΄ν°μ μ§μ μ°κ²°ν©λλ€.
λ§€κ° λ³μ λ²μ νμ΄νλ μ ν¨μ± κ²μ¦ λ‘μ§μ΄ νλμ μ§μ λ λ§€κ° λ³μμλ§ κ΄λ ¨λ λ μ μ©ν©λλ€.
λλ λ©μλ λ 벨μμ νμ΄νλ₯Ό μ€μ νλ €λ©΄ @UsePipes()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμμμ€.
info ννΈ
@UsePipes()
λ°μ½λ μ΄ν°λ@nestjs/common
ν¨ν€μ§μμ κ°μ Έμ΅λλ€.
μμ μμμ ValidationPipe
μΈμ€ν΄μ€κ° μ¦μ μμ±λμμ΅λλ€. λλ ν΄λμ€ (μΈμ€ν΄μ€ μλ)λ₯Ό μ λ¬νμ¬ μΈμ€ν΄μ€νλ₯Ό νλ μ μν¬μ λ¨κ²¨λκ³ μ’
μ μ£Όμ
μ νμ±νν©λλ€.
ValidationPipe
λ κ°λ₯ν ν μΌλ°μ μΌλ‘ λ§λ€μ΄ μ‘μΌλ―λ‘ μ 체 μμ© νλ‘κ·Έλ¨μ λͺ¨λ κ²½λ‘ μ²λ¦¬κΈ°μ μ μ©λλ global-scoped νμ΄νλ‘ μ€μ ν΄ λ΄
μλ€.
warning μλ¦Ό νμ΄λΈλ¦¬λ μ±μ κ²½μ°
useGlobalPipes()
λ©μλλ κ²μ΄νΈμ¨μ΄ λ° λ§μ΄ν¬λ‘ μλΉμ€μ λν νμ΄νλ₯Ό μ€μ νμ§ μμ΅λλ€. "νμ€"(νμ΄λΈλ¦¬λκ° μλ) λ§μ΄ν¬λ‘ μλΉμ€ μ±μ κ²½μ°useGlobalPipes()
λ νμ΄νλ₯Ό μ 체μ μΌλ‘ λ§μ΄νΈν©λλ€.
μ μ νμ΄νλ λͺ¨λ 컨νΈλ‘€λ¬μ λͺ¨λ κ²½λ‘ μ²λ¦¬κΈ°μ λν΄ μ 체 μμ© νλ‘κ·Έλ¨μμ μ¬μ©λ©λλ€. μμ‘΄μ± μ£Όμ
μ κ΄μ μμ, λͺ¨λ μΈλΆμμ λ±λ‘λ μ μ νμ΄ν (μμ μμμμ κ°μ΄ useGlobalPipes()
λ‘)λ λͺ¨λμ 컨ν
μ€νΈ λ°μμ μνλκΈ° λλ¬Έμ μμ‘΄μ±μ μ£Όμ
ν μ μμ΅λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ€μ ꡬμ±μ μ¬μ©νμ¬ λͺ¨λ λͺ¨λμμ μ§μ κΈλ‘λ² νμ΄νλ₯Ό μ€μ ν μ μμ΅λλ€.
info ννΈ νμ΄νμ λν μμ‘΄μ± μ£Όμ μ μννκΈ° μν΄ μ΄ μ κ·Ό λ°©μμ μ¬μ©ν λ, μ΄ κ΅¬μ±μ΄ μ¬μ©λλ λͺ¨λμ κ΄κ³μμ΄ νμ΄νλ μ€μ λ‘ κΈλ‘λ²μ λλ€. μ΄λμμ ν΄μΌ ν©λκΉ? νμ΄ν (μμ μμμλ
ValidationPipe
)κ° μ μλ λͺ¨λμ μ ννμμμ€. λν 컀μ€ν νλ‘ λ°μ΄λ λ±λ‘μ λ€λ£¨λ μ μΌν λ°©λ²μuseClass
κ° μλλλ€. μ¬κΈ°μ λν΄ μμΈν μμ보μμμ€.
νμ΄ν(Pipes)μ μ μΌν μ¬μ© μ¬λ‘λ μλλλ€. μ΄ μ₯μ μμ λΆλΆμμ νμ΄νλ μ
λ ₯ λ°μ΄ν°λ₯Ό μνλ μΆλ ₯μΌλ‘ λ³ν ν μ μλ€κ³ μΈκΈνμ΅λλ€. transform
ν¨μμμ λ°νλ κ°μ΄ μΈμμ μ΄μ κ°μ μμ ν 무μνκΈ° λλ¬Έμ κ°λ₯ν©λλ€. μΈμ μ μ©νκ°μ? κ²½μ°μ λ°λΌ ν΄λΌμ΄μΈνΈμμ μ λ¬λ λ°μ΄ν°λ κ²½λ‘ μ²λ¦¬κΈ° λ©μλμμ μ¬λ°λ₯΄κ² μ²λ¦¬νκΈ° μ μ λ¬Έμμ΄μ μ μλ‘ λ³ννλ κ²κ³Ό κ°μ΄ μ½κ°μ λ³κ²½μ΄ νμν©λλ€. λν μΌλΆ νμ λ°μ΄ν° νλκ° λλ½λμ΄ κΈ°λ³Έκ°μ μ μ©νλ €κ³ ν©λλ€. λ³νκΈ° νμ΄νλ ν΄λΌμ΄μΈνΈ μμ²κ³Ό μμ² νΈλ€λ¬ μ¬μ΄μ μ²λ¦¬ κΈ°λ₯μ μ½μ
νμ¬ μ΄λ¬ν κΈ°λ₯μ μν ν μ μμ΅λλ€.
λ€μμ λ¬Έμμ΄μ μ μ κ°μΌλ‘ ꡬ문 λΆμνλ ParseIntPipe
μ
λλ€.
μ΄ νμ΄νλ₯Ό μλ κ·Έλ¦Όκ³Ό κ°μ΄ μ νν λ§€κ° λ³μμ κ°λ¨ν μ°κ²°ν μ μμ΅λλ€.
μνλ κ²½μ° λ¬Έμμ΄μ ꡬ문 λΆμνκ³ UUIDμΈμ§ νμΈνλ ParseUUIDPipe
λ₯Ό μ¬μ©ν μ μμ΅λλ€.
info ννΈ
ParseUUIDPipe()
λ₯Ό μ¬μ©ν λ λ²μ 3, 4 λλ 5μμ UUIDλ₯Ό ꡬ문 λΆμνλ μ€μ λλ€. νΉμ λ²μ μ UUID λ§ νμν κ²½μ° νμ΄ν μ΅μ μμ λ²μ μ μ λ¬ν μ μμ΅λλ€.
μ΄λ₯Ό μ¬μ©νλ©΄ μμ²μ΄ ν΄λΉ νΈλ€λ¬μ λλ¬νκΈ° μ μ ParseIntPipe
λλ ParseUUIDPipe
κ° μ€νλμ΄ id
λ§€κ° λ³μμ λν΄ νμ μ¬μ©λ νμ΄νμ λ°λΌ μ μ λλ uuidλ₯Ό μμ ν©λλ€.
λ λ€λ₯Έ μ μ©ν κ²½μ°λ idλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ² μ΄μ€μμ κΈ°μ‘΄ μ¬μ©μ μν°ν°λ₯Ό μ ννλ κ²μ λλ€.
μ΄ νμ΄νμ ꡬνμ λ
μμκ² λ§‘κΈ°μ§λ§ λ€λ₯Έ λͺ¨λ λ³ν νμ΄νμ λ§μ°¬κ°μ§λ‘ μ
λ ₯ κ° (id
)μ μμ νκ³ μΆλ ₯ κ° (UserEntity
μ€λΈμ νΈ)λ₯Ό 리ν΄ν©λλ€. μ΄λ₯Ό ν΅ν΄ 보μΌλ¬ νλ μ΄νΈ μ½λλ₯Ό μ²λ¦¬κΈ°μμ μΌλ° νμ΄νλ‘ μΆμννμ¬ μ½λλ₯Όλ³΄λ€ μ μΈμ μ΄κ³ 건쑰νκ² λ§λ€ μ μμ΅λλ€.
λ€νμ€λ½κ²λ, ValidationPipe
μ ParseIntPipe
λ Nest out-of-the-the-boxμμ μ 곡λλ―λ‘ μ΄ νμ΄νλ₯Ό μ§μ λ§λ€ νμλ μμ΅λλ€. ( ValidationPipe
μλ class-validator
λ° class-transformer
ν¨ν€μ§κ° λͺ¨λ μ€μΉλμ΄ μμ΄μΌ ν©λλ€.)
λ΄μ₯λ ValidationPipe
λ μ΄ μ₯μμ ꡬμΆν μνλ³΄λ€ λ λ§μ μ΅μ
μ μ 곡ν©λλ€. μ΄ μ΅μ
μ νμ΄νμ κΈ°λ³Έ λ©μ»€λμ¦μ μ€λͺ
νκΈ° μν΄ κΈ°λ³ΈμΌλ‘ μ μ§λμμ΅λλ€. μ¬κΈ° μμ κ° λ§μ΄ μμ΅λλ€.
κ·Έλ¬ν μ΅μ
μ€ νλλ transform
μ
λλ€. μ μ§λ ¬νλ λ°λ μ€λΈμ νΈμ λν μ΄μ λ
Όμλ λ°λλΌ JavaScript μ€λΈμ νΈ (DTO μ νμ΄ μμ)μ
λλ€. μ§κΈκΉμ§ νμ΄νλ₯Ό μ¬μ©νμ¬ νμ΄λ‘λμ μ ν¨μ±μ κ²μ¬νμ΅λλ€. μ΄ κ³Όμ μμ μ°λ¦¬λ class-transform
μ μ¬μ©νμ¬ νλ²ν κ°μ²΄λ₯Ό μ νμ΄ μ§μ λ κ°μ²΄λ‘ μμ λ³ννμ¬ μ ν¨μ± κ²μ¬λ₯Ό μνν μ μμμ μκΈ°ν μ μμ΅λλ€. λ΄μ₯λ ValidationPipeλ μ νμ μΌλ‘ μ΄ λ³ν λ κ°μ²΄λ₯Ό λ°νν μλ μμ΅λλ€. κ΅¬μ± κ°μ²΄λ₯Ό νμ΄νλ‘ μ λ¬νμ¬ μ΄ λμμ νμ±νν©λλ€. μ΄ μ΅μ
μ κ²½μ° μλμ κ°μ΄ κ°μ΄ true
μΈ transform
νλκ°μλ κ΅¬μ± μ€λΈμ νΈλ₯Ό μ λ¬νμμμ€.
info ννΈ
ValidationPipe
λ@nestjs/common
ν¨ν€μ§μμ κ°μ Έμ΅λλ€.
μ΄ νμ΄νλ class-validator
λ° class-transformer
λΌμ΄λΈλ¬λ¦¬λ₯Ό κΈ°λ°μΌλ‘ νλ―λ‘ μ¬μ© κ°λ₯ν μΆκ° μ΅μ
μ΄ λ§μ΄ μμ΅λλ€. μμ transform
μ΅μ
κ³Ό λ§μ°¬κ°μ§λ‘ νμ΄νμ μ λ¬λ κ΅¬μ± κ°μ²΄λ₯Ό ν΅ν΄ μ΄λ¬ν μ€μ μ ꡬμ±ν©λλ€. λ€μμ κΈ°λ³Έ μ 곡 μ΅μ
μ
λλ€.
μ΄μΈμλ λͺ¨λ ν΄λμ€ μ ν¨μ± κ²μ¬κΈ° μ΅μ (ValidatorOptions μΈν°νμ΄μ€μμ μ μλ¨)μ μ¬μ©ν μ μμ΅λλ€.
info μλ¦Ό
class-validator
ν¨ν€μ§μ λν μμΈν μ 보λ repositoryμμ μ°ΎμΌμμμ€.
type
μΈμκ° body @Body()
, query @Query()
, param @Param()
λλ μ¬μ©μ μ μ λ§€κ° λ³μμΈμ§ μ¬λΆλ₯Ό λνλ
λλ€ (μ¬κΈ°μμ μμΈν μμ보μμμ€).
metatype
μΈμμ λ©ν νμ
(μ: String
)μ μ 곡ν©λλ€. μ°Έκ³ : λΌμ°νΈ νΈλ€λ¬ λ©μλ μλͺ
μμ μ ν μ μΈμ μλ΅νκ±°λ λ°λλΌ JavaScriptλ₯Ό μ¬μ©νλ κ²½μ° κ°μ undefined
μ
λλ€.
data
λ¬Έμμ΄μ΄ λ°μ½λ μ΄ν°μ μ λ¬λμμ΅λλ€ (μ: @Body('string')
). λ°μ½λ μ΄ν° κ΄νΈλ₯Ό λΉμλλ©΄ μ μλμ§ μμ΅λλ€(undefined)
.
Option
Type
Description
skipMissingProperties
boolean
trueλ‘ μ€μ νλ©΄ μ ν¨μ± κ²μ¬κΈ°λ μ ν¨μ± κ²μ¬ κ°μ²΄μ μλ λͺ¨λ μμ±μ μ ν¨μ± κ²μ¬λ₯Ό 건λ λλλ€.
whitelist
boolean
trueλ‘ μ€μ νλ©΄ μ ν¨μ± κ²μ¬κΈ°λ μ ν¨μ± κ²μ¬ λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ§ μλ μμ±μ μ ν¨μ± κ²μ¬ (λ°ν λ) κ°μ²΄λ₯Ό μ κ±°ν©λλ€.
forbidNonWhitelisted
boolean
trueλ‘ μ€μ νλ©΄ νμ΄νΈλ¦¬μ€νΈμ μλ μμ±μ μ κ±°νλ λμ μ ν¨μ± κ²μ¬κΈ°κ° μμΈλ₯Ό throwν©λλ€.
forbidUnknownValues
boolean
trueλ‘ μ€μ νλ©΄ μ μ μλ κ°μ²΄μ μ ν¨μ± κ²μ¬ μλκ° μ¦μ μ€ν¨ν©λλ€.
disableErrorMessages
boolean
trueλ‘ μ€μ νλ©΄ μ ν¨μ± κ²μ¦ μ€λ₯κ° ν΄λΌμ΄μΈνΈμ 리ν΄λμ§ μμ΅λλ€.
exceptionFactory
Function
κ²μ¦ μλ¬μ λ°°μ΄μ μ·¨ν΄, throwλλ μμΈ κ°μ²΄λ₯Ό λλ €μ€λλ€.
groups
string[]
κ°μ²΄μ μ ν¨μ±μ κ²μ¬νλ λμ μ¬μ©ν κ·Έλ£Ήμ λλ€.
dismissDefaultMessages
boolean
trueλ‘ μ€μ νλ©΄ μ ν¨μ± κ²μ¬λ κΈ°λ³Έ λ©μμ§λ₯Ό μ¬μ©νμ§ μμ΅λλ€. λͺ
μ μ μΌλ‘ μ€μ λμ§ μμ κ²½μ° μ€λ₯ λ©μμ§λ νμ μ μλμ§ μμ΅λλ€
.
validationError.target
boolean
ValidationError
μ λμμ λ
ΈμΆν΄μΌ νλμ§ μ¬λΆλ₯Ό λνλ
λλ€.
validationError.value
boolean
ValidationError
μ κ²μ¦λ κ°μ νμν΄μΌ νλμ§ μ¬λΆλ₯Ό λνλ
λλ€.