iKonekt

그룹과 여러 브랜드용

여러 회사, 하나의 설치, 공유되지 않는 고객

그룹은 보통 이 문제를 두 번, 나쁘게 해결해요: 다섯 개의 별도 설치와 다섯 개의 별도 모든 것, 아니면 하나의 설치와 애플리케이션이 항상 올바르게 필터링할 것이라는 엄숙한 약속. 첫째는 비용이 많이 들어요. 둘째는 약속이고, 약속은 보안 모델이 아니에요.

회사를 두 개 이상 운영하신다면 — 자회사를 둔 지주회사, 프랜차이즈, 다른 시장을 겨냥한 두 브랜드, 에이전시와 에이전시에서 분사한 사업 — 문제의 모양은 이미 아실 거예요. 브랜드들은 사람과 도구와 재무 부서를 공유해요. 하지만 고객은 공유하지 않고, 공유하는 것처럼 보여서도 안 돼요.

iKonekt는 하나의 설치로 이 모든 것을 운영하고, 그 사이의 분리는 코드가 아니라 데이터베이스가 지켜요. 이 구분은 아무렇지 않은 학문적 차이처럼 들리다가, 어느 날 갑자기 그렇지 않게 돼요.

이 계층이 중요한 이유

애플리케이션 수준의 필터는 쿼리 속 한 문장이에요. 앞으로 작성될 모든 쿼리가 그것을 담고 있는 한 동작해요 — 급하게 작성된 쿼리도, 새로 온 개발자가 작성한 쿼리도, 딱 한 번 쓰일 보고서를 위해 작성된 쿼리도 포함해서요.

경계를 데이터베이스 안으로 밀어 넣으면 계산이 뒤집혀요. 정책은 모든 읽기와 모든 쓰기에서, 모든 것 아래에서 동작해요. 회사 조건을 잊은 쿼리는 잘못된 행을 반환하지 않아요. 아무것도 반환하지 않아요. 실패 양상이 빈 화면과 혼란스러워하는 개발자가 되는데, 그것이 올바른 실패 양상이에요.

빈 화면은 기능입니다. 예상치 못한 자리에서 만난 두 고객에게 고객 목록을 설명하는 것보다, 우리 엔지니어 한 명에게 빈 화면을 설명하는 쪽을 택하겠어요.

설치 하나회사별
  • 1고객 & 스레드범위가 지정돼요. 브랜드 A의 판매자는 브랜드 B의 것에 접근할 수 없어요. 설정이 아니라 구조로 그래요.
  • 2고객에 대한 클레임"이미 이 계정이 있습니다" 잠금은 회사별로 유지됩니다 — 그래서 두 브랜드가 같은 시장에서 충돌 없이 함께 일할 수 있어요.
  • 3프롬프트 & 설정각 회사가 자기 것을 직접 편집해요. 이것이 공유된 적 있는 유일한 곳은 버그였고, 이 시스템이 발견했다고 가장 자랑스러워하는 바로 그 버그예요.
  • 4파트너 프로그램회사별 모듈이지, 모두가 상속받는 전역 모듈이 아니에요.

애플리케이션 아래에서 강제되는 경계

그룹이 실제로 공유할 수 있는 것

분리는 그 자체를 위한 고립이 아니에요. 그룹 전체에서 공유할 가치가 있는 것들은 의도적으로 공유되고, 대부분은 지루한 것들인데 — 바로 그게 맞아요. 지루한 것들이 곧 중복 비용이 발생하는 곳이니까요:

  • 실행하고 업데이트할 설치 하나. 배포 하나, 관리할 자격 증명 한 세트, 패치를 유지할 대상 하나.
  • 서로 다른 모자를 쓰는 한 팀. 한 사람이 여러 회사에서 일할 수는 있어요. 하지만 물어보지 않은 쿼리를 통해 두 회사를 동시에 볼 수는 없어요.
  • 한 세트의 습관. 리드를 배정하는 방식, 메모를 작성하는 방식, 작업이 청구서에 이르는 방식 — 한 번 배워서 어디서나 적용하니, 온보딩이 아침 한 번 정도로 짧아져요.
  • castomo 패밀리와의 하나의 관계. 그 아래 castomAPI, 같은 계정, 같은 커넥터 — 중요한 곳에서는 회사별로 구성돼요.

그룹이 항상 두 번째로 묻는 질문

"전체에 걸쳐 보고서를 만들 수 있나요?" 네 — 누수 경계의 부작용이 아니라, 그룹 자체의 관점에서 의도적이고 명시적으로 가능해요. 이 구분이 설계의 전부예요: 경계를 넘는 일은 반드시 그 권한을 가진 누군가가 의도적으로 수행한 행위여야 해요. 잘못된 식별자가 우연히 해내는 일이 되어서는 안 돼요.

그리고 세 번째로 묻는 질문: "브랜드 하나를 매각하면 어떻게 되나요?" 데이터베이스가 지키는 경계는 깨끗한 사본을 꺼낼 수 있는 경계이기도 해요. 우연이 아니에요 — 분리와 이식성은 서로 다른 회의에서 본 같은 속성이에요.

바닥 아래

구체적으로 무엇이 경계를 지키고 있나

주장이 아니라 목록이에요. 공급자가 자기 제품에 대해 이 목록을 제시하지 못한다면, 그 자체가 주목할 만한 일이에요.

26

회사를 함께 담는 테이블, 단순히 사용 가능한 게 아니라 강제로 켜진 검사.

72

정책, 하나씩 직접 작성해서 각각이 사람에게 읽혔지 반복문으로 생성되지 않았어요.

942

테스트, 무엇이든 변경될 때마다 매번 처음부터 다시 만든 데이터베이스로 실행돼요.

0

기본 회사. 범위 없는 요청은 데이터에 닿기 전에 예외를 던져요 — 잊고 끄게 될 폴백이 없어요.

분리가 어떻게 만들어지는지 →

"회사 다섯 개면, 설치 다섯 번, 청구서도 다섯 장이네요."

설치는 하나. 데이터베이스가 지키는 경계는 다섯 개.

사람은 공유하고, 습관은 공유하고, 플랫폼은 공유하되 — 공유하는 고객은 한 명도 없어요. 그 경계를 넘는 일은 반드시 사람이 의도적으로 한 행위여야 하고, 식별자가 우연히 해내는 일이 되어서는 안 돼요.

분리가 어떻게 만들어지는지 →