์ปค๋ฎค๋ํฐ๋ผ๋ ์ฟ ๋ฎค์ ์ค์ฌ์ด ๋๋ ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ์ํ๋ค.
๊ธฐ์กด์๋ Django๋ฅผ ์ด์ฉํด์ khumu-command-center
๋ผ๋ ์ด๋ฆ์ผ๋ก ์ปค๋ฎค๋ํฐ ๋ฐ ๊ฒฝํฌ๋ ๊ด๋ จ ํน์ ๊ณ์ ๊ด๋ จ ๊ธฐ๋ฅ๋ค์ ์ํํ์ง๋ง ์ด์ ๋ Java Spring Boot๋ฅผ ๋ฐํ์ผ๋ก ์ด์ฉํ๋ คํ๋ค.
- ์ ์ ์ ๋ํ CRUD
- โ 1๏ธโฃ ์ ์ ์ ๋ํ ์ฐจ๋จ ๊ธฐ๋ฅ (๊ฒ์๊ธ ์์ฑ์ ์ฐจ๋จํ๊ธฐ)
- ๊ฒ์ํ์ ๋ํ CRUD
- ๊ฒ์ํ์ ๋ํ Follow / Unfollow
- โ
1๏ธโฃ ๊ฒ์๊ธ์ ๋ํ CRUD
- โ 1๏ธโฃ ๋ด๊ฐ ์์ฑํ, ๋๊ธ ๋จ, ์ข์์ํ ๋ฑ ๊ฐ๊ฐ์ ๋ค์ํ ๊ธฐ์ค์ผ๋ก ๊ฒ์๊ธ์ ์กฐํํ๊ธฐ
- โ 1๏ธโฃ comment ์๋ฒ์์ comment ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ
- โ 1๏ธโฃ alimi ์๋ฒ์์ ๊ฒ์๊ธ์ ๋ํ ์๋ฆผ ๊ตฌ๋ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
- 1๏ธโฃ ๊ฒ์๊ธ/๊ฒ์ํ์ ๋ํ ๊ฒ์ ๊ธฐ๋ฅ
- 1๏ธโฃ ๊ฒ์๊ธ ์์ฑ ์๊ฐ ํํ
- โ 1๏ธโฃ ๊ฒ์๊ธ์ ๋ํ Like / Unlike
- โ 1๏ธโฃ ๊ฒ์๊ธ์ ๋ํ Bookmark / Unbookomark
- 1๏ธโฃ ๋ค์ํ ์ํฐํฐ์ ๋ํ ์ ๊ณ ๊ธฐ๋ฅ
- ํ์ฌ ์ผ์ ์ ๋ํ Read - ํ์ด์ฌ์ผ๋ก ํ ์ง ๊ณ ๋ฏผ
- ๊ทผ๋ฐ ํ์ด์ฌ์ผ๋ก ํ๋ ๊ฒ ์์ฒด๊ฐ ๋ถํ์ํ microserviceํ๊ฐ ๋ ๊ฒ ๊ฐ๋ค.
- ์ฑ์ ๋ํ ํผ๋๋ฐฑ Create
- ํ๊ต ๊ฐ์, ํ๊ณผ ์ ๋ณด ํฌ๋กค๋ง, Read
์ผ๋จ์ 1๏ธโฃ๋ก ํ์ํ ์ ์ , ๊ฒ์๊ธ ๊ด๋ จ ๊ธฐ๋ฅ๋ค์ ๊ฐ๋ฐํ๊ณ
๊ฒ์ํ์ ๋ํ ๊ธฐ๋ฅ๋ ๊ฐ๋ฐํ๊ณ
๋๋จธ์ง ํ์ฌ์ผ์ ์ด๋ ํ๊ต ๊ด๋ จ ๊ธฐ๋ฅ๋ค์ khumu-command-center์ ์๋ ์ฝ๋๋ก ๋ฒํ จ๋ณด๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก๋ RDB + JPA์ ์กฐํฉ
- Redis cache๋ฅผ ์ฐ๊ธฐ ์ข์ ๋ถ๋ถ์ด ์๋๊ฐ?
-
๋ด๊ฐ ํ๋ก์ฐ ์ค์ธ ๊ฒ์ํ ๋ชฉ๋ก
- ๊ฐ๋จํ๊ฒ ํ๋ก์ฐ ์์ ๊ณผ Synchronousํ๊ฒ ์์ ํ ์ ์๋ค.
-
๋ด ํผ๋์ ๋ณด์ฌ์ง ์ต๊ทผ ๊ฒ์๊ธ๋ค
- ๋๊ตฐ๊ฐ๊ฐ ๊ธ์ ์ผ๋ค๋ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋
ํ ์ฒ๋ฆฌ
- ํด๋น ๊ธ์ ๊ฒ์ํ์ ๊ตฌ๋ ํ๋ ์ ์ ๋ค์ ๋ํ ํผ๋ ๊ฒ์๊ธ ID ์บ์์ ํด๋น ๊ธ์ ID๋ฅผ ์ถ๊ฐํ๋ค.
- ๋ด๊ฐ ๊ฒ์ํ์ ํ๋ก์ฐ ํ์ ๋
- ํด๋น ๊ฒ์ํ์ ์ต๊ทผ ๊ธ๋ค ์ค N๊ฐ ์ ๋์ ID๋ฅผ ์์ ์ ํผ๋ ๊ฒ์๊ธ ID ์บ์์ ์ถ๊ฐํ๋ค.
๋ด ํผ๋์ ๋ณด์ฌ์ง ์ต๊ทผ ๊ฒ์๊ธ ID๋ค์ Redis์ ์บ์ํ๋ฉด ์ข์ ์ ์? (๋ญ๊ฐ ์์๊น..?)
- ๋ณด๊ณ ์ํ๋ ID๋ฅผ ๋ฏธ๋ฆฌ ์บ์ํด๋์ผ๋ฉด JOIN์ด๋ ๋ค๋ฅธ ํ ์ด๋ธ ์กฐํ ์์ด PK์ ๋ํ in-query๋ง์ผ๋ก ์กฐํํ ์ ์๋ค.
- โ ๊ทผ๋ฐ ์ค์ ๋ก ์ฒด๊ฐ๋ ๋งํ ํจ๊ณผ๊ฐ ์์ ์ง๋ ๋ชจ๋ฅด๊ฒ ์.
- ๋๊ตฐ๊ฐ๊ฐ ๊ธ์ ์ผ๋ค๋ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋
ํ ์ฒ๋ฆฌ
-
Generalํ ๋ด์ฉ๋ค
- ํซ ๊ฒ์๊ธ N๊ฐ โ is_hot์ ๋ํ index๋ ๋ง๋ค๊ธฐ ์ซ๊ธฐ ๋๋ฌธ์ ํซ ๊ฒ์๊ธ์ ๋ํ ์กฐํ๋ Redis์ ์ ์ฅํ๋ฉด ํธํ๊ณ ๋น ๋ฅด๊ธด ํ ๋ฏ. ๊ทผ๋ฐ ์ฒด๊ฐ๋ ์ ๋์ผ ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์.
-
- DynamoDB๋ฅผ ์ฐ๊ธฐ ์ข์ ๋ถ๋ถ์ด ์๋๊ฐ?
- ํฌ ๋จธ์น์ธ ๋ฏ.
- ์ ์ ์์ฑ
- slack ์๋ฆผ
- alimi๊ฐ ์๋ฆผ ์ค์ ์ ๋ง๋ค๊ธฐ ์ํจ
- ์ ์ ์ญ์
- slack ์๋ฆผ
- ์ ์ ์ฐจ๋จ
- ๊ฒ์๊ธ ์์ฑ
- slack ์๋ฆผ
- ๋๊ธ ์๋ฒ๊ฐ ๊ฒ์๊ธ ์์ฑ์ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ธฐ ์ํจ.
- ๊ฒ์๊ธ์ ๊ฒ์ํ์ Follow ์ค์ธ user๋ค์ Feed Article ID list๋ฅผ ๊ฐฑ์ ํ๊ธฐ ์ํจ.
- ๊ฒ์๊ธ ์ข์์
- ์ผ์ ๊ฐ์๊ฐ ๋์ผ๋ฉด Hot ๊ฒ์๊ธ๋ก ์ ์ ํ๊ธฐ ์ํจ.
์ผ์ ๊ฐ์๊ฐ ๋์ผ๋ฉด ์์ฑ์์๊ฒ ์๋ฆผ์ ๋ณด๋ด๊ธฐ ์ํจ.โ ๋ณ๋ก ํ์ ์์ ๋ฏ
- ๊ฒ์๊ธ ์ ๊ณ
- ํซ ๊ฒ์๊ธ ์ ์
- ์์ฑ์์๊ฒ ์๋ฆผ์ ๋ณด๋ด๊ธฐ ์ํจ.
- ์๋ก์ด ํซ ๊ฒ์๊ธ ์ ์ ๊ด๋ จ ์๋ฆผ์ ๋ณด๋ด๊ธฐ ์ํจ. โ ์ด๊ฒ๋ ๋ณ๋ก ํ์ ์์ ๊ฒ ๊ฐ๊ธด ํจ.
๋๊ธ, ๋๋๊ธ ์์ฑโ ์ด๊ฑด ๋๊ธ ์๋ฒ๊ฐ ์์์ ํ๊ฒ ๋ค.
- ๋จผ์ Context๋ฅผ ๋๋๋ ๊ฑด ํฌ๋จธ์น๊ฐ๋ค. ๋ช ๊ฐ์ง ์ฌ์ด๋ ํ๋ก์ ํธ๋ค์ ๊ตฌ์กฐ๋ฅผ ์ฐธ๊ณ ํ์ง๋ง Context๋ฅผ ๋๋ ์ ์ฅ์ ์ ์ ์ด๋์ด๋ด๋ ์ผ์ด์ค๋ ๋๋ฌผ์๋ ๊ฒ ๊ฐ๋ค.
- ํฅ์ฌ๊ฑฐ๋์ Application(๋ด๋ถ)์ Infrastructure(์ธ๋ถ)๋ก ๋๋๋ค.
- Inbound Adapter๋ Inbound Port๋ฅผ ํธ์ถํจ์ผ๋ก์จ Inbound port๊ฐ ์ค์ ์ธ๋ถ์์ ๋ค์ด์ค๋ input์ ์ ๋ฐ์๋ค์ด๊ณ ๋์ํ ๋ค Inbound port๊ฐ ์๋ตํ๋ output์ ์ค์ ์ธ๋ถ๊ฐ ์ ์ดํดํ ์ ์๊ฒ๋ ํด์ค๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ (๋ด๋ถ)๋ ์์ ์ด ํธ์ถํ Outbound port๋ฅผ ์ ์ํ๊ณ Outbound port๋ฅผ ํธ์ถํ๋ค. Outbound Adapter๋ ๋ด๋ถ๊ฐ ์ ์ํ Outbound port๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ๋ด๋ถ๊ฐ ์ ์ํ ๋ฐฉ์์ผ๋ก ์ค์ ์ธ๋ถ์ ์์ ํ ์ ์๋๋ก ํด์ค๋ค.
โโโ config // config ๊ด๋ จ Class๋ค ์ ์
โ
โโโ infra // ์ธ๋ถ ์์ญ
โ โโโ controller // ๊ฒ์๊ธ, ๊ฒ์ํ, ์ ์ ์ ๋ํ Controller
โ โ db // JPA๋ฅผ ์ด์ฉํด application.port.repository ๊ตฌํ
โ โโโ cache // cache ๊ด๋ จ ๋ด์ฉ
โ
โโโ application // ๋ด๋ถ ์์ญ
โ โโโ execption // ๋ด๋ถ๊ฐ catchํ๊ฑฐ๋ throwํด์ค Exception
โ โ domain // ๋๋ฉ์ธ ๊ฐ์ฒด
โ โ vo // VO๋ก ์ธ๋งํ ๊ฑฐ ์์ผ๋ฉด ์ ์
โ โ dto // ๋ด๋ถ๊ฐ ์ธํ์ผ๋ก ๋ฐ๊ฑฐ๋ ์์ํ์ผ๋ก ๋จ๊ถ์ค DTO
โ โ port
โ โ โโโ in
โ โ โ โโโ service // inbound port๋ก์ service๋ฅผ ์ ์
โ โ โโโ out
โ โ โโโ repository
โ โ โ cache
โ โ โโโ messaging`
โ โโโ mapper
โ
โโโ common
โโโ util