ํ๋์ ์ฝ๋๋ฒ ์ด์ค, ์๋ฐฑ ๊ฐ์ ํ ๋ํธ, ๋ฐ์ดํฐ ์ ์ถ ์ ๋ก โ ๋ชจ๋ ํ์ฅ ๊ฐ๋ฅํ SaaS ๋น์ฆ๋์ค์ ๊ธฐ๋ฐ์ ๋๋ค.

๋จ์ผ ๋ฐฐํฌ๋ก ์ฌ๋ฌ ๊ณ ๊ฐ์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํ๋ซํผ์ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค. ๊ฐ ๊ณ ๊ฐ์ ๊ฒฉ๋ฆฌ๋ ๋ฐ์ดํฐ, ๋ธ๋๋ํ๋ ๊ฒฝํ, ํ ๋ํธ๋ณ ์ฒญ๊ตฌ๋ฅผ ๊ธฐ๋ํ์ง๋ง, ๊ฐ๊ฐ์ ์ธํ๋ผ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ด์ํ ์ฌ์ ๋ ์์ต๋๋ค. ์ ์ฉ ์์คํ ์ ๊ฒฉ๋ฆฌ ๋ณด์ฅ๊ณผ ๊ณต์ ์ธํ๋ผ์ ๊ฒฝ์ ์ฑ์ด ๋ชจ๋ ํ์ํฉ๋๋ค. ์ด๋ SaaS ์ํคํ ์ฒ์ ๊ทผ๋ณธ์ ์ธ ๊ธด์ฅ์ด๋ฉฐ, ์ด๊ธฐ์ ๊ฒฉ๋ฆฌ ๋ชจ๋ธ์ ์๋ชป ์ค์ ํ๋ ๊ฒ์ ํ๋ซํผ ๊ฐ๋ฐ์์ ๊ฐ์ฅ ๊ฐ๋น์ผ ์ค์ ์ค ํ๋์ ๋๋ค.
Explore more design patterns and system architectures
์ต์ ์ ์ ํ์ ํ ๋ํธ ๊ฒฉ๋ฆฌ ์๊ตฌ์ฌํญ๊ณผ ๊ท๋ชจ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. MicrocosmWorks๋ ๋๋ถ๋ถ์ B2B SaaS ์ ํ์ ๋ํด ๋น์ฉ ํจ์จ์ฑ๊ณผ ๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ ๊ฐ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ๊ณต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๊ฐ๋ณ ์คํค๋ง ์ ๊ทผ ๋ฐฉ์์ ๊ถ์ฅํฉ๋๋ค. ๋จ, ์๋ฃ ๋๋ ๊ธ์ต๊ณผ ๊ฐ์ด ์๊ฒฉํ ๋ฐ์ดํฐ ๋ถ๋ฆฌ๊ฐ ์๋ฌดํ๋ ๊ท์ ์ฐ์ ์ ๊ณ ๊ฐ์๊ฒ๋ ํ ๋ํธ๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌํํฉ๋๋ค. ์ ํฌ ์ํคํ ํธ๋ค์ ์ ์ ํ ํ ๋์ ๋ชจ๋ธ์ ๊ถ์ฅํ๊ธฐ ์ ์ ๊ณ ๊ฐ์ ๊ท์ ์ค์ ์๊ตฌ์ฌํญ, ์์ ํ ๋ํธ ์, ์ฟผ๋ฆฌ ํจํด์ ํ๊ฐํฉ๋๋ค.
MicrocosmWorks๋ ๋ ธ์ด์ง ์ด์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํ ๋ํธ ์ธ์งํ ์๋ ์ ํ, ํ ๋ํธ๋ณ ํ ๋น๋์ด ์๋ ์ฐ๊ฒฐ ํ๋ง, ์ปดํจํธ ๊ณ์ธต์์์ ๋ฆฌ์์ค ๊ฒฉ๋ฆฌ๋ฅผ ๊ตฌํํฉ๋๋ค. ๊ฐ์ค ๊ณต์ ํ์ ๋ฐ ํ ๋ํธ๋ณ ์บ์ฑ ํฐ์ด์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํ ๊ณ ๊ฐ์ ๊ฐ์์ค๋ฌ์ด ํธ๋ํฝ ๊ธ์ฆ์ด ๋ค๋ฅธ ๊ณ ๊ฐ์ ์ง์ฐ์ผ๋ก ์ด์ด์ง์ง ์๋๋ก ํฉ๋๋ค. ์ํฐํ๋ผ์ด์ฆ๊ธ ํ ๋ํธ์ ๊ฒฝ์ฐ, ๊ณต์ ์ ์ด ํ๋ฉด์ ์ ์งํ๋ฉด์ ์ ์ฉ ์ปดํจํธ ํํฐ์ ์ ํ๋ก๋น์ ๋ํ ์ ์์ต๋๋ค.
MicrocosmWorks๋ ํ์ํ ๋ณต์ก์ฑ๊ณผ ํ ๊ฒฝ๋ ฅ์ ๋ฐ๋ผ ์๊ฐ๋น $15~$45์ ์ปจ์คํ ์์จ๋ก ์ํคํ ์ฒ ์ค๊ณ ๋ฐ ๊ตฌํ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ, ํ ๋ํธ ๊ฒฉ๋ฆฌ, ์ธ์ฆ ๋ฐ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ํฌํจํ๋ ์ผ๋ฐ์ ์ธ multi-tenant SaaS ์ํคํ ์ฒ ํ๋ก์ ํธ๋ ๋ค๊ธฐ๋ฅ ํ๊ณผ ํจ๊ป 8-16์ฃผ๊ฐ ์์๋ฉ๋๋ค. ์ ํฌ๋ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ๊ณ ์ ๊ฐ๊ฒฉ ํ์ ๋จ๊ณ๋ก ๋ฒ์ ์ง์ ํ์ฌ ๊ตฌ์ถ์ ์ฐฉ์ํ๊ธฐ ์ ์ ์ ์ฒด ๋น์ฉ์ ํฌ๋ช ํ๊ฒ ํ์ธํ ์ ์๋๋ก ํฉ๋๋ค.
MicrocosmWorks๋ ์ ๊ท ๊ฐ์ ํ ๋ช ๋ถ ์ด๋ด์ ์คํค๋ง ์์ฑ, DNS ๊ตฌ์ฑ, ๊ธฐ๋ฅ ํ๋๊ทธ ์ด๊ธฐํ ๋ฐ ์๋ ๋ฐ์ดํฐ ๋ฐฐํฌ๋ฅผ ์ฒ๋ฆฌํ๋ ์๋ํ๋ ํ ๋ํธ ํ๋ก๋น์ ๋ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํฉ๋๋ค. ์ ํฌ๋ Terraform ๋๋ Pulumi์ ๊ฐ์ Infrastructure-as-Code ๋๊ตฌ๋ฅผ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํฌํ๋ก์ฐ์ ๊ฒฐํฉํ์ฌ ๊ฐ ์ ๊ท ํ ๋ํธ๊ฐ ์๋ ๊ฐ์ ์์ด ์์ ํ ๊ตฌ์ฑ๋ ํ๊ฒฝ์ ์ป์ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ํตํด ๊ณ ๊ฐ์ ์จ๋ณด๋ฉ ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ 10๊ฐ ํ ๋ํธ์์ 10,000๊ฐ ํ ๋ํธ๋ก ํ์ฅํ ์ ์์ต๋๋ค.
MicrocosmWorks๋ ๊ธฐ๋ฅ ํ๋๊ทธ, ํ ๋ํธ๋ณ ๋ฉํ๋ฐ์ดํฐ ๋ฐ ์ฝ๋ ๋ถ๊ธฐ ์์ด ํ ๋ํธ๋ณ ๋์์ ํ์ฉํ๋ ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ ์ ๋ ์ด์ด๋ฅผ ๊ตฌํํฉ๋๋ค. ์ ํฌ๋ UI ํ ๋ง, ์ํฌํ๋ก์ฐ ์์ง ๋ฐ ํตํฉ ๊ณ์ธต์ ํ์ฅ์ฑ ํฌ์ธํธ๋ฅผ ์ค๊ณํ์ฌ ํ ๋ํธ๊ฐ ๊ตฌ์ฑ ๊ด๋ฆฌ๋ฅผ ํตํด ๊ณ ์ ํ ๋ธ๋๋ฉ, ๋น์ฆ๋์ค ๊ท์น ๋ฐ ํ์ฌ ์ฐ๊ฒฐ์ ๊ฐ์ง ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ง๋์ด๋ง ํ์ ๋ค์ํ ๊ณ ๊ฐ ์๊ตฌ ์ฌํญ์ ์ง์ํ๋ฉด์ ๋จ์ผ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ์ ์ํคํ ํธ๋ค์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์ด ํจํด์ ์ฌ์ฉํ์ฌ ์์คํ ์ ์ค๊ณํ๊ณ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ ๋๋ฆด ์ ์์ต๋๋ค.
์ฐ๋ฝํ๊ธฐ๋ฉํฐํ ๋ํธ SaaS ์ํคํ ์ฒ๋ ๊ธฐ๋ณธ ์ปดํจํ , ์คํ ๋ฆฌ์ง ๋ฐ ๋คํธ์ํน ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๋ฉด์ ํ ๋ํธ ๊ฐ์ ๋ ผ๋ฆฌ์ ๋๋ ๋ฌผ๋ฆฌ์ ๋ถ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ํจํด์ ํ ๋ํธ ํ๋ก๋น์ ๋, ๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ, ๊ธฐ๋ฅ ๊ด๋ฆฌ, ์ฒญ๊ตฌ ์ธก์ ๋ฐ ํ์ดํธ ๋ผ๋ฒจ ์ปค์คํฐ๋ง์ด์ง์ ํฌํจํฉ๋๋ค. ํต์ฌ ์ค๊ณ ๊ฒฐ์ ์ ๊ฒฉ๋ฆฌ ๋ชจ๋ธ์ ๋๋ค: ํ ์์ค ๋ณด์(row-level security)์ด ์๋ ๊ณต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ ๋ํธ๋ณ ์คํค๋ง(schema-per-tenant) ๋๋ ํ ๋ํธ๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค(database-per-tenant). ๊ฐ ๋ชจ๋ธ์ ๊ฒฉ๋ฆฌ ๊ฐ๋์ ์ด์ ๋ณต์ก์ฑ ๋ฐ ๋น์ฉ ํจ์จ์ฑ ์ฌ์ด์์ ์ ์ถฉํฉ๋๋ค.
์์คํ ์ ์ธ ๊ฐ์ง ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ํ ๋ํธ ์ธ์ ๊ฒ์ดํธ์จ์ด๋ ์ธ์ฆ, ํ ๋ํธ ํ์ธ(์๋ธ๋๋ฉ์ธ, JWT ํด๋ ์ ๋๋ API ํค๋ฅผ ํตํด) ๋ฐ ์์ฒญ ๋ผ์ฐํ ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ์์ ํ ํ ๋ํธ ์ปจํ ์คํธ ๋ด์์ ์๋ํฉ๋๋ค. ๋ชจ๋ ์ฟผ๋ฆฌ, ๋ชจ๋ ์บ์ ํค, ๋ชจ๋ ํ ๋ฉ์์ง๋ ํ์ธ๋ ํ ๋ํธ์ ๋ฒ์๊ฐ ์ง์ ๋ฉ๋๋ค. ๋ฐ์ดํฐ ๊ณ์ธต์ ํ ์์ค ๋ณด์(row-level security) ์ ์ฑ , ํ ๋ํธ๋ณ ์ฐ๊ฒฐ ํ๋ง ๋ฐ ์ ์ฅ ์ ์ํธํ๋ ํํฐ์ ๋์ ํตํด ์คํ ๋ฆฌ์ง ์์ค์์ ๊ฒฉ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
tenant_id๋ก ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ ํํฐ๋งํ๋ PostgreSQL ์ ์ฑ
. ์คํค๋ง๋ณ ํ
๋ํธ์ ๊ฒฝ์ฐ: ์ฐ๊ฒฐ ํ ๊ด๋ฆฌ์ ํจ๊ป ๋์ ์ฐ๊ฒฐ ๋ผ์ฐํ
. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณ ํ
๋ํธ์ ๊ฒฝ์ฐ: Terraform/Pulumi๋ฅผ ์ฌ์ฉํ ํ๋ก๋น์ ๋ ์๋ํ.acme.yourapp.com)์ ํ์ดํธ ๋ผ๋ฒจ ์ ํ์ ๋ ๊น๋ํ๋ฉฐ ํ
๋ํธ๋ณ TLS ์ธ์ฆ์๋ฅผ ํ์ฉํฉ๋๋ค. ๊ฒฝ๋ก ๊ธฐ๋ฐ(yourapp.com/acme/)์ ๊ตฌํ์ด ๋ ๊ฐ๋จํ๊ณ ์์ผ๋์นด๋ DNS ๋ณต์ก์ฑ์ ํผํ ์ ์์ต๋๋ค. MicrocosmWorks๋ ํ์ดํธ ๋ผ๋ฒจ ์๊ตฌ ์ฌํญ์ด ์๋ B2B SaaS์ ๊ฒฝ์ฐ ์๋ธ๋๋ฉ์ธ ํ์ธ์, ๋ด๋ถ ๋ฉํฐํ
๋ํธ ๋๊ตฌ์ ๊ฒฝ์ฐ ๊ฒฝ๋ก ๊ธฐ๋ฐ์ ๊ถ์ฅํฉ๋๋ค.tenant_id์ ๋ฒ์๊ฐ ์ง์ ๋์ด์ผ ํฉ๋๋ค. ์ด๋ ๋ถ๋ช
ํด ๋ณด์ด์ง๋ง, ํ
๋ํธ ๊ฐ์ ์บ์ ํค ์ถฉ๋์ ๊ฐ์ฅ ํํ ๋ฉํฐํ
๋ํธ ๋ฒ๊ทธ ์ค ํ๋์
๋๋ค. ์ฐ๋ฆฌ๋ ํ
๋ํธ ์ปจํ
์คํธ๋ฅผ ์๋์ผ๋ก ์ ๋์ฌ๋ก ๋ถ์ด๋ ์บ์ ํค ํฉํ ๋ฆฌ๋ฅผ ํตํด ์ด๋ฅผ ๊ฐ์ ํฉ๋๋ค.| ๊ณ์ธต | ๊ธฐ์ |
|---|---|
| ์ปดํจํ | Node.js (NestJS), Python (FastAPI), ECS Fargate ๋๋ Kubernetes์์ ์ปจํ ์ด๋ํ |
| ๋ฐ์ดํฐ | RLS๋ฅผ ์ฌ์ฉํ๋ PostgreSQL, Redis (ํ ๋ํธ ๋ฒ์ ์ง์ ), S3 (ํ ๋ํธ ๋ถํ ๋ฒํท) |
| ID | ํ ๋ํธ ๋ฒ์ ์กฐ์ง์ ์ฌ์ฉํ๋ Clerk, Auth0 ๋๋ Okta |
| ๊ฒฐ์ | Stripe Connect (๋ง์ผํ๋ ์ด์ค ๋ชจ๋ธ), Stripe Billing (์ธก์ ๊ธฐ๋ฐ ๊ตฌ๋ ) |
| ๊ด์ธก ๊ฐ๋ฅ์ฑ | ํ
๋ํธ ์ฐจ์ ํ๊ทธ๊ฐ ์๋ Datadog, ๋ชจ๋ ํญ๋ชฉ์ tenant_id๊ฐ ์๋ ๊ตฌ์กฐํ๋ ๋ก๊น
|
| ์ฌ์ฉ ์๊ธฐ | ํผํด์ผ ํ ์๊ธฐ |
|---|---|
| ๊ณต์ ์ธํ๋ผ์์ 10๊ฐ ์ด์์ ๊ณ ๊ฐ์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ B2B ํ๋ซํผ์ ๊ตฌ์ถํ ๋ | ๊ฐ ๊ณ ๊ฐ์ด ์์ ํ ์ ์ฉ ์ธํ๋ผ๋ฅผ ์๊ตฌํ๋ ๊ฒฝ์ฐ (๊ท์ ์ค์/๊ณ์ฝ์) |
| ํ์ดํธ ๋ผ๋ฒจ ๋ธ๋๋ฉ, ์ฌ์ฉ์ ์ง์ ๋๋ฉ์ธ ๋ฐ ํ ๋ํธ๋ณ ๊ธฐ๋ฅ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ | ๊ณ ๊ฐ์ด 3๋ช ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ โ ๋ ๊ฐ๋จํ ๊ณ ๊ฐ๋ณ ๋ฐฐํฌ๋ก ์ถฉ๋ถํ ์ ์์ต๋๋ค |
| ์ฌ์ฉ๋ ๊ธฐ๋ฐ ๋๋ ๊ณ์ธตํ ๊ฐ๊ฒฉ ์ฑ ์ ์ ํ ๋ํธ๋ณ ์ธก์ ์ด ํ์ํ ๊ฒฝ์ฐ | ์ ํ์ด ์กฐ์ง ์์ค ํ ๋ํธ๊ฐ ์๋ ์ฌ์ฉ์ ์์ค ๊ณ์ ์ ๊ฐ์ง ์๋น์ ์ฑ์ธ ๊ฒฝ์ฐ |
| ํ๋์ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ, ํ๋์ ๋ชจ๋ํฐ๋ง ์คํ, ํ๋์ ์จ์ฝ ๋กํ ์ด์ ์ ์ํ๋ ๊ฒฝ์ฐ | ํ ๋ํธ๊ฐ (๋จ์ํ ๊ตฌ์ฑ์ด ์๋) ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ์คํค๋ง ๋๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ |
MicrocosmWorks๋ ๋ฉํฐํ ๋์๋ฅผ ๊ธฐ๋ฅ์ด ์๋ ๊ต์ฐจ ๊ด์ฌ์ฌ(cross-cutting concern)๋ก ๋ค๋ฃน๋๋ค. ์ฐ๋ฆฌ๋ ๋ฏธ๋ค์จ์ด ์์ค์์ ํ ๋ํธ ์ปจํ ์คํธ ์ ํ๋ฅผ ๊ตฌํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ํ ๋ํธ๋ณ๋ก ์๋์ผ๋ก ํํฐ๋งํ์ง ์๋๋ก ํฉ๋๋ค โ ์ด๋ ํ๋ ์์ํฌ์ ์ํด ๊ฐ์ ๋ฉ๋๋ค. ์ฐ๋ฆฌ์ RLS ๊ตฌํ์๋ ๋ชจ๋ CI ์คํ์์ ํ ๋ํธ ๊ฐ ๋ฐ์ดํฐ ์ก์ธ์ค๋ฅผ ์๋ํ๋ ์๋ํ๋ ํ ์คํธ ์ค์ํธ๊ฐ ํฌํจ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ณต์ ์ธํ๋ผ์์ 500๊ฐ ์ด์์ ํ ๋ํธ์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฉํฐํ ๋ํธ ํ๋ซํผ์ ๋ฐ์ดํฐ ์ ์ถ ์ฌ๊ณ ์์ด ๊ตฌ์ถํ์ผ๋ฉฐ, ์คํธ๋ญ๊ธ๋ฌ ํผ๊ทธ(strangler fig) ํจํด์ ์ฌ์ฉํ์ฌ ๋จ์ผ ํ ๋ํธ ๋ชจ๋๋ฆฌ์ค๋ฅผ ๋ฉํฐํ ๋ํธ ์ํคํ ์ฒ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ต๋๋ค.
๋ชจ๋ธ์ ์ค์ค๋ก ์๋ํ์ง ์์ต๋๋ค. ๋ชจ๋ธ์ ํ๋ จํ๊ณ , ๊ฒ์ฆํ๊ณ , ๋ฐฐํฌํ๊ณ , ๋ชจ๋ํฐ๋งํ๋ ํ์ดํ๋ผ์ธ์ด ์ค์ ์ ํ์ ๋๋ค. ๋ชจ๋ธ์ ๋จ์ง ํ๋์ ์ํฐํฉํธ์ผ ๋ฟ์ ๋๋ค.