← 전체 가이드로 돌아가기
05. 확장하기
안내 버전 3 · 확인한 환경 ClinicOS 1.86.2 · 2026-09-03

플러그인 확장하기

먼저 확인할 내용

이 가이드는 병원에 필요한 기능을 에이전트와 새 플러그인으로 추가할 때 쓰는 작업 안내입니다. 기능을 둘 위치, 켜고 끄는 방법, 업데이트 뒤 확인 순서를 따라가면 홈페이지 본체를 직접 바꾸지 않고 확장할 수 있습니다.

플러그인 확장하기

이 가이드는 병원에 필요한 기능을 에이전트와 새 플러그인으로 추가할 때 쓰는 작업 안내입니다. 기능을 둘 위치, 켜고 끄는 방법, 업데이트 뒤 확인 순서를 따라가면 홈페이지 본체를 직접 바꾸지 않고 확장할 수 있습니다.

왜 플러그인을 사용하나요?

1. 안전한 커스터마이징

┌─────────────────────────────────────────────────┐
│   src/pages/index.astro  (코어)                 │ ← 수정하면 업데이트 시 충돌!
└─────────────────────────────────────────────────┘
                     ↓ 업데이트 시 덮어쓰기
                     ↓ 내 수정 사항 사라짐

┌─────────────────────────────────────────────────┐
│   src/plugins/local/custom-homepage/  (플러그인) │ ← 여기서 수정하면 안전!
└─────────────────────────────────────────────────┘
                     ↓ 업데이트와 무관
                     ↓ 내 코드 그대로 유지

핵심 원리: 코어 파일은 업데이트 시 새 버전으로 교체되지만, 플러그인 폴더는 건드리지 않습니다.

2. 쉬운 on/off 전환

문제가 생겼을 때:

3. 독립적인 개발

각 플러그인은 독립된 폴더에서 관리됩니다:

하나의 플러그인에 문제가 생겨도 다른 플러그인과 코어는 영향 없음!

플러그인과 스킨의 차이

둘 다 에이전트가 다루는 재사용 단위지만 목적이 다릅니다.

즉, 새 기능이 필요하면 플러그인, 디자인 시스템 단위로 퍼블릭을 바꾸고 싶으면 스킨 경로를 쓰는 편이 맞습니다.

스킨 쪽은 스킨 라이브러리에이전트 드리븐 스킨 작업에서 따로 다룹니다.

플러그인 종류

코어 플러그인 (Core)

Clinic-OS 팀에서 제공하는 공식 플러그인. 기본 설치되어 있거나 스토어에서 무료로 설치 가능.

플러그인설명기본 설치
커스텀 홈페이지메인 페이지 자유 커스터마이징O

검증된 플러그인 (Verified)

커뮤니티 개발자가 만들고, Clinic-OS 팀에서 검증한 플러그인.

커뮤니티 플러그인 (Community)

커뮤니티 개발자가 자유롭게 공유하는 플러그인.

플러그인 구조

플러그인 폴더는 이런 구조로 되어 있습니다:

src/plugins/local/my-plugin/
├── manifest.json       ← 플러그인 정보 (필수)
├── README.md          ← 사용 설명서
├── pages/             ← 페이지 컴포넌트
│   └── index.astro    ← 홈페이지 오버라이드
├── components/        ← 재사용 컴포넌트
├── lib/               ← 헬퍼 함수
│   └── hooks.ts       ← 이벤트 핸들러
└── migration.sql      ← DB 마이그레이션 (선택)

manifest.json 예시

{
  "id": "custom-homepage",
  "name": "커스텀 홈페이지",
  "description": "메인 홈페이지를 자유롭게 커스터마이징",
  "version": "1.0.0",
  "author": "Clinic-OS",
  "category": "customization",
  "documentation": {
    "summary": "코어 코드를 건드리지 않고...",
    "features": ["홈페이지 오버라이드", "..."],
    "howToEdit": "pages/index.astro 수정"
  },
  "overrides": [
    { "path": "/", "file": "pages/index.astro", "priority": 10 }
  ]
}

플러그인 관리

설치된 플러그인 확인

관리자 > 기능 허브에서 설치된 모든 플러그인을 확인할 수 있습니다.

플러그인 활성화/비활성화

각 플러그인 상세 페이지에서 토글 버튼으로 on/off 가능. (super_admin 권한 필요)

새 플러그인 설치

AI에게 요청하세요: 로컬 설치본을 열고 /admin/plugins/store 에서 VIP 관리 플러그인을 설치해줘

또는 스토어에서 원하는 플러그인을 찾아 설치를 요청: 이 플러그인을 로컬 관리자 스토어에서 설치해줘: https://clinic-os.moden.marketing/plugins/vip-management

새 플러그인 생성

사람이 구조를 외우기보다 에이전트에게 이렇게 요청하는 편이 맞습니다.

vip-management 플러그인 뼈대를 만들어줘.
관리 탭과 API도 같이 필요해.

에이전트는 내부적으로 npm run plugin:create 를 사용해 구조를 만들고, 그 다음 세부 구현을 이어갑니다.

플러그인 삭제

VIP 관리 플러그인을 삭제해줘

커스텀 홈페이지 사용법

왜 홈페이지가 플러그인인가요?

각 한의원마다 홈페이지 디자인이 다릅니다:

코어에 고정하면: 모든 한의원이 같은 홈페이지를 써야 함 플러그인이면: 각자 원하는 대로 커스터마이징 가능

홈페이지 수정하기

  1. 파일 열기:

src/plugins/local/custom-homepage/pages/index.astro

  1. 에이전트에게 요청:
홈페이지에 진료 시간 안내 섹션을 추가해줘.
월-금 09:00-18:00, 토 09:00-13:00, 일 휴진
  1. 결과 확인 후 배포:
수정 내용 확인했어. 배포해줘

원본 홈페이지로 돌아가기

  1. 관리자 > 기능 허브 > 커스텀 홈페이지
  2. 토글 버튼 클릭 → 비활성화
  3. 코어의 기본 홈페이지가 표시됨

페이지 오버라이드 시스템

작동 원리

사용자가 "/" 요청
       ↓
플러그인에 "/" 오버라이드가 있나?
       ↓
  YES → 플러그인 페이지 렌더링
  NO  → 코어 페이지 렌더링

우선순위

여러 플러그인이 같은 경로를 오버라이드하면 priority 값이 높은 것이 적용됩니다.

// manifest.json
{
  "overrides": [
    { "path": "/", "file": "pages/index.astro", "priority": 10 }
  ]
}

훅(Hook) 시스템

플러그인은 코어의 이벤트에 반응할 수 있습니다.

사용 가능한 훅

이벤트발생 시점활용 예
onPaymentCompleted결제 완료 시VIP 포인트 적립
onPatientCreated환자 등록 시웰컴 메시지 발송
onVisitCheckin내원 체크인 시리뷰 요청 예약
onReservationCreated예약 생성 시알림 발송

훅 핸들러 예시

// src/plugins/local/vip-management/lib/hooks.ts

export async function addPoints(context: HookContext) {
  const { db, data } = context;
  const { patientId, amount } = data;

  // VIP 포인트 적립 로직
  await db.prepare(`
    INSERT INTO custom_vip_point_history (patient_id, amount, type)
    VALUES (?, ?, 'earn')
  `).bind(patientId, Math.floor(amount * 0.01)).run();
}

플러그인 개발 규칙

테이블 명명 규칙

-- 올바른 예: custom_ 접두사 사용
CREATE TABLE custom_vip_members (...);
CREATE TABLE custom_reviews (...);

-- 잘못된 예: 접두사 없음
CREATE TABLE vip_members (...);
ALTER TABLE patients ADD COLUMN ...;  -- 코어 테이블 수정 금지!

API 경로 규칙

/api/hub/{plugin-id}/...   ← 플러그인 전용 경로
/api/patients/...          ← 코어 API 경로 (사용 금지)

페이지 경로 규칙

/admin/hub/{plugin-id}/...  ← 플러그인 관리 페이지
오버라이드 시스템 사용       ← 퍼블릭 페이지 교체
코어 페이지 직접 수정 금지

실전 예제: 리뷰 요청 플러그인

고객이 시술을 받고 나면 자동으로 리뷰 요청 문자를 보내는 플러그인을 만들어봅시다.

에이전트에게 한 번에 요청

AI에게 이렇게 요청하면 됩니다:

리뷰 요청 플러그인을 만들어줘.

기능:
- 환자가 체크인하면 24시간 후에 리뷰 요청 문자 발송
- custom_review_requests 테이블에 예약 정보 저장
- 관리자 페이지에서 발송 내역 확인 가능

훅:
- onVisitCheckin 이벤트에 연결

AI가 자동으로:

  1. src/plugins/review-request/ 폴더 생성
  2. manifest.json 작성
  3. 훅 핸들러 코드 작성
  4. 마이그레이션 SQL 생성
  5. installed.json 업데이트

결과물 구조

src/plugins/review-request/
├── manifest.json       ← 플러그인 메타데이터
├── lib/
│   └── hooks.ts        ← onVisitCheckin 핸들러
├── pages/
│   └── admin.astro     ← 발송 내역 페이지
└── migration.sql       ← 테이블 생성 SQL

플러그인 스토어

HQ 플러그인 스토어

clinic-os.moden.marketing/plugins에서:

스토어에서 마음에 드는 플러그인을 찾으면:

이 플러그인 설치해줘: [플러그인 URL]

내 플러그인 공유하기

AI에게 요청하세요:

이 플러그인을 HQ 스토어에 제출해줘

AI가 자동으로:

  1. 개발자 등록 상태 확인
  2. 플러그인 규약 검증
  3. HQ에 제출

개발자 등록이 안 되어 있다면 개발자 신청 페이지에서 먼저 등록하세요.

요약

항목코어 수정플러그인
업데이트 영향덮어쓰기 위험안전
롤백어려움토글로 간편
다른 기능 영향있을 수 있음격리됨
권장 상황불가피할 때만모든 커스터마이징

기억하세요: 뭔가 커스터마이징하고 싶다면, 먼저 플러그인으로 할 수 있는지 생각하세요!

관련 콘텐츠

가이드 한눈에 보기

이 가이드로 해결할 일

이 가이드는 병원에 필요한 기능을 에이전트와 새 플러그인으로 추가할 때 쓰는 작업 안내입니다. 기능을 둘 위치, 켜고 끄는 방법, 업데이트 뒤 확인 순서를 따라가면 홈페이지 본체를 직접 바꾸지 않고 확장할 수 있습니다.

확인할 질문
플러그인 확장하기를 실제 운영에서 어떻게 적용하나요?
이런 분께 필요합니다
ClinicOS를 설치하고 운영 기준을 정하는 한의원 원장님
따로 확인할 내용
ClinicOS 1.86.2 기준의 안내 버전 3 문서이며, 현재 화면이나 정책이 다르면 최신 제품 화면을 우선합니다.
할 수 있게 되는 일
이 가이드는 병원에 필요한 기능을 에이전트와 새 플러그인으로 추가할 때 쓰는 작업 안내입니다. 기능을 둘 위치, 켜고 끄는 방법, 업데이트 뒤 확인 순서를 따라가면 홈페이지 본체를 직접 바꾸지 않고 확장할 수 있습니다.

작성과 확인: ClinicOS 제품·운영팀 · 확인한 환경 ClinicOS 1.86.2 · 안내 버전 3 · 마지막 확인 2026-09-03

변경한 정보가 공개 화면에 어떻게 보이는지 확인하세요. 이어서 배포와 변경 확인 방법을 읽거나, 계정·데이터 소유와 인수 기준을 확인할 수 있습니다.

직접 시작·초기 구축 비교하기 가격 안내 보기