Lino의 안전한 multi-tenancy
Multi-tenancy๋ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฌ๋ฌ ๊ณ ๊ฐ, ํ์ฌ ๋๋ ์กฐ์ง์ ์ง์ํ๋ฉด์ ๋ฐ์ดํฐ์ ๊ถํ์ ๊ฒฉ๋ฆฌํ๋๋ก ํด ์ค๋๋ค. Lino์์ Tenant๋ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ฆ์ ์ผ๋ถ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ tenancy ๊ธฐ๋ฐ์ ์์ฑํ๊ณ , ITenantContext๋ฅผ ํตํด subdomain, host ๋๋ slug๋ก Tenant๋ฅผ ํด์ํ๋ฉฐ, IUserContext๋ฅผ ํตํด JWT๋ก ์ธ์ฆ๋ ์ฌ์ฉ์๋ฅผ ๋
ธ์ถํฉ๋๋ค.
JWT์๋ ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋ ๋์ TenantId๋ ํฌํจ๋ฉ๋๋ค. Lino๋ ๊ทธ Tenant๋ฅผ ์์ฒญ์ ๋ํด ํด์๋ Tenant์ ๋น๊ตํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ํ์ด์ง๋ ๊ทธ ๊ธฐ๋ฐ์ด ์กด์ฌํ ๋ค ๊ฒฐ์ ํด์ผ ํ ๊ฒ, ์ฆ ์ํฐํฐ ๋ชจ๋ธ๋ง, ์กฐ์ง๋ณ ๊ถํ, ์์ฑ๋ ์ถ์ํ์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์ ์ง์คํฉ๋๋ค.
Tenant ์ง์ ์ถ๊ฐ
์์คํ ์ด SaaS์ด๊ฑฐ๋ ์๋ก ๋ค๋ฅธ ๊ณ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์์ ๊ณต์กดํด์ผ ํ์ง๋ง ์ปจํ ์คํธ ์ฌ์ด๋ก ๋์ถ๋๋ฉด ์ ๋๋ ๊ฒฝ์ฐ Tenant ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค.
lino feature tenant add
์ด์์คํดํธ๋ Tenants ๋ฑ๋ก, ์ฌ์ฉ์ ์ฐ๊ฒฐ, ํ์ฌ Tenant ํด์, ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ๋ก์ ์ ํ ๋ฐ ์ธ์ฆ ํตํฉ์ ์ํ ๊ธฐ๋ฐ์ ์์ฑํฉ๋๋ค. ITenantContext๋ subdomain, host ๋๋ slug๋ก ํด์๋ Tenant๋ฅผ ๋ํ๋ด๊ณ , IUserContext๋ JWT๋ก ์ธ์ฆ๋ ์ฌ์ฉ์๋ฅผ ๋ํ๋ด๋ฉฐ ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋ ๋์ TenantId๋ฅผ ํฌํจํฉ๋๋ค.
์์ฑ ํ์๋ ์ด๋ค ์ํฐํฐ๊ฐ ์ค์ ๋ก Tenant์ ์ํ๊ณ ์ด๋ค ์ํฐํฐ๊ฐ global์ธ์ง ๊ฒํ ํ์ญ์์ค. ์ด ๊ฒํ ๋ ์ ํ ๋ชจ๋ธ๋ง์ ์ผ๋ถ์ ๋๋ค. multi-tenancy๋ ๋จ์ํ Tenants ํ ์ด๋ธ์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ค ๊ท์น, ํ๋ฉด, ๊ถํ, ๋ฐ์ดํฐ ๋ฐ ์์ ์ด Lino๊ฐ ๊ฒ์ฆํ ํ์ฌ Tenant์ ์์กดํ๋์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค.
- Tenant-scoped: ์ฃผ๋ฌธ, ๊ณ ๊ฐ์ ์ ํ, ํ์ฌ ์ค์ , CRM ๊ณ ๊ฐ ๋๋ ํน์ ์กฐ์ง์ ์ํ ๋ชจ๋ ๋ฐ์ดํฐ.
- Global: ํ๋ซํผ์ ๊ณต๊ฐ ์นดํ๋ก๊ทธ, ํ๋, ๋ด๋ถ ์ด์ ๋ฆฌ์์ค, ๊ด๋ฆฌ ์ค์ ๋๋ Tenant ์ ํ ์ ์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ.
- Hybrid: Tenant๋ณ ์ฌ์ฉ์ ์ง์ ์ ๊ฐ์ง global ๋ฐ์ดํฐ์ด๋ฉฐ, ์๋ชป๋ ์ค๋ณต์ด๋ ๊ท์น ๋์ถ์ ํผํ๊ธฐ ์ํด ๋ช ์์ ์ธ ๋ชจ๋ธ๋ง์ด ํ์ํฉ๋๋ค.
๋ชจ๋์ ๋ชจ๋๋ฆฌ์ค์์๋ ์ผ๋ฐ์ ์ผ๋ก tenancy ๋ชจ๋์ด ์๋ณธ Tenant ์ํฐํฐ์ ์์ ์์ ๋๋ค. catalog ๋๋ CRM ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋์ ์ด ์ํฐํฐ์ ์ง์ ์ ๊ทผํด์๋ ์ ๋ฉ๋๋ค. Tenant ์ ๋ณด๋ฅผ ์์์ผ ํ๋ ๊ฒฝ์ฐ, Tenant ์์ฑ ๋๋ ์ ๋ฐ์ดํธ ๊ฐ์ integration events๋ก ์ฑ์์ง๋ ์ต์ ํ๋์ shadow entities๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
Tenant context
Tenant ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด Lino๋ ํ์ฌ Tenant ํด์์ ์ค์ํํ๊ณ ๊ทธ ๊ฐ์ ITenantContext๋ก ๋
ธ์ถํฉ๋๋ค. ์ด ์ปจํ
์คํธ๋ ์์ฒญ์ subdomain, host ๋๋ slug์์ ํด์๋ Tenant๋ฅผ ๋ํ๋ด๋ฉฐ, Tenant๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ TenantId ๋ฐ slug ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
์ธ์ฆ๋ ํ๋ฆ์์ IUserContext๋ JWT์์ ์ฌ์ฉ์๋ฅผ ์ฝ์ต๋๋ค. ๊ทธ JWT์๋ ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋ ๋์ TenantId๋ ํฌํจ๋ฉ๋๋ค. Lino๋ IUserContext์ Tenant์ ITenantContext์ Tenant๋ฅผ ๋น๊ตํ์ฌ ๋น์ฆ๋์ค ๊ท์น์ด ์๋ก ๋ค๋ฅธ ์ปจํ
์คํธ๋ฅผ ์ ๋ขฐํ์ง ์๋๋ก ํฉ๋๋ค.
์์ฑ๋ ๊ธฐ๋ฅ์ด๋ ๋์ค์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์์๋ claims๋ฅผ ์๋์ผ๋ก ๋ค์ ์ฝ๊ฑฐ๋ ๊ฐ handler์์ ์์์ TenantId๋ฅผ ๋ฐ๋ ๋์ ํญ์ ์ด๋ฌํ ์ถ์ํ๋ฅผ ์ฐ์ ํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด commands, queries, ํ์ด์ง ๋ฐ ํตํฉ์ด ๊ฐ์ source of truth๋ฅผ ์ฌ์ฉํ๊ณ Lino๊ฐ ์ด๋ฏธ ๊ตฌํํ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ๋ณด์กดํ ์ ์์ต๋๋ค.
Background Jobs, ์ด๋ฒคํธ ์๋น์ ๋ฐ ํตํฉ์๋ ์ปจํ
์คํธ๊ฐ ํ์ํฉ๋๋ค. tenant-scoped ์ ํ, ๊ณ ๊ฐ ๋๋ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํ๋ job์ ์ฒ๋ฆฌ ์ค์ธ Tenant๋ฅผ ๋ช
์์ ์ผ๋ก ๋ฐ์์ผ ํฉ๋๋ค. ITenantContext์ IUserContext๋ฅผ ์๋์ผ๋ก ์ถ๋ก ํ ์ ์๋ active HTTP request๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
Tenant-scoped ์ํฐํฐ
Tenant-scoped ์ํฐํฐ๋ Tenant identifier๋ฅผ ๊ฐ์ง๊ณ query filters์ ์ฐธ์ฌํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ฐ ํ๋ฆ์ด ๋ชจ๋ queries์์ TenantId๋ฅผ ์๋์ผ๋ก ์ ์ฉํด์ผ ํ๋ค๋ ๋ถ๋ด์ ์ค์ผ ์ ์์ต๋๋ค. ๊ธฐ๋ฅ์ ๊ฒ์ฆ๋ ์ปจํ
์คํธ์ Lino๊ฐ ์์ฑํ filters๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ํน์ ์กฐ์ง์ ์ํ๋ aggregates์๋ Tenant๋ฅผ ํฌํจํ์ญ์์ค.
- Tenant์ ์์ฃผ ์กฐํ๋๋ ํ๋๋ฅผ ๊ณ ๋ คํด indexes๋ฅผ ๊ตฌ์ฑํ์ญ์์ค.
- commands์ queries์์๋ Tenant๋ฅผ ๊ณ ๋ฆฝ๋ ๊ถํ ์์ฒ์ผ๋ก ๋ฐ๋ ๋์
ITenantContext๋ฐIUserContext๋ฅผ ์ฌ์ฉํ์ญ์์ค. - imports์ jobs์์๋ ์ด๋ค Tenant๊ฐ ์ฒ๋ฆฌ๋๋์ง ๋ช ์์ ์ผ๋ก ์ ์ํ์ญ์์ค.
tenant-scoped ์ํฐํฐ๋ ํ๋์ Tenant์ ์ํฉ๋๋ค. ์ํฐํฐ๊ฐ ์ฌ๋ฌ Tenants์ ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉด ์ด๋ฅผ ๋ชจ๋ธ๋ง ๊ฒฐ์ ์ผ๋ก ๋ค๋ฃจ์ญ์์ค. global์ผ ์๋ ์๊ณ , Tenant๋ณ ๋ณต์ฌ๋ณธ์ด ํ์ํ ์๋ ์์ผ๋ฉฐ, ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ์ค๊ฐ ์ํฐํฐ๊ฐ ๋น ์ก์ ์๋ ์์ต๋๋ค. ์ ํ, ๊ณ ๊ฐ ๋๋ ์ฌ์ฉ์๋ ๋ชจ๋๋ง๋ค ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง ์๋ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์๋ณธ ์ํฐํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฒ๋ณด๋ค ๋ช ๊ฐ์ ํ๋๋ง ๊ฐ์ง shadow entity๊ฐ ๋ ์ ํํ ์ ์์ต๋๋ค.
์ฐธ์กฐ์ ownership๋ ๊ตฌ๋ถํ์ญ์์ค. catalog์ ์ ํ์ด Tenant๋ฅผ ์ฐธ์กฐํ ์๋ ์์ง๋ง, ์ด๊ฒ์ด catalog๊ฐ Tenant lifecycle์ ์ ์ดํ๋ค๋ ๋ป์ ์๋๋๋ค. tenancy ๋ชจ๋์ ์์ฑ, ํ์ฑํ, ๋๋ฉ์ธ, branding ๋ฐ ๊ฒฉ๋ฆฌ ๋ชจ๋์ ์์ ์๋ก ๋จ์ต๋๋ค. catalog๋ ์์ฒด ํ๋ฆ์ ํํฐ๋งํ๊ณ ๊ฒ์ฆํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ง ์ ์งํฉ๋๋ค.
- Indexes: ๊ฒ์, ์ ๋ ฌ ๋ฐ Tenant๋ณ ์ ์ผ์ฑ์ ์ฌ์ฉ๋๋ ํ๋์
TenantId๋ฅผ ๊ฒฐํฉํ์ญ์์ค. - Commands: ์ํฐํฐ๊ฐ tenant-scoped์ธ ๊ฒฝ์ฐ ๊ฒ์ฆ๋ ํ์ฌ Tenant์์ ์์ ์ ์ ์ฉํ์ญ์์ค.
- Queries: ํ์ด์ง๋ค์ด์ , filters ๋ฐ ์นด์ดํฐ๋ฅผ Lino๊ฐ ๊ฒ์ฆํ ๊ฐ์ ์ปจํ ์คํธ์ ์ ์งํ์ญ์์ค.
- Events: consumers๊ฐ producer๋ฅผ ๋ถ์ ์ ํ๊ฒ ์กฐํํ์ง ์๊ณ projections๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋๋ก ์ถฉ๋ถํ ์ปจํ ์คํธ๋ฅผ ํฌํจํ์ญ์์ค.
๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ
๊ฒฉ๋ฆฌ๋ ์ปฌ๋ผ, schema ๋๋ ๋ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ์ ํ์ ๋น์ฉ, ๊ท๋ชจ, ๊ณ์ฝ ์๊ตฌ์ฌํญ ๋ฐ ์ด์ ์ญ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
| ์ ๋ต | ์ฅ์ | ์ฌ์ฉ ์์ |
|---|---|---|
| TenantId ์ปฌ๋ผ | ๋ ๋จ์ํ๊ณ ์ ๋ ดํจ | ๋ง์ SaaS์ ์ข์ ์ด๊ธฐ ์ ํ์ด๋ฉฐ, filters ๋ฐ Lino context์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค. |
| Tenant๋ณ schema | ์ค๊ฐ ์์ค์ ๊ฒฉ๋ฆฌ | Tenant๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊น์ง ๊ฐ์ง ์๊ณ ๋ ๋ ํฐ ๋ถ๋ฆฌ ์๊ตฌ๊ฐ ์์ ๋ ์ ์ฉํฉ๋๋ค. |
| Tenant๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค | ๊ฐํ ๊ฒฉ๋ฆฌ | ๊ณ์ฝ, ๊ท๋ชจ ๋๋ ์ด์์ด ๋ ๋์ ๋น์ฉ๊ณผ ์๋ํ๋ฅผ ์ ๋นํํ ๋ ์ ํฉํฉ๋๋ค. |
๋๋ถ๋ถ์ ์ด๊ธฐ ๋จ๊ณ SaaS์์๋ global filters์ ์ค์ํ๋ ์ปจํ ์คํธ๋ฅผ ๊ฐ์ถ Tenant๋ณ ์ปฌ๋ผ์ด ์ค์ฉ์ ์ธ ์ถ๋ฐ์ ์ ๋๋ค. Lino๋ ์ด ๊ธฐ๋ฐ์ ๋์ต๋๋ค. ๊ฒํ ์ tenant-scoped aggregates๊ฐ ์ฌ๋ฐ๋ฅธ Tenant๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ queries๊ฐ ์์ฑ๋ ์ถ์ํ๋ก ๊ฒ์ฆ๋ ํ์ฌ Tenant๋ฅผ ๊ณ์ ์ฌ์ฉํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
๋ชจ๋์ ์๋น์ค์์ Tenant ๊ฒฉ๋ฆฌ์ ๋ชจ๋ ๊ฒฉ๋ฆฌ๋ ์๋ก ๋ค๋ฅธ ๊ด์ฌ์ฌ์
๋๋ค. Catalog ๋ชจ๋์ TenantId๊ฐ ์๋ ์ ํ ํ
์ด๋ธ์ ๊ฐ์ง ์ ์๊ณ , CRM ๋ชจ๋์ TenantId๊ฐ ์๋ ๊ณ ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, Tenancy ๋ชจ๋์ ์๋ณธ Tenants ๋ฑ๋ก์ ์์ ์๋ก ๋จ์ต๋๋ค. ๊ฐ์ identifier๊ฐ ์กด์ฌํ๋ค๊ณ ํด์ ๋ชจ๋ ๊ฐ ์ง์ ์ ๊ทผ์ด ํ์ฉ๋๋ ๊ฒ์ ์๋๋๋ค.
Tenant๋ณ roles ๋ฐ ๊ถํ
SaaS์์๋ ํ ์ฌ์ฉ์๊ฐ ํ Tenant์์๋ ๊ด๋ฆฌ์์ด๊ณ ๋ค๋ฅธ Tenant์์๋ ์ด์์์ผ ์ ์์ต๋๋ค. Lino๋ user-Tenant ์ฐ๊ฒฐ์ ๋ค๋ฃจ๊ธฐ ์ํ ๊ธฐ๋ฐ์ ์์ฑํ๋ฉฐ, ๊ธฐ๋ฅ์ ๊ถํ์ framework๊ฐ ๊ฒ์ฆํ ํ์ฑ ์ปจํ ์คํธ ์์์ ํ๊ฐ๋์ด์ผ ํฉ๋๋ค.
Tenant ๋ฐ์๋ ๊ด๋ฆฌ ๊ถํ์ด ์กด์ฌํ ์ ์์ต๋๋ค. ํ๋ซํผ ์ด์ ํ๋ฉด์ system context์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ ์ ์๊ณ , ์ ํ ๋ฐ ๊ณ ๊ฐ ๊ฐ์ ํ์ด์ง๋ active Tenant๋ฅผ ์๊ตฌํ ์ ์์ต๋๋ค. ์ด ๋ถ๋ฆฌ๋ ์์
์ด global์ธ์ง, ์๋๋ฉด ITenantContext์์ ํด์๋ Tenant์ IUserContext์์ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์์กดํ๋์ง๋ฅผ ๋ช
ํํ๊ฒ ํฉ๋๋ค.
- ๊ถํ์ด ์กฐ์ง๋ง๋ค ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ Tenant๋ณ roles๋ฅผ ๋ชจ๋ธ๋งํ์ญ์์ค.
- ํ์ด์ง, commands ๋ฐ queries์ ์ธ๊ฐ ๊ฒ์ฌ์์ ํ์ฌ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- claims๋ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ๊ณ , ์ธ์ฆ๋ ํ๋ฆ์ ์ฐธ์ฌํด์ผ ํ๋ ๊ฒ๋ง token์ ๋ด์ผ์ญ์์ค.
- ์ค์ ๊ถํ์ด ๋ณ๊ฒฝ๋๋ฉด tokens๋ฅผ ํ๊ธฐํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ์ญ์์ค.
| ์ปจํ ์คํธ | ์์ | ์ฒ๋ฆฌ ๋ฐฉ๋ฒ |
|---|---|---|
| System | ํ๋ซํผ ๊ด๋ฆฌ, ํ๋, Tenants ๋ฐ global ์ค์ . | ํน์ Tenant์ scope ๋ฐ์์ ์คํํ์ญ์์ค. |
| Tenant | ํด๋น Tenant์ ์ ํ, ๊ณ ๊ฐ, ์ฃผ๋ฌธ, ์ฌ์ฉ์ ๋ฐ roles. | Lino๊ฐ ๊ฒ์ฆํ ํ์ฌ Tenant๋ฅผ ์ฌ์ฉํ์ญ์์ค. |
| Both | system๊ณผ Tenant ์์ชฝ์ ์กด์ฌํ๋ ์ผ๋ถ identity ๋๋ ๊ด๋ฆฌ ๊ธฐ๋ฅ. | use case์์ ์ด๋ค ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ๋์ง ์ ์ธํ์ญ์์ค. |
JWT์ Tenant ๋ณด์
Tenant ๊ธฐ๋ฅ์ด ํ์ฑํ๋๋ฉด Lino๋ JWT๋ฅผ ์ธ์ฆ๋ ์ฌ์ฉ์ ์ปจํ
์คํธ์ ์์ค๋ก ์ฌ์ฉํฉ๋๋ค. IUserContext๋ JWT๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณต์ฌ๋ณธ์ผ๋ก ๋ง๋ค์ง ์๊ณ , ์ฌ์ฉ์์ claims์ token์ TenantId๋ฅผ ์ฝ์ต๋๋ค.
- issuer, audience, ์๋ช ๋ฐ ๋ง๋ฃ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํด ๋์ญ์์ค.
- header, route ๋๋ ํ๋ฉด payload๋ง ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ ์ ํ์ ํ์ฉํ๋ ๋์ Lino๊ฐ ๊ฒ์ฆํ Tenant๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ๋๋ฌด ํฐ claims๋ฅผ ํผํ์ญ์์ค. ๋น๋ํด์ง tokens๋ ์ด์๊ณผ ๊ฐฑ์ ์ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.
- ํ๋ฆ์ ๊ฐ์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์, Tenant ๋ฐ ์์ ์ด ํฌํจ๋ ์ ๊ทผ logs๋ฅผ ๊ธฐ๋กํ์ญ์์ค.
acme.dev.localhost ๋ฐ globex.dev.localhost ๊ฐ์ subdomains๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ITenantContext๋ ์์ฒญ์ ๋ํด ํด์๋ Tenant๋ฅผ ๋ํ๋
๋๋ค. IUserContext๋ ์ธ์ฆ๋ ์ฌ์ฉ์์ JWT์ ์กด์ฌํ๋ Tenant๋ฅผ ๋ํ๋
๋๋ค. Lino๋ ์ด ๋ ์ปจํ
์คํธ๋ฅผ ๋น๊ตํ์ฌ ํ Tenant์ ๋ํด ๋ฐ๊ธ๋ token์ด ๋ค๋ฅธ Tenant ์ปจํ
์คํธ์์ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
์ธ๊ฐ๋ ๊ณ์ ์ปจํ
์คํธ๋ฅผ ๋ฐ๋ฆ
๋๋ค. ์๋ฅผ ๋ค์ด ์ ํ ๋ณด๊ธฐ ๊ถํ์ ๊ทธ ๊ถํ์ด ๋ถ์ฌ๋๊ณ ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋ Tenant ์์์ ์ ํจํฉ๋๋ค. ์ ๊ธฐ๋ฅ์ ๋ง๋ค ๋๋ ๋์จํ TenantId๋ฅผ ๋ฐ์ ์ธ์ฆ๋ ํ๋ฆ์ ๋ฌด์ํ๋ ์ง๋ฆ๊ธธ์ ๋ง๋ค์ง ๋ง๊ณ , ์ด๋ฏธ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ถํ๊ณผ ์ปจํ
์คํธ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
