Spring ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ DTO๋ฅผ ์ ์ฐ๋์ง ์๋ฌธ์ด ๋ค์๋ค. ์ฌ์ค DTO๊ฐ ์ ํํ ์๋ฟ์ง๋ ์์์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค.
1. DTO(Data Transer Object)
DTO๋ ํ๋ก์ธ์ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ฉ๋์ ๊ฐ์ฒด์ด๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ๋จ์ํ ๊ฐ์ฒด์ด๋ค.
- ํด๋ผ์ด์ธํธ์ Controller ์ฌ์ด์์๋ DTO๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๊ณ
- ์ดํ๋ฆฌ์ผ์ด์ ๋ด๋ถ (Service, Repository..)์์๋ Domain(Entity ๋๋ Model)์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.
Service, Repository์์๋ ๊ฐ์ฒด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ ,
Controller์์ DTO ๊ฐ์ฒด๋ก ๋งคํํด์ ํด๋ผ์ด์ธํธ์ ๋ฆฌํดํ๋ค.
2. DTO๋ Domain ๋ถ๋ฆฌํ๋ ์ด์
2-1. ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ (Separation of Concerns, SoC)
MVC ์ฌ์ฉํ๋ ์ด์ ๋ ๊ฐ๊ฐ์ด ์์ ์ ์ญํ ์ ์ํํ๋ฉฐ ์ ์ง๋ณด์๊ฐ ํธ๋ฆฌํ๊ฒ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
Controller๋ ์ค๊ฐ๋ค๋ฆฌ ์ญํ ๋ก ํด๋ผ์ด์ธํธ์ ์์ฒญ/์๋ต ํ๋ ์ฑ ์์ด ์๊ณ ,
Model์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ฑ ์์ด ์๋ค.
OOP ์ธ์์์๋ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ํตํด ๋ณต์กํ ์์คํ ์ ํจ์จ์ ์ผ๋ก ์๋ํ๊ฒ ํ๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ ์ํฅ์ ๋ฏธ์น๋ ์ฝ๋๋ค๋ผ๋ฆฌ ๋ถ๋ฆฌํ๋ค.
2-2. ๊ด์ฌ์ฌ์ ์ํ์ ๋ถ๋ฆฌ
- Presentation Layer: ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๊ณต
- Business Layer: ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง ๋ฐ ๋๋จธ์ง ๋ ๊ณ์ธต ๊ฐ์ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- Data Access Layer: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ๋ ์ญํ
์ฌ๊ธฐ์ DTO๋ ์ค์ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ชฉ์ ์ผ๋ก Presentation Layer์ ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ Domain์ ๋น์ฆ๋์ค๋ก์ง์ ๋ด์ Business Layer์์ ์ญํ ์ ์ํํ๋ค.
๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํ์ง ์๋๋ค๋ฉด Presentation๊ณผ Business๊ฐ ํผํฉ๋ ํด๋์ค๊ฐ ํ์ํ๊ฒ๋๋๋ฐ ์ข์ OOP๋ฅผ ์ํด์๋ ํ๋์ ๊ฐ์ฒด์๋ ํ๋์ ์ฑ ์๋ง ์กด์ฌํด์ผ ํ๋ค(๋ณ๊ฒฝ์ด ์์ ๋ ํ๊ธ ํจ๊ณผ๋ฅผ ์ต์ํํ๊ธฐ ์ํจ) ๊ทธ๋์ DTO๋ Domain์ ๋ถ๋ฆฌํด์ผํ๋ค.
DTO ์ ์ฃผ์ ๋ชฉ์ ์ ํ ๋ฒ์ ํธ์ถ๋ก ์ฌ๋ฌ ๋งค๊ฐ ๋ณ์๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํด์ ์๋ฒ์ ์๋ณต์ ์ค์ด๋ ๊ฒ!
์ถ์ฒ
https://e-una.tistory.com/72#1.2.1
'์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์คํ๋ง] ๋น๋ ํจํด @Builder (0) | 2024.01.23 |
---|---|
[์คํ๋ง] ๊ณต๊ณต๋ฐ์ดํฐ SERVICE_KEY_IS_NOT_REGISTERED_ERROR ํด๊ฒฐ (0) | 2024.01.18 |
[์คํ๋ง] ์น์๋ฒ, WAS, ์๋ธ๋ฆฟ / SSR, CSR (0) | 2024.01.14 |