[Node.js][Nest.js] μœ νš¨μ„± 검사와 Data ν˜•μ‹ λ³€ν™˜ν•˜κΈ° - Pipe

2022. 4. 9. 16:58ㆍBack-End μž‘μ—…μ‹€/Node.js

728x90
λ°˜μ‘ν˜•

 

πŸš€ Pipe

    πŸ”½  κ°œμš”

`Pipe`λŠ” `Controller` 경둜 μ²˜λ¦¬κΈ°μ— μ˜ν•΄ μ²˜λ¦¬λ˜λŠ” 맀개 λ³€μˆ˜μ— μ˜ν•΄ μž‘λ™ν•˜λŠ” κ²ƒμ΄μ—μš”.

`Nest.js`λŠ” Methodκ°€ 호좜되기 직전에 `Pipe`λ₯Ό μ‚½μž…ν•˜κ³ , `Pipe`λŠ” Methodλ₯Ό ν–₯ν•˜λŠ” 맀개 λ³€μˆ˜λ₯Ό 받은 λ’€ 이에 λŒ€ν•΄ μž‘λ™ν•˜λŠ” κ²ƒμ΄μ—μš”.

 

Pipe μž‘λ™ 원리

 

β–Ί Data Transformation

μž…λ ₯ Dataλ₯Ό μ›ν•˜λŠ” ν˜•μ‹μœΌλ‘œ λ³€ν™˜ ν•΄μ£ΌλŠ” κΈ°λŠ₯인 κ²ƒμ΄μ—μš”. (예 : λ¬Έμžμ—΄μ„ μ •μˆ˜λ‘œ λ³€ν™˜)

λ§Œμ•½ μ •μˆ˜κ°’μ„ `Client`κ°€ λ³΄λƒˆμœΌλ©΄ ν•˜λŠ”λ°, λ¬Έμžμ—΄ ν˜•μ‹μœΌλ‘œ μ˜¨λ‹€λ©΄ `Pipe`μ—μ„œ μžλ™μœΌλ‘œ 숫자둜 λ°”κΏ”μ£ΌλŠ” κ²ƒμ΄μ—μš”.

 

 

β–Ί Data Validation

`Nest.js`μ—μ„œλŠ” `Pipe`λ₯Ό μ΄μš©ν•˜λ©΄ `@Valid`와 거의 λ˜‘κ°™μ΄ μœ νš¨μ„± 검사 κΈ°λŠ₯을 μ΄μš©ν•  수 μžˆλŠ” κ²ƒμ΄μ—μš”.

즉, μž…λ ₯ Dataλ₯Ό κ²€μ¦ν•˜κ³ , μœ νš¨ν•œ 경우 λ³€κ²½λ˜μ§€ μ•Šμ€ μƒνƒœλ‘œ μ „λ‹¬ν•˜λ©΄ λ˜λŠ” κ²ƒμ΄μ—μš”. λ§Œμ•½ 그렇지 μ•Šλ‹€λ©΄ Dataκ°€ μ˜¬λ°”λ₯΄μ§€ μ•Šλ‹€λŠ” `Exception`을 던져주면 λ˜λŠ” κ²ƒμ΄μ—μš”.

예λ₯Ό λ“€μ–΄ νšŒμ› 이름이 10자 μ΄ν•˜μ—¬μ•Ό ν•˜λŠ”λ°, 10자 이상 μž…λ ₯이 였면 `Exception`이 터지고 ν•΄λ‹Ή λ‚΄μš©μ„ λ°˜ν™˜ν•˜λŠ” κ²ƒμ΄μ—μš”. 

 

        πŸ“¦ Pipe의 λͺ¨λ“  κΈ°λŠ₯

λ˜ν•œ `Pipe`λŠ” Method λ™μž‘ λ°”λ‘œ 직전에 μž‘λ™ μ‹œμΌœ Method둜 ν–₯ν•˜λŠ” 맀개 λ³€μˆ˜μ— λŒ€ν•΄ λ³€ν™”ν•  것이 있으면 λ³€ν™˜ν•˜κ³ , λ™μ‹œμ— μœ νš¨μ„± 검사λ₯Ό μœ„ν•΄μ„œλ„ μž‘λ™ν•˜λŠ” κ²ƒμ΄μ—μš”.

 

 

 

 

    πŸ”½  μ‚¬μš©ν•˜λŠ” 방법 (Binding Pipes)

`Pipe`λ₯Ό μ΄μš©ν•˜λŠ” 방법은 크게 μ„Έκ°€μ§€λ‘œ ꡬ뢄할 수 μžˆλŠ” κ²ƒμ΄μ—μš”.

`Hendler-level Pipes`, `Parameter-level Pipes`, `Global-level Pipes`둜 ꡬ뢄할 수 μžˆλŠ” κ²ƒμ΄μ—μš”.

 

        πŸ“¦ Handler-level Pipes

`@UsePips()`λ₯Ό μ΄μš©ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλŠ” κ²ƒμ΄μ—μš”.

이 `Pipe`λŠ” λͺ¨λ“  맀개 λ³€μˆ˜(Parameter)에 적용이 λ˜λŠ” κ²ƒμ΄μ—μš”.

 

Handler-level Pipes μ˜ˆμ‹œ μ½”λ“œ

 

 

 

        πŸ“¦ Parameter-level Pipes

 

Parameter-level Pipes μ˜ˆμ‹œ μ½”λ“œ

λ°˜μ‘ν˜•

 

 

 

        πŸ“¦ Global-level Pipes

 

Global-level Pipes μ˜ˆμ‹œ μ½”λ“œ

 

​

 

 

 

    πŸ”½ Built-in Pipes

`Nest.js`에 기본적으둜 μ΄μš©ν•  수 μžˆλŠ” 6가지 `Pipe`κ°€ μžˆλŠ” κ²ƒμ΄μ—μš”.

● ValidationPipe
● ParseIntPipe
●  ParseBoolPipe
● ParseArrayPipe
● ParseUUIDPipe
​​

 

​

 

μ°Έκ³  자료 및 좜처 : μΈν”„λŸ° - λ”°λΌν•˜λ©° λ°°μš°λŠ” NestJS κ°•μ˜

 

 

 

 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•