A4P 성경구절 (a4p-bible-verse)
옵시디언 볼트의 성경 구절 노트를 장절 참조로 검색해서, 작성 중인 노트에 인용 콜아웃 + wikilink 형태로 삽입하는 플러그인입니다.
구절당 1개 노트(요3_16.md)가 책 폴더(01.창세기 …)에 들어 있는 성경 데이터셋을 사용합니다. 각 구절 노트에는 역본별 본문이 > [!quote] 역본명 콜아웃으로 들어 있어야 합니다 (기본 패키지는 새번역·개역개정·쉬운성경·NIV·KJV 5개 — 설정에서 역본을 추가·빼기·순서 변경할 수 있습니다). 구약과 신약 폴더를 각각 지정하므로 데이터셋을 볼트 어디에 두어도 되고, 중간 폴더의 이름·유무도 상관없습니다.
설치 (BRAT)
- 커뮤니티 플러그인에서 BRAT(Obsidian42 - BRAT)를 설치·활성화합니다.
- BRAT 설정 →
Add Beta plugin→ 이 저장소 주소를 입력합니다. - 커뮤니티 플러그인 목록에서 A4P 성경구절을 활성화합니다.
초기 설정
- 설정 → A4P 성경구절 → 구약 성경 폴더 입력칸을 클릭합니다.
- 볼트의 폴더 목록이 나타납니다. 이름 일부를 입력해 검색한 뒤, 구약 성경 노트를 넣어둔 폴더를 선택하세요 (직접 타이핑할 필요 없음).
- 폴더 위치와 이름은 자유입니다. 그 아래의 책 폴더(
01.창세기…)는 자동으로 찾습니다.
- 검증 버튼을 눌러 구약 39권 인식과 샘플 구절 읽기가 통과하는지 확인합니다.
- 신약 성경 폴더도 같은 방식으로 선택하고 검증합니다 (신약 27권 + 샘플).
- (선택) 주석 폴더 경로 — 주석 노트 패키지를 넣어둔 폴더를 선택하고 검증합니다. 성경 폴더와 다른 위치여도 됩니다.
- (선택) 설교 폴더 경로 — 설교 노트가 모여 있는 폴더를 선택하고 검증합니다.
- 역본 목록을 확인하고 기본 역본을 선택합니다 (기본값: 새번역). 노트에 다른 역본 콜아웃이 있으면 「노트에서 찾기」로 등록합니다 — 아래 역본 추가·관리 참고.
옵시디언이 느릴 때 확인 순서
성경 구절 노트는 약 3만 개입니다. 이 플러그인은 옵시디언을 켤 때 아무 작업도 하지 않지만(0.11.1부터), 옵시디언 자체가 3만 개 파일을 인덱싱하는 데는 시간이 걸립니다. 느리다고 느껴지면 아래 순서로 원인을 가려 보세요.
- 플러그인을 끄고 옵시디언을 다시 켜 보세요. 그래도 똑같이 느리면 원인은 플러그인이 아니라 볼트의 파일 수입니다. 첫 실행이나 동기화 직후에 특히 오래 걸리고, 두 번째 실행부터 빨라지는 것이 정상입니다.
- 옵시디언 설정의 시작 시간 디버그(Debug startup time) 항목(옵시디언 1.6 이상)에서 플러그인별 로드 시간을 직접 확인할 수 있습니다. A4P 성경구절은 수 ms 수준이어야 합니다.
- 사양이 낮은 PC라면 설정 → A4P 성경구절 → 본문 키워드 검색 사용을 끄세요. 단어 검색만 꺼지고 장절 참조 검색·자동완성·삽입은 그대로 동작합니다.
- iCloud·OneDrive 볼트는 파일 동기화가 끝나기 전까지 느릴 수 있습니다. 설정의 검증 버튼이 보여 주는 절 파일 수로 동기화 완료 여부를 확인하세요.
사용법
검색·삽입 모달
커맨드 팔레트에서 **"성경 구절 검색·삽입"**을 실행합니다 (단축키 지정 권장, 예: Cmd+Shift+B).
검색 입력: 요3:16 / 요3:16-20 / 요한복음 3장 16절 / 시23편 / 사랑 은혜 (키워드)
| 키 | 동작 |
|---|---|
Enter |
체크된 절 전체 삽입 후 닫기 |
↓ / ↑ |
목록 이동 (↓로 목록 진입) |
Space (목록에서) |
절 선택/해제 |
Cmd+Enter |
현재 절 1개만 삽입하고 모달 유지 — 이어서 다른 참조 입력 가능 |
Tab / Shift+Tab |
역본 전환 (설정의 역본 순서대로) |
Cmd+Shift+C |
선택 절 플레인 텍스트 복사 |
Esc |
목록 → 입력창 → 닫기 |
본문 키워드 검색
장절이 기억나지 않을 때 본문에 들어 있는 단어로 검색할 수 있습니다. 참조 형식이 아닌 입력은 자동으로 키워드 검색으로 전환됩니다:
사랑→ "사랑"이 포함된 모든 절 (조사·활용이 붙은 "사랑하셔서"도 찾습니다)사랑 은혜→ 두 단어가 모두 들어 있는 절이 정경 순으로 먼저, 일부만 들어 있는 절이 관련성 순으로 뒤에 표시됩니다- 정확히 일치하는 절이 없으면 비슷한 절을 대신 보여줍니다 (오타 보정)
첫 키워드 검색 시 전체 구절 노트를 읽어 인덱스를 만듭니다. 캐시가 없어 3만 개 파일을 실제로 읽어야 할 때는 먼저 확인창이 뜨며(보통 수십 초, 저사양 PC나 동기화 중인 볼트에서는 수 분), 취소하면 아무 작업도 하지 않습니다. 이후에는 플러그인 폴더의 캐시(verse-index.json) 덕분에 옵시디언을 재시작해도 바로 검색됩니다. 사양이 낮은 PC에서는 설정 → 본문 키워드 검색 사용을 끄면 단어 검색과 인덱스 관련 작업이 전혀 일어나지 않습니다(장절 참조 검색은 그대로). 매칭된 단어는 목록에서 하이라이트되고, 결과 선택·삽입·복사·역본 전환은 참조 검색과 동일하게 동작합니다 (여러 책의 절을 함께 선택하면 책·장별로 블록이 나뉘어 삽입됩니다).
기본은 현재 선택한 역본에서만 찾으며, 설정 → 키워드 검색 대상 역본을 등록된 역본 전체로 바꾸면 다른 역본에서 매칭된 절도 뱃지와 함께 표시됩니다. (키워드 검색은 데스크톱 전용입니다 — 모바일에서는 장절 참조 검색만 지원)
에디터 자동완성
노트에서 ;;요3:16처럼 트리거 + 참조를 입력하면 등록된 역본이 제안되고(기본 역본이 맨 위), 선택하면 바로 콜아웃으로 치환됩니다. (설정에서 끄거나 트리거 변경 가능)
병렬 삽입 — 이중 언어 설교용
해외 사역 등으로 한글·영문 본문이 함께 필요하면 병렬 트리거(기본 ;;;)를 사용합니다:
;;;요3:16-17
설정에 등록해둔 역본 쌍(기본: 새번역 + NIV)이 절마다 교차로 들어갑니다:
> [!quote] [[요3_16|요한복음 3:16-17]] (새번역 · NIV)
> [[요3_16|16]] 하나님이 세상을 이처럼 사랑하셔서 …
> _For God so loved the world that he gave his one and only Son, …_
> [[요3_17|17]] 하나님께서 아들을 세상에 보내신 것은 …
> _For God did not send his Son into the world to condemn the world, …_
역본 쌍과 트리거는 설정 → **병렬 삽입 (이중 역본)**에서 변경할 수 있습니다.
모달에서도 역본 버튼을 Cmd+클릭하면 병렬 역본으로 지정되어(테두리 표시), 삽입·복사에 두 역본이 함께 들어갑니다.
역본 추가·관리
역본은 하드코딩되어 있지 않습니다. 설정 → 역본에 등록된 이름을 구절 노트의 ## 📜 본문 아래 > [!quote] 이름 콜아웃 제목과 맞춰 읽으므로, 노트에 콜아웃만 있으면 어떤 역본이든 쓸 수 있습니다.
## 📜 본문
> [!quote] 새번역
> 하나님이 세상을 이처럼 사랑하셔서 …
> [!quote] ESV
> For God so loved the world, …
- 노트에서 찾기: 표본 노트 3곳(창1_1·시23_1·요3_16)을 읽어 아직 등록하지 않은 콜아웃 제목을 칩(
+ ESV)으로 보여줍니다. 칩을 누르면 바로 등록되므로 이름을 직접 입력할 일이 거의 없습니다. 설정 탭을 열 때도 한 번 자동으로 찾아봅니다. - 역본 추가: 제목을 직접 입력할 때 씁니다. 입력하는 동안 표본 노트에서 그 제목을 찾았는지 바로 알려주며(대소문자·띄어쓰기만 다른 제목이 있으면 바꾸기 제안), 아직 노트에 콜아웃이 없어도 그래도 추가로 미리 등록할 수 있습니다 — 그때까지 모달에는
(ESV 본문 없음)으로 표시됩니다. - 행마다 짧은 이름(모달 버튼 표시, 6자 이내), ↑ ↓(순서 = 모달 버튼·Tab 전환·자동완성 순서), 빼기(목록에서만 빠지며 노트는 바뀌지 않음)가 있습니다. 역본은 최소 1개 있어야 합니다.
- 기본 5역본으로 되돌리기는 직접 추가한 역본과 바꾼 순서·짧은 이름을 지우고 새번역·개역개정·쉬운성경·NIV·KJV로 돌아갑니다 (확인창).
- 기본 역본·병렬 역본 쌍이 뺀 역본을 가리키고 있었으면 자동으로 다른 역본으로 맞추고 상태줄에 알려줍니다.
- 성경 폴더의 검증 버튼도 등록 역본과 노트를 대조해
등록 역본 6개 중 5개 발견 · 없음: ESV처럼 알려줍니다. - 역본 목록을 바꿔도 본문 키워드 인덱스는 다시 만들지 않습니다. 노트에 새 콜아웃을 넣은 뒤(외부 작업)에는 다음 단어 검색 때 인덱스 확인창이 한 번 뜰 수 있습니다.
새 역본의 본문을 노트에 넣는 일은 플러그인 밖의 작업입니다. 플러그인은 구절 노트를 읽기만 하고 수정하지 않습니다. 구절 노트 3만 개에 콜아웃을 추가하려면 노트 패키지 쪽 스크립트로 처리하세요. 저작권이 있는 역본(ESV 등)은 출판사가 허락한 범위 안에서만 저장·배포할 수 있으며, 공개 도메인 영어 역본으로는 BSB(Berean Standard Bible)와 WEB(World English Bible)이 있습니다.
그 외
- 호버 미리보기: 구절 행·칩 위에서
Cmd를 누른 채 호버하면 노트 미리보기가 뜹니다 (hover-editor 설치 시 연동). - 각주 표기 정리(설정, 기본 꺼짐): 본문의 소제목(
<다윗의 노래>)과 각주 마커(a),(a. …))를 삽입·복사 시 제거합니다.
관련구절·평행본문 탐색
모달에서 구절을 검색하면 목록 아래에 그 구절 노트에 정리된 관련구절·평행본문이 칩으로 나타납니다. 칩을 클릭하면 해당 구절로 검색이 전환되어, 본문에서 연결 본문으로 넓혀가며 설교를 준비할 수 있습니다.
인라인 미리보기
관련구절·주석·인용한 설교 칩을 클릭하면 모달을 떠나지 않고 우측 패널에 내용이 열립니다. 미리보기 안의 위키링크를 클릭하면 계속 미리보기로 이어서 탐색할 수 있고, 실제 이동이 필요할 때만 열기 버튼을 누릅니다 (새 탭). 구절 미리보기에는 검색 버튼이 있어 그 구절로 검색을 전환할 수 있습니다. Esc로 미리보기만 닫힙니다.
주석 바로가기
설정한 주석 폴더에 장 통합주석 노트(책이름 N장 통합주석.md)가 있으면, 검색한 절이 속한 단락(pericope) 헤딩으로 바로 가는 주석 칩이 모달에 표시됩니다. 주석 폴더는 성경 폴더와 다른 위치여도 되고, 내부 폴더 구조도 자유입니다 (파일명으로 인식). 예: 요3:16 검색 → 주석: 3:14-17 - 들려야 할 인자와 하나님의 사랑 → 클릭하면 해당 위치가 새 탭으로 열립니다.
인용한 설교 표시
검색한 구절을 인용(wikilink)한 설교 노트가 모달 하단에 표시됩니다. "이 본문으로 설교한 적이 있었나?"를 바로 확인할 수 있습니다. 찾는 범위는 설정 → 설교 폴더 경로로 지정합니다 (비우면 성경·주석 폴더를 제외한 전체 볼트).
찾은 설교는 빠짐없이 최신순 목록으로 나옵니다. 한 줄에 한 편씩 날짜 · 부서 · 제목 · 설교 본문이 열을 맞춰 표시되고, 맨 위에 총 편수와 부서별 편수(예: 인용한 설교 17편 · 청소년부 13 · 대예배 4)가 나옵니다.
- 날짜·본문은 파일명에서 읽습니다. 예:
260125_청_사도신경 강해10_죽으시고_고후8_9→2026.01.25 · 사도신경 강해10 · 죽으시고 · 고후 8:9. 파일명에 날짜가 없으면 노트 속성date(또는설교일)를 쓰고, 둘 다 없으면 목록 맨 뒤에 놓입니다. - 부서는 이 순서로 정합니다. 부서마다 색이 정해져 있습니다.
- 설교 폴더를 지정했다면 그 안의 분류 폴더 이름 (
310. 청소년부→ 청소년부, 앞 번호는 뗌). 연도 폴더(2026)는 건너뛰므로청소년부/2026/…도2026/청소년부/…도 청소년부입니다. - 분류 폴더가 없으면 파일명 날짜 바로 뒤의 부서 표시 — 한 글자 약자(
260125_청_…→ 청) 또는어린이부·주일예배처럼 '~부'·'~예배'로 끝나는 말(190210_어린이부_…→ 어린이부). - 둘 다 없으면 빈칸입니다. 오류 없이 그 칸만 비고, 목록의 어느 설교에도 부서가 없으면 부서 칸 자체가 사라집니다. 날짜·본문도 마찬가지로 읽지 못하면 비워 둡니다.
- 설교 폴더를 지정했다면 그 안의 분류 폴더 이름 (
- 10편이 넘으면 처음 10편 뒤에 더보기 버튼이 생기고, 접기로 다시 줄입니다. 한 번 펼치면 모달을 닫을 때까지 다른 구절을 검색해도 펼친 상태가 유지됩니다.
- 줄을 클릭하면 우측 미리보기에서 그 설교의 인용 위치를 바로 보여 주고, 미리보기 중인 설교는 목록에 표시됩니다.
설교 노트 정리 방법 (권장)
목록이 날짜·부서·본문까지 깔끔하게 나오게 하려면:
200. 설교/ ← 설정 → 설교 폴더 경로로 지정
├── 210. 청소년부/ ← 폴더 이름이 부서 배지가 됩니다 (앞 번호는 표시 안 됨)
│ └── 2026/ ← 연도 폴더는 있어도 되고 없어도 됩니다
│ └── 260125_청_사도신경 강해_고후8_9.md
├── 220. 어린이부/
└── 230. 주일예배/
- 파일명:
날짜_부서_제목_본문— 날짜는260125또는2026-01-25, 본문은롬8_28(절) ·롬8_28-30(범위) ·고전15(장). 부서 칸은 분류 폴더를 쓰면 생략해도 됩니다. - 파일명에 날짜를 넣기 어려우면 노트 속성에
date: 2026-01-25를 적습니다. - 설교 안에서 구절은 링크로 인용해야 목록에 잡힙니다 (
[[롬8_28]]— 이 플러그인으로 삽입하면 자동으로 링크가 됩니다). - 성경 구절 노트를 복사해 다른 폴더에 두지 마세요. 같은 이름의 사본이 있으면 설교의 링크가 사본으로 연결되어 그 설교가 목록에서 빠질 수 있습니다.
클립보드 복사 (주보·PPT용)
모달의 복사 버튼(또는 Cmd+Shift+C)은 선택된 절을 콜아웃·wikilink 없는 플레인 텍스트로 복사합니다:
요한복음 3:16-18 (새번역)
16 하나님이 세상을 이처럼 사랑하셔서 …
17 하나님께서 아들을 세상에 보내신 것은 …
삽입 형식
단일 절:
> [!quote] [[요3_16|요한복음 3:16]] (새번역)
> 하나님이 세상을 이처럼 사랑하셔서 독생자를 주셨으니, …
범위 (절마다 구절 노트로 wikilink가 걸려 백링크·그래프 연결이 유지됩니다):
> [!quote] [[요3_16|요한복음 3:16-18]] (새번역)
> [[요3_16|16]] 하나님이 세상을 이처럼 사랑하셔서 …
> [[요3_17|17]] 하나님께서 아들을 세상에 보내신 것은 …
> [[요3_18|18]] 아들을 믿는 사람은 심판을 받지 않는다 …
설정 → 삽입 형식을 일반 텍스트로 바꾸면 콜아웃 없이 본문만 들어갑니다. wikilink 구조는 그대로 유지되어 백링크·인용한 설교 기능이 계속 작동합니다:
[[요3_16|요한복음 3:16-18]] (새번역)
[[요3_16|16]] 하나님이 세상을 이처럼 사랑하셔서 …
[[요3_17|17]] 하나님께서 아들을 세상에 보내신 것은 …
[[요3_18|18]] 아들을 믿는 사람은 심판을 받지 않는다 …
설정 → 범위 삽입 스타일을 한 문단 이어붙임으로 바꾸면 범위 삽입 시 절들이 줄바꿈 없이 한 문단으로 이어 붙습니다 (콜아웃·일반 텍스트 모두 적용):
[[요3_16|요한복음 3:16-18]] (새번역)
[[요3_16|16]] 하나님이 세상을 이처럼 사랑하셔서 … [[요3_17|17]] 하나님께서 아들을 세상에 보내신 것은 … [[요3_18|18]] 아들을 믿는 사람은 심판을 받지 않는다 …
지원하는 참조 문법
| 입력 | 결과 |
|---|---|
요3:16, 요3_16, 요3장16절 |
단일 절 |
요한복음 3장 16절 |
단일 절 (정식 책 이름) |
요3:16-20, 요3:16~20 |
절 범위 |
요3, 요3장, 시23편 |
장 전체 |
요3:36-4:2 |
장 경계를 넘는 범위 |
요일4:9 |
요한1서 4:9 (약자 자동 구분) |
사랑 은혜 (참조 형식이 아닌 입력) |
본문 키워드 검색 |
- 없는 절 범위는 자동으로 잘라서 안내합니다 (예:
요3:35-40→ 3:35-36).
개발
npm install
npm run dev # watch 빌드
npm run build # 타입체크 + 프로덕션 빌드
npm test # vitest (파서·포매터 단위 테스트)
