'생활코딩/AI를 이용한 코딩'에 해당되는 글 1건

  1. 2024.02.19 AI와 함께 Appscript 만들기
posted by 내.맘.대.로 2024. 2. 19. 08:52

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

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

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

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

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

1월부터 3월까지 전자책 제작자는 비수기에요.

그래서 한달에 3주 정도 노는것 같네요.

어제도 일이 없어 그동안 머리로 구상만 하던 것을 만들어 봤습니다.

저처럼 외주 작업을 하며 작업 일정을 관리하는 분들에게 도움이 될 것 같아 전체 과정을 공개합니다.

AI가 없었다면 포기했을 일인데 AI의 도움을 받으니 처음 써 보는 Appscript도 만들 수 있네요.

몇십줄 짜리 간단한 코드를 하루 종일 만들었으니 쉬운 작업은 아닙니다.

처음엔 셀에 있는 날짜와 책제목만 넣으면 되니 코드 몇줄이면 되겠지 했는데,

만들다 보니 추가할 내용들이 계속 생기더라구요.

이 작업을 전부 AI의 도움을 받아 만들어 봤습니다. AI한테 과장 좀 섞어 1000번 쯤 질문을 한 것 같아요.

1. 기본 작업 - 내가 원하는 것을 내가 제대로 이해하기

제가 올린 게시글에 가장 많이 쓴 내용이, [질문을 하려면, 뭘 질문하려는지 이해해야 한다]입니다. 질문자가 원하는걸 모르면 알려주고 싶어도 알려줄 수 없지요.

내가 원하는걸 내가 모르면 AI도 알려줄 수 없습니다.

내가 원하는건, 아래 스프레드 시트를 구글 캘린더 일정에 넣는거예요.

-처음인 이런거라고 생각을 했지요. 조금 지나, 내가 원하는 게 뭔지 모르고 있었구나 하고 깨달았지만...

어째든 첫 단계는 구글 캘린더와 연동할 스프레드 시트를 만드는 것입니다.

제 작업 일정은 이렇게 되어 있습니다.

이제 질문을 던질 AI를 정해야 하는데, 구글 스프레드와 캘린더를 사용하다 보니 구글 Bard를 쓰기로 했습니다.

ChatGPT와 비교를 해 봤는데 Bard가 더 잘 설명해 줬어요.

연동할 시트 만들고, AI를 정했으니 준비는 끝났습니다.

2. AI에게 내가 알고싶어 하는 것 질문하기

첫 번째 질문은 아래와 같습니다.

[구글 docs 스프레드에 있는 내용을 구글 캘린더와 연동하고 싶어.]

이렇게 질문을 던지니 코드를 알려줍니다.

하지만 이 코드를 보고, 내가 질문을 잘못했구나 하고 깨달았어요.

Bard는 이런 상황에서 작동하는 코드를 만들어 주더라고요.

제목: [일정 제목]

시작일: [시작일]

종료일: [종료일]

시간: [시간]

설명: [설명]

물론, 스프레드와 캘린더를 연동하는 기본적인 방법을 잘 알려줬습니다.

AppScript를 어떻게 여는지, 캘린더에 넣기 위해 캘린더가 필요하고 캘린더 ID를 가져와야 한다는 등...

2. AI에게 보다 구체적으로 요구사항 말하기.

그래서 구체적으로 원하는 것을 정리했습니다. 이런 작업을 프롬프트 엔지니어링이라고 해요.

[구글 스프레드에 있는 여러 행과 열로 된 목록 일정을 캘린더에 자동으로 추가하는 appscript 만들고 싶어. 각 열에는 타이틀, 날짜가 들어가고 종일 일정으로 추가할거야]

이번엔 잘 넣었다고 생각했는데,

내용
A
일정 제목
B
날짜

이런 행열로 된 코드를 알려줍니다.

그래서 더 구체적으로...

[구글 스프레드에 있는 여러 행과 열로 된 목록 일정을 캘린더에 자동으로 추가하는 appscript 만들고 싶어. A열에는 타이틀, B열에는 날짜가 들어가고 종일 일정으로 추가할거야]

이렇게 질문을 하니 원하는게 나왔습니다.

이번엔 2개를 알려줬어요. 하나는 질문에 딱 맞는 내용으로.

A
B
일정1
2023-08-01
일정2
2023-08-02
일정3
2023-08-03

다른 하나는 AI가 알아서 업그레이드 한 내용으로

제목
시작일
종료일
일정1
2023-08-01
2023-08-01
일정2
2023-08-02
2023-08-02
일정3
2023-08-03
2023-08-03

이 질문으로 얻은 코드를 내 작업 일정표에 맞게 수정을 해서 실행하니 스프레드 시트의 내용이 캘린더에 들어가는 마법같은 일이 벌어지더라구요.

여기서 끝~~~

이었으면 하루 종일 걸리지 않았겠지요 ㅜ.ㅜ

이번에도 내가 원하는 게 뭔지 몰라 생긴 일입니다.

3. 내가 진짜로 원하는 건 나도 몰랐지만 더 복잡한 것이었다.

저렇게 하고 일정을 추가해 보니 잘 되었습니다.

그런데, 일정 추가할 때 마다 범위를 다시 지정할 수는 없잖아요.

그래서 범위를 수정했어요.

내용이 들어있는 A1: B10을 지정했을 때 잘 되던게

내용이 없는, 앞으로 들아갈 가능성이 있는 범위까지 확대를 했지요.

A1:B30

이렇게 했더니 무슨 오류가 생기네요.

오류 내용을 잘 읽어봤습니다. B열에는 날짜가 들어가야 하는데, 날짜가 아닌 다른 내용이라는 거예요.

아무 것도 없으니 문제가 안된다 생각했는데, 다시 생각해 보니 아무 것도 없는 데이터도 데이터더라구요.

그래서 내가 원하는 것을 다시 정리해 봤습니다.

1. 스프레드 시트의 내용을 구글 캘린더에 자동으로 추가

2. A열은 이벤트 제목, B열은 날짜

3. 열의 길이는 최대 100개 (A1:B100)

4. B열은 순차적으로 들어가고, 중간에 빈 열은 존재하지 않음

5. A1:B100 범위에서 B열이 비어있는 부분 전까지 자동으로 범위 설정

이렇게 정리하고 나니, 앞에서 얻은 코드에 5번이 빠져있네요.

그래서 이렇게 질문을 했습니다.

[이 코드에서 var sheetDate = spreadsheet.getRange("A5:G100").getValues(); 이 부분을 실제 값이 있는 영역으로 자동 설정되도록 수정하고 싶어]

[이 코드]는 Bard가 알려준 내용을 바탕으로 제가 만든 시트에 작동하도록 수정한거예요.

이걸 먼저 Bard에게 알려준 후 이렇게 질문을 했지요.

그러니 역시 답을 줍니다.

받은 코드를 그대로 넣으니, 이게 잘 작동하네요.

여기서 끝~~

난줄 알았는데, 아직도 내가 '진짜로' 원하는 것을을 다 알아내지 못했습니다.

4. 빠진 부분을 추가로 질문하기

앱스크립트를 1번, 2번, 3번 반복해서 실행했을 때 문제가 되는거예요.

여기까지 얻은걸 한번에 정리하려고 하면, A4 한장도 넘게 나올거예요. 그래서 단계별로 작업하기로 했습니다.

다시 원하는 내용을 목록으로 작성을 합니다.

1. 스프레드 시트의 내용을 구글 캘린더에 자동으로 추가

2. A열은 이벤트 제목, B열은 날짜

3. 열의 길이는 최대 100개 (A1:B100)

4. B열은 순차적으로 들어가고, 중간에 빈 열은 존재하지 않음

5. A1:B100 범위에서 B열이 비어있는 부분 전까지 자동으로 범위 설정

6. 캘린더에 추가한 일정은 다시 등록되지 않아야 한다.

6-1 이를 위해 B열에 지정한 날짜의 일정을 알아야 한다.

6-2 종일 일정으로 등록하니, 종일 일정 목록만 알면 된다.

6-3 일정 제목은 출판사+책제목이기 때문에 똑같은 일정 제목은 없다.

6-4 일정을 추가하기 전에 A열의 출판사+책제목이 6-1에서 얻은 출판사+책제목과 비교해 같으면 추가에서 제외한다.

6-5 6-2에서 같은 일정이 발견되지 않으면 캘린더에 추가한다.

6-6 종일 일정이 없는 날이면 6-1~6-5 과정 없이 바로 추가한다.

** 남은 작업이 6번이라 6번만 구체적으로 정리했을 뿐, 1~5도 6번처럼 구체적으로 정리하면 각 항목 별로 여러 줄이 나오게 됩니다. 이걸 잘 정리해야 Bard가 진짜 잘 작동하는 코드를 알려줘요.

이렇게 정리한 후 하나씩 추가를 했습니다.

요구사항이 복잡해지면 논리적인 오류가 발생합니다. 논리적 오류가 발생하면 제대로 된 결과물을 얻을 수 없지요.

그래서 요구 사항을 하나씩 추가하기로 했습니다.

이 과정은 1~5번 코드를 짠 곳이 아닌, 새로운 파일을 만들어서 작업했어요.

만들어 놓은거 망가지면... 다시 복구할 능력이 안되니까 ㅜ.ㅜ

먼저 캘린더에서 종일 일정 제목을 불러오는 코드를 알려달라고 하고,

캘린더 일정 제목과 A열 제목을 비교하는 코드를 추가해 달라고 합니다.

제목이 같으면 캘린더에 일정을 등록하지 않도록 코드를 수정해 달라고 합니다.

이렇게 해서 만든 결과물을 1-5 코드와 합쳐달라고 합니다.

물론, 질문이 한번에 완성된건 아니에요.

질문을 어떻게 하느냐에 따라 결과물이 달라지고,

1~5 코드와 연동할 수 없는 결과물이 많이 나옵니다.

1~5 코드와 연동할 수 있는 결과물이 나오도록 질문을 잘 해야돼요.

이 부분을 추가하기 위해 질문을 과장 없이 100번쯤 다시 한 것 같아요.

최종 결과물을 얻어낸 후, 처음 던진 질문을 보니 내가 참 한심하다는 생각이 들더라구요.

내가 원하는 것이 스프레드의 데이터를 바탕으로 캘린더에 일정을 추가하는 것이라 생각했는데

사실은

1. 스프레드의 데이터를 바탕으로 캘린더에 일정을 추가하는데

2. 스프레드 시트의 특정 열은 일정 제목, 다른 열은 일정 날짜로 되어 있고

3. 데이터 범위는 앞으로 데이터를 넣을 곳 까지 지정해야 하지만

4. 데이터가 들어간 부분까지 자동으로 다시 범위가 지정되야 하며

5. 스프레드에 있는 내용 중 캘린더에 추가한 내용은 다시 추가하면 안된다.

라는 길고 복잡한 것이었지요.

그래서 AI에게 질문을 던지는 단순해 보이는 작업이 [프롬프트 엔지니어링]이라는 분야로 탄생한게 아닐까 싶어요.

아직 끝난게 아니에요.

5. 메뉴로 추가하기

일정 추가할 때 마다 앱스크립트로 들어갈 수는 없잖아요.

그래서 메뉴를 추가해야 합니다.

Bard에게 앱스크립트를 메뉴에 추가하고 싶다고 하니 코드를 알려주네요.

이건 좀 간단했어요.

이게 어제 하루 종일 한 일입니다.

개발자에게는 아주 간단한 일이겠지만, 개발을 해 보지 않은 왕초보에게는 하루 종일 걸리는 일.

그래도 AI가 있으니 하루 종일이지 AI의 도움이 없었다면 불가능했을 일이지요.

그런데...

다시 생각해 보니 내가 원하는건 종일 일정이 아니었네요 ㅜ.ㅜ

다 만들어 놓고 보니 진짜 원하는 게 뭔지 보이네요.

할 일로 등록을 해야하고(날짜가 지나도 안한건 표시되야 하니),

제작을 완료하면 '한 일'로 바뀌어야 하고,

[일정 추가] 버튼을 누르지 않아도 셀에 값이 들어가면 즉시 일정에 추가되야 하고.....

셀 구조가 바뀌어도-A열에 있던 책제목을 C열로 옮긴다던지...- 스크립트는 바꿀 필요가 없어야 하고

생각을 하다 보니 끝이 없겠다 싶어서,

진짜로

여기서 끝~~

ps. 저처럼 엑셀로 일정 관리하며 캘린더와 연동시키고 싶은 분이 있을까 싶어 코드 공개합니다.

내가(아닌 AI가) 만들었지만, 다시 봐도 뭔 내용인지 모르겠네요 ㅡ.ㅡ;;

첨부파일
sheetTOcalendar.txt
null파일 다운로드

등록한 일정을 보지 않으면 아무 소용 없잖아요.

안쓰는 구닥다리 스마트폰을 구글 캘린더와 연동해 모니터 앞에 뒀어요.

이렇게 하면 놓칠 일이 없겠지요?

반응형