기능 추가
API ํต์ฌ๊ณผ ํ๋ก ํธ์๋ ์ธ์๋, ์ค์ ํ๋ก์ ํธ์์๋ ๋ณด์, ์ ๊ทผ ์ ์ด ๋ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค ์คํ์ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์์ฃผ ํ์ํฉ๋๋ค.
Lino๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ์คํ๋ ๋ฐฉ์์ผ๋ก ์ถ๊ฐํ ์ ์๋๋ก ์ง์ํ๋ฉฐ, ๋ฐฑ์๋(์๋ํฌ์ธํธ)์ ํ๋ก ํธ์๋(Blazor ์ ํ๋ฆฌ์ผ์ด์ ) ๋ชจ๋์ ๋ฐ์๋ฉ๋๋ค.
๋ณด์ ๋ฐ ์ธ์ฆ
์ธ์ฆ์ ๋ชจ๋ ๋ณด์ ์์คํ ์ ๊ธฐ๋ณธ์ ๋๋ค. Lino๋ API์์ Bearer ๋ฐฉ์์ ์ฌ์ฉํ์ฌ JWT(JSON Web Tokens) ๊ธฐ๋ฐ ์ธ์ฆ์ ์ง์ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์ธ์ฆ ํ๋ฆ:
1. ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ์ํ(์๋ํฌ์ธํธ ๋๋ ์ ์ฉ ํ์ด์ง๋ฅผ ํตํด).
2. ์ฌ์ฉ์ ์ ๋ณด, ์ญํ ๋ฐ ๊ถํ์ ๋ํ๋ด๋ claims๊ฐ ํฌํจ๋ JWT ๋ฐ๊ธ.
3. ๋ชจ๋ API ์์ฒญ์ ํค๋์ ํ ํฐ ํฌํจ: Authorization: Bearer <token>
4. ์ธ์ฆ ๋ฏธ๋ค์จ์ด๊ฐ ํ ํฐ์ ๊ฒ์ฆํ๊ณ ์๋ช
๊ณผ ๋ง๋ฃ๋ฅผ ํ์ธ.
์ ์ฑ ๊ธฐ๋ฐ ๊ถํ ๋ถ์ฌ
Lino๋ ์ธ๋ถํ๋ ๊ถํ ๋ถ์ฌ๋ฅผ ์ํด ์ ์ฑ (Policies)์ ์ฌ์ฉํฉ๋๋ค:
- ๊ฐ ์์ ์ ํน์ ์ ์ฑ ์ด ํ์ํ ์ ์์(์: People.Read, People.Create).
- ์ ์ฑ ์ AddAuthorization์ ํตํด ๊ตฌ์ฑ.
- ์๋ํฌ์ธํธ๋ ๋ค์์ ์ ์ธํ์ฌ ๋ณดํธ ๊ฐ๋ฅ:
.RequireAuthorization
Lino ํ๋ก์ ํธ์ ๋ณด์ ์ถ๊ฐ
ํ๋ก์ ํธ์ ๋ณด์์ ์ถ๊ฐํ๋ ค๋ฉด ๋ค์์ ์คํ:
lino features auth add
CLI ์ธํฐ๋ํฐ๋ธ ๋ง๋ฒ์ฌ๊ฐ ๋ค์ ์ค์ ์ ์์ฒญํฉ๋๋ค:
- ์๋น์ค โ ๋ณด์ ๋ฆฌ์์ค๊ฐ ๊ตฌ์ฑ๋ ์๋น์ค.
- ๋ชจ๋ โ ๋ณด์์ด ์ค์น๋ ํน์ ๋ชจ๋(๋ชจ๋ํ ์๋น์ค์๋ง ์ ์ฉ).
- Access Token ์๋ช โ ์ก์ธ์ค ํ ํฐ์ ์ ํจ ๊ธฐ๊ฐ.
- Refresh Token ์๋ช โ ๊ฐฑ์ ํ ํฐ์ ์ ํจ ๊ธฐ๊ฐ.
- ์ฌ์ฉ์ ์๋ณ์ ์ ํ โ UserId๋ก ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ์ ํ ์ ์(
int,long๋๋Guid).
์ด๋ฌํ ์ค์ ์ ์ธ์ฆ/๊ถํ ๋ถ์ฌ ํ์ดํ๋ผ์ธ์ด ์๋์ผ๋ก ๊ตฌ์ฑ๋์ด API์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ Blazor์ ํตํฉ๋ฉ๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ์์
๋ง์ ์์คํ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋น๋๊ธฐ ํ๋ก์ธ์ค๋ฅผ ์คํํด์ผ ํฉ๋๋ค:
- ์ด๋ฉ์ผ ์ ์ก
- ๋ฆฌํฌํธ ์์ฑ
- ์ธ๋ถ ์์คํ ๊ณผ์ ๋๊ธฐํ
Lino๋ ์์ ์ค์ผ์คํธ๋ ์ดํฐ๋ก Hangfire๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํฉ๋๋ค.
Hangfire์ ์ฅ์
- ๋น๋๊ธฐ ์์ ์ ์์ ์ ์ธ ์คํ
- ๋ด์ฅ ๋ชจ๋ํฐ๋ง ๋์๋ณด๋
- ๋ฐ๋ณต ๋๋ ์์ฝ ์์ ์ง์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ ์ ์์ ์ ์ธ ์์์ฑ
Outbox ๋ฉ์์ง์ ์ด๋ฒคํธ ํตํฉ
๋น๋๊ธฐ ํตํฉ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด Lino๋ Outbox Message ํจํด์ ์ฑํํฉ๋๋ค.
๋น์ฆ๋์ค ์์ (์: ์ฃผ๋ฌธ ์์ฑ)์ ์ํํ๋ฉด, ํด๋น ์ด๋ฒคํธ(OrderCreated)๊ฐ ๋๋ฉ์ธ ์ํ๋ฅผ ์ ์ฅํ๋ ๋์ผํ ํธ๋์ญ์ ์์ Outbox ํ ์ด๋ธ์ ์ ์ฅ๋ฉ๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์๋ Outbox ํ ์ด๋ธ์ ์ฝ๊ณ ์ด๋ฒคํธ๋ฅผ ๋ฉ์์ง ์์คํ (RabbitMQ, Kafka ๋ฑ)์ ๊ฒ์ํฉ๋๋ค.
Outbox์ ์ฅ์ :
- ์์์ฑ โ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒ์๋ ์ด๋ฒคํธ๊ฐ ๋๊ธฐํ ์ํ ์ ์ง
- ์ ๋ขฐ์ฑ โ ์คํจ ์์๋ ์ด๋ฒคํธ ์์ค ์์
- ํ์ฅ์ฑ โ ์ฌ๋ฌ ์๋น์๊ฐ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌ ๊ฐ๋ฅ
์ด ๋ชจ๋ธ์ ๋ถ์ฐ ์ํคํ ์ฒ์์ ์์ ํ๊ณ ์์ ์ ์ธ ํตํฉ์ ๋ณด์ฅํฉ๋๋ค.
์ด๋ฌํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ํตํด Lino๋ ๊ฐ๋ ฅํ ๋ณด์, ์ธ๋ฐํ ์ ๊ทผ ์ ์ด, ์ ๋ขฐํ ์ ์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ฉฐ, ํ๋ ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค.
Lino ํ๋ก์ ํธ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๊ธฐ๋ฅ ์ถ๊ฐ
๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ์๋ฆผ ์ ์ก, ๋ฆฌํฌํธ ์์ฑ, ์ด๋ฒคํธ ๊ฒ์ ๋ฑ ์ฃผ ์์ฒญ ํ๋ฆ์ ์ฐจ๋จํ์ง ์์์ผ ํ๋ ์์ ์ ํ์์ ์ ๋๋ค.
Lino๋ ๋จ์ผ ๋ช ๋ น์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ง์(๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ)์ ํ์ฑํํ ์ ์์ต๋๋ค:
lino features background-job add
CLI๋ ๋ค์ ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ฅผ ์์ฒญํฉ๋๋ค:
- ์๋น์ค โ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ์๋น์ค
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ โ ์์ ์คํ ๋ฐ ์์ฝ์ ์ํ ์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ฒดํฌ ๋ฐ ์ฒ๋ฆฌ ๊ฐ๊ฒฉ - Outbox ์ ๋ฉ์์ง๋ฅผ ํ์ธํ ํ ๊ฒ์ฌ ๊ฐ๊ฒฉ
- ๋ ์ฝ๋ ์ - ์ฌ์ดํด๋น ์ฒ๋ฆฌํ ์ต๋ ๋ ์ฝ๋ ์, ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฐ ๋ฆฌ์์ค ์๋น ์ ์ด
์ด๋ฌํ ์ต์ ์ ์์คํ ์ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์์ ์ ์ผ๋ก ๊ตฌ์ฑํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ ๋ขฐํ ์ ์๋ ์คํ์ ๋ณด์ฅํฉ๋๋ค.
