๋ฐฅ์ด์(Bobissue) ํ๋ก์ ํธ๋ ์๋จ ๊ด๋ฆฌ ์๋น์ค๋ฅผ ๊ธฐ๋ฐํ ๊ฑด๊ฐ์ ์ผํ๋ชฐ๋ก ํ๋์ธ๋ค์ด ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ฑด๊ฐ์์ ์ ํ ์ ์๋ ์ข ํฉ ์๋ฃจ์ ์ผํ๋ชฐ์ด๋ค. ๋ํ, ๋ผ์ด๋ธ ์ปค๋จธ์ค ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ ํ๋งค์์ ์ํ ํ๋งค ๋ฐ ๊ด๊ณ ํ๋ฉฐ ์๋น์์ ๊ตฌ๋งค๋ฅผ ์ ๋ํ ์ ์๋ ๊ธฐ๋ฅ ์ ๊ณตํ๋ค. ์๋น์์ ์ฑ๋ณ, ๋์ด ๋ฑ์ ๊ธฐ์ค์ ํต๊ณ ๋ฐ ๊ทธ๋ํ๋ฅผ ์ ๊ณตํ์ฌ ํ๋งค์๊ฐ ์๋น์์ ์๋น ํจํด์ ๋ถ์ํ์ฌ ํ๋งค ์ ๋ต์ ์๋ฆฝํ ์ ์๋๋ก ๋์์ ์ค๋ค.
- ๋ง์ฑ ์งํ ์๋ฐฉ ์ค์์ฑ ์ธ์
- ์ฌ๋ฐ๋ฅธ ์์ ์ญ์ทจ์ ํ์์ฑ
- ๋ค์ด์ดํธ ๋ฐ ๊ฑด๊ฐ์์ ๋ํ ๊ด์ฌ๋ ์ง์์ ์์น
- ๊ฑด๊ฐํ ์ํ์ต๊ด ํ์ฑ ์๊ตฌ
- ๊ฐ์ธ ๊ฑด๊ฐ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ํ์ฉ ์ฆ๊ฐ
- ๋ค์ํ ์๋จ ์๊ตฌ์ฌํญ ์กด์ฌ
- ํธ์์ฑ๊ณผ ํจ์จ์ฑ ๋์ ์ถ๊ตฌ
- ์ฝ๋ก๋ 19๋ก ์ธํ ๋น๋๋ฉด ์ ํธ
- ์ ์ ์ํ ์จ๋ผ์ธ ๊ตฌ๋งค ์ฆ๊ฐ
- MZ ์ธ๋์ ์จ๋ผ์ธ ์ผํ ์ ํธ
- ๊ฐํธ์ ๋ฐ ๋ฐํคํธ ์์ฅ ํ๋
- ๊ธฐ์กด ์๋จ ๊ด๋ฆฌ ์๋น์ค์ ํ๊ณ
- ์ผํ๋ชฐ๊ณผ์ ๋ถ๋ฆฌ๋ก ํจ์จ์ฑ ๋ฎ์ ๊ฒฝ์ฐ ๋ง์
- ์ฆ, ์๋จ์ ์ง๊ณ ํ์ฉํด๋ณด๊ณ ์ถ์ง๋ง ์๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์ง์ ์์์ ๊ณ ๋ฅด๊ณ ์ฃผ๋ฌธํ๊ณ ๊ธฐ๋กํ๋ ์ ๊ณผ์ ์ด ์ค๋ ์์๋๊ณ ๋นํจ์จ์ .
- ๋จ๊ธฐ์ ์ธ ์๋จ ๊ด๋ฆฌ
- ๋๊ธฐ๋ถ์ฌ ์์ ๋ถ์กฑ
- ์ฌ์ฉ์ ์ดํ๋ฅ ๋์
- ์๋จ๊ณผ ์ผํ ์ฐ๊ณ
- ํธ๋ฆฌํ ๊ตฌ๋งค ๊ฒฝํ
- ์ ์ ์ํ ์ ๊ณต
- ์๊ฐ ์ ์ฝ ๊ฐ๋ฅ
- ์๋จ ๊ณํ๋ถํฐ ๊ตฌ๋งค๊น์ง
- ํ ํ๋ซํผ์์ ํด๊ฒฐ
- ์ฌ์ฉ์ ํธ์์ฑ ์ฆ๋
- ํตํฉ ์๋น์ค ์ ๊ณต
- ์์ฌ๋ฃ ํ๋งค
- ๊ฑด๊ฐ์ํ ์ ๊ณต
- ๋ง์ถคํ ์ํ ์ถ์ฒ
- ํธ๋ฆฌํ ๊ตฌ๋งค ๊ฒฝํ
- ์ค์๊ฐ ์ํ ์๊ฐ
- ์ฆ๊ฐ์ ์ธ ์ง์์๋ต
- ํน๋ณ ํ ์ธ ํํ
- ๊ฐ์ธํ๋ ์๋จ ๊ด๋ฆฌ
- ์นผ๋ก๋ฆฌ ๋ฐ ์์ ๊ณ์ฐ
- ์๋จ ๊ธฐ๋ก ๋ฐ ๋ ์ํผ ๊ณต์
- ์ผํ๋ชฐ ์ฐ๊ณ ์๋จ ๊ด๋ฆฌ ๋ฐ ์ฆ์ ์ฃผ๋ฌธ
| ํญ๋ชฉ | ๊ธฐ์ |
|---|---|
| ๊ฐ๋ฐ ํ๊ฒฝ | |
| ํ๋ก๊ทธ๋๋ฐ ์ธ์ด | |
| ๋น๋ ๋๊ตฌ | |
| ํ๋ ์์ํฌ | |
| ์ํ ๊ด๋ฆฌ | |
| CSS ํ๋ ์์ํฌ | |
| ์ธ์ฆ/๋ณด์ |
| ํญ๋ชฉ | ๊ธฐ์ |
|---|---|
| ํ๋ก๊ทธ๋๋ฐ ์ธ์ด | |
| ๊ฐ๋ฐ ํ๊ฒฝ | |
| ๋น๋ ๋๊ตฌ | |
| ํ๋ ์์ํฌ | |
| ๋ณด์ |
| ํญ๋ชฉ | ๊ธฐ์ |
|---|---|
| ํ์ ๊ด๋ฆฌ | |
| ํ์ | |
| ๋ฐ์ดํฐ๋ฒ ์ด์ค | |
| ์ปค๋ฎค๋์ผ์ด์ | |
| ๋ฐฐํฌ |
Details
| ๊ถํ | ๋๋ถ๋ฅ | ์ค๋ถ๋ฅ | ์๋ถ๋ฅ | ์ค๋ช |
|---|---|---|---|---|
| ์ด์ฉ์ | 1. ํ์๊ฐ์ | 1-1. ํ์๊ฐ์ | ํ์: ์์ด๋, ๋น๋ฐ๋ฒํธ, ์ด๋ฆ, ์ฃผ์, ๋๋ค์, ์ ํ, ์ด๋ฉ์ผ, ์๋
์์ผ, ์ฑ๋ณ ๋์: ์ด์ฉ์ฝ๊ด, ๊ฐ์ธ์ ๋ณด ์์ง ๋ฐ ์ด์ฉ ์ ํ: ์์ ๋์, ์ฌ์ง |
|
| 1-2. ์์ ํ์๊ฐ์ | ||||
| 2. ๋ก๊ทธ์ธ | 2-1. ๋ก๊ทธ์ธ | ์์ด๋ & ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ํ ๋ก๊ทธ์ธ | ||
| 2-2. ์์ ๋ก๊ทธ์ธ | ๋ค์ด๋ฒ, ์นด์นด์ค ๊ฐํธ ๋ก๊ทธ์ธ ์ง์ | |||
| 2-3. ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ | ||||
| 3. ๋ก๊ทธ์์ | ||||
| 4. ํ์ ๋ฑ๊ธ | 4-1. ๋ฑ๊ธ ํ์ธ | ๊ตฌ๋งค ๊ธ์ก์ ๋ฐ๋ฅธ ํฌ์ธํธ ์ ๋ฆฝ ๋ฐ ๋ฑ๊ธ์ ์ด์ | ||
| 5. ๋ค๋น๊ฒ์ด์ ๋ฐ | 5-1. ์นดํ ๊ณ ๋ฆฌ | 5-1-1. ์ข ๋ฅ๋ณ | ๋ญ๊ณ ๊ธฐ, ์๊ณ ๊ธฐ/๋ผ์ง๊ณ ๊ธฐ, ๊น๋ฐฅ/๋์๋ฝ/๋ณถ์๋ฐฅ, ์๋ฌ๋/๊ณผ์ผ ๋ฑ | |
| 5-1-2. ๋ชฉ์ ๋ณ | ๊ฐํธ์, ๋ค์ด์ดํธ, ์์์, ๋ฒํฌ์ | |||
| 6. ๋ผ์ด๋ธ ์ปค๋จธ์ค | 6-1. ๋ผ์ด๋ธ ์ผ์ ๋ณด๊ธฐ | ๋ผ์ด๋ธ ์ปค๋จธ์ค ๋ฐฉ์ก ๋ฆฌ์คํธ ํ์ | ||
| 6-2. ๋ผ์ด๋ธ ์์ฒญ | ๋ผ์ด๋ธ ๋ฐฉ์ก ์์ฒญ ๋ฐ ์ฑํ ๊ฐ๋ฅ | |||
| 7. ์ํ ์กฐํ | 7-1. ์ํ ๋ชฉ๋ก | ์ํ ์ด๋ฏธ์ง, ์ด๋ฆ, ๊ฐ๊ฒฉ ๋ฑ ์ ๋ณด ์กฐํ | ||
| 8. ์ํ ์์ธ | 8-1. ์ํ ์์ธ์ ๋ณด | ์ํ ์ค๋ช , ์์์ฑ๋ถ, ํ๋งค์ ์ ๋ณด ๋ฑ | ||
| 8-2. ์ํ ์ฐ | 8-2-1. ์ฐํ๊ธฐ | ๋ง์ดํ์ด์ง์์ ํ์ธ ๊ฐ๋ฅ | ||
| 9. ์ฅ๋ฐ๊ตฌ๋ | 9-1. ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก | 9-1-1. ์ํ ์ ๋ณด ์กฐํ | ์๋, ์ต์ ์์ ๋ฐ ์ญ์ ๊ฐ๋ฅ | |
| 10. ๊ฒฐ์ | 10-1. ๋ฐฐ์ก์ง | 10-1-1. ๋ฐฐ์ก์ง ์ ํ | ๊ธฐ๋ณธ ๋ฐฐ์ก์ง ์ค์ ๊ฐ๋ฅ | |
| 10-2. ๊ฒฐ์ ๊ธ์ก | 10-2-1. ํ ์ธ ์ฟ ํฐ | ๊ด๋ฆฌ์ ๋ฐ๊ธ ์ฟ ํฐ ์ ์ฉ ๊ฐ๋ฅ | ||
| 10-5. ๊ฒฐ์ | ๊ฒฐ์ API ํธ์ถ | |||
| 11. ๋ง์ดํ์ด์ง | 11-1. ์ฃผ๋ฌธ ๋ชฉ๋ก | 11-1-1. ์ฃผ๋ฌธ ๋ด์ญ ์กฐํ | ์ฃผ๋ฌธ ๊ธฐ๊ฐ ์ ํ ๋ฐ ์ํ ๊ฒ์ ๊ฐ๋ฅ | |
| 12. ๊ณ ๊ฐ์ผํฐ | 12-1. FAQ | ์์ฃผ ๋ฌป๋ ์ง๋ฌธ ์นดํ ๊ณ ๋ฆฌ ์ ๊ณต | ||
| 13. ๋ ์ํผ | 13-1. ๋ ์ํผ ์์ฑ | 13-1-1. ๋ ์ํผ ์์ฑ | ๋ ์ํผ๋ช , ์๊ฐ, ๋ฐฉ๋ฒ ๊ธฐ์ |
Details
| ๊ถํ | ๋๋ถ๋ฅ | ์ค๋ถ๋ฅ | ์๋ถ๋ฅ | ์ค๋ช |
|---|---|---|---|---|
| ํ๋งค์ | 1. ํ์๊ฐ์ | 1-1. ํ์ ๊ฐ์ | ํ์๊ฐ์ ์ ํ: ์ฌ์ ์ ์ ์ฉ | |
| 2. ๋ก๊ทธ์ธ | 2-1. ๋ก๊ทธ์ธ | ํ๋งค์๋ ์์ ๋ก๊ทธ์ธ ๋ถ๊ฐ | ||
| 4. ํ๋งค์ ํ์ด์ง | 4-1. ์ํ ๋ชฉ๋ก ๊ด๋ฆฌ | 4-1-1. ์ํ ์ ๋ณด ๋ชฉ๋ก ์กฐํ | ์ํ๋ช , ๊ฐ๊ฒฉ, ์์ธ์ค๋ช , ์ฌ๊ณ ํฌํจ | |
| 4-2. ์ํ ๊ด๋ฆฌ | 4-2-1. ์ํ ์ ๋ณด ๋ฑ๋ก | ์ํ๋ช , ๊ฐ๊ฒฉ, ์ฌ๊ณ , ํ ์ธ ์ค์ ๊ฐ๋ฅ | ||
| 4-3. ์ฃผ๋ฌธ/๋ฐฐ์ก ๊ด๋ฆฌ | 4-3-1. ์ฃผ๋ฌธ ๋ชฉ๋ก ์กฐํ | ๊ตฌ๋งค์์ ๋ฐฐ์ก ์ฒ๋ฆฌ ๋ชฉ๋ก ์กฐํ | ||
| 4-3-2. ์ถ๊ณ ๊ด๋ฆฌ | ์ด์ฉ์ ๊ตฌ๋งค ์ํ ๋ฐฐ์ก | |||
| 4-4. ์ ์ฐ | 4-4-1. ์ ์ฐ ์กฐํ | ์ ์ฐ ๊ธ์ก ๋ฐ ๋ ์ง ํ์ธ ๊ฐ๋ฅ | ||
| 4-5. ํ๋งค์ ์ ๋ณด ๊ด๋ฆฌ | 4-5-1. ํ๋งค์ ์ ๋ณด ์กฐํ | ํ๋งค์ ๋ฑ๊ธ, ํ๋งค ๋ด์ญ ํ์ธ | ||
| 5. ๊ณ ๊ฐ ๊ด๋ฆฌ | 5-1. 1:1 ๋ฌธ์ ์๋ | 5-1-1. ๋ฌธ์ ์กฐํ | ์ด์ฉ์ ๋ฌธ์ ๋ชฉ๋ก ์กฐํ ๋ฐ ์์ธ ๋ต๋ณ | |
| 6. ๋ผ์ด๋ธ ์ปค๋จธ์ค | 6-1. ๋ผ์ด๋ธ ์ ์ฒญํ๊ธฐ | ๊ด๋ฆฌ์์๊ฒ ๋ผ์ด๋ธ ๋ฐฉ์ก ์ ์ฒญ ๊ฐ๋ฅ | ||
| 7. ํ๋งค ํต๊ณ | 7-1. ํ๋งค ์ฑ๊ณผ ์กฐํ | ๊ฒฐ์ ๊ธ์ก ๋ฐ ํ๋ถ ํํฉ ์ผ๋ณ ๋ถ์ | ||
| 9. ๋ ์ํผ | 9-1. ๋ ์ํผ ์์ฑ | 9-1-1. ๋ ์ํผ ์์ฑ | ๋ ์ํผ๋ช , ์๊ฐ, ๋ฐฉ๋ฒ ์ ๋ ฅ |
Details
| ๊ถํ | ๋๋ถ๋ฅ | ์ค๋ถ๋ฅ | ์๋ถ๋ฅ | ์ค๋ช |
|---|---|---|---|---|
| ๊ด๋ฆฌ์ | 1. ๋ก๊ทธ์ธ/๋ก๊ทธ์์ | |||
| 2. ์ผ๋ฐ ํ์ ๊ด๋ฆฌ | 2-1. ํ์ ๋ชฉ๋ก ์กฐํ | ์ ์ฒด ํ์ ๋ฐ ํน์ ํ์ ์กฐํ | ||
| 2-2. ํ์ ์์ธ ์กฐํ | 2-2-1. ํ์ ์ ๋ณด ์กฐํ | ๊ฐ์ธ์ ๋ณด ๋ฐ ๋ฑ๊ธ ์กฐํ | ||
| 3. ํ๋งค์ ํ์ ๊ด๋ฆฌ | 3-1. ํ๋งค์ ๋ชฉ๋ก ์กฐํ | 3-1-1. ์ ์ฒด ํ๋งค์ ์กฐํ | ||
| 3-2. ํ๋งค์ ์์ธ ์กฐํ | 3-2-1. ํ๋งค์ ์ ์ฒญ ์กฐํ | ํ๋งค์๊ฐ ์ํ ํ๋งค ์ ์ฒญํ ๋ชฉ๋ก | ||
| 3-2-2. ํ๋งค์ ์ ๋ณด ์กฐํ | ํด๋น ํ์ฌ์ ๊ณ์ ์, ํ๋ ๋ด์ญ, ํ๋งค ์ ํ ๋ฑ | |||
| 3-2-3. ํ๋งค์ ํ์ฑํ | ๋นํ์ฑํ๋ ํ๋งค์ ๊ณ์ ํ์ฑํ | |||
| 4. ๋ผ์ด๋ธ ์ปค๋จธ์ค | 4-1. ๋ผ์ด๋ธ ์๊ฐํ ๊ด๋ฆฌ | 4-1-1. ๋ผ์ด๋ธ ์ ์ฒญ๋ฐ๊ธฐ | ํ๋งค์๊ฐ ์ ์ฒญํ ๋ผ์ด๋ธ ๊ด๋ฆฌ | |
| 5. ์ปจํ ์ธ ๊ด๋ฆฌ | 5-1. ์ฟ ํฐ ๊ด๋ฆฌ | 5-1-1. ์ฟ ํฐ ํํฉ ์กฐํ | ์ฌ์ดํธ ๋ด ๋ชจ๋ ์ฟ ํฐ ์กฐํ | |
| 5-2. ํ๋ฉด ๊ด๋ฆฌ | 5-2-1. ์ด๋ฒคํธ ๋ฐฐ๋ ๋ฑ๋ก | ์ด๋ฒคํธ ๋ฐฐ๋ ์์ฑ ๋ฐ ๊ด๋ฆฌ | ||
| 6. CS ๊ด๋ฆฌ | 6-1. ์๋ฆผ ๊ด๋ฆฌ | 6-1-1. ์๋ฆผ ๋ณด๋ด๊ธฐ | ์ ์ฒด ๋ฐ ๊ฐ๋ณ ์๋ฆผ ์ ์ก ๊ฐ๋ฅ | |
| 6-2. ๊ณ ๊ฐ ์ผํฐ ๊ด๋ฆฌ | 6-2-1. ๋ฌธ์ ์กฐํ | ์ด์ฉ์ ๋ฌธ์ ๋ด์ฉ ํ์ธ | ||
| 6-3. ๊ณต์ง์ฌํญ ๊ด๋ฆฌ | 6-3-1. ๊ณต์ง์ฌํญ ์กฐํ | ์ด์ฉ์/ํ๋งค์๋ณ ๊ณต์ง ๊ตฌ๋ถ ๊ฐ๋ฅ |
BobIssue WBS ๋ณด๊ธฐ
[WBS ๋ณด๊ธฐ](./exec/image/WBS.pdf)API ์ฐ๋๊ท๊ฒฉ์ ๋ณด๊ธฐ
[API ๋ช ์ธ์ ๋ณด๊ธฐ](./exec/image/API.pdf)Querydsl
-
ํ์ ์์ ํ SQL ์ฟผ๋ฆฌ ๋น๋
- ์ปดํ์ผ ์์ ์ ์ค๋ฅ๋ฅผ ์ก์๋ผ ์ ์์ด ์์ ์
- IDE์ ์๋์์ฑ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ด ๊ฐ๋ฐ์ด ์์ํจ
- ๋์ ์ฟผ๋ฆฌ ์์ฑ์ด ๋งค์ฐ ํธ๋ฆฌํจ
-
์ค๋ฌด์ ์ด์
- ์ฟผ๋ฆฌ ์กฐ๊ฑด๋ค์ ์ฌ์ฌ์ฉํ๊ธฐ ์ฌ์
- ์ฝ๋ ๊ธฐ๋ฐ์ด๋ผ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํจ
- ๋ณต์กํ ์๋ธ์ฟผ๋ฆฌ๋ ์กฐ์ธ๋ ๊น๋ํ๊ฒ ํํ ๊ฐ๋ฅ
- ๋ฉ์๋ ์ฒด์ด๋์ผ๋ก ์ง๊ด์ ์ธ ์ฟผ๋ฆฌ ์์ฑ์ด ๊ฐ๋ฅํจ
-
์ฃผ์ํด์ผ ํ ์
- ์คํ๋๋ SQL์ ํ์ธํ๋ฉฐ ์ฑ๋ฅ์ ๊ณ ๋ คํด์ผ ํจ
- ๊ธฐ๋ณธ์ ์ธ SQL ์ง์์ด ๋ฐ๋์ ํ์ํจ
- ๋ณต์กํ ์ฐ์ฐ ๊ณผ์ ์์ ๊ฐ๋ ์ฑ์ด ๋ ๋์
- ์ ์ง๋ณด์๊ฐ ์ฉ์ดํจ
- ์ปดํ์ผ ๋จ๊ณ์์ ์ฟผ๋ฆฌ ์ค๋ฅ๊ฐ ๊ฐ์ง๋จ
- ์นดํ ๊ณ ๋ฆฌ ์๊ฐ ๋ง๊ณ ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ํ ์ผํ๋ชฐ์ ํน์ฑ์ ์ ํฉํจ
- ๋ณต์กํ ํํฐ๋ง ์กฐ๊ฑด์ด๋ ๋ก์ง์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
-
๋ณต์กํ ์ถ์ฒ ์์คํ ๊ตฌํ
- ์นดํ ๊ณ ๋ฆฌ์ ์ธ๊ตฌํต๊ณํ์ ๋ฐ์ดํฐ(์ฑ๋ณ, ์ฐ๋ น๋)๋ฅผ ๊ฒฐํฉํ ๋ง์ถคํ ์ํ ์ถ์ฒ ์์คํ ๊ตฌํ
- ๊ตฌ๋งค ์ด๋ ฅ ๊ธฐ๋ฐ ํ์ ํํฐ๋ง ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
- ๋ ์ํผ ๊ธฐ๋ฐ ์ฐ๊ด ์ํ ์ถ์ฒ ๊ธฐ๋ฅ ๊ฐ๋ฐ
-
๋ค์ํ ํต๊ณ ๋ถ์ ์๊ตฌ์ฌํญ ์ถฉ์กฑ
- ์ฑ๋ณ์ ๋ฐ๋ฅธ ์ํ ์ ํธ๋ ๋ถ์ (getMalePreferredItems, getFemalePreferredItems)
- ์ฌ๊ตฌ๋งค์จ์ด ๋์ ์ ํ ๋ถ์ (getTopRepurchaseItems)
- ๋ฒ ์คํธ์ ๋ฌ ์ํ ๋ถ์ (getBestSellerItems)
-
์๋ธ์ฟผ๋ฆฌ์ ๋ณต์กํ ์กฐ์ธ ์ฒ๋ฆฌ
- ๋ค์ํ ์ํฐํฐ ๊ฐ์ ๋ณต์กํ ๊ด๊ณ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ (์ํ, ์ฃผ๋ฌธ, ์ฌ์ฉ์, ๋ฆฌ๋ทฐ ๋ฑ)
- ์ค์ฒฉ๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ฐ๋ ์ฑ ์๊ฒ ๊ตฌํ
-
๋์ ํํ์ ํ์ฉ
- ์ฌ์ฉ์ ์ฐ๋ น๋ ๊ณ์ฐ์ ์ํ ๋์ ํํ์ ์์ฑ (ageGroupExpr)
- ๋ณต์กํ ํต๊ณ ์์์ SQL ํจ์์ ๊ฒฐํฉํ์ฌ ๊ตฌํ
-
ํจ์จ์ ์ธ ์ฝ๋ ๊ด๋ฆฌ
- ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ด ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ์ต๋๋ค
- ๊ฐ ๊ธฐ๋ฅ๋ณ ๋ฉ์๋ ๋ถ๋ฆฌ๋ก ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ด ํฅ์๋์์ต๋๋ค
-
์ฑ๋ฅ ์ต์ ํ ๊ฒฝํ
- ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๊ณ ๋ คํ ์ค๊ณ๊ฐ ์ค์ํ๋ค๋ ๊ฒ์ ์ค๊ฐํ์ต๋๋ค
- ๋จ์ ORM ๋ฐฉ์๋ณด๋ค ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ DB ๋ ๋ฒจ์์ ์ฒ๋ฆฌํ์ฌ ์ฑ๋ฅ ํฅ์์ ๊ฒฝํํ์ต๋๋ค
-
๋น์ฆ๋์ค ์ธ์ฌ์ดํธ ๋์ถ
- ๋ฐ์ดํฐ ๊ธฐ๋ฐ ํต๊ณ๋ฅผ ํตํด ํ๋งค์์ ๊ด๋ฆฌ์, ์ฌ์ฉ์์๊ฒ ์ ์ฉํ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํ ์ ์์์ต๋๋ค
- ์ฌ์ฉ์ ํ๋ ํจํด ๋ถ์์ ํตํ ๋ง์ถคํ ์๋น์ค ๊ตฌํ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค
-
ํ์ ์์ ์ฑ์ ์ค์์ฑ
- ์ปดํ์ผ ์์ ์ ์ค๋ฅ๋ฅผ ์ก์๋ผ ์ ์์ด ๋ฐํ์ ์๋ฌ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์์ต๋๋ค
- ๋ณต์กํ ์ฟผ๋ฆฌ ์์ฑ ์ IDE์ ์๋์์ฑ ๊ธฐ๋ฅ์ด ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฌ๊ฒ ํฅ์์์ผฐ์ต๋๋ค
-
์ํ ์ถ์ฒ ์์คํ
- ์ฑ๋ณ/์ฐ๋ น๋๋ณ ๊ตฌ๋งค ํจํด ๋ถ์
- ์นดํ ๊ณ ๋ฆฌ๋ณ ์ธ๊ธฐ ์ํ ์ถ์ถ
- ์ฐ๊ด ์ํ ์ถ์ฒ
-
๋งค์ถ ๋ถ์
- ๊ธฐ๊ฐ๋ณ ๋งค์ถ ์ง๊ณ
- ํ๋งค์๋ณ ์ค์ ๋ถ์
- ์ํ๋ณ ํ๋งค ํต๊ณ
- ์๊ฐ๋๋ณ ํ๋งค ๋ถ์
- ํ๋งค๋ ์์ธก
-
๊ณ ๊ฐ ํ๋ ๋ถ์
- ๊ตฌ๋งค ํจํด ๋ถ์
- ์ฌ๊ตฌ๋งค์จ ๊ณ์ฐ
- ์ฑ๋ณ/์ฐ๋ น๋๋ณ ์ ํธ๋ ๋ถ์
AWS S3
implementation group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.12.780' // S3 ๋ฒํท ์ ๊ทผ
implementation 'io.awspring.cloud:spring-cloud-aws-starter:3.1.1' // SpringBoot AWS ํตํฉ
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'- Java 17
- Spring Boot 3.4.1
spring:
application:
name: spring-project
profiles:
include: awscloud:
aws:
credentials:
access-key: [your-access-key]
secret-key: [your-secret-key]
region:
static: ap-northeast-2
stack:
auto: false
s3:
bucket: example-dev-storage-ap@Configuration
public class S3Config {
@Value("${cloud.aws.credentials.access-key}")
private String accessKey;
@Value("${cloud.aws.credentials.secret-key}")
private String secretKey;
@Value("${cloud.aws.region.static}")
private String region;
@Bean
public AmazonS3Client amazonS3Client() {
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
return (AmazonS3Client) AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.build();
}
}@Service
@RequiredArgsConstructor
public class S3Service {
private final AmazonS3Client amazonS3Client;
@Value("${cloud.aws.s3.bucket}")
private String bucket;
// ํ์ผ ์
๋ก๋
public String uploadFile(String dirName, MultipartFile file) {
try {
validateFile(file);
String fileName = createFileName(getExtension(file.getOriginalFilename()));
String fileUrl = dirName + "/" + fileName;
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(file.getContentType());
metadata.setContentLength(file.getSize());
amazonS3Client.putObject(
new PutObjectRequest(bucket, fileUrl, file.getInputStream(), metadata)
.withCannedAcl(CannedAccessControlList.PublicRead)
);
return amazonS3Client.getUrl(bucket, fileUrl).toString();
} catch (IOException e) {
throw new BobIssueException(ResponseCode.FILE_UPLOAD_ERROR);
}
}
// ํ์ผ ๊ฒ์ฆ
private void validateFile(MultipartFile file) {
String contentType = file.getContentType();
if (contentType == null || !contentType.startsWith("image/")) {
throw new BobIssueException(ResponseCode.INVALID_FILE_TYPE);
}
if (file.getSize() > 10 * 1024 * 1024) {
throw new BobIssueException(ResponseCode.FILE_SIZE_EXCEED);
}
}
// ํ์ผ๋ช
์์ฑ
private String createFileName(String ext) {
return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
+ "-"
+ UUID.randomUUID().toString()
+ ext;
}
private String getExtension(String fileName) {
if (fileName == null) return "";
int lastIndex = fileName.lastIndexOf(".");
if (lastIndex == -1) return "";
return fileName.substring(lastIndex);
}
// ์ฌ๋ฌ ํ์ผ ์
๋ก๋
public List<String> uploadFiles(String dirName, List<MultipartFile> files) {
return files.stream()
.map(file -> uploadFile(dirName, file))
.collect(Collectors.toList());
}
// ํ์ผ ์ญ์
public void deleteFile(String fileUrl) {
try {
String key = extractKeyFromUrl(fileUrl);
amazonS3Client.deleteObject(bucket, key);
} catch (Exception e) {
throw new BobIssueException(ResponseCode.FAILED_DELETE_IMAGE);
}
}
private String extractKeyFromUrl(String fileUrl) {
try {
java.net.URL url = new java.net.URL(fileUrl);
String path = url.getPath();
if (path.startsWith("/")) {
path = path.substring(1);
}
return path;
} catch (Exception e) {
throw new BobIssueException(ResponseCode.INVALID_FILE_URL);
}
}
public void deleteFiles(List<String> fileUrls) {
for (String fileUrl : fileUrls) {
deleteFile(fileUrl);
}
}
}// ๋จ์ผ ํ์ผ ์
๋ก๋
String fileUrl = s3Service.uploadFile("images", multipartFile);
// ์ฌ๋ฌ ํ์ผ ์
๋ก๋
List<String> fileUrls = s3Service.uploadFiles("images", multipartFiles);
// ํ์ผ ์ญ์
s3Service.deleteFile(fileUrl);-
ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์ ์ด์
- ์๋ฒ ๋ถํ ๊ฐ์ ๋ฐ ์ด๋ฏธ์ง ๋ก๋ฉ ์๋ ๊ฐ์
- ๋์ฉ๋ ํ์ผ์ ์์ ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์ํ ์ด๋ฏธ์ง ๋ค์ ๊ด๋ฆฌ์ ํ์ํ ํ์ฅ์ฑ ํ๋ณด
-
๋ณด์๊ณผ ์ฑ๋ฅ์ ๊ท ํ
- ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ ๊ฒ์ฆ์ ์ค์์ฑ ์ธ์
- XSS, ์ ์ฑ์ฝ๋ ๋ฑ ๋ณด์ ์ทจ์ฝ์ ์ฌ์ ๋ฐฉ์ง
-
๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์
- ํ์ผ ๊ด๋ฆฌ ๋ก์ง ์ถ์ํ๋ก ์ฝ๋ ๊ฐ๊ฒฐํ
- ์ฌ๋ฌ ๊ธฐ๋ฅ์์ ์ฝ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
- ํต์ผ๋ ์์ธ ์ฒ๋ฆฌ๋ก ์ ์ง๋ณด์ ์ฉ์ด
-
๋น์ฉ ์ต์ ํ
- S3 ์ฌ์ฉ ๋น์ฉ ๋ชจ๋ํฐ๋ง ๋ฐฉ๋ฒ ํ์ต
- ๋ถํ์ํ ํ์ผ ์ ์ฅ ๋ฐฉ์ง ์ ์ฑ ์๋ฆฝ
OAuth2
- OAuth 2.0์ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ๋ฅผ ์ํ ์ ๊ณ ํ์ค ํ๋กํ ์ฝ
- ์ฌ์ฉ์์ ๊ณ์ ์ ๋ณด๋ฅผ ์ธ๋ถ ์๋น์ค์ ์ ๊ณตํ์ง ์๊ณ ์์ ํ๊ฒ ๋ก๊ทธ์ธ ๋ฐ ๊ถํ์ ์์ํ๋ ๋ฐฉ์
- ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ
- Spring Security์ OAuth2 Client๊ฐ ์นด์นด์ค ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋๋ ์
- ์ฌ์ฉ์๊ฐ ์นด์นด์ค ๋ก๊ทธ์ธ ํ ์ธ๊ฐ ์ฝ๋ ๋ฐํ
- Spring Security๊ฐ ์ธ๊ฐ ์ฝ๋๋ฅผ ์ด์ฉํด Access Token ์์ฒญ
- Access Token์ ์ด์ฉํด ์ฌ์ฉ์ ์ ๋ณด ์์ฒญ
- ์๋ต๋ฐ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์๊ฐ์ ๋๋ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
- JWT๋ฅผ ๋ฐ๊ธํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
JWT ๊ธฐ๋ฐ Access Token & Refresh Token
- JWT(JSON Web Token)๋ ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ์ ๋ณด ์ ๋ฌ์ ์ํด ์ฌ์ฉํ๋ ํ ํฐ ๋ฐฉ์
- JSON ํํ๋ก ์ ๋ณด๋ฅผ ๋ด์ Base64Url๋ก ์ธ์ฝ๋ฉํ์ฌ ์ฌ์ฉ
- ์๋ช ์ ํฌํจํ์ฌ ๋ณ์กฐ๋ฅผ ๋ฐฉ์งํ ์ ์์
- ๋ณ๋์ ์ธ์ ์ ์ฅ์ ์์ด ์ธ์ฆ ๊ฐ๋ฅํด Statelessํจ
- Header : ์๊ณ ๋ฆฌ์ฆ, ํ์ ์ ๋ณด
- Payload : ์ฌ์ฉ์ ์ ๋ณด, ๊ถํ ๋ฑ
- Signature : ์๋ช , ๋ณ์กฐ ๋ฐฉ์ง
-
์ธ์ ๋ฐฉ์๋ณด๋ค ํจ์จ์
-
์๋ฒ์์ ๋ณ๋์ ์ธ์ ์ ์ฅ ์์ด Stateless ์ธ์ฆ ๊ฐ๋ฅ
-
์ฌ๋ฌ ๊ฐ์ ์๋ฒ์์๋ ๋์ผํ ์ธ์ฆ ์ ์ง ๊ฐ๋ฅ
-
-
๋ณด์์ฑ์ด ๋์
-
RESTful API์ ์ ํฉ
-
Access Token
-
์งง์ ์ ํจ๊ธฐ๊ฐ
-
์ฌ์ฉ์ ์ธ์ฆ ์ API ์์ฒญ์ ์ฌ์ฉ
-
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ๋ง๋ค ํฌํจํ์ฌ ์๋ฒ๋ก ์ ์ก
-
-
Refresh Token
-
๊ธด ์ ํจ๊ธฐ๊ฐ
-
Access Token์ด ๋ง๋ฃ๋์์ ๋ ์๋ก ๋ฐ๊ธํ๋ ๋ฐ ์ฌ์ฉ
-
Redis์ ์ ์ฅํ์ฌ ๋ณด์ ๊ฐํ
-
-
API ์์ฒญ๋ง๋ค Authorization: Bearer {AccessToken} ํค๋๋ฅผ ํ์ธ
-
Access Token์ด ์ ํจํ๋ฉด โ ์์ฒญ ์ฒ๋ฆฌ ํ ์๋ต ๋ฐํ
-
Access Token์ด ๋ง๋ฃ๋์์ผ๋ฉด Refresh Token์ ํ์ธ
-
Refresh Token์ Redis์ ์ ์ฅ
-
Access Token์ด ๋ง๋ฃ๋์์ ๋, Refresh Token์ ํ์ธ
-
์ ํจํ๋ฉด โ ์๋ก์ด Access Token์ ๋ฐ๊ธ ํ ์๋ต
-
์ ํจํ์ง ์์ผ๋ฉด โ ๋ก๊ทธ์์ ์ฒ๋ฆฌ
-
-
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์์ํ๋ฉด Redis์์ ํด๋น Refresh Token์ ์ฆ์ ์ญ์
-
์ดํ ํด๋น ์ฌ์ฉ์๋ Refresh Token์ ์ฌ์ฉํ ์ ์์ โ ์ฌ๋ก๊ทธ์ธ์ด ํ์
ํด๋ผ์ด์ธํธ์ ์ ์ฅํ์ง ์๊ณ ์๋ฒ(Redis)์์๋ง ๊ด๋ฆฌํ์ฌ ์ ์ถ ์ํ ๊ฐ์
-
WT ์์ฒด๋ ๋ง๋ฃ ์ ๊น์ง ๋ฌดํจํํ ์ ์์ง๋ง, Redis์์ Refresh Token์ ๊ด๋ฆฌํ๋ฉด ์ํ๋ ์์ ์ ์ฆ์ ๋ง๋ฃ ๊ฐ๋ฅ
-
๋ก๊ทธ์์ ์ Refresh Token์ ์ญ์ ํ์ฌ ํ์ทจ๋ ํ ํฐ์ด๋๋ผ๋ ์ฌ์ฉํ ์ ์์
Statelessํ JWT์ ์ฅ์ ์ ์ ์งํ๋ฉด์๋ Redis๋ฅผ ํ์ฉํ์ฌ ์์ ํ๊ฒ ์ธ์ฆ ๊ด๋ฆฌ ๊ฐ๋ฅ
WebSocket
WebSocket์ ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋กํ ์ฝ์ ๋๋ค.
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ง์์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ ์งํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์
- HTTP๋ณด๋ค ์ค๋ฒํค๋๊ฐ ๋ฎ๊ณ ๋น ๋ฆ
- ์ค์๊ฐ ์ฑํ , ์๋ฆผ ์์คํ ๋ฑ ๋ค์ํ ์๋น์ค์ ํ์ฉ ๊ฐ๋ฅ
| ๋น๊ต ํญ๋ชฉ | WebSocket | HTTP |
|---|---|---|
| ์ฐ๊ฒฐ ๋ฐฉ์ | ์ง์์ ์ธ ์ฐ๊ฒฐ ์ ์ง | ์์ฒญ-์๋ต ํ ์ฐ๊ฒฐ ์ข ๋ฃ |
| ๋ฐ์ดํฐ ๊ตํ ๋ฐฉ์ | ํด๋ผ์ด์ธํธ โ ์๋ฒ ๊ฐ ์์ ๋กญ๊ฒ ๋ฉ์์ง ์ ์ก ๊ฐ๋ฅ | ํด๋ผ์ด์ธํธ ์์ฒญ์ ์๋ฒ๊ฐ ์๋ต |
| ์ฌ์ฉ ์ฌ๋ก | ์ค์๊ฐ ์ฑํ , ์ฃผ์ ์์ธ, ์๋ฆผ | ์ผ๋ฐ์ ์ธ ์นํ์ด์ง ์์ฒญ/์๋ต |
| ๋น๊ต ํญ๋ชฉ | STOMP | Socket.IO |
|---|---|---|
| ๊ธฐ๋ฐ ํ๋กํ ์ฝ | WebSocket + ๋ฉ์์ง ํ๋กํ ์ฝ | WebSocket + HTTP ํด๋ฐฑ |
| ์๋ฒ ํ๊ฒฝ | Spring WebSocket๊ณผ ๊ฒฐํฉ | Node.js ๊ธฐ๋ฐ์ ์ค์๊ฐ ์ฑ |
| ๋ฐ์ดํฐ ์ ์ก | ๋ฉ์์ง ํ ๊ธฐ๋ฐ (Pub/Sub) | ์ด๋ฒคํธ ๊ธฐ๋ฐ ํต์ |
| ๋ธ๋ผ์ฐ์ ์ง์ | WebSocket ์ง์ ํ์ | WebSocket ๋ฏธ์ง์ ์ HTTP ํด๋ง ์ฌ์ฉ ๊ฐ๋ฅ |
| ์ฌ์ฉ ์ฌ๋ก | ๊ธฐ์ ํ ์ ํ๋ฆฌ์ผ์ด์ , ์ฑํ ์์คํ , ๋ฉ์์ง ํ | ์ค์๊ฐ ๊ฒ์, ์์ ํผ๋, ์๋ฆผ ์์คํ |
- Spring WebSocket๊ณผ์ ๋์ ํธํ์ฑ
- Spring Messaging์ ํตํด ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅ
- Spring Security์๋ ์ฐ๋์ด ์ฌ์
- ๋ฉ์์ง ๋ธ๋ก์ปค(Pub/Sub) ์ง์
- STOMP๋ RabbitMQ, ActiveMQ, Redis Pub/Sub ๊ฐ์ ๋ฉ์์ง ๋ธ๋ก์ปค์ ํตํฉ ๊ฐ๋ฅ
- ์ฌ๋ฌ ์๋ฒ์์ ๊ฐ์ ๋ฉ์์ง๋ฅผ ๊ตฌ๋
ํ๊ณ ์ฒ๋ฆฌํ ์ ์์ด ํ์ฅ์ฑ์ด ๋ฐ์ด๋จ
- ์ฑํ ๋ฐฉ ๊ตฌ์กฐ์ ์ ํฉํ ๋ฉ์์ง ์์คํ
- ์ฑํ
๋ฐฉ๋ง๋ค ๊ฐ๋ณ topic์ ๋ง๋ค์ด ๊ตฌ๋
ํ๋ฉด, ํด๋น ๋ฐฉ์ ์ฌ์ฉ์๋ค๋ง ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ ์์
- ๋ฉ์์ง๋ฅผ ๋ค์์ ์ฌ์ฉ์์๊ฒ ์ ์ก ์ฒ๋ฆฌ์ ์ฉ์ด
- ์ ์ง๋ณด์ ์ฉ์ด
- STOMP๋ WebSocket์ ์ง์ ๋ค๋ฃจ๋ ๊ฒ๋ณด๋ค ์ถ์ํ๋์ด ์์ด ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์
- ํ
์คํธ ๊ธฐ๋ฐ ํ๋กํ ์ฝ์ด๋ฏ๋ก ๋ฉ์์ง ๋๋ฒ๊น
์ด ์ฌ์
Redis์ MongoDB๋ฅผ ํ์ฉํ ์ฑํ ๊ด๋ฆฌ
- ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค -> ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ์ฌ ๋งค์ฐ ๋น ๋ฅธ ์๋๋ก ์ฝ๊ณ ์ธ ์ ์์
- Key-Value ๊ตฌ์กฐ โ ๋จ์ํ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ๊ทผ์ด ์ฉ์ด
- Pub/Sub ๊ธฐ๋ฅ ์ ๊ณต โ ๋ฉ์์ง ๋ธ๋ก์ปค ์ญํ ์ ์ํํ๋ฉฐ ์ค์๊ฐ ์ฑํ ์ ์ ํฉ
- TTL(๋ง๋ฃ ์๊ฐ) ์ค์ ๊ฐ๋ฅ โ ํน์ ์๊ฐ ์ดํ ์๋ ์ญ์ ๋๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๊ฐ๋ฅ
- ๋จ์ : ์๊ตฌ ์ ์ฅ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐ
- NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค โ JSON ํํ์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ต์ ํ
- ์์ง ๋ฐ ์ํ ํ์ฅ ์ฉ์ด โ ์ค๋ฉ(Sharding)๊ณผ ๋ณต์ (Replication) ๊ธฐ๋ฅ์ผ๋ก ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๋น ๋ฅธ ์กฐํ ์ฑ๋ฅ โ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ์ฌ์ฉ์๋ณ/์ฑํ ๋ฐฉ๋ณ ๋ฐ์ดํฐ ๊ฒ์ ์ต์ ํ ๊ฐ๋ฅ
- ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ ๊ฐ๋ฅ โ ์ฑํ ๋ก๊ทธ, ์ฒจ๋ถ ํ์ผ, ์ ์ ํ๋ ๊ธฐ๋ก ๊ด๋ฆฌ์ ์ ํฉ
- ๋จ์ : ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฒ๋ผ ๊ฐ๋ ฅํ ํธ๋์ญ์ ์ง์ ๋ถ์กฑ (ํ์ง๋ง ์ฑํ ๋ฐ์ดํฐ์๋ ํฐ ๋ฌธ์ ์์)
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS) โ ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ์ค์ ํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง
- ACID(Atomicity, Consistency, Isolation, Durability) ๋ณด์ฅ โ ํธ๋์ญ์ ์ฒ๋ฆฌ์ ๊ฐ์
- ์ ํํ๋ ๋ฐ์ดํฐ ์ ์ฅ์ ์ ํฉ โ ์ ํด์ง ์คํค๋ง์ ๋ง์ถฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ์
์ค์๊ฐ ์ฑํ ์์ MySQL์ ๋น๋ฒํ ๋ฐ์ดํฐ ์ฝ์ ยท์ญ์ ๊ฐ ๋ฐ์ํ์ฌ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ
์ค์ผ์ผ ์์(Scale-out)์ด ์ด๋ ต๊ณ , ํธ๋ํฝ ์ฆ๊ฐ ์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ๊ธ๊ฒฉํ ์ ํ๋จ
JSON ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ง๋ง, ๋ณ๋์ ํ์ฑ ๊ณผ์ ์ด ํ์ํ์ฌ ์ฑ๋ฅ ์ ํ ๋ฐ์
-
๋น ๋ฅธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋
- ์ธ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ด๋ฏ๋ก ์ค์๊ฐ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์
-
Pub/Sub ๊ธฐ๋ฅ ์ง์
- ๋ค์์ ์ฌ์ฉ์์๊ฒ ๋์์ ๋ฉ์์ง๋ฅผ ๋ธ๋ก๋์บ์คํธ ๊ฐ๋ฅ
-
์ฌ์ฉ์ ์จ๋ผ์ธ ์ํ ๊ด๋ฆฌ ๊ฐ๋ฅ
- TTL์ ํ์ฉํ์ฌ ์ผ์ ์๊ฐ ํ ์๋์ผ๋ก ๋ฐ์ดํฐ ์ญ์ ๊ฐ๋ฅ
-
๋๋์ ๋ฐ์ดํฐ ์ ์ฅ ๊ฐ๋ฅ
- JSON ํ์์ผ๋ก ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ
-
๊ฒ์ ๋ฐ ์กฐํ ์ต์ ํ
- ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ํน์ ์ฌ์ฉ์ ๋๋ ์ฑํ ๋ฐฉ์ ๋ฉ์์ง๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ ๊ฐ๋ฅ
-
ํ์ฅ์ฑ ์ฐ์
- ํธ๋ํฝ ์ฆ๊ฐ ์ ์ค๋ฉ์ ํตํด ์ฌ๋ฌ ๋ ธ๋์ ๋ฐ์ดํฐ ๋ถ์ฐ ๊ฐ๋ฅ
-
ํ์ด๋ธ๋ฆฌ๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ (ํ๋ฐ์ฑ + ์๊ตฌ ์ ์ฅ)
-
Redis๋ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ด๋ฏ๋ก ๋น ๋ฅด์ง๋ง ๋ฐ์ดํฐ๊ฐ ํ๋ฐ์ฑ(Volatile)์ด๋ผ ์๊ตฌ ์ ์ฅ ๋ถ๊ฐ๋ฅ
-
MongoDB๋ ๋์คํฌ ๊ธฐ๋ฐ์ด๋ฏ๋ก ์๊ตฌ ์ ์ฅ ๊ฐ๋ฅํ์ง๋ง ์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ์ด๋ ค์
-
์ค์๊ฐ ์ฑํ ์ Redis์์ ๊ด๋ฆฌํ๊ณ , ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ๋ฐ์ดํฐ๋ฅผ MongoDB๋ก ์ ์ฅํ์ฌ ์๊ตฌ ๋ณด๊ด
-
-
๋น ๋ฅธ ์๋ต๊ณผ ๋ฐ์ดํฐ ๋ณด์กด์ ๋์์ ํด๊ฒฐ
-
์ฌ์ฉ์๊ฐ ์ฑํ ๋ฐฉ์ ์ ์ํ๋ฉด Redis์์ ์ต๊ทผ ์ฑํ ๋ฉ์์ง๋ฅผ ๋น ๋ฅด๊ฒ ๋ถ๋ฌ์ค๊ธฐ
-
๊ณผ๊ฑฐ ๋ฉ์์ง ์กฐํ ์ MongoDB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ์ฌ ์ ๊ณต
-
-
์์คํ ์์ ์ฑ ๋ฐ ์ฅ์ ๋์
-
Redis๋ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ด๋ฏ๋ก ์๋ฒ ์ฌ์์ ์ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์์
-
MongoDB์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์๋ฒ ์ฅ์ ๋ฐ์ ์์๋ ์ ์ง๋์ด ์ฑํ ๊ธฐ๋ก์ ๋ณต์ ๊ฐ๋ฅ
-
WebRtc
WebRTC(Web Real-Time Communication)๋ ์น ๋ธ๋ผ์ฐ์ ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ๋ฌ๊ทธ์ธ ์์ด ์ค์๊ฐ ์์ฑยท์์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ธฐ์
- P2P (Peer-to-Peer) ์ฐ๊ฒฐ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ฃผ๊ณ ๋ฐ์ ์ ์์
- ๋ฎ์ ์ง์ฐ์๊ฐ(Low Latency)์ ์ ๊ณตํ์ฌ ์ค์๊ฐ ์ํต์ด ๊ฐ๋ฅ
- ์น ํ์ค API๋ฅผ ํ์ฉํ์ฌ ๋ณ๋์ ํ๋ฌ๊ทธ์ธ ์์ด ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ค๋์ค ๋ฐ ๋น๋์ค ์คํธ๋ฆฌ๋ฐ
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์๊ฐ ์์ ๋ฐ ์์ฑ ์ ์ก
- P2P ๊ธฐ๋ฐ ํต์
- ์ค์ ์๋ฒ๋ฅผ ๊ฑฐ์น์ง ์๊ณ , ์ฌ์ฉ์ ๊ฐ ์ง์ ์ฐ๊ฒฐ(Peer-to-Peer) ๊ฐ๋ฅ
- ๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ ์ง์
- NAT ๋ฐ ๋ฐฉํ๋ฒฝ์ ์ฐํํ์ฌ ์ฐ๊ฒฐ ๊ฐ๋ฅ (STUN/TURN ์๋ฒ ํ์ฉ)
- getUserMedia()
- ์ฌ์ฉ์์ ์นด๋ฉ๋ผ์ ๋ง์ดํฌ ๊ถํ์ ์์ฒญํ์ฌ ์์ยท์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
- RTCPeerConnection
- P2P ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ , ๋ฏธ๋์ด ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ก
- ์ฌ์ฉ์๊ฐ ์นด๋ฉ๋ผยท๋ง์ดํฌ ์ ๊ทผ์ ํ์ฉํ๋ฉด
getUserMedia()๋ก ๋ฏธ๋์ด ์คํธ๋ฆผ์ ๊ฐ์ ธ์ด RTCPeerConnection์ ์์ฑํ์ฌ P2P ์ฐ๊ฒฐ์ ์ค์ - SDP(Session Description Protocol) ๊ตํ์ ํตํด ์๋ก์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ๊ณต์
- ICE(Interactive Connectivity Establishment) ํ๋ณด๋ฅผ ๊ตํํ์ฌ ์ต์ ์ ๋คํธ์ํฌ ๊ฒฝ๋ก ์ค์
- P2P ์ฐ๊ฒฐ์ด ์๋ฃ๋๋ฉด, ์ค๋์คยท๋น๋์ค ๋ฐ์ดํฐ๊ฐ ์คํธ๋ฆฌ๋ฐ๋จ
- ๊ธฐ์กด HTTP ๊ธฐ๋ฐ ์คํธ๋ฆฌ๋ฐ๋ณด๋ค WebRTC๋ ๊ฑฐ์ ์ค์๊ฐ(์ด์ ์ง์ฐ) ์ ์ก์ ์ ๊ณต
- ํ๋งค์์ ๊ณ ๊ฐ ๊ฐ ๋น ๋ฅธ ํผ๋๋ฐฑ์ ์ฃผ๊ณ ๋ฐ์ ์ค์๊ฐ ์ํต ๊ฐ๋ฅ
- ํฌ๋ก์ค ํ๋ซํผ ์ง์ โ PC/๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์์ ํ๋ฌ๊ทธ์ธ ์์ด ๋์
- ๋ณ๋์ ์ฑ ์ค์น ์์ด ์น ํ๊ฒฝ์์ ๋ฐ๋ก ๋ผ์ด๋ธ ์ปค๋จธ์ค ๊ธฐ๋ฅ ๊ตฌํ ๊ฐ๋ฅ
- ์๋ฒ ๋ถํ๋ฅผ ์ค์ด๊ณ ๋น์ฉ ์ ๊ฐ ๊ฐ๋ฅ
- ํ์์ ๋ฐ๋ผ SFU(Selective Forwarding Unit) ๋ฐฉ์์ ํ์ฉํ์ฌ ๋ค์์ ์์ฒญ์๊ฐ ์ฐธ์ฌ ๊ฐ๋ฅ
- ํ๋งค์๊ฐ ๋ผ์ด๋ธ ๋ฐฉ์ก์ ์ก์ถํ๊ณ , ์ฌ๋ฌ ๋ช ์ ๊ณ ๊ฐ์ด ๋์์ ์์ฒญ ๊ฐ๋ฅ
- WebRTC๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํธํ(Encryption)๋ฅผ ์ ์ฉํ์ฌ ๋ณด์์ฑ์ด ๋ฐ์ด๋จ
- ๋ฏผ๊ฐํ ๊ณ ๊ฐ ์ ๋ณด๊ฐ ํฌํจ๋ ์ปค๋จธ์ค ํ๊ฒฝ์์๋ ์์ ํ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ
ElasticSearch
Apache Lucene( ์ํ์น ๋ฃจ์ฌ ) ๊ธฐ๋ฐ์ Java ์คํ์์ค ๋ถ์ฐ ๊ฒ์ ์์ง์ผ๋ก, ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ฒ ์ค์๊ฐ์ผ๋ก ์ ์ฅ, ๊ฒ์, ๋ถ์ํ ์ ์์ต๋๋ค.
์๋ผ์คํฑ ์์น๋ ๋จ๋ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ์ง๋ง, ELK( Elasticsearch / Logstatsh / Kibana )์คํ์ผ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค.
Logstash : ๋ค์ํ ์์ค( DB, csvํ์ผ ๋ฑ )์ ๋ก๊ทธ ๋๋ ํธ๋์ญ์ ๋ฐ์ดํฐ๋ฅผ ์์ง, ์ง๊ณ, ํ์ฑํ์ฌ Elasticsearch๋ก ์ ๋ฌ
Kibana : Elasticsearch์ ๋น ๋ฅธ ๊ฒ์์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์๊ฐํ ๋ฐ ๋ชจ๋ํฐ๋ง
-
์ค์๊ฐ ๊ฒ์ ๋ฐ ๋ถ์:
๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์์ ๋ ๋ ๊ฑฐ์ ์ค์๊ฐ์ผ๋ก ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฐ์๋์ด, ๋น ๋ฅธ ๊ฒ์ ์๋ต ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
ํ์ฅ์ฑ:
๋ถ์ฐ ์ํคํ ์ฒ๋ฅผ ์ฑํํ์ฌ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ ธ๋์ ๋ถ์ฐ์ํฌ ์ ์์ด, ๋ฐ์ดํฐ ์์ด ์ฆ๊ฐํ๋๋ผ๋ ์์คํ ํ์ฅ์ด ์ฉ์ดํฉ๋๋ค.
-
๊ฐ๋ ฅํ ๊ฒ์ ๊ธฐ๋ฅ:
๋จ์ ํ ์คํธ ๊ฒ์ ๋ฟ๋ง ์๋๋ผ, ๋ณต์กํ ์ฟผ๋ฆฌ, ํํฐ๋ง, ์ง๊ณ(aggregations) ๊ธฐ๋ฅ ๋ฑ์ ์ง์ํ์ฌ ๋ค์ํ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๋ง๋ ๊ฒ์ ์๋ฃจ์ ์ ๊ตฌํํ ์ ์์ต๋๋ค.
-
์ ์ฐํ ๋ฐ์ดํฐ ๋ชจ๋ธ:
JSON ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์์ ์ฑํํด ์คํค๋ง๊ฐ ์์ ๋ก์, ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์ต๋๋ค.
-
๋ค์ํ ํ์ฉ ์ฌ๋ก:
์น์ฌ์ดํธ ๊ฒ์, ๋ก๊ทธ ๋ถ์, ์ค์๊ฐ ๋ชจ๋ํฐ๋ง, ๋ฐ์ดํฐ ๋ถ์ ๋ฑ ์ฌ๋ฌ ๋ถ์ผ์์ ํ์ฉ๋๋ฉฐ, Kibana์ ๊ฐ์ ์๊ฐํ ๋๊ตฌ์ ์ฐ๊ณํ์ฌ ๋ฐ์ดํฐ ์ธ์ฌ์ดํธ๋ฅผ ๋์ถํ๋ ๋ฐ ํจ๊ณผ์ ์ ๋๋ค.
Elasticsearch์ ํ๊ธ ํํ์ ๋ถ์๊ธฐ์ธ nori๋ฅผ ์ ์ฉํ์ฌ ํ๊ธ ๋ฌธ์์ ์์ธ ๋ฐ ๊ฒ์ ์ฑ๋ฅ์ ์ต์ ํํ์์ต๋๋ค.
implementation 'org.springframework.data:spring-data-elasticsearch'
sudo bin/elasticsearch-plugin install analysis-nori
sudo systemctl restart elasticsearchโnori๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์คํ๋ง์์ document.๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ์ง ์์
Spring Boot Starter Mail
Spring Boot Starter Mail์ ํ์ฉํด ๊ตฌ๊ธ SMTP ์๋ฒ๋ฅผ ํตํด ์ด๋ฉ์ผ ๋ฐ์ก์ ๊ตฌํํ์์ต๋๋ค. ๊ด๋ฆฌ์๊ฐ ๊ตฌ๋งค์, ํ๋งค์์๊ฒ ๋ฌธ์ ๋ต๋ณ, ๊ด๊ณ ๋ฑ์ ๋ค์ํ ์ํฉ์์ ์ด๋ฉ์ผ ์ ์ก์ด ํ์ํ ๋ ํ์ฉํ ์ ์์ต๋๋ค.
์์กด์ฑ ์ถ๊ฐ
implementation 'org.springframework.boot:spring-boot-starter-mail'JavaMailSender : Spring Framework์์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ก, JavaMail API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฉ์ผ ๋ฐ์ก ๊ธฐ๋ฅ์ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ถ์ํํ ํด๋์ค์
๋๋ค. ์ฃผ๋ก SMTP ์๋ฒ ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์ผ์ ์ ์กํ๋ฉฐ, ๋จ์ ํ
์คํธ ๋ฉ์ผ๋ฟ ์๋๋ผ MIME ๋ฉ์์ง ์ ์ก๋ ์ง์ํฉ๋๋ค.
JavaMailSender : JavaMailSender ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๊ตฌํ์ฒด๋ก, ์ค์ SMTP ์๋ฒ์์ ์ฐ๊ฒฐ ์ค์ (ํธ์คํธ, ํฌํธ, ์ฌ์ฉ์ ์ธ์ฆ ๋ฑ)์ ๊ด๋ฆฌํ๋ฉฐ, JavaMailSender๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ํตํด ์ด๋ฉ์ผ ์ ์ก์ ์ํํฉ๋๋ค.
MimeMessageHelper : MimeMessage ๊ฐ์ฒด๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์์ฑํ๊ณ ๊ตฌ์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ํฌํผ ํด๋์ค์
๋๋ค. HTML ๋ด์ฉ, ์ฒจ๋ถํ์ผ, ์ธ๋ผ์ธ ์ด๋ฏธ์ง ๋ฑ ๋ณต์กํ ๋ฉ์ผ ๋ฉ์์ง ๊ตฌ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ, ๋ค์ํ ํธ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ MIME ๋ฉ์์ง๋ฅผ ๊ฐ๋จํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
- ์ผํ๋ชฐ ์์ฒด ํ์ ๋ก๊ทธ์ธ
- ์์
๋ก๊ทธ์ธ
๐ฌ
- Query DSL์ ์ด์ฉํ ๋ฒ ์คํธ ์ํ
- ์ํ ๊ฒ์
๐ผ๏ธ
 - ์นดํ
๊ณ ๋ฆฌ ๋ณ ์ํ
๐ผ๏ธ
 - ์ฅ๋ฐ๊ตฌ๋ - ์๋ ๋ณ๊ฒฝ, ์ ๊ฑฐ
- ๊ฒฐ์ - ๋ฐฐ์ก์ง, ํฌ์ธํธยท์ฟ ํฐ ์ ์ฉ, ํฌํธ์ API
๐ฌ
- ๋ผ์ด๋ธ ์ปค๋จธ์ค ์์ฒญ ๋ฐ ์ฑํ
๊ธฐ๋ฅ
- ํ๋งค ์ค ์ํ ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ - ๊ฐ๋ณ, ์ ์ฒด
๐ฌ
- ์ด์ฉ์ ํค, ๋ชธ๋ฌด๊ฒ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํ ์ผ์ผ ๊ถ์ฅ ์นผ๋ก๋ฆฌ ๊ณ์ฐ
- ์บ๋ฆฐ๋๋ฅผ ์ด์ฉํ ์ผ์ผ ์๋จ ๋ฑ๋ก
- ๊ถ์ฅ ์นผ๋ก๋ฆฌ ์ด์ ์ญ์ทจ์ ๊ฒฝ๊ณ ํ์
๐ฌ
- ๋ง์ดํ์ด์ง์์ ๋ด ๋ ์ํผ ํ์ธ ๋ฐ ์์ฑ
- ๋ ์ํผ ํ์ด์ง์์ ์ ์ฒด ๋ ์ํผ ํ์ธ
- ๋ ์ํผ ์์ธ์์ ๊ด๋ จ ์ํ ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ
- ๋ง์ดํ์ด์ง-์ ๋ณด๊ด๋ฆฌ
๐ฌ
  - ๋ง์ดํ์ด์ง-์ํ๊ด๋ จ(์ฃผ๋ฌธ๋ด์ญ, ํ๊ธฐ ๋ฑ)
๐ผ๏ธ
  - ๊ณ ๊ฐ์ผํฐ(FAQ, ๊ณต์ง์ฌํญ, ๋ฌธ์)
๐ผ๏ธ
 
๐ฌ
![seller_login]](./exec/sellerGif/ํ์๊ฐ์ ๋ฐ๋ก๊ทธ์ธ.gif)- ํ๋งค์ ๊ณ์ ๋ก๊ทธ์ธ
- ์ธ์ฆ ๋ฐ ๊ถํ ๊ด๋ฆฌ
๐ฌ
- ์ํ ๋ฑ๋ก ๋ฐ ์์
- ์ํ ๋ชฉ๋ก ์กฐํ ๋ฐ ๊ฒ์
- ์ํ ์ญ์
๐ฌ
- ์ฃผ๋ฌธ ๋ด์ญ ํ์ธ ๋ฐ ์ฒ๋ฆฌ
- ๋ฐฐ์ก ์ํ ๋ณ๊ฒฝ ๋ฐ ์ถ์
- ์ฃผ๋ฌธ ์ทจ์ ๋ฐ ํ๋ถ ๊ด๋ฆฌ
๐ฌ
๐ฌ
- ๋ผ์ด๋ธ ์ปค๋จธ์ค ์งํ
- ์ค์๊ฐ ์ฑํ ์ง์
- ํ๋งค ์ค ์ํ ์ถ๊ฐ ๋ฐ ๊ด๋ฆฌ
๐ฌ
- ์ผ๋ณ/์ฃผ๋ณ/์๋ณ ํ๋งค๋ ๋ถ์
- ๋ฒ ์คํธ์ ๋ฌ ์ํ ํ์ธ
- ๋งค์ถ ๋ฐ์ดํฐ ์๊ฐํ
๐ฌ
-
ํ๋งค์ ๋ง์ดํ์ด์ง - ์ ๋ณด ์์
-
๊ณ ๊ฐ ๋ฌธ์ ๊ด๋ฆฌ
๐ฌ
- ํ์ ์ํ๊ด๋ฆฌ(ํ์ฑ/๋นํ์ฑ)
- ํ์ ์์ธ์ ๋ณด ๊ด๋ฆฌ
๐ฌ
- ์์
์ผ๊ด๋ฑ๋ก
- ์์ ํ์ผ ํ ํ๋ฆฟ ๋ค์ด๋ก๋ ์ดํ ๋ชฉ๋ก ์ ๋ฐ์ดํธ ํ์ฌ ๋ฑ๋ก
๐ฌ
- ํ์ ๋์ ๋ฉ์ผ๋ฐ์ก (์ ํ/์ ์ฒด ๋ฐ์ก)
๐ฌ
- ํ๋งค์ ์ํ๊ด๋ฆฌ(ํ์ฑ/๋นํ์ฑ)
- ํ๋งค์ ์์ธ์ ๋ณด ๊ด๋ฆฌ
- ํ๋งค๊ถํ ์น์ธ ์ ์ฐจ
๐ฌ
- ์ถ๊ฐ๊ณ์ ์ง๊ธ ์ฌ๋ถ์ ๋ฐ๋ฅธ ๊ณ์ ํํฉ ํ์
๐ฌ
- ์ผํ๋ชฐ ์ฃผ๋ฌธ ํํฉ ๊ฒ์ ๋ฐ ์์ธ ๊ด๋ฆฌ
๐ฌ
- ๋ผ์ด๋ธ ์ปค๋จธ์ค ์ ์ฒญ์ ๋ด๋ถ ๊ธฐ์ค์ ๋ฐ๋ผ ์น์ธ/๋ฐ๋ ค
- ์น์ธ์ ๋ผ์ด๋ธ ์์ ์บ๋ฆฐ๋์ ๋ฑ๋ก ๋ฐ ๊ด๋ฆฌ
- ๋ผ์ด๋ธ ๋ชจ๋ํฐ๋ง ๋ฐ ์ข
๋ฃ ๊ธฐ๋ฅ
๐ฌ
- Query DSL API๋ฅผ ํ์ฉํ์ฌ ํต๊ณ ๋ถ์ ํ์ด์ง ์ ๊ณต - ํ๋งค์ ํต๊ณ
- ๋งค์ถ ๋ถ์
- ์นดํ
๊ณ ๋ฆฌ ๋ถ์
- ์๊ฐ๋๋ณ ๋ถ์
- ์ ์ ํต๊ณ
- ์ฌ๊ตฌ๋งค์จ ๋ถ์
-
์นดํ ๊ณ ๋ฆฌ ๊ด๋ฆฌ
- ์ผํ๋ชฐ ํ๋งค ์นดํ
๊ณ ๋ฆฌ ์ถ๊ฐ ๋ฐ ์ ์ง๋ณด์
- ์ผํ๋ชฐ ํ๋งค ์นดํ
๊ณ ๋ฆฌ ์ถ๊ฐ ๋ฐ ์ ์ง๋ณด์
-
CS ๊ด๋ฆฌ
- ์ด์ฉ์ ๋์ ๊ณต์ง ๋ฐ ๋ฌธ์์ฌํญ ๊ด๋ฆฌ
- ์ด์ฉ์ ๋์ ๊ณต์ง ๋ฐ ๋ฌธ์์ฌํญ ๊ด๋ฆฌ
-
๊ธฐํ ๋ฑ๋ฑ
์ผํ๋ชฐ ์์คํ ์ด ์์๋ณด๋ค ํจ์ฌ ๋ณต์กํ๊ณ ์กฐ์จํ ์์๊ฐ ๋ง๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ํ์ฅ์ผ๋ก์ ์ด๋ฅผ ํด๊ฒฐํ๋ฉฐ ํ๋ก์ ํธ๋ฅผ ์ด๋์๊ณ , ๋ฐฐํฌ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ง์ ๊ฒฝํํ๋ฉฐ ๊ธฐ์ ์ ์ดํด๋๋ฅผ ๋์ผ ์ ์์์ต๋๋๋ค. ๋ค์ํ ๊ธฐ๋ฅ์ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํํ๋ฉฐ ํ์ธต ์ฑ์ฅํ ์ ์์๋ ๊ฐ์ง ๊ฒฝํ์ด์์ต๋๋ค.
๋จ์ํ CRUD ๊ฐ๋ฐ์ ๋์ด ์๋น์ค ์ด์์ ์ต์ ํ๋ ์์คํ ๊ตฌ์ถ์ ๊ณ ๋ฏผํ๋ฉฐ, React์ Redux๋ฅผ ํ์ฉํด 48๊ฐ์ ๊ด๋ฆฌ์ ํ์ด์ง๋ฅผ ๊ฐ๋ฐํด๋ณผ ์ ์์๋ค. ์ต์ข ๋ฐํ๋ฅผ ์ค๋นํ๋ฉฐ ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ฅผ ๋์ง์ด ๋ณด๊ณ , ๋ฐ์ดํฐ ํ๋ฆ๊ณผ API ์ค๊ณ๊น์ง ๊น์ด ์ดํดํ๊ณ ์ ๋ ธ๋ ฅํ์๋ค.
๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ฒ์ ์ ํ๋ฉด์ ์ผํ๋ชฐ ํ๋ซํผ์ ๊ตฌํํ๋ ์ด๋ฒ ํ๋ก์ ํธ๋ ํ๋ฉด์์ ๋ณด์ด๋ ๋จ์ํ ๊ธฐ๋ฅ๋ค ๋ค์ ์ด๋ ๊ฒ ๋ณต์กํ ๋ก์ง๊ณผ ๊ตฌ์กฐ๊ฐ ์จ์ด์๋ค๋ ์ฌ์ค์ ๋๋์ต๋๋ค. ์ฒ์์๋ ๋ฏ์ค์๋ ๊ธฐ์ ์คํ๋ค์ ํ๋์ฉ ์ตํ๊ณ ์ ์ฉํด๊ฐ๋ ๊ณผ์ ์์ ๋ง์ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์์ง๋ง, ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ์ ์ธ ์์คํ ์ ๊ตฌ์ถํ ์ ์์๋ ์ ์ด ๊ฐ์ฅ ๋ณด๋์ฐผ์ต๋๋ค.
์ฒ์ ์ปจ์คํดํธ๋๊ป์ ์ผํ๋ชฐ์ด ๊ต์ฅํ ํฐ ๊ท๋ชจ์ ํ๋ก์ ํธ๋ผ๊ณ ๋ง์ํ์ จ์ ๋๋ ์ค๊ฐํ์ง ๋ชปํ์ต๋๋ค. ํ์ง๋ง ๊ธฐํ์ ํ๊ณ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์์ํ๋ ๊ฒ๋ณด๋ค ์ ์ ํ ์ผ์ด ๋ง์์ง๊ณ ๊ท๋ชจ๊ฐ ์ปค์ง๋ ๊ฒ์ ๋ณด๋ฉฐ, 6๋ช ์ด์ 6์ฃผ ๋์ ์ด ํ๋ก์ ํธ๋ฅผ ์์ํ๋ค๋ ์ฑ์ทจ๊ฐ์ ๋๋ ์ ์์์ต๋๋ค. ๋ํ, ํ์์ ์ต์ํ๋ ๊ฒ๋ค์ด ๋ณด์ด์ง ์๋ ๋ถ๋ถ๊น์ง ์ธ์ฌํ๊ฒ ๊ณ ๋ ค๋์ด ๋ง๋ค์ด์ก๋ค๋ ๊ฒ์ ๊นจ๋ฌ์ผ๋ฉฐ, ๊ธฐํ์ ์ค์์ฑ๊ณผ ํ์๋ค๊ณผ ์๊ฒฌ์ ๋๋๋ ๊ณผ์ ์ด ๋งค์ฐ ์ค์ํ๋ค๋ ์ ์ ๋ค์๊ธ ์ค๊ฐํ์ต๋๋ค.
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ๋ฆฌ์กํธ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ตํ๊ณ , ํ์ ์ ์ค์์ฑ์ ๊ฒฝํํ ์ ์์์ต๋๋ค. ์์ผ๋ก๋ ๋์ฑ ์ํํ ํ์ ์ ์ํด ์ปค๋ฎค๋์ผ์ด์ ์ ๊ฐํํ๊ณ , ์ฝ๋ ์์ฑ ์ ํ์๋ค๊ณผ์ ์กฐ์จ์ ์ ๊ฒฝ ์ฐ๋ฉฐ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์ ํฉ๋๋ค
๊ท๋ชจ๊ฐ ์ปธ๋ ํ๋ก์ ํธ์๋ ๋งํผ CRUD๊ฐ ๋ง์์ ํ๋ค์์ง๋ง, ๋๋ถ์ ์คํ๋ง๊ณผ ๊น์ ๋ํ ์ดํด๋๊ฐ ๋์์ก์ต๋๋ค. ๋ํ, ์ผํ๋ชฐ ๊ฐ๋ฐ์ ์งํํ๋ฉฐ ๋ค์ํ ๊ธฐ๋ฅ์ด ํ์ํ๋ค๋ ์ ์ ๊นจ๋ฌ์๊ณ , ๊ตฌํ ๊ณผ์ ์์ ์์์น ๋ชปํ ๊ธฐ๋ฅ๋ค์ด ์ถ๊ฐ์ ์ผ๋ก ์๊ตฌ๋์ด ์ด๋ ค์์ด ์์์ง๋ง, ํ์๋ค๊ณผ์ ํ์ ์ ํตํด ํด๊ฒฐํ ์ ์์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ์ ์ ์ค์์ฑ์ ๋ค์ ํ๋ฒ ์ค๊ฐํ๊ฒ ๋์์ต๋๋ค.
[๋ฐํ์๋ฃ ๋ณด๊ธฐ](./exec/[SSAFY] ๊ณตํตํ๋ก์ ํธ C108 ์ต์ข ๋ฐํ PPT.pdf)








