아무도 Kibana 플러그인 만드는 법을 가르쳐 주지 않는다. 그래서 내가 아는 모든 것을 패키징했다
I’m happy to translate the article for you, but I’ll need the full text of the post (the content you’d like translated). Could you please paste the article’s body here? Once I have that, I’ll provide a Korean translation while keeping the source link, markdown formatting, code blocks, URLs, and technical terms unchanged.
아무도 이야기하지 않는 문제
Try Googling “how to build a Kibana external plugin.”
Go ahead. I’ll wait.
You’ll find:
- Elastic’s official docs (sparse)
- A deprecated Yeoman generator from 2018
- A handful of Stack Overflow posts from people who gave up
That’s basically it.
When I started building Kibana plugins at UNIBERG, my main learning resource was… reading Kibana’s source code: the actual Kibana repo, 200 k+ files. I searched for patterns, hoping the internal plugin I was looking at was doing things the “right” way and not some legacy hack that hadn’t been cleaned up yet.
There’s no tutorial, no course, no “Kibana Plugin Development for Dummies.” You just figure it out.
Which is fine — I actually enjoy that kind of thing. But after 6 + years of figuring it out, I had a lot of knowledge sitting in my head (and scattered across about 40 different notes.md files) that could save someone months of pain.
왜 Claude Code 플러그인인가?
나는 한동안 Claude Code를 사용해 왔다. 어느 날 플러그인 문서를 살펴보니 구조가 내가 이미 알고 있던 Kibana 플러그인과 이상하게도 비슷하다는 것을 깨달았다:
- Manifest file
- Directory structure
- Configuration
…하지만 훨씬 간단했다. Claude Code 플러그인은 기본적으로:
- A JSON manifest
- Some markdown files for commands/skills/agents
컴파일된 코드가 없고, 빌드 단계도 없다.
첫 번째 생각: “내 전체 Kibana 지식 베이스를 skill 파일에 넣으면 Claude가 그냥… 알게 될 거야.”
두 번째 생각: “그게 실제로는 안 될 거야.”
그렇게 되었다.
실제로 만든 것
토요일 오후에 시작했습니다. 몇 시간 정도 걸릴 거라고 생각했죠.
두 날이 걸렸고, 또 일주일 동안 추가 작업을 했습니다. 계속해서 “아, 이 패턴도 있군”이라고 생각했거든요.
플러그인에는
-
10개의 슬래시 명령 – 예시
/scaffold– 전체 플러그인 스켈레톤을 생성합니다 (server + public + types + manifest)/route– 적절한@kbn/config-schema검증을 포함한 서버 라우트를 생성합니다/component– EUI 기반 React 컴포넌트를 생성합니다/security– RBAC를 설정합니다- …그리고 몇 가지 더
-
6개의 특수 에이전트 – 플러그인 구조를 검토하는 아키텍트, 인증 우회 및 데이터 유출을 검사하는 보안 감사자, 버전 업그레이드를 위한 마이그레이션 도우미 등
-
1개의 방대한 스킬 파일 – 약 400줄에 걸친 집중된 Kibana‑플러그인 지식: 플러그인 라이프사이클, 라우트 패턴, ES 클라이언트 사용법, EUI 컴포넌트, 인증 미들웨어, 테스트 패턴, 일반적인 함정.
스킬 파일은 제가 가장 자랑스러워하는 부분이며 (또한 가장 오래 걸린 부분이기도 합니다) “잠깐, 저장 객체 마이그레이션을 놓쳤네” 라고 계속 생각하면서 또 다른 섹션을 추가했기 때문입니다.
제대로 맞추기 어려웠던 것들
라우트 인증 패턴
이건 지루하게 들릴 수 있습니다. 실제로 지루합니다. 하지만 잘못하면 테넌트 간에 사용자 데이터를 유출하게 됩니다. 이런 경우를 직접 본 적도 있고, 제가 직접 일으킨 적도 있습니다.
플러그인은 기본적으로 생성되는 모든 라우트에 보안 검사를 삽입합니다. 왜냐하면 “나중에 인증을 추가하겠다”는 것이 “프로덕션에서 인증 버그를 발견하겠다”는 뜻이라는 것을 힘들게 배웠기 때문입니다.
/route 명령이 생성하는 모든 라우트는 다음과 같이 시작합니다:
const user = security.authc.getCurrentUser(request);
if (!user) return response.forbidden();
지루하지만, 이 검사가 없었을 때 겪은 문제들 때문에 저는 상처를 입었습니다.
EUI 컴포넌트 패턴
Elastic UI에는 80개가 넘는 컴포넌트가 있습니다. 일부는 문서가 잘 되어 있고, 일부는 그렇지 않으며, 또 일부는 속성이 생각과 다르게 동작합니다. 저는 한 번 EuiBasicTable이 페이지네이션을 제대로 렌더링하지 않는 이유를 디버깅하느라 하루 종일을 보냈습니다. 결국 totalItemCount를 문자열로 전달하고 있었고, 숫자로 전달해야 했던 것이었습니다. prop 타입이 any라 TypeScript가 잡아내지 못했습니다.
/component 명령이 생성하는 컴포넌트는 제가 겪었던 엣지 케이스들을 이미 처리합니다:
- 다크 모드 호환성
- 반응형 레이아웃
- 로딩 상태
- 에러 경계
프로덕션에서 놓치고 고쳐야 했던 것들입니다.
Elasticsearch 클라이언트 통합
Kibana ES 클라이언트는 일반 @elastic/elasticsearch 클라이언트와 다릅니다. 래핑되어 있고, 오류 타입이 다르며, 인증을 다르게 처리하고, Kibana 마이너 버전마다 문서화되지 않은 방식으로 변합니다.
저는 스킬에 다음을 처리하는 서비스 레이어 패턴을 구현했습니다:
- 타입 강제 변환
- 오류 매핑
- 모든 ES 응답에 대한 방어적 기본값
이 코드는 약 200줄 정도이며 다시는 보고 싶지 않지만, 제가 만드는 모든 플러그인이 이를 복사합니다.
모든 것을 의문시하는 파트
오픈소스로 전문 지식을 공유하는 것이 이상한 이유는: 누군가가 이 플러그인을 설치하고 수년간의 학습을 건너뛸 수 있다는 점입니다.
- 보안 감사를 통해 알아낸 인증 패턴, 거의 심장마비가 날 뻔했죠? 그게 모두 들어 있어요.
- 전체 수요일을 잡아먹은 EUI 다크 모드 버그? 자동으로 처리됩니다.
- 프로덕션 데이터에 세 가지 다른 형식의 타임스탬프가 있어 새벽 2시에 작성한 Elasticsearch 응답 변환 레이어? 스킬에 내장되어 있습니다.
내 경험을 나눔으로써 가치를 떨어뜨리는 걸까요?
아마도. 아마 아닐 수도 있습니다. 플러그인은 코드를 스캐폴드하고 패턴을 가르칠 수 있지만, 목요일 밤 11시에 발생한 특정 프로덕션 이슈를 디버깅해 주지는 못합니다. 데이터 모델을 보고 “이건 10만 레코드 이상으로는 확장되지 않을 거야”라고 말해 주지도 못합니다. 회의에 참석해 제품 매니저에게 멀티‑테넌시가 3일이 아니라 3주가 걸리는 이유를 설명해 주지도 못합니다.
도구는 경험을 대체하지 않습니다. 단지 지루한 부분을 더 빠르게 만들어 줄 뿐입니다.
실제로 사용하면 어떻게 될까
Here’s a real example. You type:
/scaffold
Claude asks what you’re building. You say “user management plugin with RBAC.”
Two minutes later you have:
- 올바른 Kibana 버전을 타깃으로 한 플러그인 매니페스트
- 라우트 등록이 포함된 서버 측 설정
- React를 이용한 퍼블릭 사이드 앱 마운트
- 도메인용 TypeScript 타입
- 네비게이션이 포함된 기본 EUI 페이지 레이아웃
- 기능 권한이 포함된 보안 구성
- 작동하는
kibana.jsonc
이 플러그인 이전에는 그 설정에 약 4 시간이 걸렸습니다. 그래도 뭔가를 놓치곤 했는데—보통 kibana.jsonc 설정이었는데, 이 파일은 잘못하기 쉽고 문제가 생기면 디버깅하기 어려우니까요.
아직도 부족한 것들
솔직히 아직 포함되지 않은 부분은 다음과 같습니다:
- State management patterns – 저는 의견이 있습니다 (React context + custom hooks 사용, Redux는 사용하지 않음) 하지만 아직 이를 명령어 형태로 정리하지 못했습니다.
- Logging and monitoring – 프로덕션 플러그인에 필수적인데, 재미있는 부분이 아니어서 계속 미루고 있습니다.
- Inter‑plugin dependencies – Kibana의 의존성 주입 시스템은 강력하지만 혼란스럽습니다. 수년간 작업했음에도 매번 문서를 다시 확인합니다.
- Real‑time data patterns – Kibana를 통한 WebSocket‑style 업데이트. 구현은 했지만, 아직 템플릿화하기에 충분히 깔끔한 패턴이 아닙니다.
오픈‑소스 불안
발표하는 것이 불편했습니다.
코드 때문이 아니라 — 코드는 괜찮습니다. 하지만 사실상 제 뇌를 마크다운 파일에 옮긴 것이라서요. 모든 패턴은 제가 실수를 통해 배운 것이고, 보안 에이전트의 모든 안티‑패턴 검사는 제가 만든 혹은 잡아낸 버그입니다.
- 누군가 뭔가 잘못된 것을 발견하면 어떨까요?
- 제 사용 사례에선 동작하는 패턴이 다른 사람에게는 깨진다면 어떨까요?
- 엘라스틱 엔지니어가 보고 “그건 우리 내부에서는 이렇게 하지 않는다”고 말한다면 어떨까요?
그럼… 그들은 이슈를 열 것이고, 저는 그것을 고치거나 새로운 것을 배우게 될 겁니다.
그게 바로 요점이죠.
실제 사용 방법
If you’re building Kibana plugins (or thinking about it):
/plugin marketplace add ch-bas/kibana-plugin-helper
/plugin install kibana-plugin-helper@kibana-plugin-helper
Then try /scaffold and see what happens.
If you’re not building Kibana plugins — honestly, most people aren’t — this post is really about something else: packaging your hard‑won knowledge into something others can use.
Whatever your niche, you have patterns and lessons that could save someone else months. The format doesn’t matter (a plugin, a blog post, a markdown file in a GitHub repo). The point is getting it out of your head and into a place where it helps.
I just happened to pick a Claude Code plugin because the structure was familiar and I’m a developer, so of course I over‑engineered it.
알고 싶은 내용
- Kibana 플러그인 개발을 하고 있다면: 첫날에 누군가가 알려줬으면 좋겠다고 생각한 것이 무엇인가요? 제가 추가할 수도 있어요.
- 전문 지식을 오픈소스로 공개한 적이 있다면: 그것이 경력에 도움이 되었나요, 아니면 해가 되었나요? 진심으로 궁금합니다.
- Claude Code 플러그인을 사용해 본 적이 있다면: 사람들이 실제로 마켓플레이스를 통해 발견하고 있나요, 아니면 아직도 주로 입소문인가요?
답변을 남겨 주세요 — 모두 읽습니다.
GitHub:
라이선스: MIT (do whatever you want with it)
Tags: Kibana ElasticStack OpenSource ClaudeCode WebDevelopment React