posted by 내.맘.대.로 2026. 1. 20. 13:32

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

EPUBGUIDE.NET의 핵심만 모았다. 전자책 편집자를 위한 필독서!

책표지

클릭 편집 탬플릿 제공,

왕초보를 위한
클릭으로 EPUB 만들기

정가 : 9,900원 할인: 8,910원

책표지

기초부터 전자책 제작 실습까지

Sigil 완벽 가이드

정가: 18,000원 할인: 16,200 원

300x250

https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000012413764

 

솔로몬 왕의 광산 | 헨리 라이더 해거드

eBook 솔로몬 왕의 광산 | 헨리 라이더 해거드의 대표작 '솔로몬 왕의 광산(King Solomon's Mines)'은 현대 모험 소설의 문을 연 기념비적인 작품이자 '잃어버린 세계' 장르를 확립한 고전이다. 이 소설은

ebook-product.kyobobook.co.kr

 

- 잃어버린 세계를 향한 모험, 그 원형(Archetype)을 찾아서 -

중절모를 쓴 고고학자의 기원
채찍을 휘두르며 고대 유적을 누비는 고고학자, 인디아나 존스(Indiana Jones). 1981년 스티븐 스필버그와 조지 루카스가 세상에 내놓은 이 매력적인 영웅은 단순한 영화 캐릭터를 넘어 20세기 대중문화의 아이콘이 되었습니다. 하지만 이 전설적인 캐릭터가 무에서 유로 창조된 것은 아닙니다. 스필버그는 1930~40년대의 B급 모험 활극(Serials)에서 영감을 받았다고 밝혔지만, 그 모험 활극들의 뿌리를 거슬러 올라가면 우리는 빅토리아 시대의 한 소설과 마주하게 됩니다. 바로 1885년 출간된 헨리 라이더 해거드(H. Rider Haggard)의 《솔로몬 왕의 광산(King Solomon's Mines)》입니다.

1. 잃어버린 세계(The Lost World) 장르의 탄생
소설이 발표된 1885년은 제국주의 열강들의 '아프리카 분할(Scramble for Africa)'이 절정에 달했던 시기입니다. 지도상의 공백이 하나둘씩 채워지고 있었지만, 아프리카 내륙은 여전히 서구인들에게 미지의 영역이자 환상의 공간이었습니다. 해거드는 이러한 시대적 배경 위에 고고학적 지식과 전설을 섞어 '잃어버린 세계(Lost World)'라는 서브 장르를 탄생시켰습니다.

소설은 전설 속 솔로몬 왕의 보물을 찾아 미지의 땅 '쿠쿠아나 랜드'로 떠나는 여정을 그립니다. 험준한 산맥을 넘고, 사막을 건너, 외부와 단절된 고대 문명을 마주하는 이 구조는 후대 모험물들의 표준 공식이 되었습니다. 인디아나 존스가 <레이더스>에서 성궤를 찾아 떠나거나 <최후의 성전>에서 성배를 찾아 페트라 유적으로 향하는 여정은, 본질적으로 쿼터메인이 아프리카 오지로 들어가는 구조의 현대적 변주라고 볼 수 있습니다.

2. 앨런 쿼터메인: 인디아나 존스의 아버지
인디아나 존스의 가장 큰 매력은 그가 초능력을 가진 슈퍼히어로가 아닌, 지식과 경험 그리고 약간의 운으로 위기를 헤쳐나가는 인간적인 영웅이라는 점입니다. 이 캐릭터의 원형이 바로 앨런 쿼터메인입니다.

두 캐릭터 사이에는 다음과 같은 놀라운 유사성이 존재합니다.

전문가이자 현장가: 인디아나 존스가 대학 교수이자 현장 고고학자라면, 쿼터메인은 아프리카 최고의 사냥꾼이자 길잡이입니다. 두 사람 모두 책상물림이 아닌, 실전 경험을 통해 생존 기술을 습득했습니다.

외형적 유사성: 영화화된 쿼터메인의 이미지나 소설 속 삽화를 보면, 사파리 복장과 넓은 챙의 모자, 그리고 무기를 든 모습이 인디아나 존스의 시그니처 룩(페도라와 가죽 재킷)과 겹쳐집니다.

두 인물 모두 낭만적인 영웅이라기보다는 냉소적이고 현실적입니다. 쿼터메인은 "나는 영웅이 아니다"라고 스스로를 낮추며 돈을 위해 모험을 시작하지만, 결정적인 순간에는 동료의리와 도덕성을 발휘합니다. 이는 "보물은 박물관에 있어야 한다"고 외치면서도 때로는 속물적인 모습을 보이는 인디아나 존스의 입체적인 성격과 맞닿아 있습니다.

3. 클리셰가 된 모험의 문법들
《솔로몬 왕의 광산》이 확립한 장르적 장치(Tropes)들은 인디아나 존스 시리즈에서 더욱 화려하게 꽃피웠습니다.

고대의 지도와 단서: 소설은 포르투갈 탐험가가 남긴 피 묻은 지도를 해석하며 시작됩니다. 이는 인디아나 존스가 아버지의 수첩이나 고대 유물을 통해 위치를 추적하는 도입부와 완벽하게 일치합니다.

쿼터메인 일행을 위협하는 마녀 '가굴(Gagool)'과 동굴 속에 설치된 거대한 돌문 함정은 모험물의 백미입니다. <인디아나 존스> 시리즈의 굴러오는 거대한 바위, 독침, 그리고 주술적인 힘을 가진 악당들은 해거드가 만들어낸 긴장감 조성 방식의 직계 후손들입니다.

두 작품 모두 서구 사회와는 전혀 다른 문명(쿠쿠아나 랜드/판코트 궁전 등)을 배경으로 합니다. 이는 독자(관객)에게 경이로움을 줌과 동시에, 서구 문명이 해결해야 할 과제로서의 '야만'을 설정하는 이중적인 태도를 보입니다.

4. 제국주의의 그림자와 현대적 재해석
물론 《솔로몬 왕의 광산》을 비판 없이 수용하기는 어렵습니다. 이 작품은 명백히 '백인의 짐(The White Man's Burden)'이라는 제국주의 이데올로기를 바탕에 두고 있습니다. 아프리카 원주민은 계몽의 대상이거나 야만적인 적으로 묘사되며, 백인 남성인 쿼터메인은 그들 위에 군림하는 지배적 위치를 점합니다.

인디아나 존스 시리즈 역시 이러한 '오리엔탈리즘' 비판에서 자유롭지 못했습니다. 그러나 스필버그는 원작의 모험 요소는 계승하되, 주인공을 약탈자가 아닌 **'보존자(고고학자)'**로 설정함으로써 차별화를 꾀했습니다. 쿼터메인이 다이아몬드를 챙겨 부자가 되는 결말을 맞이하는 반면, 인디아나 존스는 대부분의 보물을 잃거나 박물관/정부에 넘기는 결말을 맺습니다. 이는 19세기 제국주의적 탐험이 20세기의 학문적 탐구로 변화했음을 보여주는 흥미로운 지점입니다.

영원히 계속될 모험
《솔로몬 왕의 광산》은 단순한 고전 소설이 아닙니다. 이 작품은 '지도를 들고 미지의 세계로 떠나, 고대의 함정을 뚫고 보물을 찾는다'는 모험물의 불변의 법칙을 세웠습니다. 앨런 쿼터메인이라는 캐릭터가 없었다면, 우리는 중절모를 쓴 인디아나 존스를 만날 수 없었을 것이며, 더 나아가 <툼 레이더>의 라라 크로프트나 <언차티드>의 네이선 드레이크 같은 현대의 게임 캐릭터들도 존재하지 않았을 것입니다.

우리가 여전히 인디아나 존스에 열광하는 이유는, 그 안에 140년 전 헨리 라이더 해거드가 불지폈던 '미지의 세계에 대한 동경'이 살아 숨 쉬고 있기 때문입니다. 기술이 발전하여 더 이상 지도에 공백이 없는 세상이 되었음에도, 《솔로몬 왕의 광산》이 남긴 유산은 인간의 모험심이 존재하는 한 영원히 유효할 것입니다.

300x250
posted by 내.맘.대.로 2026. 1. 13. 09:17

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

EPUBGUIDE.NET의 핵심만 모았다. 전자책 편집자를 위한 필독서!

책표지

클릭 편집 탬플릿 제공,

왕초보를 위한
클릭으로 EPUB 만들기

정가 : 9,900원 할인: 8,910원

책표지

기초부터 전자책 제작 실습까지

Sigil 완벽 가이드

정가: 18,000원 할인: 16,200 원

300x250

주석이 많은 책을 인다지안에서 내려받아 EPUB으로 작업 할 때 생기는 문제가 있습니다.

인디자인의 주석 기능을 이용해 각 장의 번호를 새로 붙여도, 실제 코드 상의 번호는 새로 붙지 않습니다.

1장의 주석 번호가 1~100, 2장의 주석 번호가 다시 1~100으로 시작되어야 하는 책이

인디자인에서 내려받으면 1장 1 ~ 100, 2장 101~200으로 표시됩니다.

그럼 각 장 별로 번호를 다시 붙여야하지요.

찾기/바꾸기의 파이썬 함수 바꾸기 기능을 이용하면 본문 주석 번호를 쉽게 다시 붙일 수 있습니다.

파이썬 함수 바꾸기는 말 그대로 파이썬을 이용해 바꿀 내용을 수정하는 기능입니다.

기존의 찾기/바꾸기와 정규식의 제한을 없애는 아주 강력한 기능이지요.

사용법은 어렵습니다. 당연히 어렵겠지요. 강력한 기능은 원래 어렵습니다.

하지만 이 기능을 제대로 활용 할 수 있다면 전자책 제작 효율을 압도적으로 높일 수 있습니다.

저는 이 주석 번호 1000개 수정을 처음엔 일주일(완전 수작업) 이상 걸렸어요.

그러다 정규식과 saved search를 이용해 1시간 이내로 줄였습니다.

그리고, 파이썬 함수 바꾸기 기능이 추가된 후에는 5분도 걸리지 않습니다.

이 뿐 아닙니다. 30여종의 시리즈 전자책을 편집하는데 가격, ISBN 등 판권면의 일부 정보만 바꾸는 작업을 했습니다.

파일을 열고 엑셀에서 가격을 복사, 판권면에 붙여넣기, 다시 엑셀에서 isbn 복사, 판권면 붙여넣기 작업을 30번 이상 해야하지요.

그리고, 제목을 잘못 보면 다른 책의 정보를 넣기도 합니다. 

이 역시 파이썬 함수 바꾸기를 이용해, 책 열기, 바꾸기, 책 열기, 바꾸기...로 간단히 끝낼 수 있었습니다.

 

주석 번호 바꾸는 기능을 이용해 이 기능을 어떻게 사용하는지 알려드릴게요.

* 이 코드는 [팝업 주석](epubguide.net/135) 형식의 코드만 지원합니다. 사용법을 익힌 후 자신에게 맞는 코드로 수정하세요.

1. 찾기 바꾸기의 f 아이콘을 클릭합니다.

 

2. 파이썬 함수 바꾸기 창에 새 함수를 만들고 아래 코드를 추가하고 [사용]을 눌러 코드를 불러옵니다. 코드는 아래에 있습니다.

코드를 불러오면 바꾸기 창에 함수 이름이 표시됩니다 [\F<미주 번호 수정>] 

 

3. 찾기 창에 찾기 코드 [(<body>)([\s\S]*?)(</body>)]를 입력합니다.

4. 이 코드는 각 파일 별로 주석 코드를 찾아 처음 시작하는 주석 부터 번호를 1로 바꿔줍니다. 그러니 주석 번호가 1로 시작해야 하는 파일 별로 장이 나눠져야합니다.

5. 파이썬 함수와 epub 파일이 준비되었다면 모두 바꾸기를 누릅니다. 그럼 각 장 별로 주석 번호가 1부터 시작하는 오름차 숫자로 교체됩니다.

 

6. 예제용 샘플은 아래 코드를 사용하세요.

찾기 : (<body>)([\s\S]*?)(</body>)

바꾸기(함수) : 
import re

def replace(match, number, file_name, metadata, data):
    # 1. <body> 태그와 그 내용을 분리
    start_tag = match.group(1)  # <body>
    content = match.group(2)    # 본문 내용
    end_tag = match.group(3)    # </body>

    # 2. 카운터 변수 초기화 (리스트로 만들어야 내부 함수에서 수정 가능)
    # 0에서 시작하여 첫 발견 시 1이 됨
    counter = [0]

    # 3. 본문 내용 안에서 주석 태그를 찾아 바꾸는 내부 함수 정의
    def renumber_match(m):
        counter[0] += 1 # 카운트 1 증가
        
        # m.group(1): <a ... > (여는 태그)
        # m.group(2): 기존 숫자 (사용 안 함)
        # m.group(3): </a> (닫는 태그)
        
        # 재조립: 여는태그 + 새 번호 + 닫는태그
        return m.group(1) + str(counter[0]) + m.group(3)

    # 4. 찾을 주석 태그 패턴 (내부 검색용)
    # class="endnote_bodyNo"를 가진 a 태그 검색
    note_pattern = r'(<a [^>]*class="endnote_bodyNo"[^>]*>)(\d+)(</a>)'

    # 5. re.sub을 사용하여 본문 내 모든 주석 번호 일괄 변경
    new_content = re.sub(note_pattern, renumber_match, content)

    # 6. 전체 다시 합쳐서 반환
    return start_tag + new_content + end_tag
300x250
posted by 내.맘.대.로 2026. 1. 9. 12:51

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

EPUBGUIDE.NET의 핵심만 모았다. 전자책 편집자를 위한 필독서!

책표지

클릭 편집 탬플릿 제공,

왕초보를 위한
클릭으로 EPUB 만들기

정가 : 9,900원 할인: 8,910원

책표지

기초부터 전자책 제작 실습까지

Sigil 완벽 가이드

정가: 18,000원 할인: 16,200 원

300x250

이 프로그램은 아래 사이트의 코드를 참조해 윈도우에서 사용 할 수 있도록 수정하고, 기능을 개선했습니다.

StuffItKoreanConvertTable이 아주 큰 도움이 되었습니다.

https://trip2me.tistory.com/62

 

Sit*fiX : OS 9의 StuffIt 에서 압축한 파일을 OS X에서 풀 때 망가진 한글 파일이름 수정 프로그램

이 프로그램은 클래식 맥에서 StuffIt 으로 압축한 파일을 OS X에서 풀었을 때, 한글 파일이름이 제대로 나오지 않는 경우를 고쳐주는 프로그램 입니다. 이와 함께 반대의 기능으로서, OS X에서 한글

trip2me.tistory.com

 

출판 편집 일을 오래 하신 분들이라면 겪어 봤을, 그리고 앞으로도 겪을 문제를 AI를 이용해 해결해 봤습니다.

대단한 것은 아니지만 없어서 아주 불편했던 문제를 해결 할 앱을 하나 만들어 봤어요.

 

맥에서 만든 파일의 파일명 문제 해결 앱!

맥에서 만든 파일은 윈도우에서 자소가 깨지는 문제가 있습니다.

맥 파일 자소 풀림 수정

그리고 구형 맥에서 작업한 Quark 파일 역시 파일명의 글자가 깨집니다.

구형 Quark 파일은 sit라는 압축파일로 보관을 할거예요.

sit 파일은 stuffit expander 같은 별도의 압축 해제 프로그램을 사용해야 하고,

압축을 풀어도 파일명이 깨져서 아주 귀찮습니다.

sit 압축 해제 후 깨진 파일명구

그래서 이 3가지 문제를 모두 해결해 줄 간단한 앱을 만들었습니다.

아니, AI한테 만들어 달라고 부탁하고 3시간 정도 진지하게 대화를 나눴습니다.

 

- 기능 -

1. 맥에서 윈도우로 넘어온 파일의 자소 풀림 수정

2. sit 파일 압축 해제

3. sit 압축 해제시 깨진 파일명 복구

 

파일 다운로드 : https://bit.ly/3Ndqj7d

 

- 사용법 -

1. 앱을 실행합니다.

2. sit 파일이나 자소 풀림, 파일명 깨진 파일이 있는 폴더를 Drag&Drop 합니다.

    - sit 파일은 용량이 클 경우 창이 잠시 응답 대기 상태가 될 수 있습니다. 이럴 때는 참고 기다려주세요.

    - Drag한 폴더명이 자소가 풀려있거나 깨져있을 경우 이 폴더는 수정되지 않습니다.

    - [파일 선택] 혹은 [폴더 선택]으로 선택을 해도 됩니다.

3. [변환 실행]을 누르면 문제가 있는 파일명을 수정합니다. 끝!

 

 

300x250
posted by 내.맘.대.로 2025. 12. 19. 10:19

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

EPUBGUIDE.NET의 핵심만 모았다. 전자책 편집자를 위한 필독서!

책표지

클릭 편집 탬플릿 제공,

왕초보를 위한
클릭으로 EPUB 만들기

정가 : 9,900원 할인: 8,910원

책표지

기초부터 전자책 제작 실습까지

Sigil 완벽 가이드

정가: 18,000원 할인: 16,200 원

300x250

작업 관리는 여러 방식으로 하지만, 가장 손쉽고 익숙한 것은 엑셀(스프레드 시트)을 이용한 정리일 것입니다.

저는 작업 의뢰를 받으면 구글 스프레드에 작업 일정 관리 부터 세금계산서 발행까지 정리를 하고 있어요.

그런데 작업할 도서 목록이 많아지면, 일 단위로 일정을 관리하기 어렵습니다.

그래서 마감일을 관리하기 위해 마감일 기준으로 구글 캘린더에 작업 목록을 정리해 관리를 합니다.

출판사 책제목 제작원가 견적 총액(세금포함) 세금 제작 기한 완료일 정산내역 증빙구분 계산서 발급일자
테스트 출판사 샘플 도서명 100 110 10 2025-12-01 2025-12-15   세금계산서  
테스트 출판사 샘플 도서명 100 110 10 2025-12-04 2025-12-04   세금계산서  
테스트 출판사 샘플 도서명 100 100   2025-12-05 2025-12-05   계산서  
테스트 출판사 샘플 도서명 100 103 3 2025-12-09 2025-12-09   외주  

 

하지만 일이 들어 올 때 마다 작업 일정을 구글 스프레드와 캘린더에 등록하기 귀찮아요.

구글 스프레드에만 등록하면 자동으로 캘린더에 등록되면 얼마나 좋을까?

마침 구글 App Script라는게 있어 AI를 이용해 만들어 봤습니다.

스프레드 시트에 등록한 출판사명 + 도서명을 캘린더 일정 제목으로 하고, 완료일에 일정을 등록하도록 하는 App Script입니다.

복잡한 기능이 아니라 1시간도 되지 않아 앱을 만들었어요.

AI와 대화는 이런걸 만들어줘, 이 기능을 추가해줘, 이렇게 수정해줘 등등 대화 형태로 진행을 했지만, 대화 과정을 모두 보여드릴 필요는 없겠지요?

최종 결과물을 AI 프롬프트로 다시 정리해 보여드립니다.

이 내용에서 필요한 부분만 수정하면 저와 시트 모양이 다르더라도 일정 관리 앱스크립트를 만들 수 있어요.

 

예를 들어, 데이터 시작 셀을 A5열로 잡았는데 내가 작성한 시트는 A10열 부터 시작을 할 수 있을거예요.

저는 출판사와 책 제목을 캘린더 일정 이름으로 표시했지만, 할일 번호와 할일 제목이 될 수 있겠지요.

 

당신은 Google Apps Script(GAS) 전문가입니다.
Google Sheets의 데이터를 읽어 Google Calendar에 “종일 일정”을 생성하는 스크립트를 작성하세요. 아래 요구사항을 모두 만족하는 최종 코드를 하나의 .gs 파일 형태로 제시하고, 필요한 경우 보조 함수도 함께 작성하세요.

1) 실행 환경/전제
스크립트는 “컨테이너 바운드” Google Sheets(스프레드시트에 연결된 Apps Script)에서 실행됩니다.
사용자가 스프레드시트를 열면 커스텀 메뉴가 자동 생성되어야 합니다.
캘린더는 사용자가 지정한 calendarId로 접근합니다(권한 이슈가 있을 수 있으니 예외 처리/로그 포함).

2) UI 메뉴 요구사항
onOpen(e) 트리거로 메뉴를 추가하세요.
메뉴 이름: 일정 추가
메뉴 항목 텍스트: 캘린더에 추가
메뉴 클릭 시 실행 함수: sheetTOcalendar

3) 시트/데이터 소스 요구사항
현재 활성 스프레드시트를 가져오고, 데이터는 “현재 활성 시트(Active Sheet)”에서 읽습니다.
calendarId는 Total 시트의 B1 셀에서 읽습니다.
Total 시트가 없거나 B1이 비어 있으면 사용자에게 알리고 중단하세요(예: SpreadsheetApp.getUi().alert 또는 throw new Error).
데이터 범위(열 의미)는 다음과 같습니다.

A열(인덱스 0): 책 제목(title)
B열(인덱스 1): 출판사(publisher)
F열(인덱스 5): 마감일(deadline)
G열(인덱스 6): 완료 여부(finished) — 현재 로직에서는 기본적으로 사용하지 않지만, 확장 가능하도록 구조화하세요(예: 옵션 플래그로 “완료면 스킵”을 쉽게 추가 가능).

데이터 시작 행은 5행입니다(즉, A5부터).
데이터의 마지막 행은 안정적으로 계산해야 합니다.
단순히 중간 빈 행이 있어도 아래 데이터가 누락되지 않도록 구현하세요.
getLastRow() 기반으로 처리하되, 실제로 A열/필수 컬럼이 모두 비어 있는 행은 건너뛰도록 하세요.

4) 일정 생성 규칙(핵심)
각 행에 대해 아래 조건을 만족할 때만 캘린더에 종일 일정을 생성합니다.
title과 publisher가 비어있지 않음
deadline이 유효한 날짜임(Date 객체 또는 변환 가능한 값)
일정 제목(title)은 다음 규칙으로 만드세요.
"{책제목} {출판사}"
일정은 “종일 일정(All-day event)”로 생성해야 합니다.

중복 방지 로직:
같은 deadline 날짜에, 같은 일정 제목이 이미 존재하면 생성하지 않습니다.
구현은 getEventsForDay(deadline)로 해당 날짜의 이벤트 목록을 가져와 제목이 동일한 이벤트가 하나라도 있으면 스킵합니다.
처리 결과는 실행 로그에 남겨야 합니다.
예: “이미 추가됨”, “추가함”, “deadline이 유효하지 않아 스킵” 등.

5) 날짜 처리/유효성 검사
deadline 셀 값이 다음 형태일 수 있으니 모두 고려하세요.
Date 객체
문자열(예: 2025-12-31, 2025.12.31 등)
스프레드시트 날짜 직렬값(숫자)
유효하지 않으면 해당 행은 스킵하고 로그를 남기세요.
가능한 경우 문자열/숫자는 Date로 변환을 시도하세요.
시간대 이슈(한국 시간) 가능성을 고려하여, 최소한 “날짜만” 기준으로 종일 일정이 생성되도록 주의하세요.

6) 성능/안전성 요구사항
루프 변수는 반드시 let 또는 const로 선언하세요(전역 변수 금지).
가능한 한 Spreadsheet 호출을 최소화하세요(한 번에 범위를 읽고 메모리에서 처리).
Calendar 호출도 불필요하게 반복하지 않도록 구조를 깔끔하게 작성하세요.
캘린더 ID가 잘못되었거나 캘린더 객체가 null이면 중단하고 사용자/로그에 안내하세요.

7) 사용성(옵션이지만 포함 권장)
처리 완료 후 “몇 건 처리/몇 건 추가/몇 건 스킵” 같은 요약 정보를 alert 또는 로그로 남기세요.
중복 판단 기준을 추후 확장 가능하도록 분리해 주세요(예: isDuplicateEvent_(cal, date, title) 같은 헬퍼 함수).

8) 최종 산출물 형식
최종 답변에는 다음을 포함하세요.
완성된 Apps Script 코드(전체)
코드 사용 방법(어떤 시트를 어떻게 준비하고, 어떤 메뉴를 눌러 실행하는지) 간단히 3~5줄
불필요한 설명은 줄이고, 바로 실행 가능한 수준으로 작성하세요.
300x250