๋ ธ์ฝ๋ ๋ฐฑ์๋๋ฅผ ์ํ ๋ค์ค ํ ๋ํธ SaaS ๋ฐ์ดํฐ ๋ชจ๋ธ ์ต์
๋ค์ค ํ ๋ํธ SaaS์ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ ํ์ ๋ณด์, ๋ณด๊ณ , ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ค๋๋ค. tenant_id, ๋ถ๋ฆฌ ์คํค๋ง, ํ ๋ํธ๋ณ DB์ ์ฅ๋จ์ ์ ๋น๊ตํด ๋ช ํํ ํธ๋ ์ด๋์คํ๋ฅผ ์ ์ํฉ๋๋ค.

๋ฌธ์ : ํ
๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ฉด์ ์๋ ์ ํ๋ฅผ ๋ง๊ธฐ\n\n๋ค์ค ํ
๋์๋ ํ๋์ ์ํํธ์จ์ด๊ฐ ์ฌ๋ฌ ๊ณ ๊ฐ(ํ
๋ํธ)์ ์๋น์คํ๋ ๊ฒ์ ๋ปํ๋ฉฐ, ๊ฐ ํ
๋ํธ๋ ์์ ๋ฐ์ดํฐ๋ง ๋ณผ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ ค์ด ์ ์ ๊ทธ๊ฑธ ์ผ๊ด๋๊ฒ ์ ์ฉํ๋ ๊ฒ์
๋๋ค: ๋จ์ํ ํ ํ๋ฉด์์๋ง์ด ์๋๋ผ ๋ชจ๋ API ํธ์ถ, ๊ด๋ฆฌ์ ํ๋ฉด, ๋ด๋ณด๋ด๊ธฐ, ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์ฒด์ ๊ฑธ์ณ์์.\n\n๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋๋ถ๋ถ์ ํ์ด ์์ํ๋ ๊ฒ๋ณด๋ค ์ผ์ ์ด์์ ๋ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ถํ, ๋ณด๊ณ , ์ฑ์ฅ์ ๋ฐ๋ฅธ ์ฟผ๋ฆฌ ์๋, ๊ทธ๋ฆฌ๊ณ ์์ ๋ฒ๊ทธ๊ฐ ์ผ๋ง๋ ์ํํด์ง ์ ์๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ํํฐ ํ๋๋ง ๋นผ๋จน์ด๋ ๋ฐ์ดํฐ๊ฐ ์ ์ถ๋ ์ ์๊ณ , ๋๋ฌด ๊ฐํ๊ฒ ๊ฒฉ๋ฆฌํ๋ฉด ๋ณด๊ณ ์์
์ด ๋ฒ๊ฑฐ๋ก์์ง๋๋ค.\n\n์ผ๋ฐ์ ์ผ๋ก ์ธ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ค์ค ํ
๋ํธ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ตฌ์กฐํํฉ๋๋ค:\n\n- ๋ชจ๋ ํ
์ด๋ธ์ tenant_id๊ฐ ์๋ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค\n- ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ํ
๋ํธ๋ณ๋ก ๋ถ๋ฆฌ๋ ์คํค๋ง\n- ํ
๋ํธ๋ณ๋ก ๋ถ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค\n\n๋
ธ์ฝ๋ ๋ฐฑ์๋๋ก ์๊ฐ์ ์ผ๋ก ๋น๋ํ๋๋ผ๋ ๋์ผํ ํธ๋ ์ด๋์คํ๊ฐ ์ ์ฉ๋ฉ๋๋ค. AppMaster ๊ฐ์ ๋๊ตฌ๋ ์ค๊ณ์์ ์ค์ ๋ฐฑ์๋ ์ฝ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ฏ๋ก ์ด๊ธฐ ๋ชจ๋ธ๋ง ๊ฒฐ์ ์ ๋น ๋ฅด๊ฒ ํ๋ก๋์
๋์๊ณผ ์ฑ๋ฅ์ ๋๋ฌ๋ฉ๋๋ค.\n\n์๋ฅผ ๋ค์ด ํฌํ๋ฐ์คํฌ ๋๊ตฌ๋ฅผ ์๊ฐํด๋ณด์ธ์. ๋ชจ๋ ํฐ์ผ ํ์ tenant_id๊ฐ ์์ผ๋ฉด โ๋ชจ๋ ์คํ ํฐ์ผโ์ ์ฟผ๋ฆฌํ๊ธฐ๋ ์ฝ์ง๋ง ๋ชจ๋ ๊ณณ์์ ํ
๋ํธ ์ฒดํฌ๋ฅผ ๊ฐ์ ํด์ผ ํฉ๋๋ค. ๋ฐ๋๋ก ๊ฐ ํ
๋ํธ์ ์คํค๋ง๋ DB๋ฅผ ์ฃผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒฉ๋ฆฌ๊ฐ ๊ฐํ์ง๋ง, โ๋ชจ๋ ๊ณ ๊ฐ์ ํ๊ท ์ฒ๋ฆฌ ์๊ฐโ ๊ฐ์ ํฌ๋ก์ค-ํ
๋ํธ ๋ณด๊ณ ๋ ๋ ์์ด ๋ง์ด ๊ฐ๋๋ค.\n\n๋ชฉํ๋ ๋ณด๊ณ , ์ง์, ์ฑ์ฅ์ ๋ง์ฐฐ์ ์ถ๊ฐํ์ง ์์ผ๋ฉด์ ์ ๋ขฐํ ์ ์๋ ๋ถ๋ฆฌ ์์ค์ ๊ฐ๋ ๊ฒ์
๋๋ค.\n\n## ๋น ๋ฅธ ์ ํ๋ฒ: ๊ฒฐ์ ์ ์ขํ๋ 4๊ฐ์ง ์ง๋ฌธ\n\n๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ก ๋ถํฐ ์์ํ์ง ๋ง์ธ์. ์ ํ์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ง, ๋งค์ฃผ ์ด์์ ๋ฌด์์ด ํ์ํ์ง๋ถํฐ ์์ํ์ธ์.\n\n### ๋ณดํต ์ ๋ต์ ์ฝ๊ฒ ๋ง๋๋ ๋ค ๊ฐ์ง ์ง๋ฌธ\n\n1) ๋ฐ์ดํฐ ๋ฏผ๊ฐ๋๊ฐ ์ผ๋ง๋ ๋๊ณ ๊ท์ ๊ฐ ์๊ฒฉํ๊ฐ? ์๋ฃ, ๊ธ์ต, ์๊ฒฉํ ๊ณ ๊ฐ ๊ณ์ฝ์ ๋ณดํต ๋ ๊ฐํ ๊ฒฉ๋ฆฌ(๋ถ๋ฆฌ ์คํค๋ง๋ ๋ณ๋ DB)๋ฅผ ์๊ตฌํฉ๋๋ค. ์ํ์ ์ค์ด๊ณ ๊ฐ์ฌ ๋์์ ์ฝ๊ฒ ํด์ค๋๋ค.\n\n2) ์์ฃผ ํฌ๋ก์ค-ํ
๋ํธ ๋ณด๊ณ ๊ฐ ํ์ํ๊ฐ? โ๋ชจ๋ ๊ณ ๊ฐโ ๋ฉํธ๋ฆญ(์ฌ์ฉ๋, ๋งค์ถ, ์ฑ๋ฅ)์ ์์ฃผ ๋ด์ผ ํ๋ค๋ฉด tenant_id๊ฐ ์๋ ๋จ์ผ DB๊ฐ ๊ฐ์ฅ ๋จ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ณ๋ DB๋ ์ฌ๋ฌ ๊ณณ์ ์ฟผ๋ฆฌํด์ ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ์ผ ํ๋ฏ๋ก ๋ ์ด๋ ต์ต๋๋ค.\n\n3) ํ
๋ํธ๋ค๋ผ๋ฆฌ ์ผ๋ง๋ ๋ฌ๋ผ์ง๊น? ํ
๋ํธ๊ฐ ์ปค์คํ
ํ๋, ์ํฌํ๋ก, ํตํฉ์ ๋ง์ด ํ์๋ก ํ๋ฉด ์คํค๋ง๋ DB ๋ถ๋ฆฌ๊ฐ ๋ณ๊ฒฝ ์ ์ถ ๊ฐ๋ฅ์ฑ์ ์ค์
๋๋ค. ๋๋ถ๋ถ์ด ๋์ผํ ๊ตฌ์กฐ๋ผ๋ฉด tenant_id๊ฐ ๊น๋ํฉ๋๋ค.\n\n4) ํ์ด ํ์ค์ ์ผ๋ก ์ด์ํ ์ ์๋ ๋ฒ์๋? ๊ฒฉ๋ฆฌ๊ฐ ๊ฐํ ์๋ก ์์
์ด ๋์ด๋ฉ๋๋ค: ๋ฐฑ์
, ๋ง์ด๊ทธ๋ ์ด์
, ๊ตฌ์ฑ ์์, ์คํจ ์ง์ ์ด ๋ง์์ง๋๋ค.\n\n์ค์ฉ์ ์ ๊ทผ์ ์์ ๋ ๊ฐ์ง ์ ํ์ ํ๋กํ ํ์
์ผ๋ก ๋ง๋ค์ด ๊ถํ ๊ท์น, ๋ณด๊ณ ์ฟผ๋ฆฌ, ๋ชจ๋ธ ๋ณํ ์ ๋กค์์ ๋ฐฉ์์ ํ
์คํธํ๋ ๊ฒ์
๋๋ค.\n\n## ์ ๊ทผ๋ฒ 1: ๋ชจ๋ ํ์ tenant_id๋ฅผ ๋ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค\n\n๊ฐ์ฅ ํํ ์ค์ ์
๋๋ค: ๋ชจ๋ ๊ณ ๊ฐ์ด ๋์ผํ ํ
์ด๋ธ์ ๊ณต์ ํ๊ณ ๊ฐ ํ
๋ํธ ์์ ๋ ์ฝ๋์ tenant_id๊ฐ ๋ถ์ต๋๋ค. ์ด์์ ๋จ์ํ ์ด์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง์ด๊ทธ๋ ์ด์
์ ํ ๋ฒ๋ง ๊ด๋ฆฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ์
๋๋ค.\n\n๊ท์น์ ์๊ฒฉํฉ๋๋ค: ํ์ด ํ
๋ํธ์ ์ํ๋ฉด tenant_id๋ฅผ ํฌํจํด์ผ ํ๊ณ ๋ชจ๋ ์ฟผ๋ฆฌ๋ ์ด๋ฅผ ํํฐํด์ผ ํฉ๋๋ค. ํ
๋ํธ ์์ ํ
์ด๋ธ์ ๋ณดํต ์ฌ์ฉ์, ์ญํ , ํ๋ก์ ํธ, ํฐ์ผ, ์ธ๋ณด์ด์ค, ๋ฉ์์ง, ํ์ผ ๋ฉํ๋ฐ์ดํฐ, ํ
๋ํธ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ์กฐ์ธ ํ
์ด๋ธ์ ํฌํจํฉ๋๋ค.\n\n์ ์ถ์ ์ค์ด๋ ค๋ฉด tenant_id๋ฅผ ๋นํ์์ ์ผ๋ก ๋ค๋ฃจ์ธ์:\n\n- ํ
๋ํธ ์์ ํ
์ด๋ธ์์ tenant_id๋ฅผ ํ์(NOT NULL)๋ก ๋ง๋ค๊ธฐ\n- tenant_id๋ก ์์ํ๋ ์ธ๋ฑ์ค ์ถ๊ฐ(์: tenant_id, created_at)\n- ๊ณ ์ ๊ท์น์ tenant_id ํฌํจ(์: ํ
๋ํธ๋ณ ์ด๋ฉ์ผ ๊ณ ์ )\n- tenant_id๋ฅผ UI ํผ๋ฟ ์๋๋ผ ๋ชจ๋ API์ ๋น์ฆ๋์ค ํ๋ฆ์ ์ ํ\n- ํด๋ผ์ด์ธํธ ํํฐ๋ฟ ์๋๋ผ ๋ฐฑ์๋์์ ๊ฐ์ \n\nPostgreSQL์์๋ ํ ์์ค ๋ณด์(RLS) ์ ์ฑ
์ด ๋์ ์ฟผ๋ฆฌ๊ฐ ๋ง์ ๋ ๊ฐ๋ ฅํ ์์ ๋ง์ด ๋ ์ ์์ต๋๋ค.\n\n์ฐธ์กฐ ๋ฐ์ดํฐ๋ ๋ณดํต ๋ ๊ทธ๋ฃน ์ค ํ๋์
๋๋ค: tenant_id๊ฐ ์๋ ๊ณต์ ํ
์ด๋ธ(์: countries)๊ณผ tenant_id๋ฅผ ํฌํจํ๋ ํ
๋ํธ ๋ฒ์ ์นดํ๋ก๊ทธ(์: ์ปค์คํ
ํ๊ทธ, ํ์ดํ๋ผ์ธ).\n\nAppMaster๋ก ๋น๋ํ๋ค๋ฉด ๊ฐ๋จํ ์ต๊ด์ด ๋๋ถ๋ถ์ ์ฌ๊ณ ๋ฅผ ๋ง์ต๋๋ค: ์ธ์ฆ๋ ์ฌ์ฉ์์ ํ
๋ํธ๋ฅผ Business Process ๋ก์ง์์ ๋ชจ๋ ์์ฑ/์กฐํ ์ ์ ์ค์ ํ๊ณ ๊ทธ ํจํด์ ์ผ๊ด๋๊ฒ ์ ์งํ์ธ์.\n\n## ๊ถํ ์ํฅ: ์ ๊ทผ ๋ฐฉ์๋ณ ๋ณํ\n\n๊ถํ์ด ๋ค์ค ํ
๋์์ ์ฑํจ๋ฅผ ์ข์ฐํฉ๋๋ค. ๋ฐ์ดํฐ ๋ ์ด์์์ ์ฌ์ฉ์ ์ ์ฅ ๋ฐฉ์, ์ฟผ๋ฆฌ ๋ฒ์ ์ง์ ๋ฐฉ์, ๊ด๋ฆฌ ํ๋ฉด์์์ ์ค์ ๋ฐฉ์ง ๋ฐฉ๋ฒ์ ๋ฐ๊ฟ๋๋ค.\n\n๋จ์ผ DB์ ๋ชจ๋ ํ์ tenant_id์์๋ ๋ณดํต ํ๋์ Users ํ
์ด๋ธ์ ๊ณต์ ํ๊ณ ๊ฐ ์ฌ์ฉ์๋ฅผ ํ
๋ํธ์ ์ญํ ์ ์ฐ๊ฒฐํฉ๋๋ค. ํต์ฌ ๊ท์น์ ๊ฐ์์ ๋ชจ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ ์์ ํ
์ด๋ธ(์ค์ , ํ๊ทธ, ๋ก๊ทธ ๋ฑ)์๋ ํ
๋ํธ ๋ฒ์๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.\n\n๋ถ๋ฆฌ๋ ์คํค๋ง์์๋ ๋ก๊ทธ์ธ, ๋น๋ฐ๋ฒํธ, MFA ๊ฐ์ ๊ณตํต ์ธ์ฆ ๋ ์ด์ด๋ ๊ณต์ ํ๊ณ ํ
๋ํธ ๋ฐ์ดํฐ๋ ๊ฐ ํ
๋ํธ ์คํค๋ง์ ๋ก๋๋ค. ๊ถํ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ ์ ์ฌ๋ฐ๋ฅธ ์คํค๋ง๋ก ๋ผ์ฐํ
ํ๋ ๋ฌธ์ ๊ฐ ์ผ๋ถ ๋ฉ๋๋ค.\n\n๋ถ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๊ฒฉ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐํ์ง๋ง ๊ถํ ๋ก์ง์ ์ธํ๋ผ๋ก ์ด๋ํฉ๋๋ค: ์ฌ๋ฐ๋ฅธ DB ์ฐ๊ฒฐ ์ ํ, ์๊ฒฉ ์ฆ๋ช
๊ด๋ฆฌ, ์ ์ฌ ์ง์ ๊ณ์ ์ฒ๋ฆฌ ๋ฑ์
๋๋ค.\n\n์ธ ์ ๊ทผ๋ฒ ๋ชจ๋์์ ๊ต์ฐจ ํ
๋ํธ ์ํ์ ์ค์ด๋ ์ผ๊ด๋ ํจํด์ด ์์ต๋๋ค:\n\n- tenant_id๋ฅผ ์ธ์
์ด๋ ํ ํฐ ํด๋ ์์ ๋ฃ๊ณ ํ์๋ก ์ทจ๊ธ\n- ์๋ํฌ์ธํธ ์ฌ๊ธฐ์ ๊ธฐ์ ํฉ์ด์ง๋ ๋์ ์ค์(๋ฏธ๋ค์จ์ด๋ ๋จ์ผ Business Process)์ ํ
๋ํธ ๊ฒ์ฌ๋ฅผ ์ง์ค\n- ๊ด๋ฆฌ์ ๋๊ตฌ์์ ํ
๋ํธ ์ปจํ
์คํธ๋ฅผ ๋ช
ํํ ํ์ํ๊ณ ๋ช
์์ ์ธ ํ
๋ํธ ์ ํ ์๊ตฌ\n- ์ง์ ์ ๊ทผ์ ๊ฐ์ฌ ๋ก๊ทธ๊ฐ ์๋ ์์ ๊ฐ์ฅ(impersonation) ์ฌ์ฉ\n\nAppMaster์์๋ ์ธ์ฆ ์งํ ํ
๋ํธ ์ปจํ
์คํธ๋ฅผ ์ ์ฅํ๊ณ API ์๋ํฌ์ธํธ์ Business Process์์ ์ฌ์ฌ์ฉํด ๋ชจ๋ ์ฟผ๋ฆฌ๊ฐ ์ค์ฝํ ์์ ์๋๋ก ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์
๋๋ค. ์ง์ ๋ด๋น์๋ UI๊ฐ ์ฐ์ฐํ ํํฐํ ๋๋ถ์ ๋ณด๋ ๊ฒ์ด ์๋๋ผ, ์ฑ์ด ํ
๋ํธ ์ปจํ
์คํธ๋ฅผ ์ค์ ํ ๋ค์๋ง ์ฃผ๋ฌธ์ ๋ณผ ์ ์์ด์ผ ํฉ๋๋ค.\n\n## tenant_id ๋ชจ๋ธ์ ๋ณด๊ณ ๋ฐ ์ฑ๋ฅ\n\ntenant_id ๋จ์ผ DB ์ ๊ทผ์์๋ ๋ณด๊ณ ๊ฐ ๋ณดํต ์ง๊ด์ ์
๋๋ค. ๊ธ๋ก๋ฒ ๋์๋ณด๋(MRR, ๊ฐ์
, ์ฌ์ฉ๋)๋ ๋ชจ๋ ์ฌ๋์ ๋์์ผ๋ก ํ ์ฟผ๋ฆฌ๋ก ์คํํ ์ ์๊ณ , ํ
๋ํธ๋ณ ๋ณด๊ณ ๋ ๊ฐ์ ์ฟผ๋ฆฌ์ ํํฐ๋ง ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.\n\n๋จ์ ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์
๋๋ค. ํ
์ด๋ธ์ด ์ปค์ง๋ฉด ํ ํ
๋ํธ์ ๊ณผ๋ํ ํ๋์ด โ์๋๋ฌ์ด ์ด์โ์ด ๋์ด ๋ ๋ง์ ํ์ ๋ง๋ค๊ณ ์ฐ๊ธฐ๋ฅผ ์ด๋ฐํด ๊ณตํต ์ฟผ๋ฆฌ๋ฅผ ๋๋ฆฌ๊ฒ ํ ์ ์์ต๋๋ค.\n\n์ธ๋ฑ์ฑ์ผ๋ก ์ด ๋ชจ๋ธ์ ๊ฑด๊ฐํ๊ฒ ์ ์งํ์ธ์. ๋๋ถ๋ถ์ ํ
๋ํธ ๋ฒ์ ์ฝ๊ธฐ๋ tenant_id๋ก ์์ํ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํด๋น ํ
๋ํธ์ ์ฌ๋ผ์ด์ค๋ก ๋ฐ๋ก ์ ํํ ์ ์์ด์ผ ํฉ๋๋ค.\n\n์ข์ ๊ธฐ์ค:\n\n- tenant_id๊ฐ ์ฒซ ์ปฌ๋ผ์ธ ๋ณตํฉ ์ธ๋ฑ์ค ์ถ๊ฐ(์: tenant_id + created_at, tenant_id + status, tenant_id + user_id)\n- ํฌ๋ก์ค-ํ
๋ํธ ์ฟผ๋ฆฌ๊ฐ ํ์ํ ๋๋ง ์ง์ ํ ๊ธ๋ก๋ฒ ์ธ๋ฑ์ค ์ ์ง\n- tenant_id๋ฅผ ์๋ ์กฐ์ธ/ํํฐ๋ฅผ ์ฃผ์(๋๋ฆฐ ์ค์บ ์ ๋ฐ)\n\n๋ณด์กด ๋ฐ ์ญ์ ๊ณํ๋ ํ์ํฉ๋๋ค. ํ ํ
๋ํธ์ ๊ธฐ๋ก์ด ๋ชจ๋์ ํ
์ด๋ธ์ ํฝ์ฐฝ์ํฌ ์ ์์ต๋๋ค. ํ
๋ํธ๋ณ ๋ณด์กด ์ ์ฑ
์ด ๋ค๋ฅด๋ค๋ฉด ์ํํธ ์ญ์ ์ ํ
๋ํธ๋ณ ์์ฝ ์์นด์ด๋น์ ๊ณ ๋ คํ๊ฑฐ๋ tenant_id๋ก ํค๋ ์์นด์ด๋ธ ํ
์ด๋ธ๋ก ์ค๋๋ ํ์ ์ฎ๊ธฐ์ธ์.\n\n## ์ ๊ทผ๋ฒ 2: ํ
๋ํธ๋ณ ๋ถ๋ฆฌ ์คํค๋ง\n\n๋ถ๋ฆฌ ์คํค๋ง๋ ํ๋์ PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ฐ ํ
๋ํธ์ ์คํค๋ง(์: tenant_42)๋ฅผ ๋ถ์ฌํฉ๋๋ค. ํด๋น ์คํค๋ง ์์ ํ
์ด๋ธ์ ๊ทธ ํ
๋ํธ์๋ง ์ํฉ๋๋ค. ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ํ๋ ์ค๋ฒํค๋ ์์ด ๊ฐ ๊ณ ๊ฐ์๊ฒ "๋ฏธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค"๋ฅผ ์ฃผ๋ ๋๋์
๋๋ค.\n\n์ผ๋ฐ์ ์ผ๋ก ์ ์ญ ์๋น์ค๋ ๊ณต์ ์คํค๋ง์ ๋๊ณ ํ
๋ํธ ๋ฐ์ดํฐ๋ ํ
๋ํธ ์คํค๋ง์ ๋ก๋๋ค. ๊ตฌ๋ถ์ ๋ณดํต ๋ชจ๋ ๊ณ ๊ฐ๊ณผ ๊ณต์ ํด์ผ ํ๋ ๊ฒ๊ณผ ์ ๋ ์์ด๋ฉด ์ ๋๋ ๊ฒ์ ๋๋๋ ๊ธฐ์ค์
๋๋ค.\n\n์ ํ์ ๋ถ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:\n\n- ๊ณต์ ์คํค๋ง: tenants ํ
์ด๋ธ, ํ๋, ์ฒญ๊ตฌ ๊ธฐ๋ก, ๊ธฐ๋ฅ ํ๋๊ทธ, ๊ฐ์ฌ ์ค์ \n- ํ
๋ํธ ์คํค๋ง: ์ฃผ๋ฌธ, ํฐ์ผ, ์ฌ๊ณ , ํ๋ก์ ํธ, ์ปค์คํ
ํ๋ ๊ฐ์ ๋น์ฆ๋์ค ํ
์ด๋ธ\n- ๊ฒฝ์ฐ์ ๋ฐ๋ผ(์ ํ์ ๋ฐ๋ผ): ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ํ
๋ํธ์ ์ ๊ทผํ ์ ์์ผ๋ฉด ์ฌ์ฉ์์ ์ญํ ์ ๊ณต์ ์ชฝ์ ๋ ์๋ ์์\n\n์ด ๋ชจ๋ธ์ ํ
์ด๋ธ์ด ์๋ก ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ ์์ผ๋ฏ๋ก ํฌ๋ก์ค-ํ
๋ํธ ์กฐ์ธ ์ํ์ ์ค์ฌ์ค๋๋ค. ๋ํ ํ๋์ ์คํค๋ง๋ฅผ ํ๊ฒ์ผ๋ก ๋ฐฑ์
ํ๊ฑฐ๋ ๋ณต์ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.\n\nํ์ ๋๋ผ๊ฒ ํ๋ ๊ฒ์ ๋ง์ด๊ทธ๋ ์ด์
์
๋๋ค. ์ ํ
์ด๋ธ์ด๋ ์ปฌ๋ผ์ ์ถ๊ฐํ ๋ ๋ชจ๋ ํ
๋ํธ ์คํค๋ง์ ๋ณ๊ฒฝ์ ์ ์ฉํด์ผ ํฉ๋๋ค. ํ
๋ํธ๊ฐ 10๊ฐ๋ฉด ๊ด๋ฆฌํ๊ธฐ ์ฝ์ง๋ง 1,000๊ฐ๋ผ๋ฉด ์คํค๋ง ๋ฒ์ ์ ์ถ์ ํ๊ณ ๋ฐฐ์น๋ก ๋ง์ด๊ทธ๋ ์ด์
์ ์คํํ๋ฉฐ ํ๋์ ์คํจํ ํ
๋ํธ๊ฐ ๋๋จธ์ง๋ฅผ ๋ง์ง ์๋๋ก ์คํจ ์์ ์ฑ์ ํ๋ณดํด์ผ ํฉ๋๋ค.\n\n์ธ์ฆ๊ณผ ์ฒญ๊ตฌ ๊ฐ์ ๊ณต์ ์๋น์ค๋ ๋ณดํต ํ
๋ํธ ์คํค๋ง ๋ฐ์ ๋ก๋๋ค. ์ค์ฉ์ ํจํด์ ๊ณต์ ์ธ์ฆ(ํ๋์ ์ฌ์ฉ์ ํ
์ด๋ธ + ํ
๋ํธ ๋ฉค๋ฒ์ญ ํ
์ด๋ธ)๊ณผ ๊ณต์ ์ฒญ๊ตฌ(Stripe ๊ณ ๊ฐ ID, ์ธ๋ณด์ด์ค)๋ฅผ ๋๊ณ ํ
๋ํธ ์คํค๋ง๋ ํ
๋ํธ ์์ ๋น์ฆ๋์ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์
๋๋ค.\n\nAppMaster๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ Data Designer ๋ชจ๋ธ์ด ๊ณต์ ์คํค๋ง์ ํ
๋ํธ ์คํค๋ง์ ์ด๋ป๊ฒ ๋งคํ๋๋์ง ์ด๊ธฐ์ ๊ณํํ๊ณ , ๋ก๊ทธ์ธ์ด๋ ๊ฒฐ์ ๋ฅผ ๊นจ๋จ๋ฆฌ์ง ์๋๋ก ๊ธ๋ก๋ฒ ์๋น์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ์งํ์ธ์.\n\n## ๋ถ๋ฆฌ ์คํค๋ง์ ๋ณด๊ณ ๋ฐ ์ฑ๋ฅ\n\n๋ถ๋ฆฌ ์คํค๋ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก tenant_id๋ง ์๋ ๋ชจ๋ธ๋ณด๋ค ๋ ๊ฐํ ๋ถ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ถํ์ ์คํค๋ง ๋จ์๋ก ์ค์ ํ ์ ์๊ณ ๊ฐ ํ
๋ํธ ํ
์ด๋ธ์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.\n\n๋๋ถ๋ถ ๋ณด๊ณ ๊ฐ ํ
๋ํธ๋ณ์ด๋ผ๋ฉด ์ฟผ๋ฆฌ๊ฐ ๋จ์ํฉ๋๋ค. ํน์ ํ
๋ํธ์ ํ
์ด๋ธ๋ง ์ฝ์ผ๋ฉด ๋๋ฏ๋ก ์ง์์ ์ผ๋ก ํํฐ๋งํ ํ์๊ฐ ์์ต๋๋ค. ์ด ๋ชจ๋ธ์ ๋ํ ์ผ๋ถ ํ
๋ํธ์ ์ถ๊ฐ ํ
์ด๋ธ์ด๋ ์ปค์คํ
์ปฌ๋ผ์ด ํ์ํ "ํน์" ํ
๋ํธ๋ฅผ ์ง์ํ๊ธฐ๋ ์ฝ์ต๋๋ค.\n\n์คํค๋ง ๋จ์ ์ ์ ์ฒด ํ
๋ํธ๋ฅผ ์์ฐ๋ฅด๋ ์ง๊ณ ๋ณด๊ณ ์
๋๋ค. ์ฌ๋ฌ ์คํค๋ง๋ฅผ ์ฟผ๋ฆฌํ ์ ์๋ ๋ณด๊ณ ๋ ์ด์ด๊ฐ ํ์ํ๊ฑฐ๋ ๊ณตํต ์คํค๋ง์ ์์ฝ ํ
์ด๋ธ์ ์ ์งํด์ผ ํฉ๋๋ค.\n\n์ผ๋ฐ์ ํจํด:\n\n- ํ
๋ํธ๋ณ ๋์๋ณด๋๋ ํด๋น ํ
๋ํธ ์คํค๋ง๋ง ์ฟผ๋ฆฌ\n- ๊ฐ ํ
๋ํธ์์ ์ผ๊ฐ ์ง๊ณ๋ฅผ ์ํํด ์ค์ ๋ถ์ ์คํค๋ง์ ์ ์ฌ\n- ํ
๋ํธ ๋ฐ์ดํฐ๋ฅผ ์จ์ดํ์ฐ์ค ์นํ ํ์์ผ๋ก ๋ณต์ฌํ๋ ๋ด๋ณด๋ด๊ธฐ ์์
\n\n์ฑ๋ฅ์ ๋ณดํต ํ
๋ํธ ์์ค ์ํฌ๋ก๋์ ๋ํด์ ์ํธํฉ๋๋ค. ์ธ๋ฑ์ค๋ ํ
๋ํธ๋ณ๋ก ์์์ง๊ณ ํ ์คํค๋ง์ ๊ณผ๋ํ ์ฐ๊ธฐ๊ฐ ๋ค๋ฅธ ์คํค๋ง์ ๋ฏธ์น๋ ์ํฅ์ด ์ ์ต๋๋ค. ๋จ์ ์ ์ด์ ์ค๋ฒํค๋: ์ ํ
๋ํธ๋ฅผ ํ๋ก๋น์ ๋ํ๋ฉด ์คํค๋ง ์์ฑ, ๋ง์ด๊ทธ๋ ์ด์
์คํ, ๋ชจ๋ธ ๋ณ๊ฒฝ ์ ๋ชจ๋ ์คํค๋ง ์ ๋ ฌ์ด ํ์ํฉ๋๋ค.\n\nํ
๋ํธ๋ณ ๋ง์ถค์ด ํ์ํ๊ฑฐ๋ ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ํ๊ณ ์ถ์ง ์์๋ฐ ๋ ๊ฐํ ๊ฒฉ๋ฆฌ๊ฐ ํ์ํ ๋ ์คํค๋ง๋ ์ข์ ์ ํ์
๋๋ค.\n\n## ์ ๊ทผ๋ฒ 3: ํ
๋ํธ๋ณ ๋ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค\n\nํ
๋ํธ๋ณ ๋ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ฐ ๊ณ ๊ฐ์๊ฒ ์ ์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค(๋๋ ๊ฐ์ ์๋ฒ์ ๋ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค)๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ์ฅ ๊ฒฉ๋ฆฌ๊ฐ ๊ฐํ ์ต์
์ผ๋ก, ํ ํ
๋ํธ์ ๋ฐ์ดํฐ๊ฐ ์์๋๊ฑฐ๋ ์ค์ ์ด ํ๋ฆฌ๊ฑฐ๋ ๋ถํ๊ฐ ๊ณผ๋ํด๋ ๋ค๋ฅธ ํ
๋ํธ๋ก ์ ํ๋ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ต๋๋ค.\n\n๊ท์ ํ๊ฒฝ(์๋ฃ, ๊ธ์ต, ์ ๋ถ)์ด๋ ์๊ฒฉํ ๋ถ๋ฆฌ, ๋ง์ถค ๋ณด์กด ๊ท์น, ์ ์ฉ ์ฑ๋ฅ์ ๊ธฐ๋ํ๋ ์ํฐํ๋ผ์ด์ฆ ๊ณ ๊ฐ์ ์ ํฉํฉ๋๋ค.\n\n์จ๋ณด๋ฉ์ ํ๋ก๋น์ ๋ ์ํฌํ๋ก๊ฐ ๋ฉ๋๋ค. ์ ๊ท ํ
๋ํธ๊ฐ ๊ฐ์
ํ๋ฉด ์์คํ
์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ณต์ ํ๊ณ , ๊ธฐ๋ณธ ์คํค๋ง(ํ
์ด๋ธ, ์ธ๋ฑ์ค, ์ ์ฝ)๋ฅผ ์ ์ฉํ๊ณ , ์๊ฒฉ์ฆ๋ช
์ ์์ ํ๊ฒ ์ ์ฅํ๊ณ , API ์์ฒญ์ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ผ์ฐํ
ํด์ผ ํฉ๋๋ค.\n\nAppMaster๋ก ๋น๋ํ๋ค๋ฉด ํต์ฌ ์ค๊ณ ์ ํ์ ํ
๋ํธ ๋๋ ํฐ๋ฆฌ(ํ
๋ํธ์ DB ์ฐ๊ฒฐ์ ๋งคํํ ์ค์ ๋ชฉ๋ก)๋ฅผ ์ด๋์ ๋๊ณ ๋ชจ๋ ์์ฒญ์ด ์ฌ๋ฐ๋ฅธ ์ฐ๊ฒฐ์ ์ฌ์ฉํ๊ฒ ํ ์ง์
๋๋ค.\n\n์
๊ทธ๋ ์ด๋์ ๋ง์ด๊ทธ๋ ์ด์
์ด ์ฃผ์ ํธ๋ ์ด๋์คํ์
๋๋ค. ์คํค๋ง ๋ณ๊ฒฝ์ ๋ ์ด์ "ํ ๋ฒ ์คํ"์ด ์๋๋ผ "๋ชจ๋ ํ
๋ํธ์ ๋ํด ์คํ"ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ํ์ ์ข
์ข
์คํค๋ง ๋ฒ์ ์ ๊ด๋ฆฌํ๊ณ ํ
๋ํธ๋ณ๋ก ์งํ ์ํฉ์ ์ถ์ ํ๋ ์ ์ด๋ ์์
์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
์ ์คํํฉ๋๋ค.\n\n์ฅ์ ์ ์ ์ด์
๋๋ค. ๋ํ ํ
๋ํธ๋ถํฐ ๋จผ์ ๋ง์ด๊ทธ๋ ์ด์
ํด ์ฑ๋ฅ์ ๊ด์ฐฐํ ๋ค ์ ์ง์ ์ผ๋ก ๋ณ๊ฒฝ์ ๋กค์์ํ ์ ์์ต๋๋ค.\n\n## ๋ถ๋ฆฌ DB์ ๋ณด๊ณ ๋ฐ ์ฑ๋ฅ\n\n๋ณ๋ DB๋ ์ฌ๊ณ ์ดํด๊ฐ ๊ฐ์ฅ ์ฝ์ต๋๋ค. ์ฐ๋ฐ์ ํฌ๋ก์ค-ํ
๋ํธ ์ฝ๊ธฐ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋ฎ๊ณ ๊ถํ ์ค์๋ ๋ณดํต ํ ํ
๋ํธ์๋ง ์ํฅ์ ์ค๋๋ค.\n\n์ฑ๋ฅ ์ฅ์ ๋ ํฝ๋๋ค. ๋ฌด๊ฑฐ์ด ์ฟผ๋ฆฌ, ๋๋ ์ํฌํธ, ํ
๋ํธ A์ ๊ณผ๋ํ ๋ฆฌํฌํธ๊ฐ ํ
๋ํธ B๋ฅผ ๋ฆ์ถ์ง ์์ต๋๋ค. ์๋๋ฌ์ด ์ด์ ๋ณดํธ๊ฐ ๊ฐํ๊ณ ํ
๋ํธ๋ณ ๋ฆฌ์์ค ํ๋๋ ๊ฐ๋ฅํฉ๋๋ค.\n\n๋จ์ ์ ๋ณด๊ณ ์์ ๋๋ฌ๋ฉ๋๋ค. ๋ชจ๋ ํ
๋ํธ ํฉ๊ณ ๋ถ์์ ๊ฐ์ฅ ์ด๋ ต์ต๋๋ค. ์ค๋ฌด์์ ํตํ๋ ํจํด์ผ๋ก๋ ํต์ฌ ์ด๋ฒคํธ๋ ํ
์ด๋ธ์ ์ค์ ๋ณด๊ณ DB๋ก ๋ณต์ฌํ๊ฑฐ๋, ์ด๋ฒคํธ๋ฅผ ์จ์ดํ์ฐ์ค๋ก ์ ์กํ๊ฑฐ๋, ํ
๋ํธ๋ณ ๋ณด๊ณ ๋ฅผ ์คํํด ๊ฒฐ๊ณผ๋ฅผ ํฉ์ฐ(ํ
๋ํธ ์๊ฐ ์ ์ ๋)ํ๋ ๋ฐฉ๋ฒ ๋ฑ์ด ์์ต๋๋ค.\n\n์ด์ ๋น์ฉ๋ ํฝ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๊ฐ ๋ง์์ง๋ฉด ๋ฐฑ์
, ์
๊ทธ๋ ์ด๋, ๋ชจ๋ํฐ๋ง, ์ฌ๊ณ ๋์์ด ๋๊ณ , ๊ฐ ํ
๋ํธ๋ง๋ค ์ปค๋ฅ์
ํ์ ๋๋ฉด ์ฐ๊ฒฐ ํ๊ณ์ ๋นจ๋ฆฌ ๋๋ฌํ ์ ์์ต๋๋ค.\n\n## ๋ฐ์ดํฐ ์ ์ถ์ด๋ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ผ์ผํค๋ ํํ ์ค์\n\n๋๋ถ๋ถ์ ๋ค์ค ํ
๋ํธ ๋ฌธ์ ๋ "๋๊ท๋ชจ ์ค๊ณ ์คํจ"๊ฐ ์๋๋๋ค. ์์ ๋๋ฝ์ด ๋ณด์ ๋ฒ๊ทธ, ์ง์ ๋ถํ ๋ณด๊ณ , ๊ฐ๋น์ผ ์ ๋ฆฌ๋ก ์ฑ์ฅํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ค์ค ํ
๋์๋ ๋์ค์ ๋ถ์ด๋ ๊ธฐ๋ฅ์ด ์๋๋ผ ์ต๊ด์ผ๋ก ๋ค๋ค์ง ๋ ์๋ํฉ๋๋ค.\n\nํํ ์ ์ถ์ ์กฐ์ธ ํ
์ด๋ธ(user_roles, invoice_items, ํ๊ทธ ๋ฑ)์์ ํ
๋ํธ ํ๋๋ฅผ ๋นผ๋จน๋ ๊ฒฝ์ฐ์
๋๋ค. ๊ฒ์ผ๋ก๋ ์๋ฌด ๋ฌธ์ ์์ด ๋ณด์ด์ง๋ง ๋ณด๊ณ ๋ ๊ฒ์์ด ๊ทธ ํ
์ด๋ธ์ ํตํด ์กฐ์ธํ๋ฉด ๋ค๋ฅธ ํ
๋ํธ์ ํ์ ๋์ด์ต๋๋ค.\n\n๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ๊ด๋ฆฌ์ ๋์๋ณด๋๊ฐ ํ
๋ํธ ํํฐ๋ฅผ ์ฐํํ๋ ๊ฒ์
๋๋ค. ๋ณดํต์ "์ง์์ฉ์ผ๋ก๋ง" ์์ํ๋ค๊ฐ ์ฌ์ฌ์ฉ๋๋ฉด์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ๋
ธ์ฝ๋ ๋๊ตฌ๋ ์ํ์ ๋ฐ๊พธ์ง ์์ต๋๋ค: ๋ชจ๋ ์ฟผ๋ฆฌ, ๋น์ฆ๋์ค ํ๋ก์ธ์ค, ์๋ํฌ์ธํธ๋ ๋์ผํ ํ
๋ํธ ๋ฒ์๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค.\n\nID๋ ํจ์ ์
๋๋ค. ํ
๋ํธ ๊ฐ์ ๊ณต์ ๋๋ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ID(์: order_number = 1001)๋ฅผ ์ ์ญ ๊ณ ์ ๋ก ๊ฐ์ ํ๋ฉด ์ง์ ๋๊ตฌ์ ํตํฉ์ด ๋ ์ฝ๋๋ฅผ ์์ด๋ฒ๋ฆฝ๋๋ค. ํ
๋ํธ ๋ฒ์ ์๋ณ์๋ฅผ ๋ด๋ถ ๊ธฐ๋ณธ ํค์ ๋ถ๋ฆฌํ๊ณ ์กฐํ ์ ํ
๋ํธ ์ปจํ
์คํธ๋ฅผ ํฌํจํ์ธ์.\n\n๋ง์ง๋ง์ผ๋ก ํ์ ํ์ฅ ์ ๋ง์ด๊ทธ๋ ์ด์
๊ณผ ๋ฐฑ์
์ ๊ณผ์ํ๊ฐํฉ๋๋ค. 10๊ฐ ํ
๋ํธ๋ก๋ ์ฌ์ด ์ผ์ด 1,000๊ฐ๊ฐ ๋๋ฉด ๋๋ฆฌ๊ณ ์ํํด์ง๋๋ค.\n\n๋๋ถ๋ถ์ ๊ณ ํต์ ์๋ฐฉํ๋ ๋น ๋ฅธ ์ ๊ฒ ๋ชฉ๋ก:\n\n- ๋ชจ๋ ํ
์ด๋ธ(์กฐ์ธ ํ
์ด๋ธ ํฌํจ)์ ํ
๋ํธ ์์ ๊ถ์ ๋ช
์\n- ํ๋์ ํ
๋ํธ ์ค์ฝํ ํจํด์ ์ ํ๊ณ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฌ์ฉ\n- ๋ณด๊ณ ์ ๋ด๋ณด๋ด๊ธฐ๋ ํ
๋ํธ ์ค์ฝํ ์์ด๋ ์คํํ ์ ์๊ฒ(์ง์ ํ ๊ธ๋ก๋ฒ์ธ ๊ฒฝ์ฐ ์ ์ธ)\n- API์ ์ง์ ๋๊ตฌ์์ ํ
๋ํธ๊ฐ ์ ๋งคํ ์๋ณ์๋ ํผํจ\n- ๋ณต์ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
์ ์ฐจ๋ฅผ ์ฑ์ฅ ํ๊ฐ ์๋๋ผ ์ด๊ธฐ๋ถํฐ ์ฐ์ต\n\n์: ์ง์ ๋ด๋น์๊ฐ "invoice 1001"์ ๊ฒ์ํด ์๋ชป๋ ํ
๋ํธ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒฝ์ฐ๋ ์์ ๋ฒ๊ทธ์ง๋ง ํฐ ์ํฅ์ ์ค๋๋ค.\n\n## ํ์ฅ ์๋๋ฆฌ์ค ์: ์ฒซ ๊ณ ๊ฐ๋ถํฐ ํ์ฅ๊น์ง\n\n20๋ช
๊ท๋ชจ ํ์ฌ๊ฐ ๊ณ ๊ฐ ํฌํธ(์ธ๋ณด์ด์ค, ํฐ์ผ, ๊ฐ๋จํ ๋์๋ณด๋)์ ์ถ์ํ๋ค๊ณ ํฉ์๋ค. ์ฒซ ๋ฌ์ 10๊ฐ ํ
๋ํธ๋ฅผ ์์ํ๊ณ , 1๋
๋ด 1,000๊ฐ๋ก ์ฑ์ฅํ ๊ณํ์
๋๋ค.\n\n์ด๊ธฐ์๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ณ ๊ฐ ๋ฐ์ดํฐ ํ
์ด๋ธ์ tenant_id๋ฅผ ๋๋ ๋จ์ผ DB ๋ชจ๋ธ์ด ๊ฐ์ฅ ๋จ์ํฉ๋๋ค. ๋น ๋ฅด๊ฒ ๋น๋ํ ์ ์๊ณ ๋ณด๊ณ ๊ฐ ์ฌ์ฐ๋ฉฐ ์ค์ ์ค๋ณต์ ํผํ ์ ์์ต๋๋ค.\n\n10๊ฐ์ผ ๋ ๊ฐ์ฅ ํฐ ์ํ์ ์ฑ๋ฅ์ด ์๋๋ผ ๊ถํ์
๋๋ค. ์์ ํํฐ ๋๋ฝ(์: tenant_id๋ฅผๅฟใใ "list invoices" ์ฟผ๋ฆฌ)์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ ์ ์์ต๋๋ค. ํ์ ํ
๋ํธ ๊ฒ์ฌ๋ฅผ ํ ๊ณณ(๊ณต์ ๋น์ฆ๋์ค ๋ก์ง ๋๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ API ํจํด)์์ ๊ฐ์ ํ๊ณ ํ
๋ํธ ์ค์ฝํ์ ๋นํ์์ผ๋ก ๋ค๋ค์ผ ํฉ๋๋ค.\n\n10์์ 1,000์ผ๋ก ์ด๋ํ๋ฉด์ ์๊ตฌ์ฌํญ์ด ๋ฐ๋๋๋ค. ๋ณด๊ณ ๊ฐ ๋ ๋ฌด๊ฑฐ์์ง๊ณ ์ง์ ์์ฒญ์ผ๋ก "์ด ํ
๋ํธ์ ์ ์ฒด ๋ด๋ณด๋ด๊ธฐ"๊ฐ ํ์ํด์ง๋ฉฐ ๋ช๋ช ํฐ ํ
๋ํธ๊ฐ ํธ๋ํฝ์ ์ง๋ฐฐํด ๊ณต์ ํ
์ด๋ธ์ ๋๋ฆฌ๊ฒ ๋ง๋ญ๋๋ค.\n\n์ค์ฉ์ ์
๊ทธ๋ ์ด๋ ๊ฒฝ๋ก ์์:\n\n1) ๋์ผํ ์ฑ ๋ก์ง๊ณผ ๊ถํ ๊ท์น์ ์ ์งํ๋ ๊ณ ๋ถํ ํ
๋ํธ๋ฅผ ๋ถ๋ฆฌ ์คํค๋ง๋ก ์ด๋\n2) ๊ฐ์ฅ ํฐ ํ
๋ํธ(๋๋ ๊ท์ ์ค์ ๊ณ ๊ฐ)๋ ๋ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ด๋\n3) ๋ชจ๋ ํ
๋ํธ์์ ์ฝ๋ ๊ณต์ ๋ณด๊ณ ๋ ์ด์ด๋ฅผ ์ ์งํ๊ณ ๋ฌด๊ฑฐ์ด ๋ณด๊ณ ๋ ๋น์ฌ์ฉ ์๊ฐ์ ์ค์ผ์ค ์คํ\n\n์ค๋ ์์ ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ ๊ฐ์ฅ ๋จ์ํ ๋ชจ๋ธ์ ์ ํํ๊ณ , "์์์ ๋ํ ํ
๋ํธ" ๋ฌธ์ ๋ฅผ ์ํด ๋ง์ด๊ทธ๋ ์ด์
๊ฒฝ๋ก๋ฅผ ๊ณํํ์ธ์. ์ฒ์๋ถํฐ ๊ทธ๊ฑธ ์ต์ ํํ๋ ค๊ณ ํ์ง ๋ง์ธ์.\n\n## ๋ค์ ๋จ๊ณ: ๋ชจ๋ธ์ ์ ํํ๊ณ ๋
ธ์ฝ๋ ๋ฐฑ์๋์์ ํ๋กํ ํ์
ํ๊ธฐ\n\n๋ณดํธํด์ผ ํ ์ฐ์ ์์(๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ, ์ด์ ๋จ์์ฑ, ํ
๋ํธ๋ณ ํ์ฅ์ฑ)๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํํ์ธ์. ์์ ๊ฐ์ ์์ ํ๋กํ ํ์
์ ๋ง๋ค๊ณ ์ค์ ๊ถํยท๋ณด๊ณ ์ผ์ด์ค๋ก ๊นจ๋ณด๋ ๋ฐ์ ์ต๋๋ค.\n\n๊ฐ๋จํ ์์ ๊ฐ์ด๋:\n\n- ๋๋ถ๋ถ ํ
๋ํธ๊ฐ ์๊ณ ๋จ์ํ ํฌ๋ก์ค-ํ
๋ํธ ๋ณด๊ณ ๊ฐ ํ์ํ๋ฉด ๋ชจ๋ ํ์ tenant_id๋ฅผ ๋๊ณ ์์ํ์ธ์.\n- ๋ ๊ฐํ ๋ถ๋ฆฌ๊ฐ ํ์ํ์ง๋ง ์ฌ์ ํ ํ๋์ DB๋ก ๊ด๋ฆฌํ๊ณ ์ถ๋ค๋ฉด ํ
๋ํธ๋ณ ๋ถ๋ฆฌ ์คํค๋ง ๊ณ ๋ ค\n- ๊ท์ ์ค์๋ ์ ์ฉ ์ฑ๋ฅ์ด ํ์ํ๋ฉด ํ
๋ํธ๋ณ ๋ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ ๋ ค\n\n๋น๋ ์ ์ ํ
๋ํธ ๊ฒฝ๊ณ๋ฅผ ํ์ดํ ์ธ์ด๋ก ์์ฑํ์ธ์. ์ญํ (owner, admin, agent, viewer)์ ์ ์ํ๊ณ ๊ฐ ์ญํ ์ด ๋ฌด์์ ํ ์ ์๋์ง, ๊ทธ๋ฆฌ๊ณ "๊ธ๋ก๋ฒ" ๋ฐ์ดํฐ(ํ๋, ํ
ํ๋ฆฟ, ๊ฐ์ฌ ๋ก๊ทธ)๊ฐ ๋ฌด์์ธ์ง ์ ํ์ธ์. ๋ณด๊ณ ๊ฐ ์ด๋ป๊ฒ ์๋ํ ์ง ๊ฒฐ์ ํ์ธ์: ํ
๋ํธ๋ณ๋ง ํ์ฉํ ์ง, ๋ด๋ถ ์ง์์ฉ "๋ชจ๋ ํ
๋ํธ" ๋ณด๊ธฐ๋ฅผ ํ์ฉํ ์ง.\n\nAppMaster๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ํจํด์ ๋น ๋ฅด๊ฒ ํ๋กํ ํ์
ํ ์ ์์ต๋๋ค: Data Designer์์ ํ
์ด๋ธ์ ๋ชจ๋ธ๋ง( tenant_id, ๊ณ ์ ์ ์ฝ, ์ฟผ๋ฆฌ๊ฐ ์์กดํ๋ ์ธ๋ฑ์ค ํฌํจ)ํ๊ณ Business Process Editor์์ ๊ท์น์ ๊ฐ์ ํด ๋ชจ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ๊ฐ ํ
๋ํธ ์ค์ฝํ๋ฅผ ์ ์งํ๋๋ก ํ์ธ์. ์ฐธ๊ณ ๋ก AppMaster๋ appmaster.io์ ์์ต๋๋ค.\n\n์ค์ฉ์ ์ต์ข
ํ
์คํธ: ๋ ๊ฐ์ ํ
๋ํธ(A์ B)๋ฅผ ๋ง๋ค๊ณ ๋น์ทํ ์ฌ์ฉ์์ ์ฃผ๋ฌธ์ ์ถ๊ฐํ ๋ค ๋์ผํ ํ๋ฆ์ ์์ชฝ์์ ์คํํ์ธ์. ํ
๋ํธ A์ ๋ณด๊ณ ์๋ฅผ ๋ด๋ณด๋ด๊ณ ์๋์ ์ผ๋ก ํ
๋ํธ B์ ID๋ฅผ ๊ฐ์ ์๋ํฌ์ธํธ์ ์ ๋ฌํด ๋ณด์ธ์. ํ๋กํ ํ์
์ ๊ทธ๋ฐ ์๋๊ฐ ํญ์ ์คํจํ๊ณ ํต์ฌ ๋ณด๊ณ ์๊ฐ ํ์ค์ ๋ฐ์ดํฐ ํฌ๊ธฐ์์ ๋น ๋ฅด๊ฒ ์คํ๋ ๋๋ง "์ถฉ๋ถํ ์์ "ํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
๊ธฐ๋ณธ์ ์ผ๋ก ์ด์์ด ๊ฐ์ฅ ๋จ์ํ๊ณ ์์ฃผ ์ฌ์ฉํ๋ ํฌ๋ก์ค-ํ
๋ํธ ๋ถ์์ด ํ์ํ๋ฉด ๋ชจ๋ ํ
์ด๋ธ์ tenant_id๋ฅผ ๋ ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์ํ์ธ์. ๊ฐํ ๊ฒฉ๋ฆฌ๋ ํ
๋ํธ๋ณ ๋ง์ถค์ด ํ์ํ๋ฉด ์ฌ๋ฌ ์คํค๋ง๋ก ์ฎ๊ธฐ๊ณ , ๊ท์ ๋ ์ํฐํ๋ผ์ด์ฆ ์๊ตฌ๋ก ๊ฐ๋ ฅํ ๋ถ๋ฆฌ๊ฐ ํ์ํ๋ฉด ํ
๋ํธ๋ณ ๋ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ์ธ์.
ํ
๋ํธ ์ค์ฝํ์ UI ํํฐ๊ฐ ์๋๋ผ ๋ฐฑ์๋์ ํ์ ๊ท์น์ผ๋ก ๋ค๋ฃจ์ธ์. ํ
๋ํธ ์์ ํ
์ด๋ธ์ tenant_id๋ฅผ ํ์๋ก ๋ง๋ค๊ณ , ์ธ์ฆ๋ ์ฌ์ฉ์ ์ปจํ
์คํธ์์ ํญ์ ์ ๋ํ๋๋ก ํ์ธ์. ์คํ์ ๋ง๋ค๋ฉด PostgreSQL์ ํ ์์ค ๋ณด์(RLS) ๊ฐ์ ์์ ๋ง์ ์ถ๊ฐํ๊ณ , ๋จ์ง ID๋ง ๋ฐ๊ฟ ๋ค๋ฅธ ํ
๋ํธ ๋ ์ฝ๋์ ์ ๊ทผํ๋ ์๋๋ฅผ ์๋ํ๋ ํ
์คํธ๋ก ํ์ธํ์ธ์.
tenant_id๋ฅผ ์ธ๋ฑ์ค์ ์ฒซ ๋ฒ์งธ ์ปฌ๋ผ์ผ๋ก ๋์ด ํํ ํํฐ๊ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํ์ธ์. ์๊ฐ ๊ธฐ๋ฐ ๋ทฐ์๋ (tenant_id, created_at)์ ๊ธฐ๋ณธ์ผ๋ก ๋๊ณ , ๋์๋ณด๋ ํํฐ์๋ (tenant_id, status)๋ (tenant_id, user_id)๋ฅผ ์ถ๊ฐํ์ธ์. ๋ํ ๊ณ ์ ์ ์ฝ๋ ํ
๋ํธ ๋ฒ์๋ก ๋์ด(์: ํ
๋ํธ๋ณ ์ด๋ฉ์ผ ๊ณ ์ ) ์ถฉ๋์ ๋ฐฉ์งํ์ธ์.
์คํค๋ง ๋ถ๋ฆฌ๋ ํ
์ด๋ธ์ด ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ ์กด์ฌํ๋ฏ๋ก ์ฐ์ฐํ ํฌ๋ก์ค-ํ
๋ํธ ์กฐ์ธ์ ์ค์ฌ์ฃผ๊ณ , ์คํค๋ง ์์ค์์ ๊ถํ์ ์ค์ ํ ์ ์๊ฒ ํด์ค๋๋ค. ๋จ์ ์ ๋ง์ด๊ทธ๋ ์ด์
์ผ๋ก, ๋ชจ๋ ์คํค๋ง์ ๋์ผํ ๋ณ๊ฒฝ์ ์ ์ฉํด์ผ ํ๋ฏ๋ก ํ
๋ํธ ์๊ฐ ๋์ด๋๋ฉด ํ๋ก์ธ์ค ๊ด๋ฆฌ๊ฐ ํ์ํด์ง๋๋ค. tenant_id๋ณด๋ค ๊ฐํ ๊ฒฉ๋ฆฌ๊ฐ ํ์ํ์ง๋ง ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๊ณ ์ถ์ง ์์ ๋ ์ข์ ์ค๊ฐ ์ ํ์
๋๋ค.
ํ ๋ํธ๋ณ ๋ณ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ํฅ ๋ฐ๊ฒฝ์ ์ต์ํํฉ๋๋ค: ์ฑ๋ฅ ๋ฌธ์ , ์๋ชป๋ ๊ตฌ์ฑ, ์์ ๋ฑ์ด ๋ค๋ฅธ ํ ๋ํธ๋ก ๋ฒ์ง ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ต๋๋ค. ๋น์ฉ์ ์ด์ ์ค๋ฒํค๋์ ๋๋ค. ํ๋ก๋น์ ๋, ๋ฐฑ์ , ๋ชจ๋ํฐ๋ง, ๋ง์ด๊ทธ๋ ์ด์ ์ด ํ ๋ํธ ์๋งํผ ๋์ด๋๊ณ , ์์ ์ ์ผ๋ก ํ ๋ํธ ๋๋ ํฐ๋ฆฌ์ ์์ฒญ ๋ผ์ฐํ ์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
๋จ์ผ DB์ tenant_id๊ฐ ๊ฐ์ฅ ์ฝ์ต๋๋ค. ์คํค๋ง๋ DB๋ก ๋ถ๋ฆฌ๋ ๊ฒฝ์ฐ์๋ ํต์ฌ ์ด๋ฒคํธ๋ ์์ฝ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ค์ ๋ณด๊ณ ์ ์ฅ์๋ก ๋ณต์ฌํ๋ ๋ฐฉ์์ด ์ผ๋ฐ์ ์
๋๋ค. ๋๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ด๊ฑฐ๋, ์์์ ํ
๋ํธ๋ผ๋ฉด ํ
๋ํธ๋ณ ๋ณด๊ณ ๋ฅผ ํฉ์ฐํ๋ ๋ฐฉ์๋ ์ฌ์ฉํฉ๋๋ค. ์ ํ ์ ์ฒด ๋ฉํธ๋ฆญ์ ๋ณด๊ณ ๋ ์ด์ด๋ก ๋ณด๋ด๊ณ , ํ
๋ํธ ๋ฐ์ดํฐ ์์ฒด๋ ๊ฒฉ๋ฆฌํ์ธ์.
์ง์ ๋๊ตฌ์์ ํ
๋ํธ ์ปจํ
์คํธ๋ฅผ ๋ช
ํํ ํ์ํ๊ณ , ๊ธฐ๋ก์ ๋ณด๊ธฐ ์ ์ ์๋์ ์ธ ํ
๋ํธ ์ ํ์ ์๊ตฌํ์ธ์. ์์๋ก ๋ค๋ฅธ ์ฌ์ฉ์๋ฅผ ๊ฐ์ฅ(impersonation)ํ๋ ๋ฐฉ์์ ๋๊ฐ ์ธ์ ์ ๊ทผํ๋์ง ๊ฐ์ฌ ๋ก๊ทธ๋ก ๋จ๊ธฐ๊ณ ์๊ฐ ์ ํ์ ๋์ธ์. ๋ ์ฝ๋ ID๋ง ๋ฐ์์ ์กฐํํ๋ ์ํฌํ๋ก์ฐ๋ invoice 1001 ๊ฐ์ ์ฌ๊ณ ๋ก ์ด์ด์ง๊ธฐ ์ฝ์ต๋๋ค.
ํ
๋ํธ๋ง๋ค ๋ค๋ฅธ ํ๋๋ ์ํฌํ๋ก๊ฐ ํ์ํ๋ฉด ์คํค๋ง๋ ๋ณ๋ DB๊ฐ ๋ค๋ฅธ ํ
๋ํธ์ ์ํฅ์ ์ฃผ์ง ์์ ๊ด๋ฆฌํ๊ธฐ ์ฝ์ต๋๋ค. ๋๋ถ๋ถ์ด ์ ์ฌํ๋ค๋ฉด tenant_id ํ๋๋ก ๊ณต์ ๋ชจ๋ธ์ ์ ์งํ๊ณ ๊ธฐ๋ฅ ํ๋๊ทธ๋ ์ ํ์ ํ๋๋ก ์ฐจ์ด๋ฅผ ์ฒ๋ฆฌํ์ธ์. ํต์ฌ์ ์์ ๊ถ์ด ๋ช
ํํ์ง ์์ ํผํฉ ํ
์ด๋ธ์ ํผํ๋ ๊ฒ์
๋๋ค.
๊ฒฉ๋ฆฌ ๊ฒฝ๊ณ๋ฅผ ์ผ์ฐ ์ค๊ณํ์ธ์: ์ธ์ฆ ํ ํ
๋ํธ ์ปจํ
์คํธ๋ฅผ ์ด๋์ ์ ์ฅํ ์ง ๊ฒฐ์ ํ๊ณ ๋ชจ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ์ ์ฌ์ฉ๋๋๋ก ํ์ธ์. AppMaster์์๋ ๋ณดํต ์ธ์ฆ๋ ์ฌ์ฉ์์์ tenant_id๋ฅผ ์ค์ ํ ๋ค ๋น์ฆ๋์ค ํ๋ก์ธ์ค ๋ก์ง์์ ์ด๋ฅผ ์ฌ์ฉํด ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์กฐํํฉ๋๋ค. ์ด ํจํด์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ์ ์ฒด์ ์ ์ฉํ์ธ์.
๋น์ทํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ๋ ๊ฐ์ ํ ๋ํธ๋ฅผ ๋ง๋ค๊ณ ์ค์ง ๋ ์ฝ๋ ID๋ง ๋ฐ๊ฟ์ ์ฝ๊ธฐ/์์ /์ญ์ ๋ฅผ ์๋ํ๋ฉฐ ๊ฒฉ๋ฆฌ๊ฐ ๊นจ์ง๋์ง ํ์ธํ์ธ์. ๋ฐฑ๊ทธ๋ผ์ด๋ ์ก, ์ํฌํธ, ์ต์คํฌํธ๊ฐ ์ฌ๋ฐ๋ฅธ ํ ๋ํธ ๋ฒ์์ ์ฐ๋์ง๋ ๊ฒ์ฆํ์ธ์. ๋ํ ํ์ค์ ์ธ ์ํ ๋ณผ๋ฅจ์ผ๋ก ํ ๋ํธ ์์ค ๋ณด๊ณ ์์ ์ ์ฌ ๊ด๋ฆฌ์ ๋ณด๊ณ ์๋ฅผ ์คํํด ์ฑ๋ฅ๊ณผ ์ ๊ทผ ๊ท์น์ ํ์ธํ์ธ์.


