Obsidian에서 성경 읽고 활용하기

 

Table of Contents

  • 2021년 3월 7일 최초 발행

개요

유튜브 동영상 Bible Study: How Joschua uses the LYT frameworks (Obsidian) - YouTube 그리고 여기에 붙어 있는 포럼 링크 Bible Study in Obsidian Kit (including the Bible in Markdown) - Share & showcase - Obsidian Forum를 보고, 성경 읽기와 묵상 정리도 [[obsidian]] 안에서 할 수 있다는 생각을 하게 되었다.

핵심은 성경 본문을 마크다운 파일로 만들어서 별도의 보관함으로 만들어두고, 그 안에서 다양한 연결을 통해 새로운 지식을 찾아나간다는 것이다. 성경 본문을 담은 파일은 미리 만들어둔 데이터베이스와 마찬가지고 그걸 활용해서 다양한 연결을 만드는 것이니 개인 지식 관리 시스템과는 좀 다른 출발이지만, 새로운 연결을 찾아나간다는 후반 작업은 별다를 바가 없다.

Bible Study in Obsidian Kit

본문 파일 얻기

영문 성경 본문은 굉장히 다양한 버전으로 사용 가능하고, 그 중에서 무료인 것이 굉장히 많다. 많은 경우 텍스트 파일은 물론이고 웹에서 API로도 제공하기 때문에 다양한 방식으로 본문 파일을 얻어낼 수 있다.

흔하게 사용되는 영어 번역은 KJV, NIV, WEB, RSV, ASV, The Message, NLT 같은 것들이 있다. 이 중에는 저작권이 만료된 것도 있지만 저작권이 남아 있어서 유료로 구매를 해야만 사용할 수 있는 경우도 있다. 보통의 한국 사람이라면 KJV과 NIV, The Message 정도면 크게 부족함은 없을 것이다. 텍스트 파일을 구하자만 구할 수 있겠지만 편집이 어떻게 되었는지 모르는 텍스트 파일을 찾는 것보다는, 앞에서 언급한 바와 같이 웹 API를 이용하면 항상 정확한 본문을 얻을 수 있다.

본문 파일을 마크다운으로

나의 경우는 joebuhlig/BibleGateway-to-Obsidian에 나와 있는 방법을 그대로 사용하였는데, 이렇게 하면 BibleGateway.com에서 제공하는 모든 성경 본문 텍스트를 동일한 형식의 마크다운 파일로 전환할 수 있다.

우선 시스템에 ruby 언어가 설치되어 있어야 하고 맥이나 리눅스처럼 bash 환경을 쓸 수 있어야 한다. 윈도우10에서도 WSL2를 사용하면 이런 환경을 구축할 수 있다. (이 말이 무슨 말인지 잘 이해하지 못한다면 굳이 고민할 필요 없이 그냥 성경 앱으로 읽으면 된다.)

이제 jgclark/BibleGateway-to-Markdown에서 bg2md.rb 파일을 얻는다. 이 스크립트가 BibleGateway.com의 API를 이용해서 성경 본문 파일을 마크다운 파일로 저장하는 역할을 한다. 이 파일은 아래 설명할 bg2obs.sh 파일이 있는 디렉토리 안에 BibleGateway-to-Obsidian 폴더를 만들고 그 안에 넣어두면 된다.

그리고 joebuhlig/BibleGateway-to-Obsidian에 있는 bg2obs.sh 파일을 얻어서 bash로 실행하면 된다. 얻고자 하는 번역본은 bg2obs.sh 파일 내에 직접 넣도록 되어 있고 20번째 줄을 보면 기본은 ESV로 되어 있다. 이걸 원하는 역본 이름으로 바꾸어 주면 된다. 그 아래에 있는 blodwords와 headers 옵션은 필요하다면 false로 되어 있는 것을 true로 바꾸면 된다. (2021년 3월 7일현재 소스의 31번째 줄에 x 문자가 들어 있는데, 이거 지워주어야 한다)

~ $ bash bg2obs.sh

이제 시간이 꽤 지난 후에 (내 경우에 KJV을 받는데 약 40분 정도 소요가 되었다) 파일 다운로드가 완료되면 역본 이름으로 된 디렉토리(예를 들어 KJV/)가 생기고 그 안에 파일들이 들어 있게 된다.

마크다운 파일 편집

이제 모든 다운로드 받은 파일을 편집해서 보기 좋게 만들어 준다. TextMate, Sublime Text, Atom 같은 텍스트 에디터를 이용해서 모든 *.md 파일 내의 특정 내용을 정규치환으로 변경해 준다. (만약 sed, awk 같은 도구를 잘 사용하거나 스크립트 언어를 사용해서 직접 하는게 편하면 그렇게 하면 된다.) 바꿀 것은 다음의 두 가지이다.

  • 첫번째 바꾸기
    • 찾기: #.*(#####\D[1]\D)
    • 바꾸기: #$1
    • 대상: KJV/*.md
  • 두번째 바꾸기
    • 찾기: ######\s([0-9]\s|[0-9][0-9]\s|[0-9][0-9][0-9]\s)
    • 바꾸기: \n\n###### v$1\n
    • 대상: KJV/*.md

이렇게 하면 해당 번역본 성경의 파일을 모두 만들었다.

한글 성경 본문을 활용하기

당연히 영어 성경이 아니라 한글 성경을 사용하고 싶다. 예를 들면 책 이름도 한글 이름이면 좋겠고, 파일 안에 들어 있는 ###### v1###### 1절로 바꾸고 싶다.

사실 한국어 성경은 한글개역 정도를 제외하고는 거의 모두 저작권의 보호를 받고 있다. (성경 저작권에 대한 오래전의 내 생각은 성경 번역본 저작권에 대한 생각 페이지에서 읽을 수 있다. 대한성서공회 공식 입장은 대한성서공회 저작권 안내 페이지를 참조하면 된다) 공동번역성서의 경우 2027년에 저작권이 소멸되니 2021년 현재 기준으로 아직 6년 정도 남은 셈이고, 나머지 번역본들, 예컨대 표준새번역, 개역개정판, 새번역, 공동번역성서 개정판 등은 아직 20년 이상 남아 있다. 공식적으로 허가를 받고 사용하려면 대한성서공회 허가조건 및 사용료 페이지를 참고하면 된다. 옵시디언에 본문을 넣어서 사용하는 것은 '컴퓨터 성경' 항목에 해당될 것으로 보이고, 이 경우 번역본당 1년에 1백만원을 지불해야 한다. 상업용 사용 여부와 상관 없이 성경 본문을 사용하려면 무조건 허가를 받아야 하는 것으로 되어 있으니 참고하는 것이 좋다. 대한성서공회 이외에도 한글 번역본을 출간한 곳들이 있지만, 대부분 상황은 비슷히라라 생각한다.

성경 본문 파일

위에 언급한 것과 같이 한글개역을 제외한 거의 모든 한국어 번역본은 저작권 때문에 사용 허가를 받아야만 사용할 수 있다. 만약 인터넷 검색을 통해 텍스트 파일을 다운로드 받아서 사용한다면 기본적으로 저작권 침해임을 인지해야 하고, 이걸 가공한 후에 배포하는 것도 절대로 안된다. 여기서는 한글개역본의 텍스트 파일을 저작권 침해 없이 사용하는 경우만을 설명할 것이다.

(필요한 경우) 인코딩 변경

어떻게 입수했건 간에, 성경 본문의 텍스트 인코딩은 UTF8으로 잘 인코딩되어 있으면 좋지만 아마도 CP949로 되어 있을 가능성이 높다. 인코딩을 확인하려면

iconv -f cp949 > input.txt
iconv -f utf8 > input.txt

인코딩을 변환하려면

iconv -f cp949 -t utf8 < input.txt > output.txt

디렉토리 안에 있는 모든 txt 파일의 인코딩을 변경하려면

Dir["*.txt*"].each {|f| system("iconv -f cp949 -t utf8 < #{f} > #{f[0..-3]+'md'})"}

이제 파일들이 모두 UTF8로 잘 바뀐 것을 확인할 수 있다.

컨버팅 스크립트

인풋 파일의 형식은 아래와 같이 되어 있다.

창1:1 태초에 하나님이 천지를 창조하시니라
창1:2 땅이 혼돈하고 공허하며 흑암이 깊음 위에 있고 하나님의 영은 수면 위에 운행하시니라
...

위의 포럼 글에서 사용한 포맷은 아래와 같다.

# Genesis 1

[[Genesis]] | [[Gen-02|Genesis 02 →]]
***

###### v1
In the beginning, God created the heavens and the earth.

###### v2
The earth was formless and empty. Darkness was on the surface of the deep and God's Spirit was hovering over the surface of the waters.
...

h1으로 책 이름과 장 수가 나오고, 아래에는 breadcrumb이 있으며, 각 절은 h6로 절 수를 쓰고 아랫줄에 본문을 넣는 방식이다. 이렇게 하면 링크를 할 때 [[gen-01#v1]] 같은 방식으로 할 수 있는 것이다.

나는 이걸 그대로 한국어로만 바꿔서 같은 포맷으로 만들기로 했다. 지저분하지만 어쨌든 잘 작동하는 것으로 확인된 코드는 다음과 같다.

# 파일 이름을 만들기 위한 축약 이름. 창세기가 1번이 되도록 맨 앞에 ""를 넣었다
Short_names = ["", "창", "출", "레", "민", "신",
"수", "삿", "룻", "삼상", "삼하", "왕상", "왕하",
"대상", "대하", "스", "느", "에", "욥", "시",
"잠", "전", "아", "사", "렘", "애", "겔", "단",
"호", "욜", "암", "옵", "욘", "미", "나", "합",
"습", "학", "슥", "말",
"마", "막", "눅", "요", "행", "롬", "고전", "고후",
"갈", "엡", "빌", "골", "살전", "살후", "딤전", "딤후",
"딛", "몬", "히", "약", "벧전", "벧후", "요일", "요이",
"요삼", "유", "계"]

# 인풋 파일 각 줄의 앞 부분이 창1:1 과 같이 되어 있기 때문에
# 창, 1, 1, 그리고 본문 부분 이렇게 정규치환을 이용해 뽑아낸다.
# 창1:1-2 와 같은 식으로 입력된 것들이 있었는데, 그냥 실행하면서 찾아내서 수동으로 고쳤다.
def get_line(t)
    if /.(\d+):(\d+)\s(.+)/.match(t)
        return /.(\d+):(\d+)\s(.+)/.match(t)[1..-1]
    else
        # puts t # 이다인지 확인하고 고친다.
        exit
    end
end

# 다른 모든 책은 장수가 100을 넘지 않으므로 01, 02 등으로 표시하지만 시편은 150편이므로
# 최대 장수가 100 이상이면 001, 002 등으로 표시하게 했다.
def chapter_to_s(i)
    case 
    when i &gt; 99
        "%03d" % i
    else 
        "%02d" % i
    end
end

# 여기서 파일 쓰는걸 다 한다.
def write_file(n_of_chapters, book, book_index, s_name, lines)
    if n_of_chapters == 1 # 한 장으로 구성된 성경은 breadcrumb이 단순하다.
        chapter = 1
        breadcrumb = "[[#{book}]]"
        # 파일의 헤더. Array로 만들어서 출력하므로 한 항목이 한 줄이 된다.
        c = ["# #{book} #{chapter.to_s}", breadcrumb, "***", "", "", ""]
        lines.each do |line|
            c.push("###### #{line[1]}절")
            c.push("#{line[2]}")
            c.push("")
        end
        f_name = book_index + "-" + book + "/" + s_name + "-" + chapter_to_s(chapter) + ".md"
        File.open(f_name, "w") do |f|
            c.each {|e| f.puts(e)}
        end
    else
        (1..n_of_chapters).each do |chapter|
            n = s_name + "-" + chapter_to_s(chapter + 1) + "|" + book + " " + chapter_to_s(chapter + 1).to_i.to_s + "장"
            p = s_name + "-" + chapter_to_s(chapter - 1) + "|" + book + " " + chapter_to_s(chapter - 1).to_i.to_s + "장"
            breadcrumb = case chapter # 1장, 마지막 장만 다르다
                when 1
                    "[[#{book}]] | [[#{n}]]"
                when n_of_chapters
                    "[[#{p}]] | [[#{book}]]"
                else
                    "[[#{p}]] | [[#{book}]] | [[#{n}]]"
            end
            c = ["# #{book} #{chapter.to_s}장", breadcrumb, "***", "", "", ""]
            lines.each do |line|
                if line[0].to_i == chapter
                    c.push("###### #{line[1]}절")
                    c.push("#{line[2]}")
                    c.push("")
                end
            end
            f_name = book_index + "-" + book + "/" + s_name + "-" + chapter_to_s(chapter) + ".md"
            File.open(f_name, "w") do |f|
                c.each {|e| f.puts(e)}
            end
        end
    end
end


unless ARGV.size == 0
    input_file = File.basename(ARGV[0])
    book = input_file[4..-4]
    s_name = Short_names[input_file[2..3].to_i]
    book_index = input_file[2..3]
    lines = []
    File.readlines(input_file).each do |line|
        lines << get_line(line)
    end
    n_of_chapters = lines.last[0].to_i

    write_file(n_of_chapters, book, book_index, s_name, lines)
end

이 소스를 쓰려면 해당 폴더에 1-01창세기.md 형식의 이름을 가진 인풋 파일(즉, 한 권이 한 개의 파일에 담겨 있는 형태)이 있어야 하고, 이걸 01-창세기/ 폴더 안에 창-01.md 부터 창-50.md까지 각 장을 한 개의 파일로 만들어 준다. 창-01.md 파일은 이렇게 생겼다.

# 창세기 1장
[[창세기]] | [[창-02|창세기 2장]]
***



###### 1절
태초에 하나님이 천지를 창조하시니라

###### 2절
땅이 혼돈하고 공허하며 흑암이 깊음 위에 있고 하나님의 영은 수면 위에 운행하시니라

이렇게 파일 컨버팅을 마무리하고 아무 문제 없이 잘 만들어진 것을 확인했다. (내가 구한 소스 파일은 구약은 1-01로 시작, 신약은 2-01로 시작하는 방식이었다. 그래서 위의 소스를 그대로 쓰면 안된다. 나는 그냥 신약을 2-40으로 시작하게 만들어서 문제를 해결했다. 디렉토리 이름을 01-창세기부터 66-요한계시록까지 만들었기 때문이다)

다른 부속 파일 만들기

090 성경.md 라는 이름의 파일은 아래와 같이 만들었다.

# 성경

## 한글개역

### 구약

- 모세오경: [[창세기]] [[출애굽기]] [[레위기]] [[민수기]] [[신명기]]
- 역사서: [[여호수아]] [[사사기]] [[룻기]] [[사무엘상]] [[사무엘하]] [[열왕기상]] [[열왕기하]] [[역대상]] [[역대하]] [[에스라]] [[느헤미야]] [[에스더]]
- 시가서: [[욥기]] [[시편]] [[잠언]] [[전도서]] [[아가]]
- 대선지서: [[이사야]] [[예레미야]] [[예레미야애가]] [[에스겔]] [[다니엘]]
- 소선지서: [[호세아]] [[요엘]] [[아모스]] [[오바댜]] [[요나]] [[미가]] [[나훔]] [[하박국]] [[스바냐]] [[학개]] [[스가랴]] [[말라기]]

### 신약

- 복음서: [[마태복음]] [[마가복음]] [[누가복음]] [[요한복음]]
- 역사서: [[사도행전]]
- 바울서신: [[로마서]] [[고린도전서]] [[고린도후서]] [[갈라디아서]] [[에베소서]] [[빌립보서]] [[골로새서]] [[데살로니가전서]] [[데살로니가후서]] [[디모데전서]] [[디모데후서]] [[디도서]] [[빌레몬서]] [[히브리서]]
- 공동서신: [[야고보서]] [[베드로전서]] [[베드로후서]] [[요한일서]] [[요한이서]] [[요한삼서]] [[유다서]] [[요한계시록]]

각 책의 front page를 만들기로 하고 아래와 같은 스크립트를 만들었다.

All = ["", "01-창세기", "02-출애굽기", "03-레위기", "04-민수기", "05-신명기", "06-여호수아", "07-사사기", "08-룻기", "09-사무엘상", "10-사무엘하", "11-열왕기상", "12-열왕기하", "13-역대상", "14-역대하", "15-에스라", "16-느헤미야", "17-에스더", "18-욥기", "19-시편", "20-잠언", "21-전도서", "22-아가", "23-이사야", "24-예레미야", "25-예레미야애가", "26-에스겔", "27-다니엘", "28-호세아", "29-요엘", "30-아모스", "31-오바댜", "32-요나", "33-미가", "34-나훔", "35-하박국", "36-스바냐", "37-학개", "38-스가랴", "39-말라기", "40-마태복음", "41-마가복음", "42-누가복음", "43-요한복음", "44-사도행전", "45-로마서", "46-고린도전서", "47-고린도후서", "48-갈라디아서", "49-에베소서", "50-빌립보서", "51-골로새서", "52-데살로니가전서", "53-데살로니가후서", "54-디모데전서", "55-디모데후서", "56-디도서", "57-빌레몬서", "58-히브리서", "59-야고보서", "60-베드로전서", "61-베드로후서", "62-요한일서", "63-요한이서", "64-요한삼서", "65-유다서", "66-요한계시록"]

# 파일 쓰는 것까지 몽땅 여기에 넣었다. name은 All에서 올 예정이다.
def make_book_front(name)
    book = name.split("-")[1] # 책 이름은 뒤에
    number = name.split("-")[0] # 책 번호는 앞에
    file_name = name + "/" + book + ".md" # 각 디렉토리 안에 창세기.md 처럼 만든다.
    text = ["# #{book}", "&lt;[[090 성경#구약|구약]]&gt; &lt;[[090 성경#신약|신약]]&gt;", "", "---", ""] # 헤더 정보
    text &lt;&lt; make_chapter_list(name) # 장 리스트만 넣으면 끝
    # 이제 파일을 쓰면 된다.
    File.open(file_name, "w") do |f|
        text.each {|e| f.puts(e)}
    end
end

def make_chapter_list(name)
    # 파일 명에 - 문자가 있는것만 골라서, 장 숫자에 따라 정렬을 한 후에 파일 이름만 남긴다. ["창-01", "창-02", ...] 처럼 된다.
    chapters = Dir["#{name}/*-*"].sort_by{|x| x.split(".")[0].split("-")[-1].to_i}.map{|d| d.split(".")[0].split("/")[-1]}
    text = ""
    # 이제 "참-" 부분을 날리고 숫자만 남긴 후에 "장"을 붙이면 링크 완성.
    chapters.each do |chapter|
        shown = chapter.split("-")[-1].to_i.to_s + "장"
        text = text + "[[#{chapter}|#{shown}]] "
    end
    return text
end

# All의 1부터(!) 66권을 다 만든다.
(1..66).each do |book|
    make_book_front(All[book])
end

앞의 스크립트랑 비슷해서 특별히 고민을 할 필요가 없었다. 그냥 파일 안에 필요한 내용 넣고 파일로 쓰면 끝이다.

이 스크립트를 돌리면 각 책의 폴더 안에 책이름.md 파일이 만들어진다. 예를 들어 창세기.md 파일은 다음과 같이 보인다.

# 창세기
&lt;[[090 성경#구약|구약]]&gt; &lt;[[090 성경#신약|신약]]&gt;

---

[[창-01|1장]] [[창-02|2장]] [[창-03|3장]] [[창-04|4장]] [[창-05|5장]] [[창-06|6장]] [[창-07|7장]] [[창-08|8장]] [[창-09|9장]] [[창-10|10장]] [[창-11|11장]] [[창-12|12장]] [[창-13|13장]] [[창-14|14장]] [[창-15|15장]] [[창-16|16장]] [[창-17|17장]] [[창-18|18장]] [[창-19|19장]] [[창-20|20장]] [[창-21|21장]] [[창-22|22장]] [[창-23|23장]] [[창-24|24장]] [[창-25|25장]] [[창-26|26장]] [[창-27|27장]] [[창-28|28장]] [[창-29|29장]] [[창-30|30장]] [[창-31|31장]] [[창-32|32장]] [[창-33|33장]] [[창-34|34장]] [[창-35|35장]] [[창-36|36장]] [[창-37|37장]] [[창-38|38장]] [[창-39|39장]] [[창-40|40장]] [[창-41|41장]] [[창-42|42장]] [[창-43|43장]] [[창-44|44장]] [[창-45|45장]] [[창-46|46장]] [[창-47|47장]] [[창-48|48장]] [[창-49|49장]] [[창-50|50장]] 
나중에 해 보고 싶은 일
  1. 맥체인 성경읽기표(Ben Edgington's Homepage: Robert Murray M'Cheyne Bible Reading Calendar 참조)를 일간노트에 넣는다거나, 성서정과 같은 것을 활용할 수 있으면 좋겠다. 어려운 일은 아니겠지만, 코딩을 할 시간이 없다.
  2. 다른 번역본을 함께 쓸 수 있는 방법이 있으면 좋겠다. 사실 성경을 읽을 때 여러 번역본을 대조해서 읽는 것이 굉장한 도움이 되는데, 가장 lazy한 방법은 번역본마다 그냥 다른 디렉토리에 넣는 것이고, 제대로 한다면 한개의 파일 안에 여러 개의 번역본이 들어있는 형태여야 할 것이다.
활용하는 방법

그냥 노트에 [[창-01]]과 같이 성경의 특정 장을 링크하거나, ![[창-01#1절]] 처럼 절을 링크하면서 미리보기를 넣을 수도 있다. Obsidian의 강력한 backlink 기능 덕분에, 특정 부분에 대한 생각을 이렇게 기록해 놓으면, 해당 부분에 대한 생각들을 따로 모아서 정리하는 것이 매우 쉬워진다. 그리고 시간이 오래 지나면 성경의 어떤 부분들이 서로 자주 연결이 되어 있는지, 그리고 어떤 부분이 언급되지 않고 있는지를 스스로 확인해 볼 수도 있을 것이다. 나는 굳이 신학자나 목사가 아니더라도 이런 분석을 통해 자신이 성경을 어떻게 읽고 활용하고 있는지 아는 것은 건강한 신앙생활을 위해서 매우 중요한 일이라고 믿는다. 아마도 성서조선을 만들었던 김교신이 지금 시대에 살아있다면 이런 방식의 성경 활용을 기뻐하고 적극 추천하지 않았을까 하는 생각을 해 본다.