- ํ๋ก์ ํธ ๊ฐ์
- ์ญํ ๋ถ๋ด ๋ฐ MSA ์๋น์ค ์ค๋ช
- ํ๋ก์ ํธ ํต์ฌ ์ฌ์ฉ์ ์ ์ค์ผ์ด์ค
- ์ ์ฉ ๊ธฐ์
- ํ๋ก์ ํธ ๊ตฌ์ฑ
- ํธ๋ฌ๋ธ์ํ
- API๋ช ์ธ์ ๋ฐ ๊ธฐ์ ์คํ
๋ณธ ํ๋ก์ ํธ์์๋ MSA(Microservices Architecture) ๊ธฐ๋ฐ ๋ฌผ๋ฅ ๊ด๋ฆฌ ๋ฐ ๋ฐฐ์ก ์์คํ
์ ์ค๊ณํ๊ณ ๊ตฌํํ์์ต๋๋ค.
์ ๋ ์นด ์๋ฒ๋ฅผ ํตํด ๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ด๋ฆฌํ๊ณ , ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ๋ชจ๋ ์ธ์
์ ์ ์ดํ๋ฉฐ, ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
์ Docker ์ปจํ
์ด๋๋ก ์คํ๋ฉ๋๋ค.
์ด๋ฆ | ๋ด๋น ์ญํ |
---|---|
๋ฐํ์ธ | ๋ฉํฐ ๊ทธ๋๋ค ํ๋ก์ ํธ ๊ตฌ์กฐ์ ์ธํ๋ผ ์ค๊ณ ๋ฐ ๊ตฌ์ถ, ์ฃผ๋ฌธ ๋ฐ ๋ฐฐ์ก ๊ด๋ฆฌ ์๋น์ค ๊ฐ๋ฐ |
์ด์ฌ๊ตฌ | ๋ฌผ๋ฅ ํ๋ธ ๋ฐ ์ ์ฒด ๊ด๋ฆฌ ์๋น์ค ๊ฐ๋ฐ, ์ํ ๊ด๋ฆฌ ์๋น์ค ๊ฐ๋ฐ |
๊น๋จํ | ์ธ์ฆ ๋ฐ ๊ถํ ๊ด๋ฆฌ, API Gateway ์ค์ , ์ฌ์ฉ์ ๊ด๋ฆฌ |
- ์ ๋ ์นด ์๋ฒ: ๋ง์ดํฌ๋ก์๋น์ค ๋ฑ๋ก ๋ฐ ํ์.
- API Gateway: ์ธ๋ถ ์์ฒญ์ ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ผ์ฐํ .
- ํ๋ธ ๊ด๋ฆฌ ์๋น์ค: ํ๋ธ ๊ด๋ จ ์๋น์ค ๊ด๋ฆฌ.
- ์ฃผ๋ฌธ ๊ด๋ฆฌ ์๋น์ค: ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๊ด๋ จ ์๋น์ค ๊ด๋ฆฌ.
- ๋ฐฐ์ก ๊ด๋ฆฌ ์๋น์ค: ์ฃผ๋ฌธ ๋ฐ ๋ฐฐ์ก ์ ๋ณด ์ฒ๋ฆฌ ๋ฐ ์ต์ ์ ๊ฒฝ๋ก ๊ด๋ฆฌ.
- ์ฌ์ฉ์ ๊ด๋ฆฌ ์๋น์ค: ๋ฐฐ์ก ๋ด๋น์ ๋ฐ ์ ์ฒด ์ฌ์ฉ์ ๊ด๋ฆฌ. JWT ํ ํฐ ๊ด๋ฆฌ.
-
์ฃผ๋ฌธ ๋ฐ์
- ์ฃผ๋ฌธ ์ ์ฒด: A์ ์ฒด๋ B์ ์ฒด์ ์ํ์ ์ฃผ๋ฌธํฉ๋๋ค.
- ์์ฐ ์ ์ฒด: ์ด์ ๋ฐ๋ผ B์ ์ฒด๋ ๋ณธ ์๋น์ค์ ๋ฐฐ์ก์ ์์ฒญํฉ๋๋ค.
-
๋ฌผ๋ฅ ์ฒ๋ฆฌ ๋ฐ ์ฌ๊ณ ์ด๋
- B์ ์ฒด ์ง์ญ์ ๋ด๋นํ๊ณ ์๋ ํ๋ธ์์ A์ ์ฒด ๋ด๋น ํ๋ธ๋ก ๋ฌผํ ์ด๋: ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด A์ ์ฒด ๋ด๋น ํ๋ธ์์ B์ ์ฒด ๋ด๋น ํ๋ธ๋ก ์ํ์ด ์ด๋๋ฉ๋๋ค. ์ด๋ ์ฃผ์ด์ง ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ํ์ด ์ด๋๋ฉ๋๋ค.
-
์ต์ข ์๋ น
- A์ ์ฒด ๋ด๋น ํ๋ธ์์ A์ ์ฒด๋ก ๋ฌผํ ๋ฐฐ์ก: A์ ์ฒด ๋ด๋น ํ๋ธ์ ๋ฌผํ์ด ๋์ฐฉํ๋ฉด, A์ ์ฒด ๋ด๋น ํ๋ธ ์์ ๋ฐฐ์ก ๋ด๋น์๊ฐ ๋ฌผํ์ A์ ์ฒด๋ก ๋ฐฐ์กํฉ๋๋ค.
๋ณธ ํ๋ก์ ํธ๋ MSA์ ๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ์ ์ฅ์ ์ ๊ฒฐํฉํ ๋ฉํฐ ๋ชจ๋ ๊ตฌ์กฐ๋ฅผ ์ฑํํ์์ต๋๋ค.
๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ์ ์ฅ์ ์ ์์กด์ฑ ๊ด๋ฆฌ๋ฑ ๊ฐ๋ฐ์ ๋์ด๋๋ฅผ ์กฐ์ ํ๊ณ , ๊ฐ ๋ชจ๋์ ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ์ ์ง๋ณด์ํ ์ ์๋ MSA์ ์ ์ฐ์ฑ์ ๋์
ํ์ฌ ์ด์์ ๋ณต์ก์ฑ์ ์ค์์ต๋๋ค.
์ด๋ฅผ ํตํด ๋ชจ๋๋ณ๋ก ๋ช
ํํ ์ฑ
์์ ๋ถ์ฌํ๊ณ , ๊ธฐ๋ฅ ํ์ฅ ๋ฐ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋ ์์ ์ ์ธ ์ด์์ด ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ํ์ด์ง, ์ ๋ ฌ, ๊ฒ์์ด ๋ฑ์ ๋ฐ๋ฅธ ๋์ ์ฟผ๋ฆฌ ์์ฑ์ ์ํ์ฌ QueryDSL์ ๋์ ํ์ฌ ํ์ฉํ์ต๋๋ค.
- ์ปดํ์ผ ์์ ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ด, ๋ฐํ์ ์๋ฌ๋ฅผ ์ค์ผ ์ ์์์ต๋๋ค.
- Query DSL์ ํตํด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋จ์ ์ฅ์ ์ ํ์ฉํด ํ์ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์์์ต๋๋ค.
- ๋ฌธ์ํ: SwaggerUI๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ์ API ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์์์ต๋๋ค.
- ์๊ฐํ: API์๋ํฌ์ธํธ, ๋งค๊ฐ๋ณ์, ์์ฒญ ๋ฐ ์๋ต ๋ณธ๋ฌธ ๋ฑ์ ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์์์ต๋๋ค.
- ํ ์คํธ: ๊ฐ๊ฐ์ API๋ฅผ ํ ์คํธํ ์ ์์์ต๋๋ค.
- ํ ๊ฐ์ ํ์ ์ฉ์ด: API๋ฌธ์๋ฅผ ์ค์ ์ง์ค์์ผ๋ก ๊ด๋ฆฌํ์ฌ ํ์ ๊ฐ์ ํ์ ์ ์ฉ์ดํ๊ฒ ์งํํ ์ ์์์ต๋๋ค.
- ๋ฌด์ํ ์ธ์ฆ: JWT๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ ์ํ๋ฅผ ์ ์งํ์ง ์๊ณ ๋ ์ฌ์ฉ์ ์ธ์ฆ์ ์ฒ๋ฆฌํ ์ ์์์ต๋๋ค.
- Self-contained ํ ํฐ: ํ ํฐ ์์ฒด์ ์ฌ์ฉ์ ์ ๋ณด ๋ฐ ๊ถํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ด, ์๋ฒ๊ฐ ๋ณ๋๋ก ์ํ๋ฅผ ์ ์ฅํ์ง ์๊ณ ๋ ์ธ์ฆ์ ์ํํ ์ ์์์ต๋๋ค.
- ๋ณด์์ฑ: JWT๋ ์๋ช ์ ํตํด ํ ํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ฉฐ, ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ์ฌ ํ ํฐ์ ์ ํจ์ฑ์ ๊ด๋ฆฌํ ์ ์์์ต๋๋ค.
- ํ์ฅ์ฑ: ๋ถ์ฐ ์์คํ ํ๊ฒฝ์์ JWT๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ, ์๋ฒ ๊ฐ ์ธ์ ๊ณต์ ์์ด ํ์ฅ ๊ฐ๋ฅํ ์ธ์ฆ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ์ ์์์ต๋๋ค.
- ํ ํฐ ๊ด๋ฆฌ: Refresh Token์ Redis์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํจ์ผ๋ก์จ, JWT๊ฐ ๋ง๋ฃ๋์์ ๋ ํจ์จ์ ์ผ๋ก ํ ํฐ์ ๊ฐฑ์ ํ ์ ์์์ต๋๋ค.
- ์บ์ฑ์ ํตํ ๋น ๋ฅธ ๋ฐ์ดํฐ ์กฐํ: ์์ฃผ ์กฐํ๋๋ ๋ฐ์ดํฐ(์: ์ฌ์ฉ์ ์ ๋ณด ๋ฑ)๋ฅผ Redis์ ์บ์ฑํ์ฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ์ ์ค์ด๊ณ ๋น ๋ฅธ ์๋ต ์๊ฐ์ ์ ๊ณตํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์์ผฐ์ต๋๋ค.
- TTL ์ค์ : Redis์์ ์บ์ฑ๋ ๋ฐ์ดํฐ์ ํ ํฐ์ TTL์ ์ค์ ํ์ฌ, ๋ง๋ฃ๋ ๋ฐ์ดํฐ๊ฐ ์๋์ผ๋ก ์ญ์ ๋๋๋ก ํจ์ผ๋ก์จ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ์ ์งํ์ต๋๋ค.
โก๏ธ์ฌ์ฉ์ API ์์ฒญ ํ๋ฆ
๋ก๊ทธ์ธ ํ ์ฌ์ฉ์๊ฐ API์์ฒญ์ ๋ณด๋ด๋ฉด,
Gateway์์ Auth์๋น์ค(User์๋น์ค)๋ก ํ ํฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์์ฒญ.
Auth์๋น์ค์์ ์ ํจํ ํ ํฐ์์ด ํ์ธ๋๋ฉด, id์ role ๊ฐ์ ๋ฐํ.
Gateway์์ ๋ฐํ๋ฐ์ ๊ฐ์ Header์ ๋ฃ๊ณ , ์์ฒญ ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํ
.
ํ๋ก์ ํธ/
โ
โโโ eureka/
โโโ gateway/
โโโ config/
โโโ core/
โโโ securitydb/
โโโ user/
โโโ auth/
โโโ order/
โ โโโ delivery/
โโโ hub/
โโโโ company/
โโโโ product/
1. ๋ด๋ถ ํฌํธ ๋ฌธ์
๋ด๋ถ ํฌํธ ๋ฌธ์ ๋ ๋ ๊ฐ์ง๋ก ๋๋์ด์ง๋๋ค:
- ๋ฌธ์ ์ํฉ: Docker ๋คํธ์ํฌ์ ์ํ ์ปจํ
์ด๋๋ค๋ผ๋ฆฌ ํต์ ํ ๋,
service_name:๋ด๋ถํฌํธ
ํ์์ ์ฌ์ฉํด์ผ ํ์ง๋ง, ์ด ๋ถ๋ถ์ด ์๋ชป ์ค์ ๋์ด ํต์ ์ด ์ด๋ฃจ์ด์ง์ง ์์์ต๋๋ค. - ํด๊ฒฐ ๋ฐฉ๋ฒ: ์ปจํ
์ด๋ ๊ฐ ์ฌ๋ฐ๋ฅธ ๋คํธ์ํฌ ํต์ ์ ์ํด,
service_name:๋ด๋ถํฌํธ
๋ก ์ ๊ทผํ๋๋ก ์ค์ ์ ์์ ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
- ๋ฌธ์ ์ํฉ: Postgres์ ๊ธฐ๋ณธ ๋ด๋ถ ํฌํธ(5432)๋ฅผ ๋ค๋ฅธ ํฌํธ๋ก ๋ณ๊ฒฝํ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์์ ์ผ๋ก ์๋ํ์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ: Postgres์ ๋ด๋ถ ํฌํธ๋ฅผ ๋ค์ 5432๋ก ๋ณต๊ตฌํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
2. Docker ์บ์ ๋ฌธ์
- ๋ฌธ์ ์ํฉ: Docker ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋, ์ด์ ์ ๋น๋๋ ์ด๋ฏธ์ง๊ฐ ์บ์๋ก ์ธํด ์ ๋ฐ์ดํธ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
no-cache
์ต์ ์ ์ฌ์ฉํ์ฌ Docker ์ด๋ฏธ์ง๋ฅผ ์๋กญ๊ฒ ๋น๋ํจ์ผ๋ก์จ ์บ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.docker compose system prune -a
๋ช ๋ น์ด์docker compose down -v
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์บ์๋ฅผ ์ ๋ฆฌํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
3. ํฌ์ค ์ฒดํฌ ๋ฌธ์
- ๋ฌธ์ ์ํฉ: ํฌ์ค ์ฒดํฌ(Health Check) ๊ธฐ๋ฅ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ์๋น์ค๊ฐ ์ ์์ ์ผ๋ก ์๋ํ์ง ์์์ต๋๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ: Docker Compose ์ค์ ์์ ๋๋ฝ๋ ํ๋๋ฅผ ์ถ๊ฐํ์ฌ ํฌ์ค ์ฒดํฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
4. Security Context๊ฐ ์ ์ง ๋์ง ์๋ ๋ฌธ์
- ๋ฌธ์ ์ํฉ
- ์ ์ธ์ฆ, ์ธ๊ฐ ํ๋ฆ:
- ๋ก๊ทธ์ธ ํ API ์์ฒญ
- Gateway์์ Auth์๋น์ค๋ก ํ ํฐ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ธ๊ฐ ์์ฒญ
- Auth ์๋น์ค์์ ํ ํฐ์ ๊ธฐ๋ฐ์ผ๋ก Authentication๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ SecurityContext์์ฑ
- Gateway์์ API์์ฒญ๋๋ก ๋ผ์ฐํ
- ์ ์ธ์ฆ, ์ธ๊ฐ ํ๋ฆ:
- ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์ค๊ณ ๋ณ๊ฒฝ
- ๋ก๊ทธ์ธ ํ API ์์ฒญ
- Gateway์์ Auth์๋น์ค(User์๋น์ค)๋ก ํ ํฐ ์ ํจ์ฑ ๊ฒ์ฌ ์์ฒญ
- ์ ํจ์ฑ ๊ฒ์ฌ ์๋ฃ ํ ํ ํฐ์์ ID์ Role์ ์ถ์ถํด Gateway์ ๋ฐํ
- Gateway์์ ๋ฐ์ ๊ฐ๋ค์ ํค๋์ ๋ฃ๊ณ ๋ผ์ฐํ
- SecurityDB๋ชจ๋(Core๋ชจ๋)์์ SecurityFilterChain์ ์ถ๊ฐํ OncePerRequestFilter๋ฅผ ์์ํ AuthorizationFilter๋ฅผ ํตํด SecurityContext๋ฅผ ์์ฑ
- ์ดํ MSA์๋น์ค์ ์๋ํฌ์ธํธ์ ๋๋ฌํ์ฌ ๋ก์ง์ด ์คํ
- ์ค๊ณ ๋ณ๊ฒฝ
---