플러그인 API와 훅 시스템
플러그인 API 테이블을 정의하고 수명 주기 이벤트용 훅을 등록합니다.
플러그인 API와 훅 시스템은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
훅 시스템이란 무엇인가요?
훅 시스템을 사용하면 플러그인이 애플리케이션 수명 주기의 특정 이벤트에 대한 콜백을 등록할 수 있습니다. 앱은 적절한 시점에 등록된 모든 훅을 호출합니다.
애플리케이션 객체
앱 객체는 초기화 중에 플러그인에 전달됩니다. 이 객체는 훅 등록 API를 제공합니다.
local App = {}
App.__index = App
App._hooks = {}
function App:on(event, fn)
self._hooks[event] = self._hooks[event] or {}
table.insert(self._hooks[event], fn)
end
function App:emit(event, ...)
for _, fn in ipairs(self._hooks[event] or {}) do
fn(...)
end
end플러그인의 훅 등록
플러그인의 init 함수는 앱을 받아 훅을 등록합니다.
-- plugins/auth.lua
return {
name = "auth",
init = function(app)
app:on("request", function(req)
if not req.headers.token then
error("Unauthorized")
end
end)
end
}훅 우선순위
플러그인이 우선순위를 지정하도록 하여 중요한 훅(예: 인증)이 선택적인 훅(예: 로그 기록)보다 먼저 실행되게 합니다.
function App:on(event, fn, priority)
priority = priority or 50
local hooks = self._hooks[event] or {}
hooks[#hooks+1] = {fn=fn, priority=priority}
table.sort(hooks, function(a,b) return a.priority < b.priority end)
self._hooks[event] = hooks
end훅의 반환 값
일부 훅은 동작을 변경하는 값을 반환합니다. 앱은 처음으로 nil이 아닌 값이 반환되면 실행을 중단할 수 있습니다.
function App:filter(event, data)
for _, fn in ipairs(self._hooks[event] or {}) do
local result = fn(data)
if result ~= nil then return result end
end
return data
end훅 등록 해제
함수 참조로 특정 훅을 제거할 수 있도록 :off(event, fn) 메서드를 제공합니다.
훅 이름 공간 지정
구성을 위해 점으로 구분된 이벤트 이름을 사용합니다: "request.before", "request.after", "db.query".
플러그인이 제공하는 명령
플러그인은 훅 외에도 앱이나 다른 플러그인이 호출할 수 있는 이름이 지정된 명령을 등록할 수 있습니다.
function App:registerCommand(name, fn)
self._commands = self._commands or {}
self._commands[name] = fn
end
function App:run(name, ...)
local cmd = self._commands[name]
if cmd then return cmd(...) end
error("Unknown command: " .. name)
end미들웨어 패턴
훅 체인은 각 훅이 다음 훅을 호출하는 미들웨어 스택을 구성할 수 있으며, 이를 통해 요청과 응답을 변환하는 처리 흐름을 만들 수 있습니다.
플러그인 독립 테스트
테스트에서 모의 앱 객체를 만들어 플러그인의 훅이 올바르게 등록되고 호출되는지 확인합니다.
문서화 규칙
사용 가능한 모든 훅 이름과 인수, 예상 반환 값을 문서화합니다. 이는 서드파티 개발자가 의존하는 플러그인 계약을 구성합니다.
훅 시스템 질문
훅 시스템에서 우선순위의 목적은 무엇인가요?
복습: 플러그인 API와 훅 시스템
앱 객체에 :on(event, fn) 등록 API를 제공합니다. :emit()으로 이벤트를 발생시킵니다. 순서가 있는 실행을 위해 우선순위를 추가합니다. 이름 공간이 지정된 이벤트 이름을 사용하고 플러그인 개발자를 위해 훅 계약을 문서화합니다.
자주 묻는 질문
“플러그인 API와 훅 시스템” 강의는 무료인가요?
네 — “플러그인 API와 훅 시스템” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“플러그인 API와 훅 시스템”에서 뭘 배우나요?
플러그인 API 테이블을 정의하고 수명 주기 이벤트용 훅을 등록합니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“플러그인 API와 훅 시스템” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 플러그인 검색과 로딩
- 플러그인 API와 훅 시스템
- 플러그인 실행 샌드박스화
- 버전 관리와 의존성 관리