아키텍처: 정책 반영 흐름

CodePilot의 가장 강력한 특징은 **"Admin의 정책이 실시간으로 IDE에 반영된다"**는 점입니다. 이 페이지에서는 그 작동 원리를 설명합니다.

1) 전체 흐름

[Admin 대시보드]                [CodePilot Backend]              [IDE (팀원)]
─────────────────               ──────────────────               ──────────────
관리자 설정 저장                  AdminSetting 테이블 저장
                                  (category, key, value,
                                   enforcement, org_id)
                                                        ←── IDE 로그인
                                                        ←── syncServerSettings()
                                 /settings/effective/all/
                                  ├ org_id 기반 조직 설정 반환
                                  └ preset 시스템 기본 설정 포함
                                                        ──→ 5분 TTL 캐시 저장
                                                        ──→ globalState 오프라인 캐시
                                                        ──→ required 설정 즉시 강제 적용
                                                        ──→ IDE UI에 설정 반영
  1. 정책 설정: 관리자가 Admin 대시보드에서 보안/모델/규칙 정책을 저장하면, Backend의 AdminSetting 테이블에 카테고리·키·값·강제 수준·조직 ID가 기록됩니다.

  2. 동기화: 개발자가 IDE에 로그인하면 syncServerSettings()가 호출되어 /settings/effective/all/ API를 통해 최신 설정을 가져옵니다. 조직 설정과 시스템 기본 설정(preset)이 함께 반환됩니다.

  3. 캐시 및 적용:

    • 가져온 설정은 5분 TTL 캐시로 메모리에 보관하고, globalState에도 저장하여 오프라인 시에도 사용 가능합니다.

    • required(강제) 설정은 IDE 설정 화면에서 잠금 상태로 표시되어 사용자가 변경할 수 없습니다.

    • recommended(권장) 설정은 기본값으로 세팅되지만 사용자가 필요 시 변경할 수 있습니다.

  4. 실행 제어: AI가 코드를 생성하거나 명령을 실행할 때, 로컬에 캐시된 정책을 실시간으로 체크하여 허용/차단을 판단합니다.

2) 실제 적용 예시

상황 A: "우리 회사는 보안 때문에 gpt-4만 써야 해"

  • Admin: AI 모델 정책에서 gpt-4만 허용하고 나머지는 비활성화 (강제)

  • IDE: 모델 선택 드롭다운에 gpt-4만 표시됨, 다른 모델 선택 불가

상황 B: "신입 사원들이 자꾸 rm -rf를 실수로 써"

  • Admin: 보안 정책의 금지 명령어 목록에 rm -rf 등록 (강제)

  • IDE: AI가 rm -rf가 포함된 쉘 스크립트를 생성하려고 하면, "보안 정책에 의해 차단되었습니다" 경고 출력

상황 C: "JPA 쓸 때는 꼭 지연 로딩(Lazy Loading)을 써야 해"

  • Admin: 개발 규칙(Skill)에 "JPA Entity 작성 시 FetchType.LAZY 사용" 등록

  • IDE: AI가 Entity 코드를 작성할 때, 해당 규칙을 프롬프트에 자동 포함하여 올바른 코드 생성

상황 D: "단순 질문에 비싼 모델 쓰지 마" (모델 라우팅)

  • Admin: 모델 라우팅 규칙에 "채팅 유형 = Haiku, 코딩 유형 = Sonnet" 설정

  • IDE: 사용자가 "안녕"이라고 인사하면 저렴한 모델이, "이 코드 리팩터링해줘"라고 하면 고성능 모델이 자동 응답


circle-check

Last updated