<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://blog.2run1.kr/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.2run1.kr/" rel="alternate" type="text/html" /><updated>2026-01-17T13:35:40+00:00</updated><id>https://blog.2run1.kr/feed.xml</id><title type="html">중년코딩</title><subtitle>AI, Automation, Google Sheets, and Thinking</subtitle><entry><title type="html">함수 암기는 구글에게, 우리는 칼퇴를! Gemini 3.0 &amp;amp; 스프레드시트 완전 자동화 가이드</title><link href="https://blog.2run1.kr/google%20sheets/ai%20automation/2026/01/17/Gemini_Sheets_Automation_Secrets.html" rel="alternate" type="text/html" title="함수 암기는 구글에게, 우리는 칼퇴를! Gemini 3.0 &amp;amp; 스프레드시트 완전 자동화 가이드" /><published>2026-01-17T00:00:00+00:00</published><updated>2026-01-17T00:00:00+00:00</updated><id>https://blog.2run1.kr/google%20sheets/ai%20automation/2026/01/17/Gemini_Sheets_Automation_Secrets</id><content type="html" xml:base="https://blog.2run1.kr/google%20sheets/ai%20automation/2026/01/17/Gemini_Sheets_Automation_Secrets.html"><![CDATA[<p>안녕하세요, JNCD입니다.</p>

<p>우리는 언제나 ‘최소한의 노력으로 최대한의 성과’를 내는 것을 목표로 합니다. 야근은 미래의 나에게 빚을 지는 행위니까요. “엑셀 함수를 다 외워야 일을 잘한다”는 말, 이제는 옛말입니다. 우리의 목표는 복잡한 기술을 자랑하는 것이 아니라, 도구를 이용해 ‘일을 없애버리고’ 칼퇴근하는 것이니까요.</p>

<p>오늘은 구글의 최신 AI 모델인 Gemini 3.0을 구글 스프레드시트에 접목하여, 코딩 지식 없이도 업무를 완전 자동화하는 방법에 대해 이야기해 보려 합니다. 이 가이드는 여러분이 더 게으르고 똑똑하게 일할 수 있도록 돕는 ‘The Lazy Genius Project’의 일환입니다. 지금부터 우리가 어떻게 엑셀의 굴레에서 벗어나 진정한 ‘일잘러’가 될 수 있는지, 그 비밀을 하나씩 파헤쳐 보겠습니다.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_1.png" alt="그림1: Gemini 3.0과 구글 스프레드시트 자동화 가이드 표지" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 1. 함수 암기는 구글에게 맡기고 우리는 퇴근합시다</p>

<h2 id="1-프롤로그-아직도-vlookup-인수를-세고-계신가요">1. 프롤로그: 아직도 VLOOKUP 인수를 세고 계신가요?</h2>
<p>우리의 뇌 용량은 소중합니다. VLOOKUP이나 INDEX/MATCH 함수의 인수 순서를 외우느라, 혹은 두꺼운 엑셀 바이블을 베개 삼아 자느라 시간을 낭비하지 마세요. 기억력 싸움은 구글에게 맡기면 됩니다. 과거에는 엑셀의 복잡한 함수를 얼마나 많이 알고 있느냐가 실무자의 능력을 가르는 척도였습니다. 하지만 이제는 상황이 바뀌었습니다.</p>

<p>우리의 목적은 도구를 배우는 것 자체가 아니라, 도구를 이용해 ‘일을 없애는 것’입니다. 함수 사용법을 익히는 시간에 Gemini에게 일을 시키는 법을 배우는 것이 훨씬 ROI(투자 대비 효과)가 높습니다. 엑셀 책을 파고드는 대신, AI에게 명령을 내리고 우리는 휴가를 즐기는 상상을 해봅시다. 우리가 집중해야 할 것은 ‘어떻게 구현할까’가 아니라 ‘무엇을 해결할까’입니다.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_2.png" alt="그림2: 과거의 방식(함수 암기)과 새로운 방식(AI 활용)의 비교" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 2. 고통스러운 함수 공부 대신 AI에게 휴가를 즐기며 일을 시키세요</p>

<h2 id="2-복잡한-정규표현식-포기하면-편합니다">2. 복잡한 정규표현식? 포기하면 편합니다</h2>
<p>실무 데이터를 다루다 보면 날짜 형식이 ‘2024.01.01’, ‘24/1’, ‘Jan 1st’ 등으로 엉망인 데이터를 자주 마주하게 됩니다. 이걸 정리하겠다고 복잡한 REGEXREPLACE 함수를 직접 짜고 있다면 그건 야근으로 가는 지름길입니다. 정규표현식은 인간이 읽으라고 만든 게 아닙니다. 컴퓨터가 이해하는 언어를 억지로 배우려 하지 마세요.</p>

<p>너무 복잡하면 포기하면 편합니다. 대신 Gemini에게 말로 시키세요. “이 데이터를 YYYY-MM-DD로 통일하는 수식 짜줘.”라고 말이죠. 이때 팁은 Input/Output 기법입니다. 구구절절 설명하는 것보다 “이게(Input) 이렇게(Output) 변했으면 좋겠어”라고 예시를 보여주면 인공지능이 훨씬 잘 알아듣습니다. 여러분의 시간은 정규식을 고민하는 데 쓰기엔 너무나 아깝습니다.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_3.png" alt="그림3: 복잡한 정규표현식 대신 자연어로 데이터 정제 요청하기" style="max-width:720px;width:100%;display:block;margin:24px auto;" /></p>

<p>그림 3. 복잡한 수식 작성은 AI에게 맡기세요</p>

<h2 id="3-매크로-코딩-몰라도-됩니다">3. 매크로? 코딩 몰라도 됩니다</h2>
<p>“버튼을 누르면 체크박스가 해제되고 이메일을 기록해줘” 같은 기능, 개발자만 할 수 있는 게 아닙니다. 자바스크립트 문법을 몰라도 상관없습니다. 우리가 필요한 건 ‘논리’지 ‘문법’이 아니거든요. 앱스 스크립트(Google Apps Script)는 강력하지만, 배우는 데 시간이 걸립니다. 하지만 우리는 그 시간을 아끼고 싶습니다.</p>

<p>“체크박스를 누르면 추천수가 올라가고 중복 투표를 막는 onEdit 함수를 짜줘.”라고 프롬프트를 입력하세요. 우리가 할 일은 AI가 짜준 코드를 <strong>‘복사(Ctrl+C)’</strong>해서 스크립트 편집기에 <strong>‘붙여넣기(Ctrl+V)’</strong>하는 것뿐입니다. 코딩 공부는 AI가 대신 했습니다. 여러분은 기획자가 되어 지시만 내리면 됩니다. 이것이 진정한 노코드(No-Code), 아니 ‘AI 코드’ 시대의 일하는 방식입니다.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_4.png" alt="그림4: 코딩 지식 없이 복사 붙여넣기로 매크로 구현하기" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 4. 코딩은 복사/붙여넣기만 할 줄 알면 됩니다</p>

<h2 id="4-에러가-떴나요-당황하지-말고-토스하세요">4. 에러가 떴나요? 당황하지 말고 ‘토스’하세요</h2>
<p>빨간 에러 메시지가 떴다고 해서 망한 게 아닙니다. 그건 AI에게 줄 아주 좋은 ‘힌트’입니다. 개발자들도 에러 메시지를 보고 구글링을 합니다. 우리는 구글링 대신 AI에게 물어보면 됩니다. 초보자가 가장 두려워하는 것이 바로 이 ‘빨간 줄’이지만, 사실 이 메시지야말로 문제를 해결하는 열쇠입니다.</p>

<p>에러 메시지를 그대로 복사해서 Gemini에게 던져주세요. “네가 준 코드에서 TypeError가 났어. 고쳐줘.”라고 하면, Gemini는 사과하고 즉시 수정된 코드를 다시 줄 것입니다. 디버깅도 굳이 우리가 할 필요가 없습니다. 에러 메시지는 해결책을 위한 열쇠입니다. AI와 대화하듯 문제를 해결해 나가는 과정, 이것이 바로 ‘협업’입니다.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_5.png" alt="그림5: 에러 메시지를 AI에게 전달하여 코드를 수정하는 과정" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 5. 에러 메시지는 해결책을 위한 열쇠입니다</p>

<h2 id="5-시트-안으로-들어온-gemini-30">5. 시트 안으로 들어온 Gemini 3.0</h2>
<p>매번 챗봇 창과 스프레드시트 창을 왔다 갔다 하며 복사/붙여넣기 하는 것, 이것도 반복되면 일입니다. 우리는 게으르기 때문에 이런 비효율을 참을 수 없습니다. 진정한 자동화는 도구 사이의 경계를 허무는 것에서 시작됩니다. 창을 전환하는 1초의 시간도 아껴야 칼퇴근 시간이 빨라집니다.</p>

<p>UrlFetchApp을 사용하면 스프레드시트 셀 안에서 Gemini를 함수처럼 불러올 수 있습니다. 이것은 스프레드시트가 외부 세계(AI)와 직접 대화하게 해주는 전화기와 같습니다. 시트 밖으로 나가지 말고 안에서 바로 AI를 호출하세요. 업무 흐름이 끊기지 않게 만드는 것이 효율의 핵심입니다. 이제 엑셀 함수 쓰듯이 AI를 호출해서 사용하세요.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_6.png" alt="그림6: UrlFetchApp을 이용한 스프레드시트와 AI의 연결" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 6. 시트 밖으로 나가지 말고 안에서 AI를 부리세요</p>

<h2 id="6-api-키는-소중하니까">6. API 키는 소중하니까!</h2>
<p>코드를 짤 때 const API_KEY = ‘abc…‘라고 직접 적는 것은 해킹의 지름길입니다. 집 열쇠를 현관문 앞에 두고 다니는 것과 같습니다. 보안 사고가 터지면 그 수습은 야근으로 이어집니다. 편리함도 중요하지만, 보안은 타협할 수 없는 기본 원칙입니다. 특히 회사 데이터를 다룰 때는 더욱 주의해야 합니다.</p>

<p>API 키는 PropertiesService (스크립트 속성)에 안전하게 숨겨두세요. 코드는 누구에게나 보여줘도 되지만, 열쇠는 나만 가지고 있어야 합니다. 이렇게 하면 코드를 공유하더라도 나의 계정 정보나 과금 정보가 유출될 걱정이 없습니다. 보안은 ‘설마’ 하는 순간 뚫립니다. 처음부터 안전한 습관을 들이세요.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_7.png" alt="그림7: API 키 보안을 위한 PropertiesService 활용" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 7. 소중한 API 키는 금고(스크립트 속성)에 보관하세요</p>

<h2 id="7-딱-30초-마법의-주문-넣기">7. 딱 30초, 마법의 주문 넣기</h2>
<p>복잡한 코딩은 필요 없습니다. UrlFetchApp.fetch를 사용하여 Gemini API를 호출하는 짧은 코드 조각(Snippet)만 있으면 됩니다. 많은 분들이 API 연동을 어렵게 생각하지만, 사실 정해진 양식에 맞춰 데이터를 보내고 받기만 하면 되는 아주 단순한 구조입니다.</p>

<p>이 코드를 붙여넣는 순간, 여러분의 시트는 단순한 계산기가 아니라 지능을 가진 AI 비서로 다시 태어납니다. 단 30초의 투자로 앞으로의 수백 시간을 아낄 수 있다면, 이것보다 남는 장사는 없겠죠? 이 짧은 코드가 여러분의 시트에 ‘뇌’를 장착해 줍니다.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_8.png" alt="그림8: AI API 호출을 위한 핵심 코드 스니펫" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 8. 30초 만에 시트에 지능을 불어넣으세요</p>

<h2 id="8-함수-하나로-끝내는-시장-분석">8. 함수 하나로 끝내는 시장 분석</h2>
<p>예를 들어 =GENAI(‘이 리뷰의 감성을 분석해줘’, A2)와 같은 커스텀 함수를 만들었다고 상상해 봅시다. 이제 복잡한 데이터 분석 도구를 켤 필요가 없습니다. 엑셀 함수를 쓰듯이 드래그만 하면 됩니다.</p>

<p>고객 리뷰가 1,000개가 있어도 걱정 없습니다. 드래그 한 번이면 1,000개의 감성 분석이 끝납니다. 수작업으로 3일 걸릴 일을 커피 한 잔 마시는 시간으로 단축시키는 것, 이것이 우리가 추구하는 진정한 효율입니다. 우리는 데이터를 읽는 사람이 아니라, 데이터를 해석한 결과를 보고 결정하는 사람이 되어야 합니다. 반복적인 텍스트 분석, 요약, 분류 작업에서 해방되세요.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_9.png" alt="그림9: 커스텀 함수를 활용한 대량 리뷰 감성 분석 예시" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 9. 수작업 3일 치 업무를 드래그 한 번으로 끝내세요</p>

<h2 id="9-글자만-읽는-게-아닙니다">9. 글자만 읽는 게 아닙니다</h2>
<p>Gemini 3.0은 멀티모달(Multimodal) 능력을 갖추고 있습니다. 즉, 눈이 달려 있어서 영수증 사진이나 손으로 쓴 메모도 읽을 수 있다는 뜻입니다. 텍스트 데이터만 처리하던 시대는 지났습니다. 이제 이미지가 곧 데이터입니다.</p>

<p>영수증 사진을 드라이브에 올리면, 누가 언제 얼마를 썼는지 시트에 자동으로 정리되는 시스템을 구축할 수 있습니다. 굳이 수동으로 입력할 필요가 있나요? 눈 달린 AI에게 “이거 보고 정리해”라고 시키면 그만입니다. 경비 처리, 재고 관리 등 이미지를 보고 엑셀에 옮겨 적는 지루한 작업과 영원히 작별하세요.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_10.png" alt="그림10: 영수증 이미지 인식을 통한 데이터 자동 입력" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 10. AI는 글자뿐만 아니라 이미지도 읽습니다</p>

<h2 id="10-개떡같이-말해도-찰떡같이-알아듣게-시키는-법">10. 개떡같이 말해도 찰떡같이 알아듣게 시키는 법</h2>
<p>AI가 엉뚱한 답을 내놓는다면, 그건 AI 탓이 아니라 일을 시키는 여러분의 프롬프트 탓일 확률이 높습니다. 사람에게 일을 시킬 때도 정확하게 지시해야 결과가 좋듯이, AI에게도 명확한 가이드라인이 필요합니다. AI에게 일을 시킬 때는 다음 3원칙을 기억하세요.</p>

<p>Role (역할): “너는 구글 스프레드시트 마스터야.”라고 정체성을 부여하세요.</p>

<p>Context (상황): “A열에는 날짜, B열에는 금액이 있어.”라고 문맥을 알려주세요.</p>

<p>Task (요구): “오류가 나면 주석으로 설명해줘.”라고 구체적으로 지시하세요.</p>

<p>명확한 지시는 야근을 막아줍니다. 좋은 질문이 좋은 대답을 만듭니다.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_11.png" alt="그림11: 효과적인 프롬프트 작성을 위한 3원칙 (Role, Context, Task)" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 11. 명확한 지시가 완벽한 결과를 만듭니다</p>

<h2 id="11-맹신은-금물-ai도-가끔-소설을-씁니다">11. 맹신은 금물! AI도 가끔 소설을 씁니다</h2>
<p>Gemini는 가끔 존재하지 않는 함수를 만들거나 뻔뻔하게 거짓말(Hallucination)을 할 때가 있습니다. AI는 확률적으로 가장 그럴듯한 답을 내놓는 기계이기 때문입니다. 때로는 너무 창의적이어서 없는 사실을 지어내기도 합니다.</p>

<p>AI는 ‘전지전능한 신’이 아니라 ‘손 빠르고 똑똑하지만 덜렁대는 인턴’이라고 생각하세요. 코드는 반드시 테스트 데이터로 먼저 실행해보고, 숫자는 검산이 필수입니다. 미래의 나를 위해 검증 과정을 꼭 거치십시오. 최종 책임은 결국 ‘결재’ 버튼을 누르는 우리에게 있으니까요. 돌다리도 두들겨 보고 건너는 습관이 필요합니다.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_12.png" alt="그림12: AI 환각 현상에 대한 주의와 검증의 필요성" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 12. AI는 똑똑하지만 덜렁대는 인턴입니다. 검산하세요</p>

<h2 id="12-내가-잠든-사이에도-일하는-비서">12. 내가 잠든 사이에도 일하는 비서</h2>
<p>매일 아침 9시에 보고서를 만들어야 하나요? ScriptApp.newTrigger로 예약을 걸어두세요. 자동화의 백미는 ‘내가 자리에 없을 때도 일이 돌아가는 것’입니다. 시간을 정해두고 그 시간에 맞춰 AI가 움직이게 만드세요.</p>

<p>여러분이 출근해서 커피를 타기도 전에, 시트는 이미 데이터를 정리하고 이메일 발송까지 마쳤을 것입니다. 우리는 잠을 자도 구글 서버는 잠들지 않습니다. 진정한 자동화는 내가 신경 쓰지 않아도 알아서 돌아가는 것입니다. 반복적인 리포팅 업무에서 벗어나 아침 시간을 커피 한 잔의 여유와 함께 시작하세요.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_13.png" alt="그림13: 트리거를 활용한 시간 기반 자동화 설정" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 13. 자는 동안에도 일은 구글이 합니다</p>

<h2 id="13-에필로그-남는-시간에-무엇을-할-것인가">13. 에필로그: 남는 시간에 무엇을 할 것인가?</h2>
<p>함수를 외우는 건 구글이 대신합니다. 단순 반복 작업도 AI가 합니다. 그렇다면 우리는 무엇을 해야 할까요? 데이터가 무엇을 의미하는지 ‘해석’하고, ‘의사결정’을 하는 진짜 일에 집중하세요. 기계가 할 수 없는 창의적이고 전략적인 고민이 인간의 영역입니다.</p>

<p>아니면, 그냥 맛있는 저녁을 드세요. 가족과 시간을 보내거나, 평소 미뤄뒀던 취미 생활을 하세요. 그게 진짜 스마트 워크니까요. 기술은 우리의 삶을 더 풍요롭게 만들기 위해 존재하는 것입니다. 자동화로 번 시간은 오롯이 당신의 것입니다.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_14.png" alt="그림14: 자동화로 확보한 시간의 가치와 의미" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 14. 남는 시간에는 더 중요한 일을(혹은 딴짓을) 합시다</p>

<p>이제 야근하지 말고 퇴근하세요! 여러분은 이제 단순한 사용자가 아니라, AI를 부리는 앱스 스크립트 전문가나 다름없습니다. 시작이 반입니다. 지금 바로 실천해 보세요.</p>

<p><img src="/assets/images/Gemini_Sheets_Automation_Secrets_page_15.png" alt="그림15: 가이드 마무리 및 실행 독려" style="max-width:720px;width:100%;display:block;margin:24px auto;" /> 
그림 15. 이제 여러분은 전문가입니다</p>]]></content><author><name></name></author><category term="Google Sheets" /><category term="AI Automation" /><category term="gemini-3-0" /><category term="google-sheets" /><category term="apps-script" /><category term="automation" /><category term="ai-coding" /><category term="productivity" /><category term="api" /><category term="prompt-engineering" /><category term="regex" /><summary type="html"><![CDATA[안녕하세요, JNCD입니다.]]></summary></entry><entry><title type="html">Google Sheets Web App</title><link href="https://blog.2run1.kr/2026/01/17/google-sheets-web-app.html" rel="alternate" type="text/html" title="Google Sheets Web App" /><published>2026-01-17T00:00:00+00:00</published><updated>2026-01-17T00:00:00+00:00</updated><id>https://blog.2run1.kr/2026/01/17/google-sheets-web-app</id><content type="html" xml:base="https://blog.2run1.kr/2026/01/17/google-sheets-web-app.html"><![CDATA[<p>안녕하세요, JNCD입니다.</p>

<p>우리는 언제나 ‘최소한의 노력으로 최대한의 성과’를 내는 것을 목표로 합니다. 야근은 미래의 나에게 빚을 지는 행위니까요. 오늘은 단순히 데이터를 쌓아두는 스프레드시트를 넘어, 구글 시트를 ‘나만의 디지털 공작소’로 개조하여 퇴근 시간을 앞당기는 방법에 대해 이야기해 보려 합니다.</p>

<p>이 글은 구글 시트를 엔진으로 삼아 웹 앱(Web App)을 배포하고, AI를 활용해 코딩 한 줄 없이도 커스텀 서비스를 구축하는 기술적인 로드맵을 담고 있습니다.</p>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_1.png" alt="그림1: 구글 시트 웹앱 배포 및 AI 활용 가이드 표지" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 1. 구글 시트로 여는 나만의 디지털 공작소</em></p>

<h3 id="1-웹-앱web-app-시트-밖으로-나온-프로그램">1. 웹 앱(Web App): 시트 밖으로 나온 프로그램</h3>

<p>구글 시트는 단순한 문서 도구가 아닙니다. 여러분의 앱이 살아 숨 쉬는 ‘엔진룸’이 될 수 있습니다. 웹 앱의 개념은 구글 앱스 스크립트(GAS)로 작성한 코드를 독립적인 웹사이트처럼 배포하는 기술입니다.</p>

<p>가장 큰 장점은 <strong>서버리스(Serverless)</strong>라는 점입니다. 별도의 서버를 구매하거나 구축할 필요 없이, 모든 코드는 구글 서버에서 돌아갑니다. 고유한 URL이 생성되므로 링크만 있으면 누구나 내가 만든 도구에 접속할 수 있습니다. 인프라 관리는 구글에게 맡기고 우리는 서비스만 생각합시다.</p>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_2.png" alt="그림2: 웹 앱의 개념과 서버리스 특징 설명" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 2. 웹 앱의 개념: 서버리스와 접근성</em></p>

<h3 id="2-api-데이터가-오고-가는-파이프라인">2. API: 데이터가 오고 가는 파이프라인</h3>

<p>웹 앱은 데이터가 오고 가는 파이프라인 역할을 합니다. 이때 핵심이 되는 두 가지 함수가 있습니다.</p>

<ul>
  <li><strong>doGet(e):</strong> 누군가 내 웹 앱 주소를 ‘방문’하거나 데이터를 ‘조회’할 때 실행됩니다 (GET 요청).</li>
  <li><strong>doPost(e):</strong> 누군가 내 웹 앱에 데이터를 ‘제출’하거나 ‘저장’할 때 실행됩니다 (POST 요청).</li>
</ul>

<p>앱스 스크립트의 <code class="language-plaintext highlighter-rouge">ContentService</code>와 <code class="language-plaintext highlighter-rouge">HtmlService</code>를 활용하면 단순 텍스트나 JSON 데이터뿐만 아니라 완전한 HTML 페이지까지 반환할 수 있습니다.</p>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_3.png" alt="그림3: doGet과 doPost를 이용한 데이터 파이프라인 구조" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 3. 데이터 파이프라인: doGet과 doPost</em></p>

<h3 id="3-api로-활용-가능한-웹앱의-장점-backend-power">3. API로 활용 가능한 웹앱의 장점 (Backend Power)</h3>

<p>웹 앱을 백엔드로 활용하면 엄청난 효율을 얻을 수 있습니다. 이것이 바로 우리가 ‘게으른 개발’을 할 수 있는 이유입니다.</p>

<ul>
  <li><strong>무료 데이터베이스(Free DB):</strong> 복잡한 SQL을 몰라도 됩니다. 익숙한 엑셀(시트) 인터페이스로 데이터를 관리하고 저장하세요.</li>
  <li><strong>Headless Mode:</strong> 화면(UI) 없이 순수한 데이터(JSON/Text)만 주고받을 수 있어 다른 웹사이트나 모바일 앱의 백엔드로도 쓸 수 있습니다.</li>
  <li><strong>연결성(Connectivity):</strong> 외부 서비스의 데이터를 시트로 자동 수집하거나, 반대로 시트의 데이터를 외부로 실시간 전송할 수 있습니다.</li>
</ul>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_4.png" alt="그림4: 무료 DB 및 연결성 등 웹앱 백엔드의 장점" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 4. 백엔드로서의 강점: 무료 DB와 연결성</em></p>

<h3 id="4-html-파일을-활용한-무한한-디자인-자유도">4. HTML 파일을 활용한 무한한 디자인 자유도</h3>

<p>구글 설문지(Forms)의 정해진 틀이 답답하셨나요? <code class="language-plaintext highlighter-rouge">HtmlService</code>를 사용하면 표준 HTML, CSS, JavaScript를 모두 사용할 수 있어 디자인 자유도가 무한합니다.</p>

<p>버튼의 모양, 색상, 배치를 픽셀 단위로 제어하는 것은 물론, 애니메이션이나 팝업 같은 동적인 상호작용이 가능한 ‘진짜’ 웹사이트를 만들 수 있습니다. 나만의 얼굴을 가진 커스텀 UI를 구현해 보세요.</p>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_5.png" alt="그림5: HTML 파일을 활용한 커스텀 디자인과 코드 예시" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 5. HTML 서비스를 통한 디자인 자유도</em></p>

<h3 id="5-ai와-함께하는-정교화--디자인-the-magic-tool">5. AI와 함께하는 정교화 &amp; 디자인 (The Magic Tool)</h3>

<p>“저는 디자인 감각도 없고 HTML도 모르는데요?”라고 걱정하실 필요 없습니다. AI가 그 장벽을 허물어 주니까요.</p>

<p><strong>‘프롬프트 투 코드(Prompt to Code)’</strong> 시대로, “파스텔 톤의 둥근 버튼이 있는 로그인 페이지를 만들어줘”라고 AI에게 요청하면 됩니다. AI가 생성한 코드를 앱스 스크립트에 붙여넣기만 하세요. 우리는 코드를 ‘짜는’ 게 아니라 ‘조립’하는 겁니다.</p>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_6.png" alt="그림6: AI를 활용한 코딩 및 디자인 정교화" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 6. AI를 활용한 코드 생성과 디자인</em></p>

<p>AI를 활용한 개발 워크플로우는 다음과 같이 단순화됩니다.</p>

<ol>
  <li><strong>명확한 지시:</strong> 원하는 기능과 디자인 스타일을 구체적으로 설명합니다. (예: ‘반응형 웹으로 만들어줘’)</li>
  <li><strong>코드 생성 및 수정:</strong> AI가 짜준 백엔드(.gs)와 프론트엔드(.html) 코드를 프로젝트에 적용합니다.</li>
  <li><strong>디버깅의 혁신:</strong> 오류가 나면 에러 메시지를 그대로 AI에게 던지세요. ‘AI 디버거’가 즉시 수정 코드를 제안합니다.</li>
</ol>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_7.png" alt="그림7: AI를 활용한 3단계 개발 워크플로우" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 7. AI 개발 워크플로우: 지시, 생성, 디버깅</em></p>

<h3 id="6-왜-구글-설문지forms로는-부족할까요">6. 왜 구글 설문지(Forms)로는 부족할까요?</h3>

<p>구글 설문지는 간편하지만 한계가 명확합니다. 반면 웹 앱은 다릅니다.</p>

<ul>
  <li><strong>디자인:</strong> 폰트나 배경 변경의 제약이 없습니다. 브랜드 아이덴티티를 온전히 반영할 수 있습니다.</li>
  <li><strong>로직:</strong> 복잡한 데이터 검증 로직을 구현할 수 있습니다.</li>
  <li><strong>보안 및 데이터:</strong> 로그인 권한을 관리하고, 데이터를 가공해서 저장하는 것이 가능합니다.</li>
</ul>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_8.png" alt="그림8: 구글 설문지와 웹 앱의 차이점 비교" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 8. 구글 설문지 vs 커스텀 웹 앱 비교</em></p>

<h3 id="활용-사례-1-스마트한-승인-및-신청-시스템">활용 사례 1: 스마트한 승인 및 신청 시스템</h3>

<p>단순한 설문지를 넘어, 사내 도서 구매나 휴가 신청 시스템을 구축한다고 상상해 봅시다.</p>

<ol>
  <li><strong>자동 완성:</strong> 접속한 사용자의 이름과 부서를 자동으로 불러옵니다 (<code class="language-plaintext highlighter-rouge">Session.getActiveUser()</code>). 사용자가 굳이 입력하게 만들지 마세요.</li>
  <li><strong>데이터 검증:</strong> 입력된 정보가 유효한지, 예산 범위 내인지 제출 버튼을 누르기 <em>전</em>에 확인합니다.</li>
  <li><strong>히든 데이터:</strong> 사용자는 볼 필요 없지만 관리자에게 필요한 승인 코드나 타임스탬프를 안전하게 함께 전송합니다.</li>
</ol>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_9.png" alt="그림9: 스마트한 승인 및 신청 시스템 활용 사례" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 9. 활용 사례: 스마트 승인 시스템</em></p>

<h3 id="활용-사례-2-이미지와-함께하는-재고-목록">활용 사례 2: 이미지와 함께하는 재고 목록</h3>

<p>텍스트만 있는 목록 대신 시각적인 재고 관리 시스템도 가능합니다.</p>

<ul>
  <li><strong>시각적 데이터:</strong> <code class="language-plaintext highlighter-rouge">IMAGE</code> 함수나 URL로 저장된 제품 사진을 갤러리 형태로 보여줍니다.</li>
  <li><strong>동적 재고 확인:</strong> 구글 시트의 재고 수량과 실시간으로 연동하여, 품절된 상품은 아예 선택할 수 없게 만듭니다.</li>
  <li><strong>바코드/QR 생성:</strong> 외부 API와 연동해 제품별 코드를 실시간으로 화면에 띄웁니다.</li>
</ul>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_10.png" alt="그림10: 이미지와 동적 기능을 활용한 재고 목록 사례" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 10. 활용 사례: 시각적 재고 관리 목록</em></p>

<h3 id="배포-방식의-이해-bound-vs-standalone">배포 방식의 이해: Bound vs Standalone</h3>

<p>스크립트를 배포하는 방식은 크게 두 가지가 있습니다. 상황에 맞게 선택하세요.</p>

<ul>
  <li><strong>Container-bound Script (종속형):</strong> 특정 스프레드시트 파일에 묶여 있습니다. 해당 시트의 데이터를 다루기에 가장 빠르고 간편해서 초보자에게 추천합니다.</li>
  <li><strong>Standalone Script (독립형):</strong> 구글 드라이브에 별도 파일로 존재합니다. 여러 시트를 동시에 관리하거나 라이브러리로 쓸 때 적합합니다.</li>
</ul>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_11.png" alt="그림11: 종속형 스크립트와 독립형 스크립트의 배포 방식 비교" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 11. 배포 방식: 종속형 vs 독립형</em></p>

<h3 id="배포-설정-deployment-문을-여는-방법">배포 설정 (Deployment): 문을 여는 방법</h3>

<p>배포할 때 권한 설정은 보안과 직결되므로 중요합니다.</p>

<ul>
  <li><strong>실행 권한 (Execute as):</strong></li>
  <li><strong>나(Me):</strong> 사용자가 누구든 내 권한으로 실행됩니다. (데이터 보안 유지에 유리)</li>
  <li>
    <p><strong>사용자(User):</strong> 접속한 사람의 권한으로 실행됩니다. (개인별 데이터 추적에 유리)</p>
  </li>
  <li><strong>액세스 권한 (Who has access):</strong></li>
  <li><strong>나만:</strong> 테스트 용도입니다.</li>
  <li><strong>Google 계정이 있는 모든 사용자:</strong> 사내 도구로 적합합니다.</li>
  <li><strong>모든 사용자(Anyone):</strong> 로그인 없이 누구나 접속 가능한 퍼블릭 웹 앱입니다.</li>
</ul>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_12.png" alt="그림12: 실행 권한 및 액세스 권한 설정 화면" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 12. 배포 설정: 실행 및 액세스 권한</em></p>

<h3 id="확장-기능-외부-세상과의-연결-urlfetchapp">확장 기능: 외부 세상과의 연결 (UrlFetchApp)</h3>

<p><code class="language-plaintext highlighter-rouge">UrlFetchApp</code> 클래스를 사용하면 구글 시트가 외부 세상과 대화할 수 있습니다.</p>

<ul>
  <li><strong>Slack 알림:</strong> 신청서가 제출되면 즉시 슬랙 채널로 알림을 보냅니다.</li>
  <li><strong>AI 요약:</strong> 시트에 쌓인 고객 피드백을 OpenAI API로 보내 감정 분석을 시키고 결과를 저장합니다.</li>
  <li><strong>데이터 수집:</strong> 외부 서비스와 통신하여 필요한 데이터를 가져오거나 보냅니다.</li>
</ul>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_13.png" alt="그림13: UrlFetchApp을 이용한 외부 서비스 연결 및 확장" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 13. 확장 기능: UrlFetchApp을 통한 외부 연결</em></p>

<h3 id="나만의-웹-서비스-구축-로드맵">나만의 웹 서비스 구축 로드맵</h3>

<p>이제 여러분은 전문가입니다. 다음 5단계로 나만의 서비스를 시작해 보세요.</p>

<ol>
  <li><strong>기획:</strong> 구글 시트에 데이터 구조를 설계합니다.</li>
  <li><strong>로직:</strong> 앱스 스크립트(<code class="language-plaintext highlighter-rouge">doGet</code>, <code class="language-plaintext highlighter-rouge">doPost</code>)로 데이터 처리 규칙을 짭니다.</li>
  <li><strong>디자인:</strong> AI를 활용해 HTML/CSS 프론트엔드를 제작합니다.</li>
  <li><strong>배포:</strong> 권한 설정 후 웹 앱 URL을 생성합니다.</li>
  <li><strong>확장:</strong> 외부 API를 연결해 기능을 고도화합니다.</li>
</ol>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_14.png" alt="그림14: 웹 서비스 구축을 위한 5단계 로드맵" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 14. 구축 로드맵: 기획부터 확장까지</em></p>

<p>복잡한 코딩 공부보다 중요한 것은 ‘무엇을 만들까’ 하는 상상력입니다. 구글 시트와 AI라는 강력한 도구가 준비되어 있습니다. 지금 바로 <code class="language-plaintext highlighter-rouge">script.google.com</code>에 접속해서 당신만의 첫 번째 ‘디지털 점토’를 빚어보세요.</p>

<p>남는 시간에는 더 중요한 일(또는 딴짓)을 합시다.</p>

<p><img src="/assets/images/Sheets_to_Custom_Web_Apps_page_15.png" alt="그림15: 시작을 독려하는 메시지와 접속 주소" style="max-width:720px;width:100%;display:block;margin:24px auto;" />
<em>그림 15. 마무리: 지금 바로 시작하세요</em></p>]]></content><author><name></name></author><summary type="html"><![CDATA[안녕하세요, JNCD입니다.]]></summary></entry><entry><title type="html">블로그를 시작하며</title><link href="https://blog.2run1.kr/2026/01/17/init.html" rel="alternate" type="text/html" title="블로그를 시작하며" /><published>2026-01-17T00:00:00+00:00</published><updated>2026-01-17T00:00:00+00:00</updated><id>https://blog.2run1.kr/2026/01/17/init</id><content type="html" xml:base="https://blog.2run1.kr/2026/01/17/init.html"><![CDATA[<p>이 블로그에서는 자동화, 구글 시트, 그리고 생각 정리를 다룹니다.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[이 블로그에서는 자동화, 구글 시트, 그리고 생각 정리를 다룹니다.]]></summary></entry></feed>