NestJS DTO vs Interface
โ๏ธ Today I Learned
-
TypeScript๋ฅผ ๊ธฐ๋ณธ ์ธ์ด๋ก ์ฑํํ์ฌ ๊ตฌ์ฑ๋ NestJS ํ๋ ์์ํฌ๋ ๊ณต์๋ฌธ์์์๋ Type Check๋ฅผ ์ํด
DTO
์ฌ์ฉ์ ์๋ดํ๊ณ ์๋ค. -
๊ณต์๋ฌธ์๋ฅผ ํ ๋๋ก
DTO
๋ฅผ ์ ์ฌ์ฉํ๋์ง ์ฐพ์๋ณด๋ ๊ทธ ๊ณผ์ ์์Interface
์์ ์ฐจ์ด์ ์ ๊ฐ๋จํ ์์๋ณด์๋ค.
1. DTO (Data Transfer Object)
-
์ฐ์
DTO
๋ **๊ณ์ธต***๊ฐ ๋ฐ์ดํฐ ๊ตํ์ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๋ค.๊ณ์ธต์ด๋?
ํจํด๋ง๋ค ๋ค๋ฅด๊ฒ ํํ๋๋ค.
Repository ํจํด์์๋ Controller, Service, Repository๋ฅผ ๊ฐ๊ฐ ๊ณ์ธต์ด๋ผ ์นญํ๋ฉฐ, MVC ํจํด์์๋ Model, View, Controller์ ๊ณ์ธต์ด ์กด์ฌํ๋ค.
-
๊ณ์ธต๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ด๋ค ๋ชจ์์ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ก ์ฃผ๊ณ ๋ฐ์์ง๋ฅผ
DTO
์์ ๊ฒฐ์ ํ๊ฒ ๋๋ฏ๋ก ํ๋ก์ ํธ๋ฅผ ์ค๊ณํ ๋ ์ต์ฐ์ ์ผ๋ก ๊ณ ๋ ค๋์ผ ํ ์์์ด๋ค. -
์ฝ๊ฒ ๋งํ์๋ฉด ์ ๋ณด๋ฅผ ๊ตํํ๋๋ฐ ์์ด ํ์ ์ ์ฒดํฌํ๊ธฐ ์ํ ๊ตฌ์กฐ๋ผ ์ค๋ช ํ ์ ์๋ค.
-
๋ํ, ํ์ ์ ์ฒดํฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก
DTO
์ธ์Interface
๊ฐ ์กด์ฌํ๋ฉฐ ์ด๋ ์๋์์ ๋ค์ ์ค๋ช ํ๊ฒ ๋ค.
2. Interface
-
๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด ์ธํฐํ์ด์ค๋ TypeScript์์ ๋ณ์, ํจ์, ํด๋์ค์ ํ์ ์ฒดํฌ๋ฅผ ์ํด ์ฌ์ฉ๋๋ฉฐ ๋ณด๊ธฐ์๋ ํด๋์ค์ ์ ์ฌํ์ง๋ง ์ธ์คํด์ค ์์ฑ์ด ๋ถ๊ฐ๋ฅํ๊ณ ๋ชจ๋ ๋ฉ์๋๋ ์ถ์ ๋ฉ์๋๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
-
๋ํ โES6์์ ์ง์ํ์ง ์๊ณ TypeScript์์๋ง ์ง์ํ๋ค.โ
-
๋ฐ์ดํฐ ํ์ ์ ์ฒดํฌํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ ์ธ ๋ฉด๋ชจ๋ก์จ๋
DTO
์ ๋์ผํ์ง๋ง ์์์ ๊ฐ์กฐํ๊ฒ ์ฒ๋ผ ES6์์๋ ์ง์ํ์ง ์๋๋ค๋ ์ฐจ์ด์ ์ด ์๋ค.
3. Why DTO?
-
์ ์ง๋ฌธ์ ํด๋ต์ NestJS ๊ณต์๋ฌธ์(Request payloads ๋ถ๋ถ)์์๋ ์ DTO๋ก ์๋ดํ๋์ง ์ค๋ช ์ด ์์ธํ ์๋ด๋์ด ์๋ค.
์ ๋ด์ฉ์ ์
Interface
๋ฅผ ์ค๋ช ํ๋ ๋ด์ฉ๊ณผ ๋ง๋ถํ ๊ฐ๋ตํ ์ค์ด์๋ฉด TypeScript์ ํด๋์ค๋ JavaScript ES6 ํ์ค์ ๋ฐ๋ฅด๋ฏ๋ก TypeScript๋ก ์์ฑ๋์์ง๋ง ์ปดํ์ผ ๋ JavaScript์์๋ ์ธํฐํ์ด์ค๋ ์ปดํ์ผ ๋์ค ์ ๊ฑฐ๋๋ฏ๋ก(Interface
๋ ES6 ํ์ค์ด ์๋๋ฏ๋ก) NestJS์์ ๋ฐํ์์ ์ธํฐํ์ด์ค๋ฅผ ์ฐธ์กฐํ ์ ์๊ฒ๋๋ค. -
๋ฐ๋ผ์ NestJS์์๋ ๋ฐํ์ ์ดํ
Input
๊ฐ์ ๋ํ ์ ํจ์ฑ ๊ฒ์ฆ์ด๋ผ๋์ง ๊ทธ ์ธ์ ๋ฐ์ดํฐ ํ์ ์ ์ง์์ ์ผ๋ก ์ถ์ ํด์ผํ๋ ๊ฒฝ์ฐDTO
๋ Class๋ก ์์ฑ๋๊ธฐ์ ES6 ํ์ค์ด๋ฏ๋ก ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅ ํ์ง๋ง,Interface
๋ ES6 ํ์ค ๋ฌธ๋ฒ์ด ์๋๋ฏ๋ก ์ ๊ฑฐ๋๊ธฐ์ ์ฐธ์กฐํ ์ ์๊ฒ๋๋ค.
๐ค Understanding
-
๊ทธ๋ฅ ํ์ตํ ๋๋ก ์ต๊ด์ ์ผ๋ก
DTO
๋ฅผ ์ฌ์ฉํ๋ค ๋ถํ๋ฏ ๋ ์ค๋ฅธ ๊ถ๊ธ์ฆ์ธ โํด๋์ค ๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋์ง๋ง ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ๋ ์๋๊ณ .. ๋จ์ ํ์ ๊ฒ์ฆ๋ง์ ์ํด ์ฌ์ฉ๋๋๊ฒ ์๋๊ฐ? ๊ทธ๋ผ ์ธํฐํ์ด์ค๋ ๋ค๋ฅธ๊ฒ ๋ฌด์์ด์ง?โ ๋ผ๋ ์๋ฌธ์ ์์ ์ฐพ์๋ณด๋ ์ด์๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ๊ฒ ๋์๋ค. -
NestJS ๊ณต์ ๋ฌธ์๋ ๋๋จํ๋ค.
๋ชจ๋ ๊ถ๊ธ์ฆ์ ๋ํ ๋ด์ฉ์ด ์ด๋ฏธ ๋ชจ๋ ๊ธฐ์ฌ๋์ด ์์๋ค.
(๋ด๊ฐ ์ฐพ์๋ณด์ง ์์์ ๋ฟโฆ) -
์ง๊ธ์ ํ๋ก์ ํธ ํ์ฐฝ์ด๋ผ ๋๋ฌด ๋ฐ์๊ณ , ์ด๋์ ๋ ์์ ๋๋ฉด ๊ณต์๋ฌธ์ ์ ์ฃผํ์ ํ๋ฒ ํด์ผ๊ฒ ๋ค.