@jager-ai/holy-bible-api
Version:
성경 구절 검색 및 슬래시 명령어 지원 API 모듈
353 lines (264 loc) • 10.1 kB
Markdown
# @mvp-factory/holy-bible-api
한국어 성경 구절 검색 및 슬래시 명령어 지원 API 모듈
## ✨ 주요 기능
- 📖 **성경 66권 완벽 지원**: 구약 39권, 신약 27권 전체 지원
- 🔍 **성경 구절 검색**: 단일 구절 및 범위 구절 검색
- ⚡ **슬래시 명령어**: `/갈2:20`, `/요3:16-17` 형식 자동 변환
- 📚 **120+ 핵심 구절 내장**: 주요 성경 구절 즉시 사용 가능
- 🎯 **정확한 약어 매핑**: 한국 교회 표준 약어 지원
- 💾 **캐싱 시스템**: 빠른 응답을 위한 구절 캐싱
- 🌐 **API 연동 지원**: 외부 성경 API 연동 가능
- 🚀 **TypeScript 지원**: 완전한 타입 정의
## 🚀 빠른 시작
### 설치
```bash
npm install @mvp-factory/holy-bible-api
```
### 기본 사용법
```typescript
import { createBibleEngine } from '@mvp-factory/holy-bible-api';
// Bible engine 생성
const bible = createBibleEngine();
// 성경 구절 검색
const result = await bible.searchVerses('요한복음 3:16');
if (result.success && result.verses) {
console.log(result.verses[0].text);
// "하나님이 세상을 이처럼 사랑하사..."
}
// 범위 구절 검색
const rangeResult = await bible.searchVerses('시편 23:1-3');
if (rangeResult.success && rangeResult.verses) {
rangeResult.verses.forEach(verse => {
console.log(`${verse.verse}. ${verse.text}`);
});
}
```
## 📖 슬래시 명령어
### 자동 변환
텍스트 내의 슬래시 명령어를 자동으로 성경 구절로 변환합니다:
```typescript
import { BibleVerseEngine } from '@mvp-factory/holy-bible-api';
const bible = BibleVerseEngine.getInstance();
const text = "오늘의 말씀은 /갈2:20 입니다. 또한 /요3:16도 기억하세요.";
const processed = await bible.processSlashCommands(text);
console.log(processed);
// "오늘의 말씀은 내가 그리스도와 함께 십자가에 못 박혔나니...
// - 갈라디아서 2:20 입니다. 또한 하나님이 세상을 이처럼 사랑하사...
// - 요한복음 3:16도 기억하세요."
```
### 슬래시 명령어 감지
```typescript
const commands = bible.detectSlashCommands("말씀 /롬8:28 과 /빌4:13 참조");
console.log(commands);
// [
// { match: '/롬8:28', reference: '롬8:28', startIndex: 3, endIndex: 10 },
// { match: '/빌4:13', reference: '빌4:13', startIndex: 14, endIndex: 21 }
// ]
```
## 🔤 지원하는 성경책 약어
### 구약 (39권)
```
창(창세기), 출(출애굽기), 레(레위기), 민(민수기), 신(신명기)
수(여호수아), 삿(사사기), 룻(룻기), 삼상(사무엘상), 삼하(사무엘하)
왕상(열왕기상), 왕하(열왕기하), 대상(역대상), 대하(역대하)
스(에스라), 느(느헤미야), 에(에스더), 욥(욥기), 시(시편)
잠(잠언), 전(전도서), 아(아가), 사(이사야), 렘(예레미야)
애(예레미야 애가), 겔(에스겔), 단(다니엘), 호(호세아)
욜(요엘), 암(아모스), 옵(오바댜), 욘(요나), 미(미가)
나(나훔), 합(하박국), 습(스바냐), 학(학개), 슥(스가랴), 말(말라기)
```
### 신약 (27권)
```
마(마태복음), 막(마가복음), 눅(누가복음), 요(요한복음)
행(사도행전), 롬(로마서), 고전(고린도전서), 고후(고린도후서)
갈(갈라디아서), 엡(에베소서), 빌(빌립보서), 골(골로새서)
살전(데살로니가전서), 살후(데살로니가후서)
딤전(디모데전서), 딤후(디모데후서), 딛(디도서), 몬(빌레몬서)
히(히브리서), 약(야고보서), 벧전(베드로전서), 벧후(베드로후서)
요일(요한일서), 요이(요한이서), 요삼(요한삼서), 유(유다서), 계(요한계시록)
```
## 🛠️ 고급 사용법
### API 엔드포인트 설정
외부 성경 API를 사용하는 경우:
```typescript
const bible = createBibleEngine('https://api.mybible.com/verse');
// 또는
bible.setApiEndpoint('https://api.mybible.com/verse');
```
### 전체 성경 데이터베이스 설정
서버 사이드에서 전체 성경 데이터를 로드하는 경우:
```typescript
import { BibleVerseEngine } from '@mvp-factory/holy-bible-api';
const bible = BibleVerseEngine.getInstance();
const fullDatabase = await loadBibleDatabase(); // 31,000+ 구절
bible.setFullVerseDatabase(fullDatabase);
```
### 검색 옵션
```typescript
const options = {
includeHeadings: true, // 소제목 포함 (기본: true)
maxVerses: 10, // 최대 구절 수 (기본: 20)
cacheEnabled: true // 캐싱 사용 (기본: true)
};
const result = await bible.searchVerses('시편 119:1-10', options);
```
### 성경책 정보 조회
```typescript
import { getBibleBook, getBooksByTestament } from '@mvp-factory/holy-bible-api';
// 특정 책 정보
const book = getBibleBook('롬');
console.log(book);
// { name: '로마서', abbr: '롬', chapters: 16, testament: 'new' }
// 구약/신약별 책 목록
const oldTestament = getBooksByTestament('old');
const newTestament = getBooksByTestament('new');
```
### 주제별 구절
```typescript
import { BIBLE_THEMES, SEASONAL_VERSES } from '@mvp-factory/holy-bible-api';
// 책별 주제
console.log(BIBLE_THEMES['시편']);
// ['찬양', '기도', '고백', '감사']
// 절기별 추천 구절
console.log(SEASONAL_VERSES['성탄절']);
// ['누가복음 2:11', '마태복음 1:23', '요한복음 1:14']
```
## 📚 유틸리티 함수
### 텍스트 파싱
```typescript
import {
parseBibleText,
extractBibleReferences,
containsBibleVerse
} from '@mvp-factory/holy-bible-api';
// 소제목 분리
const parsed = parseBibleText('[사랑의 하나님] 하나님은 사랑이시라');
console.log(parsed.heading); // '사랑의 하나님'
console.log(parsed.text); // '하나님은 사랑이시라'
// 성경 구절 추출
const refs = extractBibleReferences('오늘 말씀은 요 3:16과 롬 8:28입니다');
console.log(refs); // ['요 3:16', '롬 8:28']
// 성경 구절 포함 확인
const hasVerse = containsBibleVerse('갈라디아서 2장 20절을 보세요');
console.log(hasVerse); // true
```
### 구절 검증
```typescript
// 유효한 구절 형식 확인
const isValid = bible.isValidReference('요한복음 3:16');
console.log(isValid); // true
// 지원하는 책 목록
const books = bible.getAvailableBooks();
console.log(books); // ['창', '출', '레', ...]
```
### 캐시 관리
```typescript
// 캐시 크기 확인
console.log(bible.getCacheSize()); // 120 (기본 핵심 구절)
// 캐시 초기화
bible.clearCache();
```
## 🔧 TypeScript 타입
```typescript
import type {
BibleVerse,
BibleApiResponse,
ParsedBibleReference
} from '@mvp-factory/holy-bible-api';
// 성경 구절 타입
interface BibleVerse {
reference: string; // "요한복음 3:16"
book_full: string; // "요한복음"
chapter: number; // 3
verse: number; // 16
text: string; // "하나님이 세상을..."
heading?: string; // 소제목 (선택)
}
// API 응답 타입
interface BibleApiResponse {
success: boolean;
verses?: BibleVerse[];
error?: string;
query?: string;
}
```
## 📋 예제 코드
### 성경 읽기 앱 통합
```typescript
import { createBibleEngine } from '@mvp-factory/holy-bible-api';
class BibleReader {
private bible = createBibleEngine();
async displayDailyVerse() {
const today = new Date().toLocaleDateString('ko-KR');
const verse = await this.bible.searchVerses('요한복음 3:16');
if (verse.success && verse.verses) {
console.log(`[${today}의 말씀]`);
console.log(this.bible.formatVerse(verse.verses[0]));
}
}
async processUserInput(text: string) {
// 슬래시 명령어 자동 변환
return await this.bible.processSlashCommands(text);
}
}
```
### 성경 검색 기능
```typescript
async function searchBible(query: string) {
const bible = createBibleEngine();
// 먼저 정확한 구절 검색
let result = await bible.searchVerses(query);
if (!result.success) {
// 실패 시 비슷한 구절 제안
console.log('검색 실패:', result.error);
console.log('제안:', result.suggestions);
} else {
// 검색 결과 표시
result.verses?.forEach(verse => {
console.log(`${verse.reference}: ${verse.text}`);
});
}
}
```
## 🐛 문제 해결
### 구절을 찾을 수 없는 경우
```typescript
// 1. 약어가 올바른지 확인
import { BIBLE_ABBREVIATIONS } from '@mvp-factory/holy-bible-api';
console.log(BIBLE_ABBREVIATIONS); // 지원 약어 목록
// 2. 참조 형식 확인
// 올바른 형식: "책명 장:절" 또는 "책명 장:절-절"
// 예: "요 3:16", "시 23:1-6"
// 3. 정규화 테스트
import { normalizeBibleReference } from '@mvp-factory/holy-bible-api';
console.log(normalizeBibleReference('롬1:1')); // "로마서 1:1"
```
### 성능 최적화
```typescript
// 1. 캐싱 활용
const options = { cacheEnabled: true };
// 2. 범위 제한
const options = { maxVerses: 10 }; // 큰 범위 검색 시 제한
// 3. 자주 사용하는 구절은 미리 로드
const commonVerses = ['요 3:16', '시 23:1', '롬 8:28'];
for (const ref of commonVerses) {
await bible.searchVerses(ref);
}
```
## 📦 내장 데이터
- **120+ 핵심 구절**: 자주 사용되는 주요 성경 구절
- **66권 구조 정보**: 각 책의 장 수 및 약어
- **주제별 분류**: 책별 주요 주제 태그
- **절기별 추천**: 성탄절, 부활절 등 절기별 구절
## 🤝 기여하기
1. 이 저장소를 Fork 하세요
2. 새로운 기능 브랜치를 생성하세요 (`git checkout -b feature/AmazingFeature`)
3. 변경 사항을 커밋하세요 (`git commit -m 'Add some AmazingFeature'`)
4. 브랜치에 Push 하세요 (`git push origin feature/AmazingFeature`)
5. Pull Request를 열어주세요
## 📄 라이센스
MIT License
## 🙏 크레딧
이 모듈은 Holy Habit 프로젝트의 성경 API 시스템에서 추출되었습니다.
---
**@mvp-factory/holy-bible-api** - 한국어 성경 구절 API 모듈 📖✨