You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- 내부(`/local-api/`) 및 외부(`/api/`) API 경로 분리 결정 추가 (보안 및 AI 최적화)
- OpenClaw 등 외부 에이전트용 Skill Manifest 및 Scoped API Key 인증 설계
- 모듈 간 서비스 호출(DI) 규약 및 자동 마이그레이션(Preprocessor 포함) 상세화
- 관련 기술 문서(인증, DB, 개발 가이드) 및 UI 백로그 동기화 완료
@@ -119,16 +119,16 @@ installAndLoad 메서드는 모듈 설치를 총 6단계로 처리합니다. 첫
119
119
120
120
reloadModule 메서드는 개발 모드에서 사용되는 Hot Reload 기능입니다. 기존 모듈을 먼저 정리한 후, require.cache를 제거하고 모듈을 다시 로드합니다.
121
121
122
-
### 📚 관련 문서
123
-
124
-
> 📖 **상세 구현 가이드:**
125
-
> → `technical/module-loader.md` (작성 예정)
126
-
127
-
> 📖 **모듈 개발 가이드:**
128
-
> → `modules/01-development-guide.md`
129
-
130
-
> 📖 **사용자 설치 가이드:**
131
-
> → `marketplace/02-installation.md`
122
+
### 📚 관련 문서
123
+
124
+
> 📖 **상세 구현 가이드:**
125
+
> → `technical/module-loader.md` (작성 예정)
126
+
127
+
> 📖 **모듈 개발 가이드:**
128
+
> → `modules/01-development-guide.md`
129
+
130
+
> 📖 **사용자 설치 가이드:**
131
+
> → `marketplace/02-installation.md`
132
132
133
133
### ⚠️ 주의사항
134
134
@@ -148,9 +148,9 @@ reloadModule 메서드는 개발 모드에서 사용되는 Hot Reload 기능입
148
148
149
149
## 결정 #2: 관리자 인증 방식
150
150
151
-
### ✅ 결정 사항
152
-
153
-
**이메일/비밀번호 로그인 우선 + 선택적 OAuth + 4~6자리 관리자 PIN** 방식을 채택합니다.
151
+
### ✅ 결정 사항
152
+
153
+
**이메일/비밀번호 로그인 우선 + 선택적 OAuth + 4~6자리 관리자 PIN** 방식을 채택합니다.
154
154
155
155
### 📖 배경
156
156
@@ -160,7 +160,7 @@ reloadModule 메서드는 개발 모드에서 사용되는 Hot Reload 기능입
160
160
161
161
### 🔍 고려했던 옵션
162
162
163
-
#### Option A: OAuth 중심 로그인 + 복잡한 비밀번호
163
+
#### Option A: OAuth 중심 로그인 + 복잡한 비밀번호
164
164
```
165
165
장점:
166
166
- 높은 보안
@@ -181,7 +181,7 @@ reloadModule 메서드는 개발 모드에서 사용되는 Hot Reload 기능입
181
181
- 관리자 설정 보호 안 됨
182
182
```
183
183
184
-
#### Option C: 로컬 로그인 + 관리자 PIN ⭐ (선택)
184
+
#### Option C: 로컬 로그인 + 관리자 PIN ⭐ (선택)
185
185
```
186
186
장점:
187
187
- 간단하면서 적절한 보안
@@ -192,7 +192,7 @@ reloadModule 메서드는 개발 모드에서 사용되는 Hot Reload 기능입
192
192
- 복잡한 비밀번호보다는 보안 낮음
193
193
```
194
194
195
-
#### Option D: OAuth + 2FA
195
+
#### Option D: OAuth + 2FA
196
196
```
197
197
장점:
198
198
- 매우 높은 보안
@@ -204,10 +204,10 @@ reloadModule 메서드는 개발 모드에서 사용되는 Hot Reload 기능입
204
204
205
205
### 💡 선택 이유
206
206
207
-
**Option C**를 선택한 이유:
207
+
**Option C**를 선택한 이유:
208
208
209
209
1.**적절한 보안 수준**
210
-
- 홈서버 환경: 물리적 보안 + 로컬 로그인 + PIN으로 충분
210
+
- 홈서버 환경: 물리적 보안 + 로컬 로그인 + PIN으로 충분
211
211
- 4~6자리로도 충분한 보호
212
212
- 30분 세션으로 재입력 최소화
213
213
@@ -216,22 +216,22 @@ reloadModule 메서드는 개발 모드에서 사용되는 Hot Reload 기능입
216
216
- 스마트폰 잠금과 동일한 UX
217
217
- 숫자 패드로 빠른 입력
218
218
219
-
3.**구현 단순성**
220
-
- Argon2id(비밀번호) / PBKDF2(PIN)로 목적별 저장
221
-
- 세션 관리 간단
222
-
- 2FA보다 복잡도 낮음
219
+
3.**구현 단순성**
220
+
- Argon2id(비밀번호) / PBKDF2(PIN)로 목적별 저장
221
+
- 세션 관리 간단
222
+
- 2FA보다 복잡도 낮음
223
223
224
224
### 🎯 구현 방향
225
225
226
226
#### 사용자 플로우
227
227
228
228
```
229
-
일반 사용:
230
-
이메일/비밀번호 로그인 (기본) → 앱 사용 (가계부 입력 등)
231
-
또는 선택 로그인(OAuth/Passkey)
232
-
233
-
관리자 설정 접근:
234
-
1차 로그인 완료 (이메일/비밀번호 또는 선택 로그인)
229
+
일반 사용:
230
+
이메일/비밀번호 로그인 (기본) → 앱 사용 (가계부 입력 등)
231
+
또는 선택 로그인(OAuth/Passkey)
232
+
233
+
관리자 설정 접근:
234
+
1차 로그인 완료 (이메일/비밀번호 또는 선택 로그인)
235
235
↓
236
236
관리자 설정 메뉴 클릭
237
237
↓
@@ -248,7 +248,7 @@ reloadModule 메서드는 개발 모드에서 사용되는 Hot Reload 기능입
248
248
249
249
AdminAuthService 클래스는 관리자 PIN 인증을 담당합니다.
250
250
251
-
setupAdminPin 메서드는 초기 설치 시 관리자 PIN을 생성합니다. 먼저 PIN이 4~6자리 숫자인지 정규식으로 검증합니다. 통과하면 무작위 16바이트의 salt를 생성하고, PIN과 salt를 합쳐 pbkdf2로 100,000회 반복 해싱합니다. 그 결과를 사용자 테이블에 role, salt, hash와 함께 저장합니다.
251
+
setupAdminPin 메서드는 초기 설치 시 관리자 PIN을 생성합니다. 먼저 PIN이 4~6자리 숫자인지 정규식으로 검증합니다. 통과하면 무작위 16바이트의 salt를 생성하고, PIN과 salt를 합쳐 pbkdf2로 100,000회 반복 해싱합니다. 그 결과를 사용자 테이블에 role, salt, hash와 함께 저장합니다.
252
252
253
253
verifyAndCreateSession 메서드는 PIN 검증과 세션 생성을 처리합니다. verifyPin을 호출하여 PIN이 올바른지 확인합니다. 검증 실패 시 감사 로그를 남기고 에러를 발생시킵니다. 검증 성공 시 무작위 UUID를 세션 ID로 생성하고, 현재 시간에서 30분을 더한 만료 시간과 함께 세션을 저장합니다.
254
254
@@ -262,13 +262,13 @@ Rate Limiting은 5회 연속 실패 시 5분간 로그인을 잠급니다. 잠
262
262
263
263
감사 로그는 각 PIN 검증 시도마다 사용자 ID, 성공/실패 여부, IP 주소, 타임스탬프를 기록합니다.
Copy file name to clipboardExpand all lines: docs/v2_FINANCIAL-LEDGER/modules/01-development-guide.md
+45-12Lines changed: 45 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,7 +18,23 @@ example 폴더를 복사하여 my-module이라는 새 폴더로 만들고, 해
18
18
19
19
### 2. module.json 수정
20
20
21
-
모듈의 메타데이터를 정의하는 파일입니다. name은 내부 식별명, version은 버전, displayName은 표시 이름, description은 설명, icon은 아이콘 이모지입니다. routes에는 프론트엔드 경로와 API 경로를 정의하고, permissions에는 필요한 권한(예: db:read, db:write)을 목록으로 넣습니다. dependencies는 의존하는 다른 모듈 목록이고, enabled는 활성화 여부입니다.
21
+
모듈의 메타데이터를 정의하는 파일입니다.
22
+
23
+
```json
24
+
{
25
+
"name": "my-module",
26
+
"version": "1.0.0",
27
+
"displayName": "내 모듈",
28
+
"exposedSkills": [
29
+
{
30
+
"id": "get-summary",
31
+
"path": "/summary",
32
+
"description": "모듈 데이터 요약을 외부 AI에 제공합니다."
33
+
}
34
+
]
35
+
}
36
+
```
37
+
`exposedSkills`는 OpenClaw 같은 외부 AI 에이전트에게 노출할 기능을 정의합니다.
0 commit comments