πŸ” Sector Insights/Dev

λ©€ν‹°ν…Œλ„Œμ‹œ λͺ¨λΈ

jobey 2024. 2. 18. 23:54
λ°˜μ‘ν˜•

https://dev.gmarket.com/64

 

λ©€ν‹°λ„€λ„Œμ‹œ λͺ¨λΈ ( Multi Tenancy Model) 

 

ν…Œμ΄λΈ”μ„ μ„€κ³„ν•˜λ˜ 쀑 κ³ λ―Όν•΄λ³Έ λ‚΄μš©μ„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

 

ERP μ†”λ£¨μ…˜ μ„œλΉ„μŠ€λ₯Ό κΈ°νšν•˜κ³  ν…Œμ΄λΈ”μ„ μ„€κ³„ν•˜λ˜ 쀑 μ•„λž˜μ™€ 같은 고민거리가 μƒκ²ΌμŠ΅λ‹ˆλ‹€.

κΈ°νšμ€‘μΈ λ‚΄μš© 쀑 "각 κ³ κ°λ³„λ‘œ λ§žμΆ€ν™”λœ ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€" λΌλŠ” λ‚΄μš©μ΄ μžˆλŠ”λ° 이게 κ°€λŠ₯ν• μ§€ 의문이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.

 

고객별 λ§žμΆ€ν™”λœ ν™˜κ²½μ„ μ œκ³΅ν•œλ‹€λŠ” 말에 μ˜λ―ΈλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • [  예) "발주λͺ©λ‘"  ] κ³Ό 같은 기본으둜 μ œκ³΅ν•˜λŠ” ν…Œμ΄λΈ”μ— μ»¬λŸΌμ„ μΆ”κ°€ν•˜κ±°λ‚˜ μ»¬λŸΌμ„ μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜λŠ” μœ μ €λ“€μ˜ κΆŒν•œ ( 사내 μ§μ›λ“€μ˜ μ„ΈλΆ€ κΆŒν•œ ) 을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄ κΈ°λ³Έ μ œκ³΅ν•˜λŠ” 3λ‹¨κ³„μ˜ κΆŒν•œ 이외에 세뢀적인 κΆŒν•œμ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ λ¬Έμ œμƒν™©μ„ μ–΄λ–€μ‹μœΌλ‘œ μ²˜λ¦¬ν• μ§€ 고민이 μƒκ²ΌμŠ΅λ‹ˆλ‹€.

검색을 ν•΄λ³΄λ‹ˆ μ΄λŸ¬ν•œ μ†”λ£¨μ…˜μ„ κ°œλ°œν•  λ•Œ 거의 λŒ€λΆ€λΆ„ μƒκΈ°λŠ” 문제라고 ν•©λ‹ˆλ‹€.

 

ν•΄κ²°λ°©μ•ˆμ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

 

 

1.  μ»€μŠ€ν„°λ§ˆμ΄μ§•μ΄ λΆˆκ°€λŠ₯ν•˜λ„λ‘ ν•˜κΈ°

제일 쉽고 κ°„λ‹¨ν•œ λ°©λ²•μž…λ‹ˆλ‹€. λͺ¨λ“  μ‚¬μš©μžλ“€μ΄ 같은 UI 같은 데이터 ꡬ쑰 ν˜•μ‹μ„ μ‚¬μš©ν•˜λ„λ‘ κ°•μ œν•˜λŠ” 것 μž…λ‹ˆλ‹€.

이 방법은 κ°œλ°œν•˜κΈ°λ„ νŽΈν•˜κ³  μ—λŸ¬ 핸듀링 ν•  λ•Œλ„ νŽΈν•©λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ μ»€μŠ€ν„°λ§ˆμ΄μ§•μ„ μ›ν•˜λŠ” 고객이 생길 μ‹œ μ„œλΉ„μŠ€ 뢈만쑱으둜 μ΄μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

2. ν…Œμ΄λΈ” μˆ˜μ€€μ˜ 뢄리

λ°μ΄ν„°λ² μ΄μŠ€ μ„œλΉ„μŠ€λŠ” ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜κ³ , 각 ν…Œλ„ŒνŠΈ λ§ˆλ‹€ μƒˆλ‘œμš΄ ν…Œμ΄λΈ”μ„ λ§Œλ“€μ–΄μ£ΌλŠ” ν˜•νƒœμž…λ‹ˆλ‹€.

예) ACompany_Users ν˜Ήμ€ Users_ACompany  ν˜•νƒœλ‘œ ν…Œμ΄λΈ”μ΄ μ–΄λ– ν•œ ν…Œλ„ŒνŠΈκ°€ μ‚¬μš©ν•  ν…Œμ΄λΈ”μΈμ§€ κ΅¬λΆ„ν•΄μ£ΌλŠ” 방법 μž…λ‹ˆλ‹€.

데이터λ₯Ό 각 μ‚¬μš©μžμ— 맞게 μ–΄λŠμ •λ„ λΆ„λ¦¬ν•΄μ„œ μ €μž₯ν•  수 있고 Join λ“± 쿼리에도 큰 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ ν…Œμ΄λΈ”μ΄ 무수히 λ§Žμ•„μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 

μ΄λŠ” 였히렀 μ„œλΉ„μŠ€ λ³΅μž‘μ„±μ„ ν‚€μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

그리고 μƒˆλ‘œμš΄ ν…Œλ„ŒνŠΈκ°€ μΆ”κ°€/μ‚­μ œ 될 λ•Œλ§ˆλ‹€ 이λ₯Ό μœ„ν•œ ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜κ³  μ‚­μ œ ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.

 

3. μŠ€ν‚€λ§ˆ μˆ˜μ€€μ˜ 뢄리

λ°μ΄ν„°λ² μ΄μŠ€ μ„œλΉ„μŠ€λŠ” ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ 이 μ„œλΉ„μŠ€ λ‚΄μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—¬λŸ¬κ°œ λ§Œλ“€μ–΄μ£ΌλŠ” ν˜•νƒœ μž…λ‹ˆλ‹€.

예λ₯Όλ“€μ–΄ μ‚¬μš©μžκ°€ μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜λ €κ³  결제λ₯Ό ν•˜λ©΄ ν•΄λ‹Ή μ‚¬μš©μžλ₯Ό μœ„ν•œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μƒˆλ‘œ λ§Œλ“€μ–΄μ£ΌλŠ” ν˜•νƒœμž…λ‹ˆλ‹€.

 

μ–΄λ–€ ν…Œλ„ŒνŠΈμ˜ 데이터인지 νŒŒμ•…ν•˜κΈ° μ‰¬μš΄ 편이고, 각 ν…Œλ„ŒνŠΈλŠ” μ„œλ‘œ λ‹€λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜μ„ μ‚¬μš©ν•˜κΈ°μ— λ©€ν‹°ν…Œλ„ŒμŠ€ μ•„ν‚€ν…μ²˜μ— μ’…μ†λœ λ‘œμ§μ„ μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€.

 

 

4. μ‹λ³„μžλ‘œ 뢄리

ν•˜λ‚˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€μ™€ ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ§€λ§Œ 이λ₯Ό νŠΉμ •ν•œ μ‹λ³„μžλ‘œ κ΅¬λΆ„ν•˜λŠ” 방법 μž…λ‹ˆλ‹€.

예λ₯Όλ“€μ–΄ 각 ν…Œλ„ŒνŠΈμ˜ idλ₯Ό μ‹λ³„μžλ‘œ μ‚¬μš©ν•΄μ„œ 각 row에 이λ₯Ό μΆ”κ°€ν•΄μ£ΌλŠ” 방법 μž…λ‹ˆλ‹€.

 

ꡬ뢄이 ν•„μš”ν•œ λͺ¨λ“  데이터에 μ‹λ³„μžλ₯Ό μž…λ ₯ν•  컬럼이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

κ΅¬ν˜„ν•˜κΈ° 쉽고 μΆ”ν›„ 전체 톡계, 업쒅별 톡계 등을 λ‚Ό λ•Œλ„ 큰 문제 없이 처리 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ λͺ¨λ“  데이터가 ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ— λ“€μ–΄μžˆμ–΄μ„œ ν•œλˆˆμ— 보기가 μ–΄λ ΅κ³ , 개발자의 μ‹€μˆ˜λ‘œ 타 μ—…μ²΄μ˜ 데이터가 전솑될 수 μžˆλ‹€λŠ” λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

5. λ°μ΄ν„°λ² μ΄μŠ€ μ„œλΉ„μŠ€ μˆ˜μ€€μ˜ 뢄리

각 ν…Œλ„ŒμŠ€λ§ˆλ‹€ κ³ μœ ν•œ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

예λ₯Όλ“€μ–΄ RDS의 μΈμŠ€ν„΄μŠ€λ₯Ό 각 ν…Œλ„ŒμŠ€λ§ˆλ‹€ ν•˜λ‚˜μ”© ν• λ‹Ήλ°›λŠ” ν˜•νƒœμž…λ‹ˆλ‹€.

 

μ΄λŠ” νŠΉμ • μΈμŠ€ν„΄μŠ€κ°€ λ¬Έμ œκ°€ 생겼을 λ•Œ λ‹€λ₯Έ ν…Œλ„ŒμŠ€λ“€μ€ 영ν–₯을 λ°›μ§€ μ•ŠλŠ”λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

데이터λ₯Ό ν™•μ‹€ν•˜κ²Œ 뢄리 μ €μž₯ ν•  수 있으며, 더 λ§Žμ€ νŠΈλž˜ν”½μ„ 감당할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ 돈이 많이 λ“­λ‹ˆλ‹€.

μΈμŠ€ν„΄μŠ€κ°€ μ—¬λŸ¬κ°œ 생기기에 관리 μš”μ†Œκ°€ λŠ˜μ–΄λ‚˜λŠ” λŠλ‚Œμ„ 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

ν…Œλ„ŒνŠΈ μΆ”κ°€/μ‚­μ œ μ‹œ μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€κ°€ λ§Œλ“€μ–΄μ Έμ•Ό ν•˜κΈ°μ— λ§Žμ€ λΉ„μš©μ΄ λ°œμƒν•©λ‹ˆλ‹€.

 

 

 

 

μ—¬λŸ¬κ°€μ§€ 방법이 μžˆμ§€λ§Œ λ§ˆμŒμ— λ“œλŠ” 방법이 λ”±νžˆ μ—†λ‹€.

ν•œμ°Έμ„ 고민해보닀가 κ΄€κ³„ν˜• DB와 NoSQL DBλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄ μ–΄λ–¨κΉŒ ν•˜λŠ” 생각이 λ“€μ—ˆλ‹€.

 

6. RDBMS with NoSQL

κΈ°λ³Έ μ œκ³΅ν•˜λŠ” μ»¬λŸΌλ“€μ€ RDBMSμ—μ„œ μ²˜λ¦¬ν•˜κ³  이후 μΆ”κ°€λ˜λŠ” μ»€μŠ€ν…€ μ»¬λŸΌλ“€μ€ MongoDB 같은 NoSQL DB둜 μ²˜λ¦¬ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

예λ₯Όλ“€μ–΄  | 원가 | μƒν’ˆλͺ… | μ£Όλ¬Έλ‚ μ§œ |  와 같은 κΈ°λ³Έ 제곡 컬럼이 μžˆλŠ”λ° μ‚¬μš©μžκ°€ "λ©”λͺ¨" μ»¬λŸΌμ„ μΆ”κ°€ν•˜κ³  μ‹Άλ‹€κ³  κ°€μ •ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

μ΄λ•Œ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ κ΅¬μ‘°μ—λŠ” 손을 λŒ€μ§€ μ•Šκ³  미리 λ§Œλ“€μ–΄μ€€ μ‹λ³„μš© μ»¬λŸΌμ— μ»€μŠ€ν…€ 컬럼이 μžˆλ‹€λŠ” μ‹λ³„μž ν˜Ήμ€ μ»€μŠ€ν…€ 컬럼이 λͺ‡κ°œμžˆλŠ”μ§€μ— λŒ€ν•œ μ •λ³΄λ§Œ μ—…λ°μ΄νŠΈ ν•΄μ€λ‹ˆλ‹€.

 

이후 MongoDBμ—μ„œ { name:"λ©”λͺ¨", isVisible:true } ν˜•νƒœλ‘œ μ €μž₯ν•©λ‹ˆλ‹€.


이 방법은 처음 μƒκ°ν–ˆμ„ 땐 이상적인 방법이라 μƒκ°ν–ˆλŠ”λ° μ—¬λŸ¬κ°€μ§€ λ¬Έμ œκ°€ μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.
각 λ°μ΄ν„°λ² μ΄μŠ€μ˜ 데이터 동기화가 μ œλŒ€λ‘œ μ΄λ£¨μ–΄μ§€λŠ”μ§€ μž₯λ‹΄ν•  수 없을 것 κ°™κ³ , νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ κΉŒλ‹€λ‘œμšΈ 것 κ°™μŠ΅λ‹ˆλ‹€.



인터넷을 κ²€μƒ‰ν•˜λ‹€ ν•œκ°€μ§€ 글을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

λͺ‡μ‹­λ…„μ „ κΈ€μ΄μ§€λ§Œ ERPλ₯Ό μ»€μŠ€ν„°λ§ˆμ΄μ§• ν•˜λŠ”κ²ƒμ— λŒ€ν•œ λ‚΄μš©μ΄μ˜€λŠ”λ°, μ²˜μŒμ—” λ§žμΆ€ν˜•μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμ–΄ μ’‹μ§€λ§Œ 이후 μΆ”κ°€ 패치 κ³Όμ •μ—μ„œ μ‹¬κ°ν•œ λ¬Έμ œκ°€ μƒκΈ°κ±°λ‚˜ μ•„μ˜ˆ 패치λ₯Ό ν•  수 μ—†κ±°λ‚˜ ν•˜λŠ” λ¬Έμ œκ°€ μƒκ²¨μ„œ κ³¨μΉ˜μ•„ν”„λ‹€λŠ” κΈ€μ΄μ˜€μŠ΅λ‹ˆλ‹€.

 

μ•„λ§ˆ μ € μ‹œκΈ°μ—λŠ” μ„€μΉ˜μ‹μœΌλ‘œ μ„€μΉ˜ν•΄μ£ΌλŠ” ν˜•νƒœμ˜€μ„ 것이라 μƒκ°λ˜λŠ”λ°, ν΄λΌμš°λ“œλ‘œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•΄λ„ λ³„λ°˜ λ‹€λ₯Όκ²Œ μ—†μ–΄λ³΄μΈλ‹€λŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ½”λ“œλ² μ΄μŠ€λŠ” μ–΄μ°¨ν”Ό ν•˜λ‚˜μ΄κ³  λ‘œμ§λ„ ν™•μž₯μ„± μžˆλŠ” κ³΅ν†΅λœ λ‘œμ§μΌν…λ°, κ³ κ°λ³„λ‘œ κ°€μ§„ 데이터 ꡬ쑰가 λͺ¨λ‘ λ‹€λ₯΄κ³  컬럼갯수 데이터 ν˜•νƒœ λ“± λͺ¨λ‘ λ‹€λ₯΄λ‹€λ©΄ μ•„μ˜ˆ 고객 λ§žμΆ€ν˜•μœΌλ‘œ λ°©λ¬Έν•˜μ—¬ μ„ΈνŒ… ν•΄μ£ΌλŠ” ν˜•νƒœκ°€ 더 쒋을 μˆ˜λ„ μžˆκ² λ‹€λŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.

 

λ˜ν•œ μ—…κ³„μ—μ„œ ν‘œμ€€ν™”λœ ꡬ쑰λ₯Ό λ”°λ₯΄λŠ”κ²Œ 더 μ’‹κ³  μΆ”ν›„ μ†”λ£¨μ…˜ 업체 λ³€κ²½ μ‹œμ—λ„ ν‘œμ€€ν™”λœ ꡬ쑰의 μ†”λ£¨μ…˜μ„ μ‚¬μš©ν•˜λ©΄ μ¦‰κ°μ μœΌλ‘œ 업무λ₯Ό μ‹œμž‘ν•  수 μžˆμ–΄ 였히렀 더 μœ μ—°ν•˜λ‹€ λΌλŠ” λ‚΄μš©λ„ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

 

 

μ»€μŠ€ν„°λ§ˆμ΄μ§•μ— 발λͺ©μ„ μž‘ν˜€μ„œ λ©°μΉ μ§Έ 고민만 ν•˜κ³  진행을 λͺ»ν•˜κ³  μžˆμ—ˆλŠ”λ° λ•Œλ‘  κΈ°νšμ„ λ³€κ²½ν•˜λŠ”κ²Œ 더 μ˜¬λ°”λ₯Έ 선택이 될 지도 λͺ¨λ₯΄κ² λ‹€λŠ” 생각이 λ“€μ–΄ μ»€μŠ€ν„°λ§ˆμ΄μ§•μ€ λ‚˜μ€‘μ— μƒκ°ν•˜κΈ°λ‘œ ν•˜κ³  업계 ν‘œμ€€μ— λŒ€ν•΄ 찾아보고 타 μ†”λ£¨μ…˜μ—μ„œ λ„˜μ–΄μ˜¬λ§Œν•œ 편의기λŠ₯에 집쀑 ν•΄μ•Όκ² μŠ΅λ‹ˆλ‹€.

 

 

 

 

 

 

 

 

 

 

 

 

 

λ°˜μ‘ν˜•