- ํ๋ก์ ํธ ์๊ฐ
- ํ๋ก์ ํธ ์ํคํ
์ฒ
2-1. ์๋น์ค ์ํคํ ์ฒ
2-2. ํจํค์ง ๊ตฌ์กฐ - ์ฝ๋ ์ปจ๋ฒค์
- ERD
- API ๋ช ์ธ
- ๊ธฐ์ ์ ์์ฌ๊ฒฐ์
6-1. builder์ privateํ/์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํ์ฉ
6-2. FACADE ํจํด
6-3. ๊ณ์ธต ๋ณ DTO ๋ถ๋ฆฌ
- ๋ถ๋ ์ ๋์ ํตํ ์ค์ผ์ค๋ฌ + ๋ค์ด์ด๋ฆฌ ์๋น์ค
- ๋จ์ํ ํ ์ผ, ์๋ฃ๋ง ์๋ TODOLIST๊ฐ ์๋ ๋ค์ํ ์์ฑ์ ๊ฐ์ง TODOLIST
- ์๋น์ค ํ๊ฒฝ: ์น/๋ชจ๋ฐ์ผ ๋ชจ๋ ๊ฐ๋ฅํฉ๋๋ค
builder์ privateํ/์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํ์ฉ
๋ณธ ํ๋ก์ ํธ์์ ๊ฐ์ฒด ์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์์ฑ์ ๋์ static ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
static ๋ฉ์๋์์ Builder๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ Builder๋ Lombok์ @Builder ์ด๋
ธํ
์ด์
์ ํตํด ๊ตฌํํ๋ฉฐ, ์์ฑ์์ Builder๋ ๋ชจ๋ private์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ ๊ธฐ์ ๊ฐ์ฒด ์ธ๋ถ์์ ํด๋น ๊ฐ์ฒด์ ์์ฑ์์ Builder๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์๊ณ ,
์ค๋ก์ง static ๋ฉ์๋๋ฅผ ํตํด์๋ง ํด๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Builder์ ์์ฑ์์ privateํ
static ๋ฉ์๋์์์ Builder ์ฌ์ฉ
์ธ๋ถ์์ static ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ชจ์ต
Builder๋ ๋งค๊ฐ ๋ณ์๊ฐ ๋ง์์ง ๋ ๊ฐ๋
์ฑ์ด ๋๊ณ , ์์ฑํ๊ธฐ๊ฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
ํ์ง๋ง ์์ฑ์์ static ๋ฉ์๋์ฒ๋ผ ๊ฐ์ฒด์ ํํ๋ฅผ ๊ฐ์ ํ ์ ์๊ธฐ์ ๋ค์ํ ํํ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ์ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
ํนํ Builder๋ ๋ณดํต public์ผ๋ก ๋ง๋ค์ด์ง๊ธฐ์ ์ธ๋ถ์์ ์ด์ํ ํํ์ ๊ฐ์ฒด๊ฐ ๋ฌด๋ถ๋ณํ๊ฒ ์์ฑ๋ ์ ์์ต๋๋ค.
๊ทธ๋ด ๊ฒฝ์ฐ Builder๊ฐ ์ด๋์ ์ด๋ป๊ฒ ์ฌ์ฉ๋๊ณ ์๋์ง ๋ชจ๋ฅด๊ธฐ์ ๋๋ฒ๊น
ํ๊ธฐ๊ฐ ๋์ฑ ์ด๋ ค์์ง๋๋ค.
ํ์ง๋ง Builder๋ฅผ private์ผ๋ก ํ๋ค๋ฉด Builder์ ์ฅ์ ์ ์ด๋ฆฌ๋ฉด์๋ ๋จ์ ์ ์ต์ํํ ์ ์์ต๋๋ค.
ํน์ฌ๋ Builder๋ก ์ธํ ๋ฌธ์ ๊ฐ ์๊ธฐ๋๋ผ๋ ํด๋น ๊ฐ์ฒด๋ง ๋๋ฒ๊น
ํ๋ฉด ๋๊ธฐ์ ์ ์ง/๋ณด์๊ฐ ์ฌ์์ง๋๋ค.
static ๋ฉ์๋๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ์ด์ ๋ ์บก์ํ ๋๋ฌธ์
๋๋ค.
static ๋ฉ์๋์ Builder๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ด๋ถ ๊ตฌํ์ ๋ณํ๊ฐ ์๊ฒผ์ ๋ ๊ทธ ํ๊ธ ํจ๊ณผ๋ฅผ ์ต์ํ ํ ์ ์์ต๋๋ค.
FACADE ํจํด
๋ณธ ํ๋ก์ ํธ์์ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ธฐ์กด Spring ์น ๊ณ์ธต์์ Facade ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํฉ๋๋ค.
๊ธฐ์กด์๋ Service ๊ณ์ธต์์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ ๊ทผ์ด๋ผ๋ ๋ ๊ฐ์ง ์ผ์ ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํ์๋๋ฐ,
Facade ๊ณ์ธต์ ๋์
ํ์ฌ ๋ ์
๋ฌด๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค.
Facade ๊ณ์ธต์์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , ์๋ก์ด Service ๊ณ์ธต์์๋ ๋ฐ์ดํฐ ์ ๊ทผ๊ณผ ๊ด๋ จ๋ ์ ๋ฌด๋ง ์งํํฉ๋๋ค.
์๋ก์ด Service ๊ณ์ธต๋ง Repository์ ์์กดํ๋ฉฐ Controller์ Facade ๊ณ์ธต์์๋ Repository์ ์์กดํ์ง ์๊ณ ,
Entity๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋ ๊ณ์ธต์์๋ ์ค๋ก์ง DTO ๋ง ์ฌ์ฉํฉ๋๋ค.
๋ฐ๋ Service ๊ณ์ธต์๋ ๊ฐ Entity์ Repository๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ Service ํด๋์ค๋ค์ด ์กด์ฌํฉ๋๋ค.
ํด๋น ํด๋์ค๋ค์ ์ด๋ฆ์ ํด๋น Entity ์ด๋ฆ + Service๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
Diary Entity๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ DiaryService
Facade ๊ณ์ธต์ ์ถ๊ฐํจ์ผ๋ก์จ ์ป์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Entity ๋
ธ์ถ์ ์ต์ํํ์ฌ Entity ์ฌ์ฉ์ผ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ๋ฐ ์๋ฐฉํฉ๋๋ค.
- ์ฌ๋ฌ ๋น์ฆ๋์ค ๋ก์ง์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฉ์๋๋ค์ ์๋ก์ด Service ๊ณ์ธต์์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์ญํ ์ด ์ธ๋ถํ๋์ด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋๊ณ , ๊ธฐ์กด๋ณด๋ค ์ ์ง/๋ณด์๊ฐ ์์ํด์ง๋๋ค.
๊ณ์ธต ๋ณ DTO ๋ถ๋ฆฌ
6-2์์ ํ์ธํ ์ ์๋ฏ์ด ์ ํฌ์ ์น ๊ณ์ธต์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
๋ณธ ํ๋ก์ ํธ์์ Presentation Layer, Business Layer ์์ ์ฌ์ฉํ๋ DTO๋ค์ ํฌ๊ฒ 3์ข
๋ฅ๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉํฉ๋๋ค.
Controller์์ ์ธ๋ถ ์์ฒญ์ ๋ฐ๊ธฐ ์ํ RequestDto, ์ธ๋ถ์ ์๋ต์ ๋ณด๋ด๊ธฐ ์ํ ResponseDto,
Business Layer์์ ์ฌ์ฉํ๊ธฐ ์ํ EntityDto ์ด๋ ๊ฒ 3 ์ข
๋ฅ๋ก ์ฌ์ฉํฉ๋๋ค.
EntityDto๋ ํน์ Entity๋ฅผ ๋์ฒดํ๋ DTO์ด๋ฉฐ, Facade ๊ณ์ธต์์ ์์ฒญ์ ๋ฐ๊ฑฐ๋ ๋ณด๋ผ ๋๋ ์ฃผ๋ก EntityDto๋ฅผ ์ฌ์ฉํฉ๋๋ค.
DTO๋ฅผ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ์ฌ ์ป๋ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Facade ๊ณ์ธต์ ์๋ ๋ฉ์๋๋ค์ด ๋ณดํธ์ ์ธ DTO (EntityDto)๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ฌ์ฉํ๋ฏ๋ก ๋ฉ์๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋๋ค.
๋ํ ๋ณดํธ์ ์ธ DTO๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ์์ด ์์ฑํ ์ฝ๋์ ํ๋ฆ์ ์ดํดํ๊ธฐ๊ฐ ์ฌ์์ ธ ํ์ ๋ฅ๋ฅ ์ด ์ฌ๋ผ๊ฐ๋๋ค. - DTO๊ฐ ์ธ๋ถํ๋์ด ์๊ธฐ์ ์ ์ง/๋ณด์๊ฐ ์์ํด์ง๋๋ค.
์๋ฅผ ๋ค์ด Request ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ ํด๋น ๋ณ๊ฒฝ์ผ๋ก ์ธํ ํ๊ธ ํจ๊ณผ๋ ๋ณดํต Controller ๊ณ์ธต์๋ง ๋ฏธ์น๊ฒ ๋ฉ๋๋ค.