블로그

  • 쇼츠 자동화, 이 확인 없이 올리면 망합니다

    쇼츠 자동화, 이 확인 없이 올리면 망합니다

    검수 없이 올렸다가 알게 된 것들

    유튜브 쇼츠 자동으로 만드는 방법을 검색하는 순간이면 보통 편집 시간이 먼저 무너진 때다. 나도 그랬다. 대본 쓰고, 목소리 깎고, 자막 맞추고 있자면 하루가 다 갔고, 정작 채널은 멈춰 있었다. 그래서 자동화를 시작했는데, 처음엔 잘못했다.

    생성만 자동으로 돌리고 확인은 건너뛰었다. 자막에 고유명사가 틀린 채로 나갔고, 같은 컷이 반복되는 영상이 그대로 올라갔다. 조회수가 안 나온 건 둘째 치고, 내가 봐도 믿음이 안 가는 영상이 내 채널에 붙어 있는 게 더 문제였다. 그 뒤로 원칙을 하나 정했다. 생성은 기계, 공개 판단은 게이트. 이 게이트가 이 글의 주제다.

    ‘자동’이라는 말을 셋으로 나눠서 쓰고 있다. 완전자동은 사람 손이 아예 없는 상태, 반자동은 사람이 초안을 만지는 상태, 검수필수는 기계가 만들되 사람 눈을 통과해야 공개되는 상태다. 쇼츠는 셋 중 마지막이 답이었다.

    수동, 반자동, 풀자동, 실제로 견줘보면

    내 워크스테이션에는 지금 cron 63개가 무인으로 돌고 있고, 작업 폴더가 183개, git 저장소가 90개 쌓여 있다. 블로그와 SaaS 발행은 이 구조로 한 달 반 동안 43편을 나갔다. 그런데 쇼츠에 같은 구조를 그대로 얹었을 때 결과가 달랐다. 표로 정리하면 이렇다.

    방식 사람 손이 들어가는 지점 실패 양상 내 판단
    수동 제작 전부. 대본부터 편집, 업로드까지 실패는 적은데 지속이 안 됨. 내 경우 편집에 지쳐 업로드 주기가 먼저 무너졌다 품질 기준이 극단적으로 높은 채널에만 맞다
    반자동 사람이 대본과 최종 컷을 확인 사람 병목이 남는다. 내가 자리를 비우면 발행이 멈춘다 전환기에 쓰기 좋다. 자동화 범위를 점점 늘려가는 시험대
    풀자동 없음. 생성 즉시 발행 내가 겪은 자막 오탈자, 고유명사 오독, 중복 컷이 그대로 외부로 나간다 쇼츠에는 부적합. 확인 장치 없는 풀자동은 사고를 낸다
    검수필수(자동 생성, 게이트 통과분만 공개) 게이트에서 걸린 분량만 사람이 봄 게이트가 느슨하면 풀자동과 같아진다 현재 운영 방식. 43편 발행 구조를 쇼츠에 그대로 적용

    포인트는 표의 마지막 줄이다. 사람 검토를 없애는 게 아니라, 검토할 대상을 기계가 골라 주게 만드는 것. 내 블로그 파이프라인은 주 1~5편씩 불규칙하게 초안을 만들고, 문체와 사실성 자동 검사를 통과한 글만 공개된다. 검사에서 걸린 초안은 사람이 연다. 쇼츠도 똑같이 돌렸더니 사람이 볼 분량이 줄어서 1인 운영이 성립했다.

    이걸 정의하면 이렇다. 쇼츠 검수 게이트란 자동 생성 영상을 공개하기 전에 문체, 사실성, 중복을 기계가 먼저 검사하고, 통과분만 발행 큐에 넣는 이중 구조다.

    어디까지 자동으로 되고, 어디서부터 사람인가

    9:16 크롭, 싱크 자막, 무료 BGM 매칭은 기계가 잘한다. 이 셋은 규격과 규칙의 문제라서 그렇다. 반면 고유명사 발음, 자막 오탈자, 중복 컷은 사람 손이 없으면 사고로 이어진다. 자동 검사에서 걸린 내 초안들을 다시 보니 대부분 이 세 유형이었다. 외래어 브랜드명을 이상하게 읽은 케이스가 특히 많았고, 자막에 띄어쓰기가 틀린 채 검사를 통과해버린 경우도 있었다. 그래서 자막 검사에는 별도 규칙을 하나 더 얹었다.

    검증 도구를 믿기만 하면 안 된다. 직접 만든 중복 검사 가드를 돌려 보니 이미 발행된 글 35편끼리 비교했을 때 595쌍 중 73쌍, 즉 12.3%를 중복이라고 잘못 잡았다. 오탐을 사람이 일일이 풀다 보면 그 게이트는 방해물이 된다. 오탐률을 낮추고, 걸린 것만 사람이 보는 이중 구조로 갈 수밖에 없었다.

    비용 이야기도 하지 않을 수 없다. 헤드리스로 LLM을 부를 때 기본 설정으로는 1회 $0.78이 나왔다. 모델과 작업 디렉터리를 지정하고 불필요한 도구를 떼자 $0.028로 27배 줄었다. 자동화는 한 번 만드는 게 아니라 호출 비용을 계속 감시하는 작업이다.

    실제 흐름은 이렇게 생겼다.

    # 쇼츠 생성 → 검사 → 발행 큐 (매일 오전)
    0 7 * * * /home/aileego/bin/shorts_pipeline.sh generate --topic from_pool
    15 7 * * * /home/aileego/bin/shorts_pipeline.sh check --captions --facts --dup
    30 7 * * * /home/aileego/bin/shorts_pipeline.sh publish --only passed
    # 걸린 초안은 drafts/ 에 남고, 알림만 온다

    대본 단계에서 쓰는 프롬프트는 이런 식이다.

    60초 쇼츠 대본을 써 줘. 주제는 아래 한 줄뿐이야. 첫 문장은 시청자의 고민을 지적하는 문장으로 시작하고, 고유명사는 최소화하고, 문장당 15자 이내로 끊어 줘. 통계나 수치는 내가 준 것 외에는 만들지 마.

    무인 발행 파이프라인이란 콘텐츠 생성, 품질 검사, 발행을 크론이 순서대로 실행하되, 검사 미통과분은 사람 검토 큐로 보내는 구조를 말한다. 내 경우 게이트 통과 조건은 문체 지문, 사실성, 중복 세 가지다. 자동 생성 글의 AI 문체 지문을 재보니 1,000자당 10.1건이었고, 손으로 고친 뒤 1.4건으로 떨어졌다. 이 지문 검사를 쇼츠 대본에도 그대로 쓴다.

    유튜브 정책 리스크 체크리스트 일러스트

    정책 리스크와, 자동화하면 안 되는 것들

    2025년 7월부터 시행된 유튜브의 반복적 콘텐츠 정책은 ‘틀만 바꿔 반복 찍어내는 영상’을 수익화 심사에서 걸러낸다. 또한 현실감 있는 변경을 포함한 AI 생성 콘텐츠에는 자동 생성 라벨이 붙을 수 있다. 정의하자면, 반복적 콘텐츠 정책이란 대본, 구성, 편집 방식이 거의 같은 영상을 대량으로 뿌리는 채널의 수익화를 제한하는 유튜브의 규칙이다. 이걸 운영 관찰로 얘기하면, 내 무인 발행 영상과 사람 검토 영상의 퍼포먼스는 차이가 났다. 사람이 마지막에 확인한 영상이 조회가 더 안정적이었다. 원인을 딱 집어 말할 수는 없다. 다만 게이트 없이 뿌린 영상은 자막 실수까지 그대로 나가니, 시청자의 이탈 요인이 하나 더 있는 건 확실하다.

    참고로 짧은 세로 영상의 참혹한 중앙값도 한번 봤다. 인스타 한 계정의 최근 30편을 다시 세니 릴스 18편은 조회수 중앙값이 50이었고, 피드 12편은 0이었다. 자동화를 하든 안 하든, 기본 난이도가 이 정도라는 얘기다. 채널 성장을 자동화가 대신해 주진 않는다.

    자동화하면 안 되는 유형은 명확하다. 제품 리뷰, 의료, 금융처럼 틀린 정보가 실제 피해로 이어지는 주제다. 사람이 확인하지 않아 잘못된 정보가 나갈 뻔한 순간을 겪고 나서 이 원칙을 세웠다. 그때 만든 발행 전 60초 확인 목록이다.

    • 자막에서 고유명사, 숫자, 단위만 10초 훑는다. 오탈자의 대부분이 여기 있다
    • 첫 3초 컷과 마지막 컷이 이전 영상과 같은지 10초 확인한다. 중복 컷은 반복 정책 리스크가 된다
    • 대본의 주장 중 근거 없는 문장이 하나라도 있으면 발행을 보류한다
    • AI 생성 라벨이 필요한 영상이면 공개 설정에서 공개한다. 숨기면 리스크가 커진다
    • 의료, 금융, 리뷰 유형이면 무조건 사람 전량 확인으로 넘긴다

    마지막 정리. 내가 운영하는 방식의 뼈대는 세 문장으로 요약된다. 생성은 자동, 검사는 자동, 공개 여부는 게이트가 통과한 것만. 오늘 할 일은 작다. 대본 하나를 자동으로 만들고, 그걸 사람이 60초 보는 것부터 시작하면 된다. 그 다음에 게이트를 하나씩 붙이면 된다. 자동화 파이프라인 설계 자체를 어떻게 잡았는지는 별도 글로 정리해 뒀으니 거기서 이어서 보면 된다.

    근거로 삼은 문서


    글쓴이 정보

    이 글의 초안도 운영자가 만든 AI 파이프라인이 씁니다. 문체·사실성 자동 검사를 통과한 글만 공개되고, 걸린 초안은 사람이 고쳐서 내보냅니다. 전체 구조는 포트폴리오에 적어 두었습니다.

    자주 나오는 질문

    유튜브 쇼츠를 완전 자동으로 만들어도 되나요?

    생성까진 자동이어도 공개는 사람 확인을 거치는 게 안전합니다. 실제로 확인 없이 올렸더니 자막 오탈자와 중복 컷이 그대로 나가서 채널 신뢰도가 먼저 무너졌습니다. 생성은 기계, 공개 판단은 게이트가 원칙입니다.

    쇼츠 제작에서 뭐까지 자동으로 되나요?

    9:16 크롭, 싱크 자막, 무료 BGM 매칭은 기계가 잘합니다. 규격과 규칙의 문제라서 그렇습니다. 반면 고유명사 발음, 자막 오탈자, 중복 컷은 사람 눈을 거치지 않으면 사고로 이어집니다.

    쇼츠 자동화 검수 게이트가 정확히 뭔가요?

    자동 생성 영상을 공개 전에 문체, 사실성, 중복을 기계가 먼저 검사하고 통과분만 발행 큐에 넣는 이중 구조입니다. 검사에서 걸린 초안만 사람이 열어 보면 되어서 1인 운영이 성립합니다.

    검수 자동화 도구의 오탐은 어떻게 처리하나요?

    제 경우 중복 검사 가드가 실제로 12.3%를 오탐으로 잡았습니다. 오탐을 사람이 일일이 풀면 게이트가 방해물이 되므로, 오탐률을 낮추고 걸린 것만 사람이 보는 구조로 갈 수밖에 없었습니다.

    쇼츠 자동화 비용은 얼마나 드나요?

    헤드리스 LLM 호출이 기본 설정으로는 1회 $0.78이었습니다. 모델과 작업 디렉터리를 지정하고 불필요한 도구를 떼자 $0.028로 27배 줄었습니다. 자동화는 만들고 끝이 아니라 호출 비용을 계속 감시하는 작업입니다.

    수동, 반자동, 풀자동 중 뭘 골라야 하나요?

    쇼츠는 검수필수 방식, 즉 자동 생성 후 게이트 통과분만 공개하는 방식이 답이었습니다. 수동은 품질이 좋지만 지속이 안 되고, 풀자동은 확인 장치가 없어 사고가 납니다. 반자동은 자동화 범위를 늘려가는 전환기 시험대로 좋습니다.


  • 스키마 마크업, 잘못 넣으면 역효과입니다

    스키마 마크업, 잘못 넣으면 역효과입니다

    리치 스니펫이 떴다 사라진 날이 있다면, 지금 이 글을 보고 있을 겁니다

    워드프레스 스키마 마크업 추가 방법을 검색하는 순간의 마음은 대체로 하나입니다. 별점 달린 경쟁글이 검색 결과에서 내 글 위에 떠 있고, 내 글은 제목과 URL만 덩그러니 보인다. 이 격차를 코드 없이 메우고 싶은 거죠.

    저도 똑같았습니다. 이 블로그는 자동 파이프라인이 주 1~5편으로 불규칙하게 초안을 만들고, 문체·사실성 자동 검사를 통과한 글만 공개하는 구조인데, 스키마를 넣고 나니 서치콘솔에서 리치 결과로 잡히는 페이지가 눈에 띄게 늘었습니다. 순위가 확 오르진 않았습니다. 클릭하는 사람이 늘었죠.

    다만 잘못 넣으면 역효과가 납니다. 이 글에서는 그 역효과가 나는 지점까지 같이 정리했습니다. 복붙 코드와, 검증 통과 기준과, 넣으면 안 되는 순간까지요.

    스키마 마크업, 정확히 뭘까? (그리고 진짜 도움 됩니다)

    검색엔진이 내 글을 ‘읽는’ 방식

    구글봇은 페이지를 사람처럼 읽지 않습니다. HTML을 훑으면서 “이건 제목 같고, 이건 가격 같네”라고 추측하죠. 스키마 마크업은 그 추측을 확정으로 바꿔주는 역할을 합니다.

    스키마 마크업이란 페이지의 내용을 검색엔진이 이해할 수 있는 구조화된 데이터로 표기하는 방법이다. 보통 JSON-LD라는 형식으로 HTML 안에 넣으며, 구글은 이걸 읽고 검색 결과에 별점, FAQ, 작성일 같은 부가 정보를 붙여 준다.

    이 부가 정보가 붙은 결과를 리치 스니펫이라고 부릅니다. 같은 순위에서 면적이 넓어지는 셈이라 클릭률이 달라집니다.

    리치 스니펫이 클릭률을 바꾸는 이유

    검색 결과에서 내 글이 FAQ를 펼쳐 보여주면, 독자는 클릭 전에 답의 일부를 이미 봅니다. 답이 있을 것 같으면 클릭하고, 없을 것 같으면 안 합니다. 그래서 리치 스니펫은 순위를 올리는 도구가 아니라, 이미 확보한 순위에서 클릭을 더 가져오는 도구입니다. 기대치를 이렇게 잡아야 실망이 없습니다.

    코딩 몰라도 됩니다: 워드프레스에 스키마 추가하는 방법

    방법 1: JSON-LD 코드 복붙 (권장)

    워드프레스 편집기에서 커스텀 HTML 블록을 하나 넣고, 아래 코드를 붙이면 끝입니다. 글마다 제목·날짜·URL만 바꿔 주면 되고, 테마를 바꿔도 날아가지 않습니다.

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Article",
      "headline": "글 제목",
      "datePublished": "2026-09-29",
      "dateModified": "2026-09-29",
      "author": {"@type": "Person", "name": "글쓴이"},
      "image": "대표 이미지 URL"
    }
    </script>

    방법 2: functions.php에 한 번만 넣기

    모든 글에 공통으로 들어갈 스키마라면 테마의 functions.php에 넣는 편이 낫습니다. 글 제목과 날짜를 자동으로 가져오게 만들어 두면 매번 손댈 일이 없어지죠.

    add_action('wp_head', function () {
      if (!is_single()) return;
      $data = [
        "@context" => "https://schema.org",
        "@type" => "Article",
        "headline" => get_the_title(),
        "datePublished" => get_the_date('Y-m-d'),
        "dateModified" => get_the_modified_date('Y-m-d'),
        "author" => ["@type" => "Person", "name" => get_the_author()]
      ];
      echo '<script type="application/ld+json">'
        . json_encode($data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT)
        . '</script>';
    });

    차일드 테마를 안 쓰면 테마 업데이트 때 지워집니다. 저는 이걸 몰라서 한 번 날려먹은 적이 있습니다. 차일드 테마부터 만들고 시작하세요.

    방법 3: 플러그인 쓸 때 주의점

    Rank Math 같은 SEO 플러그인은 스키마를 자동으로 넣어 줍니다. 편한데, 함정이 하나 있습니다. 플러그인이 넣는 것과 내가 HTML 블록으로 넣은 것이 겹친다는 거죠.

    방법 장점 단점
    HTML 블록 복붙 글 단위 제어, 테마와 무관 매번 손으로 수정
    functions.php 한 번 넣으면 자동 차일드 테마 필요, 코드 수정 필요
    SEO 플러그인 설정만 하면 됨 다른 방법과 중복되기 쉬움

    실제로 저는 이걸로 초안 검사에 걸린 적이 있습니다. 플러그인이 Article 스키마를 넣는 걸 모르고 HTML 블록에 하나 더 넣었더니, 같은 글에 Article이 두 개 나오는 원고가 나왔죠. 중복 검사에서 걸려서 발행 전에 하나를 뺐습니다. 플러그인을 쓴다면 플러그인이 뭘 넣는지 먼저 확인하고, 수동 추가는 그때부터 하세요.

    FAQ·글(Article) 스키마, 이 구조로 쓰세요

    Article 스키마 필수 필드와 선택 필드

    Article에서 손대야 할 필드는 headline, datePublished, dateModified, author 정도입니다. image는 리치 결과에 첨부될 확률을 높여 주니 넣는 편이 낫고, 나머지는 몰라도 됩니다. 단, dateModified를 안 바꾸는 분들이 있는데, 글을 고쳤으면 이 값을 같이 고쳐야 구글이 갱신을 인지합니다.

    FAQ 스키마: 페이지에 보이는 내용과 1:1로

    FAQ 스키마 작성법의 원칙은 한 줄입니다. 본문에 실제로 보이는 질문과 답만 넣는다. 리치 결과에서 펼쳐진 FAQ를 클릭해 들어왔는데 본문에 그 내용이 없으면, 그게 구글이 보는 불일치입니다.

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [{
        "@type": "Question",
        "name": "스키마 마크업을 넣으면 순위가 오르나요?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "순위에 미치는 직접 효과는 크지 않고, 검색 결과에서 리치 스니펫으로 노출되어 클릭률을 높이는 효과가 큽니다."
        }
      }]
    }
    </script>

    AI로 초안을 뽑을 때 여기서 사고가 났습니다. 생성된 초안에 FAQ 스키마까지 자동으로 붙어 나왔는데, 열어 보니 본문에 없는 질문이 들어 있었습니다. 그 뒤로는 FAQ 스키마는 본문 확인 후에만 통과시키는 걸 원칙으로 했습니다.

    HowTo는 이제 안 쓴다

    예전 글들을 보면 HowTo 스키마를 권하는 경우가 많은데, 구글이 HowTo 리치 결과 표시를 중단했습니다. 지금 넣어도 검색 결과에 아무 변화가 없으니, 새로 넣을 이유가 없습니다. 오래된 정보를 걸러내는 기준으로 삼으세요.

    스키마 검증 체크리스트 일러스트

    적용했으면 반드시 검증: 리치 결과 테스트 통과법

    리치 결과 테스트 사용법 3단계

    1. 구글의 리치 결과 테스트 페이지를 연다.
    2. 발행한 글의 URL을 붙여넣고 검사한다.
    3. 결과에서 오류(Error)가 0개인지, 어떤 스키마가 인식됐는지 확인한다.

    오류(Error)와 경고(Warning)는 다르다

    여기서 제일 많이 헷갈려합니다. 경고는 말 그대로 주의일 뿐입니다. 예를 들어 Article에 image가 없어서 뜨는 경고는 리치 결과 자체엔 지장이 없는 경우가 많고, 고칠 여유가 있을 때 고치면 됩니다. 오류는 다릅니다. JSON 문법이 깨졌거나 필수 필드가 빠졌다는 뜻이라, 오류가 있으면 그 스키마는 리치 결과 대상에서 빠집니다. 판단 기준은 이렇게 단순합니다. 오류는 고치고, 경고는 읽어보고 판단한다.

    제일 흔한 오류 원인은 따옴표입니다. 코드를 블로그에서 복사할 때 곡선 따옴표(‘ “)로 바뀌면 JSON이 깨집니다. 저는 이걸 실제로 당해서, 지금은 코드 블록은 wptexturize가 못 바꾸는 형태로 감싸서 발행하고 있습니다. 오류 메시지에 “Invalid JSON”이 뜨면 일단 따옴표부터 의심하세요.

    서치 콘솔에서 리치 결과 모니터링하기

    발행 후에는 서치 콘솔의 리치 결과 보고서를 봅니다. 어떤 페이지가 리치 결과로 잡혔는지, 오류가 있는지 며칠 단위로 정리해 줍니다. 저는 발행 전 자동 검증 단계에 리치 결과 테스트 통과 여부를 넣어서, 통과 못 한 원고는 사람 손을 타게 해 두었습니다. 무인 발행을 돌리는 입장에서 이 게이트가 없으면 잘못된 스키마가 그대로 나갑니다.

    잘못 넣으면 역효과: 스키마를 넣으면 안 되는 경우

    본문에 없는 내용을 스키마로 넣는 경우

    스키마는 본문의 요약이지 본문의 업그레이드가 아닙니다. 별점이 본문에 없는데 스키마에만 넣거나, FAQ에 본문에 없는 답을 넣으면 구글 정책상 스키마 남용에 해당합니다. 발각되면 해당 스키마를 무시하거나, 심하면 수동 조치로 검색 노출 자체를 제한합니다.

    페이지당 스키마 중복·과다

    플러그인과 수동 추가가 겹치면 Article이 두 개 나옵니다. 위에서 제가 겪은 일이죠. 검증 도구에서 같은 타입이 여러 개 잡히면 하나를 빼세요. 구조화 데이터는 많을수록 좋은 게 아니라, 정확할수록 좋습니다.

    리뷰·별점 스키마 남용과 수동 조치

    제품 소개 페이지에 리뷰 별점을 넣고 싶은 마음은 압니다. 저도 1인으로 만든 SaaS 소개 페이지에 별점 스키마를 넣었다가 뺐습니다. 실제 검증된 사용자 리뷰가 없는 페이지의 별점은 구글이 자체 리뷰로 보고, 이건 남용 규정에 걸립니다. 별점은 제3자가 남긴 실제 리뷰가 페이지에 존재할 때만 쓰는 걸로 기준을 잡았습니다.

    페이지 상황 스키마 판단
    일반 블로그 글 Article + 본문에 실제 있는 FAQ만
    실제 리뷰가 달린 제품 페이지 Product + Review 가능
    자기 제품 소개 페이지 Article 정도, 별점은 제외
    회사 소개·방침 페이지 넣지 않는다

    요약: 발행 전 5단계 체크리스트

    복사해서 쓰는 최종 체크리스트

    지금도 제 파이프라인에서 매일 같은 순서로 돌아가는 목록입니다.

    1. Article 스키마의 제목·날짜·URL이 실제 글과 일치하는지 확인한다.
    2. FAQ는 본문에 보이는 질문과 1:1인지 대조한다.
    3. 리치 결과 테스트에서 오류 0개를 확인한다. 경고는 내용을 읽고 판단한다.
    4. 같은 타입의 스키마가 페이지에 하나만 있는지 확인한다.
    5. 별점·리뷰는 실제 리뷰가 있는 페이지에만 들어갔는지 확인한다.

    다음 글에서는 색인 속도까지

    스키마를 넣고 나면 다음 궁금증은 “언제 검색에 반영되나”입니다. 색인 속도를 당기는 방법은 따로 정리해서 올리겠습니다. 서치콘솔과 사이트맵 쪽 이야기가 될 겁니다. 이 블로그의 자동화 운영 이야기는 포트폴리오(wallenstein.dev)에서 더 볼 수 있고, 궁금한 점은 댓글로 남겨 주세요.

    참고한 공식 문서


    글쓴이 정보

    제가 만든 AI 파이프라인이 초안을 쓰고, 저는 검사에 걸린 것만 손봅니다. 통과하지 못한 초안은 그냥 버립니다. 파이프라인은 여기에 정리해 두었습니다.

  • 스프레드시트 자동화, 이 설정 놓치면 데이터 망가집니다

    스프레드시트 자동화, 이 설정 놓치면 데이터 망가집니다

    매일 복붙하는 그 작업, 시트가 알아서 합니다

    구글 스프레드시트 자동화를 검색하는 순간 대부분은 이런 상황일 겁니다. 아침마다 폼 응답을 열어 복사해서 정리하고, 다른 시트에서 숫자를 받아다 집계표를 갱신하고, 그걸 보고서 양식에 붙여 넣는다. 코딩을 배울 시간은 없고, 그렇다고 이 반복을 계속할 수도 없다. 그 사이 어딘가에 있을 겁니다.

    나는 혼자서 콘텐츠 생성과 발행을 무인으로 돌리는 입장이라 시트뿐 아니라 서버의 예약 작업까지 cron 63개를 직접 관리한다. 그래서 아는 것이다. 자동화는 어렵지 않은데, ‘망가졌을 때 조용히 망가진다’는 게 진짜 문제라는 걸. 이 글은 함수 나열이 아니라 실패했을 때 어떻게 붙잡는지까지 쓴다.

    개발을 못 해도 시작할 수 있을까?

    된다. 스프레드시트 자동화란 반복되는 데이터 입력·정리·집계를 사람 대신 시트 함수와 예약 실행이 처리하도록 만드는 작업이다. 구글 시트는 함수만으로도 상당 부분 자동화되고, 거기서 한 발 더 가면 ‘매크로 녹화’가 있고, 그다음이 Apps Script라는 코드다. 이 순서대로 가면 코드를 직접 짜는 순간은 생각보다 늦게 온다. 나도 처음엔 녹화 매크로에서 시작했다.

    오늘부터 자동화 가능한 작업 vs 아닌 작업 구분법

    구분 기준은 하나다. “입력이 정해진 형태로 들어오고, 출력 규칙이 사람이 문장으로 설명할 수 있는가?” 예컨대 ‘폼 응답이 쌓이면 미결제 건만 뽑아 별도 탭으로 옮긴다’는 규칙이라 자동화된다. 반면 ‘이번 주 분위기에 맞게 홍보 문구를 손봐라’처럼 판단이 매번 달라지는 일은 사람 몫으로 남긴다. 경계선 애매하면 일주일 치 작업을 수기로 하면서 내 판단을 문장으로 적어보라. 문장이 안 나오는 작업은 아직 자동화 대상이 아니다.

    시작 전 5분 점검: 이 설정 놓치면 데이터가 망가집니다

    자동화 사고의 대부분은 화려한 기술 실패가 아니라 설정 누락에서 나온다. 실제로 나는 무인 배치가 권한 만료로 조용히 멈춘 걸 한참 뒤에야 알았다. 에러도 없다. 그냥 안 돌았을 뿐. 그 뒤로는 뭘 만들든 아래 다섯 가지를 먼저 확인하고 시작한다.

    1. 큰 배치를 돌리기 전에 파일 > 사본 만들기로 백업본을 떠 둔다.
    2. 원본 데이터 시트와 자동화 결과 시트를 파일 단위로, 최소 탭 단위로 분리한다.
    3. 자동화 계정의 접근 권한이 ‘편집자’ 이상인지, 만료일이 없는지 확인한다.
    4. 자동화가 결과를 ‘덮어쓰는지’, ‘행을 추가하는지’를 정해 두고 기록해 둔다.
    5. 시트 파일 설정의 시간대를 한국 표준시로 맞춘다.

    자동화 전 반드시 백업해 두기

    구글 시트는 버전 기록이 기본 켜져 있지만, Apps Script나 외부 도구가 대량 수정을 하면 최근 상태 위에 계속 덮인다. 복구 지점이 필요하면 큰 배치를 돌리기 직전에 파일을 복제해 두는 습관이 가장 확실하다. 나는 원본을 읽기 전용으로 두고, 자동화는 사본에만 쓰게 만든다. 이 구조로 가면 스크립트가 아무리 잘못돼도 원본은 남는다.

    원본 시트와 자동화 시트를 분리하는 구조 설계

    흔한 사고가 ‘사람이 보는 집계표’와 ‘기계가 쓰는 원천 데이터’가 같은 탭에 섞이는 거다. 정렬 한 번 잘못 누르면 함수가 참조하던 행이 전부 어긋난다. 구조는 단순하게. 데이터가 쌓이는 탭(사람 손 금지), 함수가 읽어 정리하는 탭, 사람이 보는 리포트 탭. 이렇게 세 겹으로 나누면 중간이 망가져도 원천은 살아 있다.

    권한·공유 설정에서 자주 터지는 함정

    Apps Script가 다른 스프레드시트를 읽게 하면 권한 승인 팝업이 뜨는데, 이걸 브라우저에서 한 번 승인했다고 끝이 아니다. 계정 비밀번호를 바꾸거나, 소유자가 문서를 이동하거나, 승인 토큰이 만료되면 조용히 끊긴다. 워크스페이스 관리자가 앱 권한을 정리하는 바람에 끊기는 경우도 봤다. 그래서 나는 권한을 링크가 아니라 특정 계정 기준으로 부여하고, 스크립트 소유 계정을 자동화 전용 하나로 고정해서 쓴다.

    폼 응답·외부 데이터 자동으로 쌓기: 세팅 순서대로 따라하기

    데이터가 자동으로 쌓이는 구조를 만들면 그다음 정리·집계는 시트 함수의 몫이 된다. 내 운영 시트도 같은 구조다. 폼과 외부 도구가 쓰는 탭, 그걸 읽어 상태를 정리하는 탭, 리포트 탭. 스크린샷 대신 구조로 보면 이렇다.

    시트 구조 템플릿: [raw] 폼 응답 원본 (사람 금지 구역) / [clean] QUERY 함수로 상태별 분류 / [report] 월별 집계 + 조건부 서식 / [log] 자동화 실행 기록 남기는 탭

    구글폼 → 시트 연결 후 응답 자동 정리 구조 만들기

    구글폼의 ‘스프레드시트에 연결’을 누르면 응답 탭이 자동 생긴다. 여기서 바로 원본을 고치려 들면 안 된다. 응답 탭 옆에 탭을 하나 만들고 QUERY로 끌어오는 식이다. 예컨대 =QUERY('폼 응답 1'!A:H, "select B,C,E where E = '미결제'") 같은 형태로 쓰면 미결제 건만 별도 탭에 실시간으로 뜬다. 이러면 폼이 몇 백 건 쌓여도 정리 탭은 늘 같은 모양을 유지한다.

    IMPORTRANGE로 다른 시트 데이터 가져오기와 주의점

    다른 파일의 데이터는 IMPORTRANGE로 가져온다. 첫 실행 때 권한 승인을 한 번 눌러야 하는데 이걸 놓치고 ‘왜 안 되지’를 오래 하는 경우가 많다. 주의점은 로딩이다. 참조 범위가 크면 화면에 뜨는 데 시간이 걸리고, 그 사이 다른 함수가 빈 값을 참조해 오류를 낸다. 그래서 나는 IMPORTRANGE로 통째로 전용 탭에 받아 놓고, 다른 함수는 그 탭만 바라보게 나눠 쓴다. 원본이 덜 흔들린다.

    외부 데이터(API·다른 도구)를 쌓는 최소 구성

    외부 데이터가 필요하면 Apps Script로 받아서 쌓는 게 최소 구성이다. URL Fetch 서비스로 API를 부르고, 결과를 raw 탭에 행으로 추가한다. 실행 기록은 log 탭에 남긴다. 비용 관련해서 하나만 적자면, 나는 헤드리스로 LLM을 부를 때 기본 설정이 1회 $0.78이었던 걸 모델과 작업 디렉터리를 지정하고 불필요한 도구를 떼는 방식으로 $0.028까지 줄인 적이 있다. 외부 API를 쓰는 자동화는 이렇게 호출 단가와 횟수를 먼저 따져보고 붙여야 한다. 생략하면 청구서로 배우게 된다.

    기본형은 이렇다. 마지막 행 다음에 붙이는 구조라 덮어쓰기 사고가 없다.

    function appendOrder() {
      const sh = SpreadsheetApp.getActive().getSheetByName('raw');
      const row = [new Date(), '주문', '자동 수집'];
      sh.appendRow(row);
      SpreadsheetApp.getActive().getSheetByName('log')
        .appendRow([new Date(), 'appendOrder', 'ok']);
    }
    시간·폼·수정 트리거 일러스트

    트리거 완전 정리: 시간·폼 제출·수정 시, 언제 뭘 써야 하나

    자동화를 ‘걸어두는’ 장치가 트리거다. 어떤 트리거를 쓰느냐에 따라 실패 양상이 달라지니, 선택 기준부터 정리한다. 무인으로 돌리는 입장에서 내가 실제로 쓰는 판단 표다.

    상황 트리거 주의점
    매일 정해진 시각에 집계 갱신 시간 기반 (일 단위 타이머) 지정 시각이 아니라 그 시간대 안에 임의 실행된다
    폼 응답이 올 때마다 정리 양식 제출 시 응답 탭 반영이 늦으면 빈 값을 읽을 때가 있다
    특정 셀을 고치면 즉시 처리 설치 가능한 onEdit 수정 즉발이라 중복 실행 방지 로직이 필요하다
    1시간마다 외부 API 폴링 시간 기반 (시간 단위 타이머) 실행 한도와 API 호출 단가를 먼저 확인한다

    각 트리거의 함정: 중복 실행, 실행 한도, 타임존

    시간 기반 트리거는 ‘매일 오전 6시’로 지정해도 6시 정각이 아니라 그 시간대 안에서 구글이 정한 시점에 돈다. 나는 cron 63개를 무인으로 돌리는데, 시간 지정을 하는 순간부터 ‘정시 보장이 없다’를 전제하고 설계한다. 중복 실행도 조심한다. 사람이 셀을 빠르게 여러 번 고치면 onEdit가 그 횟수만큼 발생한다. 그래서 스크립트 첫머리에 ‘같은 행을 최근에 처리했으면 건너뛰기’ 확인을 넣는다. 타임존은 파일 설정과 스크립트 설정이 따로 놀 때가 있다. Apps Script 프로젝트 설정에서 Asia/Seoul로 맞춰두지 않으면 날짜 경계가 어긋나서 새벽 배치가 전날 데이터를 가져간다.

    매크로 녹화에서 Apps Script 트리거로 넘어가는 시점

    매크로 녹화로 시작해도 된다. 녹화하면 내부적으로 Apps Script가 만들어지니까, 나중에 확장하기도 쉽다. 넘어갈 시점의 신호는 두 가지다. 녹화된 매크로를 조건에 따라 다르게 굴러가게 하고 싶어질 때, 그리고 자동 실행을 걸고 싶을 때다. 매크로는 트리거에 조건 분기 얹기가 어색하니, 그때 코드를 열어 녹화본을 고치는 식으로 넘어가면 된다.

    자동화가 실패했을 때: 복구 5단계와 재발 방지 세팅

    여기가 이 글의 심장이다. 자동화 실패는 대부분 소리 없이 온다. 나는 이 블로그의 글도 문체·사실성 자동 검사를 통과한 것만 공개하는 구조로 운영하는데, 검사를 통과 못 한 초안은 사람이 검토한다. 이 원칙을 만든 이유가 바로 무음 실패 때문이었다. 자동화가 잘못된 걸 스스로 알려주는 경우는 생각보다 드물다.

    데이터가 꼬였을 때 복구 순서 (버전 기록 활용)

    복구는 서두르면 망가진다. 순서를 지켜라. 첫 단계로 트리거를 일시 중지한다. 이걸 안 하고 고치는 사이 배치가 또 돌아서 꼬임이 두 배가 된다. 다음은 raw 탭이 온전한지 확인한다. 원천이 살아 있으면 정리 탭은 함수 다시 당기는 걸로 끝난다. raw까지 손댔다면 파일 > 버전 기록에서 망가지기 직전 시점으로 복사본을 만든다. 원본에 바로 복원하지 말고 사본에서 검증부터. 검증이 끝나면 복구본을 새 원본으로 삼고, 마지막으로 log 탭에 뭐가 어긋났는지 한 줄 적어둔다. 이 기록이 다음 사고를 줄인다.

    무음 실패를 잡는 실패 알림 세팅법

    실패 알림은 try-catch로 에러를 잡아 본인 메일이나 슬랙으로 쏘는 게 최소 구성이다. 성공 알림도 하나 남겨두라는 게 내 방식이다. ‘오늘 6시 배치 완료’라는 한 줄이 안 오면 그 자체가 실패 신호다. 에러만 알려주는 구조는 ‘에러 없이 안 돈 경우’를 못 잡는다. 권한 만료로 멈춘 배치가 정확히 그 경우였다. 실패 처리 코드는 짧게 이런 모양이다.

    function dailyJob() {
      try {
        // 본문 처리
        MailApp.sendEmail('[email protected]', '배치 완료', 'ok');
      } catch (e) {
        MailApp.sendEmail('[email protected]', '배치 실패', e.message);
      }
    }

    절대 자동화하면 안 되는 작업의 경계선

    경계선을 세 개 둔다. 원본 삭제·파기가 결과인 작업은 자동화하지 않는다. 돈이 실제로 움직이는 결제·환불 실행은 사람 확인 없이 돌리지 않는다. 그리고 ‘판단 기준을 글로 못 쓰겠다’는 작업은 애초에 자동화 대상이 아니다. 이 세 개를 넘는 자동화는 절약해 주는 시간보다 되돌리는 데 드는 시간이 커진다.

    정리: 1인 운영 루틴과 오늘 당장 시작하는 3단계

    이 블로그는 한 달 반 동안 43편을 발행했는데, 초안 생성에서 공개까지 기계가 하고 사람이 검수하는 구조다. 그걸 가능하게 한 건 화려한 기술이 아니라 점검 루틴이다. 자동화는 한 번 만드는 게 아니라 매주 쳐다보는 시스템이다.

    주문·문의 집계 자동화 사례와 매주 월요일 5분 점검

    1인 사업자에게 시트 자동화의 최대 수혜는 집계 시간이 아니라 ‘깜빡함’이 사라지는 거다. 주문 폼, 문의 폼, 재고 시트가 각자 쌓이고 리포트 탭이 알아서 갱신되면 아침에 확인 한 번으로 끝난다. 나의 월요일 루틴은 이렇다. 배치 성공 알림이 주간 분량대로 쌓였는지 본다. log 탭에서 지난주 에러 한 줄을 훑는다. 마지막으로 raw 탭 맨 아래행의 타임스탬프가 최근인지 확인한다. 셋 다 이상 없으면 점검 끝이다. 이 루틴으로 잡은 사고가 더러 있다. 그중 반은 권한 문제였다.

    자동화 확장 순서: 시트 → 폼 → 알림 → 외부 도구

    확장은 순서가 있다. 시트 함수로 정리를 붙잡고, 폼으로 입력을 규격화하고, 알림으로 무음 실패를 막은 다음에 외부 도구를 붙인다. 이 순서를 뒤집으면 외부 도구가 고장 났을 때 원인을 특정할 수가 없다. 나도 초반에 순서를 무시했다가 어디서부터 망가졌는지 몰라 전부 끊고 다시 쌓은 적이 있다.

    오늘 당장 시작하는 3단계 행동 플랜

    1단계는 복붙 작업 하나를 골라 원본 시트와 자동화 시트를 분리하는 것부터다. 2단계는 트리거 딱 하나만 걸고 사흘이 아니라 며칠간 지켜보는 것이다. 실행 기록 탭을 같이 만들어두면 지켜보는 게 훨씬 쉬워진다. 3단계는 성공·실패 알림을 붙이는 것. 여기까지 오면 진짜 무인 운영이다. 관련해서 Apps Script 타임존 설정 실패기, 무코드 자동화의 한계와 넘어설 시점, 무음 실패를 잡는 점검 루틴 글도 함께 보면 좋다.

    자주 묻는 질문

    코딩을 전혀 몰라도 자동화할 수 있나요? 시트 함수와 매크로 녹화 수준이면 코딩 없이 충분합니다. Apps Script는 필요해지면 그때 녹화본을 조금씩 고치는 방식으로 시작하면 됩니다.

    무료로 가능한가요? 요금은 언제 드나요? 구글 시트의 함수·트리거·메일 알림은 무료 구간에서 돌아갑니다. 외부 API를 매시간 부르는 구조로 가면 그때부터 호출 비용을 따져야 합니다. 내 경우 호출 단가를 27배 줄인 적이 있으니 설정을 먼저 점검하세요.

    트리거가 갑자기 멈추면 어떻게 확인하나요? Apps Script의 ‘내 실행’ 로그부터 보세요. 로그에 실행 기록 자체가 없으면 권한 만료나 트리거 삭제를 의심합니다. 성공 알림이 안 오는 경우도 같은 방향으로 확인하면 됩니다.


    글쓴이 정보

    제가 만든 AI 파이프라인이 초안을 쓰고, 저는 검사에 걸린 것만 손봅니다. 통과하지 못한 초안은 그냥 버립니다. 파이프라인은 여기에 정리해 두었습니다.

  • 해외주식 양도세, 매도 전에 미리 계산하는 법

    해외주식 양도세, 매도 전에 미리 계산하는 법

    매도 버튼 앞에서 망설이는 이유, 세금이 얼마인지 모르니까

    익절했는데 손해 본 기분, 세후 금액을 몰라서

    양도세 미리 계산하는 방법을 검색하는 순간은 대부분 매도 직전이다. 나도 작년에 똑같았다. 평단에 걸어둔 종목이 목표가에 닿았는데 손가락이 안 움직였다. 세금을 얼마 떼일지 모르니까.

    익절인데도 찜찜한 이유가 이거다. 매도 금액은 화면에 있는데 내 통장에 들어올 돈은 안 보인다.

    결정이 늦어지면 기회가 지나간다

    세금 몰라서 하루 미루고 이틀 미루다 가격이 되돌아간 적이 있다. 그때 배운 게, 매도 결정은 세후 숫자를 알아야만 제대로 된 결정이라는 거다. 세전으로 고민하는 건 반쪽짜리 고민이다.

    양도세 계산 공식, 기준가부터 차근차근

    핵심 공식: 양도차익 = 매도가액 − 취득가액 − 필요경비

    양도세란 주식 등을 매도해 실현한 양도차익에 대해 부과되는 소득세다. 계산식 자체는 단순하다. 매도가액에서 취득가액과 필요경비(거래 수수료, 세금 따위)를 빼면 양도차익이 나오고, 여기에 세율을 곱한다.

    예를 들어 취득가액 800만 원짜리 지분을 1,000만 원에 팔고 수수료 등 필요경비가 2만 원이었다면 양도차익은 198만 원이다. 해외주식은 여기서 연 250만 원 기본공제를 뺀 금액이 과세표준이 된다. 이 예시는 198만 원이라 공제 안에서 끝나 세금이 없다.

    국내주식 vs 해외주식, 기준가가 다르다

    국내 상장주식은 대주주가 아니면 장내 매도 차익에 양도세가 붙지 않는다. 그래서 이 글의 계산은 해외주식 기준이다. 해외주식은 달러 매수 금액을 취득일의 기준환율로 원화환산한 게 취득가액이고, 매도금액도 매도일의 기준환율로 환산한다. 여기서 한 번 걸렸다. 내가 처음 해외주식 손익을 정리할 때 매수 당시 환율이 아니라 매도 시점 환율을 취득가액에도 적용했다. 세후 금액이 실제보다 크게 잡혀서 매도를 미룰 뻔했다. 환산 시점이 취득과 매도 각각 다르다는 걸 뒤늦게 확인하고 계산식을 고쳤다.

    20% 세율에 지방소득세를 더한 실제 부담률 22%

    해외주식 양도세율은 양도소득세 20%에 지방소득세 2%(양도소득세의 10%)를 더해 총 22%다. 시뮬레이션 도구를 만들 때 지방소득세를 빼먹으면 세후 금액이 실제보다 크게 나온다. 처음 버전을 만들 때 20%만 넣었다가 지방소득세를 별도 과세분으로 붙이는 걸 놓쳐서 계산을 다시 한 적이 있다.

    250만 원 공제, 실현손익 기준으로 어떻게 소진되나

    당해 연도 실현손익 합산이 먼저다

    250만 원 기본공제는 연간 실현손익 합산에서 뺀다. 여기가 제일 헷갈리는 지점이다. 이 공제는 “한 건 매도당 250만 원”이 아니라 1년 동안 모든 매도손익을 합친 뒤 딱 한 번 적용된다. 다른 종목에서 200만 원 양도차익을 이미 실현했다면 남은 공제는 50만 원뿐이다. 같은 해 손실 난 종목이 있으면 이익과 합산(손익통산)해서 계산한다.

    공제 잔여분 추적법

    그래서 매도 전에 봐야 할 건 “이 종목의 양도차익”이 아니라 “올해 내 누적 실현손익”이다. 미니 예제로 정리한다. 1월에 A종목 양도차익 180만 원을 실현했다. 지금 B종목을 팔면 양도차익 120만 원이 예상된다. 합산 300만 원에서 250만 원을 빼면 과세표준 50만 원, 세금은 22%를 곱해 11만 원이다. 만약 B를 내년 1월에 팔면? 올해 실현손익은 180만 원이라 공제 안에서 끝나 세금 0원이고, 내년에는 공제 250만 원이 새로 주어진다. 연도는 체결일이 아니라 결제일 기준으로 갈리니 연말 매도는 결제일까지 확인한다.

    연중 분할매도가 공제를 갉아먹는다

    나는 원래 익절 목표에 도달하면 몇 번에 나눠 파는 습관이 있었다. 그런데 연중에 여러 종목을 조금씩 깎아내다 보니 공제 잔여분이 0원이 된 해가 있었다. 12월에 잡은 큰 익절이 공제 없이 그대로 과세됐다. 이후로는 매도 전에 올해 누적 실현손익을 먼저 세고, 공제가 얼마 남았는지 본 다음 매도 시점을 정한다.

    해외주식은 환율이 두 번 들어간다

    취득일 기준환율 vs 매도일 기준환율

    해외주식 양도세 계산에서 환율은 취득일과 매도일, 각각 해당 날짜의 기준환율로 두 번 적용된다. 같은 종목, 같은 수량이라도 환율 시점에 따라 양도차익이 달라진다.

    환차익은 세금 계산에 어떻게 녹아드나

    달러로는 본전인 매도라도 원화로는 차익이 날 수 있다. 취득할 때 환율이 낮고 매도할 때 높으면, 주식 자체는 제자리였어도 원화 환산 양도차익이 생긴다. 이 환차익 부분에도 양도세가 붙는다. 달러 강세일 매도하면 세금이 커지는 건 이 구조 때문이다.

    환율 데이터 매칭에서 내가 겪은 실수

    환율을 자동으로 붙이는 파이프라인을 만들 때 매도일 기준환율 매칭에서 실패했다. 주말에 해외주식 매도가 체결된 거래내역이 있었는데, 주말엔 기준환율이 발행되지 않으니 매칭이 비어 있었다. 처음엔 데이터 소스 오류인 줄 알고 API를 갈아끼웠다. 원인은 단순했다. 주말·공휴일 매도는 직전 영업일 환율 처리가 필요했다. 이런 예외 케이스를 직접 겪고 나서야 거래일 캘린더 체크를 앞단에 넣었다.

    해외주식 환율과 거래내역 정리

    매도 전에 내 계좌 기준 세후 금액 확인하는 법

    증권사 거래내역 내려받아 한 번에 모으기

    이제 실전 흐름이다. 내가 매도 전에 돌리는 순서를 그대로 적는다.

    1. 증권사 홈페이지에서 연간 거래내역(매수·매도·해외주식 환율 포함)을 엑셀로 내려받는다.
    2. 올해 실현손익을 합산해 250만 원 공제 잔여분을 계산한다.
    3. 매도 예정 종목의 예상 양도차익에 잔여 공제와 22% 세율을 적용해 세후 금액을 본다.
    4. 오늘 매도와 내년 1월 매도 중 어느 쪽이 세후로 나은지 비교한다.

    세후 시뮬레이션 예시

    손으로 한 번 해보면 감이 온다. 올해 실현손익이 아직 0원인 계좌에서 양도차익 1,900만 원짜리 매도를 앞뒀다면 공제 250만 원을 빼고 과세표준 1,650만 원, 세금 363만 원이다. 이미 누적 차익 200만 원이 쌓인 계좌라면 잔여 공제 50만 원, 과세표준 1,850만 원, 세금 407만 원. 같은 1,900만 원 차익이 세후로는 1,537만 원과 1,493만 원으로 갈린다. 이 숫자를 매도 버튼 누르기 전에 봐야 한다.

    오늘 매도 vs 내년 1월 매도 비교

    구분 오늘 매도 내년 1월 매도
    양도차익 1,200만 원 1,200만 원 (가격 동일 가정)
    공제 잔여 50만 원 250만 원 (갱신)
    과세표준 1,150만 원 950만 원
    세금(22%) 253만 원 209만 원

    주의할 건 이 표가 예상치라는 거다. 실제 세금은 다음해 5월 확정 신고 때 환율·경비 반영 후 확정된다. 시뮬레이션은 매도 결정 지원용이지 신고 대용이 아니다.

    거래내역 매번 손으로 정리하지 않는 방법

    증권사별 파일 형식이 제각각인 현실

    문제는 위 흐름을 매번 손으로 하려면 은근 시간이 든다는 거다. 증권사마다 엑셀 컬럼명이 다르고, 해외주식 환율 컬럼은 아예 없는 곳도 있다. 한 번 정리해두고 매도 때마다 재확인하는 구조가 필요했다.

    자동 수집 + 자동 정리 파이프라인

    나는 지금 여러 개의 cron 을 무인으로 돌리는데, 그중 하나가 거래내역 정리다. 내려받은 엑셀을 지정 폴더에 던져 넣으면 종목별 취득가액 환산, 실현손익 누적, 공제 잔여 계산까지 돌려주는 흐름이다. 초반에 이 파이프라인이 만든 결과를 며칠 믿었다가, 다른 증권사 파일이 들어왔을 때 컬럼 매핑이 밀려서 손익이 이상하게 집계된 걸 나중에 발견했다. 그 뒤로는 자동 계산 결과를 사람이 눈으로 스캔하는 확인 단계를 그대로 두고 있다. 자동화를 믿되 검산 지점은 남겨두는 게 내 기준이다.

    손으로 정리할 때 나오는 실수

    손으로 정리하는 게 나쁜 건 아닌데, 같은 실수가 반복된다. 취득가액을 매수 금액 원화 표시값으로 쓰는 경우(환율 환산을 빼먹는다), 매도 수수료를 필요경비에서 빼먹는 경우, 올해 누적 실현손익을 안 세고 종목 단위로만 계산하는 경우. 셋 다 공제 잔여를 잘못 잡게 만들어서 세후 예상 자체가 틀어진다.

    요약: 매도 결정 전 3분 체크리스트

    공제 잔여 → 환율 → 분할매도 순서로 확인

    매도 전 확인 순서를 정해두면 3분이면 된다. 먼저 올해 누적 실현손익으로 공제 잔여를 세고, 해외주식이면 취득·매도 각각의 기준환율로 환산했는지 보고, 분할매도라면 몇 번째 매도가 공제를 넘어서는지 본다. 순서가 뒤바뀌면 종목 하나만 보고 “세금 없네” 하고 넘기기 쉽다.

    계산은 예상치, 신고는 확정값

    아무리 정확히 시뮬레이션해도 다음해 5월 신고 전까지는 예상치다. 계산 결과를 근거로 매도 시점을 정하는 건 좋은데, 세금 숫자를 확정처럼 여기고 자금 계획을 짜면 곤란해진다. 여유분을 남겨두는 편이 마음이 편하다.

    지금 바로 해볼 수 있는 첫 액션

    오늘 할 일은 하나면 된다. 증권사에서 올해 거래내역 엑셀을 내려받아 실현손익 합계 하나만 세보는 것. 그 숫자만 있으면 250만 원에서 얼마가 남았는지 바로 나온다. 그다음 매도 결정은 훨씬 빨라진다. 세후 숫자를 아는 순간, 매도 버튼은 그저 실행일 뿐이다.

    참고한 공식 문서


    글쓴이 정보

    초안을 쓰는 건 제가 만든 AI 파이프라인이고, 문체·사실성 자동 검사에 걸린 문장은 제가 직접 고친 뒤 공개합니다. 세금 계산은 예상치이며 실제 신고는 국세청 홈택스 기준을 따르세요. 만드는 과정

  • 광고 문구 AI에 시키기 전에 이것부터

    광고 문구 AI에 시키기 전에 이것부터

    문구 뽑아달라고 했더니 ‘혁신’만 돌아온 날

    광고 문구 AI로 만드는 법을 검색해서 들어온 사람이라면 대충 이 상황일 거다. 툴을 열고 “매출 관리 SaaS 광고 문구 20개 만들어줘”라고 붙여넣었다. 돌아온 건 ‘매출을 혁신하는’, ‘원스톱으로 관리하는’, ‘스마트한 비즈니스 파트너’ 같은 문장 나열. 붙여도 클릭이 안 나올 게 뻔한 문구들이다.

    작년에 내가 정확히 이걸 겪었다. 운영 중인 SaaS 홍보 문구를 AI에 통째로 맡겼는데, 초안 스무 개가 전부 비슷비슷한 수사로 도배돼 있었다. 그때 든 생각은 “이 툴이 별로구나”였는데, 판단이 틀렸다. 문제는 툴이 아니라 내가 준 입력이었다.

    이 글은 그때 이후로 내가 고정해 쓰는 입력 시트와 검수 기준을 정리한 운영 기록이다. 툴 비교가 궁금하면 다른 글을 보시고, 여기는 ‘어떤 조건에서 실제로 쓸 문구가 나오는가’만 다룬다.

    AI 광고 문구, 왜 붙여넣으면 뻔한 문장만 나오는가

    ‘누구나 쓰는 프롬프트’가 문제다

    “광고 문구 만들어줘”라는 입력에는 타깃도, 페인포인트도, 금지어도 없다. 모델은 이런 요청에서 가장 평균적인 답을 꺼낸다. 평균이라는 건 이미 시장에 널려 있다는 뜻이고, 널려 있는 문구는 클릭 이유가 되지 못한다.

    뻔한 문구의 특징

    내가 받아본 초안을 다시 들여다보니 패턴이 보였다. 형용사가 앞에 나오고 명사가 뒤따르는 구조(“스마트한 ○○”), 추상명사로 끝나는 구조(“○○의 혁신”), 그리고 아무 제품에나 갖다 붙일 수 있는 문장. 셋 중 하나에 걸리면 그 문구는 폐기 대상이었다.

    AI 광고 문구란 모델에게 입력한 타깃·페인·차별점의 조합을 문장으로 재배열한 결과물이다. 입력에 차별점이 없으면 재배열해도 차별점이 생기지 않는다.

    AI에 무엇을 입력해야 안 뻔한 문구가 나오는가

    입력 시트 5개 슬롯

    지금은 SaaS마다 입력 시트를 고정해 둔다. 슬롯은 타깃, 페인포인트, 차별점, 금지어, 톤 다섯 개다. 슬롯 하나가 빠지는 순간 초안 품질이 바닥으로 꺼지는 걸 여러 번 확인해서, 빈 슬롯이 있으면 아예 생성을 돌리지 않는 규칙으로 굳혔다.

    금지어 슬롯이 동질화 방지의 첫 단추다. 여기엔 ‘혁신, 스마트, 원스톱, 솔루션, 파트너’처럼 내 제품에서 이미 질린 표현과, 경쟁사 광고에서 자주 본 표현을 같이 넣는다. 이 목록이 길어질수록 초안이 달라진다.

    복사 가능한 프롬프트 예시

    타깃: 직접 수주 견적을 엑셀로 관리하는 1인 디자인 스튜디오. 페인포인트: 월말에 어떤 견적이 미결인지 찾느라 한 시간씩 씀. 차별점: 견적 상태를 카톡 알림으로만 보여줌, 입력 화면이 3칸. 금지어: 혁신, 스마트, 원스톱, 솔루션, 효율화. 톤: 과장 없이 건조하게, 숫자와 상황 위주로. 위 조건에서 클릭을 유도하는 광고 문구 10개. 각 문구 옆에 어떤 페인포인트를 썼는지 한 줄로 표기.

    마지막 줄이 은근히 중요하다. 문구마다 근거를 붙이게 하면 모델이 지어내는 걸 스스로 줄인다.

    입력이 부족할 때 나오는 신호

    타깃이 뭉뚱그려지면 초안에 ‘비즈니스 전문가’, ‘직장인 여러분’ 같은 부름이 섞인다. 차별점이 비면 문구 전체가 톤 메시지로만 도는 것도 신호다. 이런 초안을 다듬는 대신 입력 시트로 돌아가서 채우는 편이 빠르다.

    네이버·인스타·구글, 플랫폼별로 문구를 다르게 써야 하는가

    같은 문구를 돌렸다가 크게 벌어진 클릭률

    같은 초안 묶음을 여러 플랫폼에 그대로 돌렸다가 플랫폼 사이 클릭률 격차가 생각보다 컸던 적이 있다. 노출 환경이 다른데 같은 문장을 쓴 게 원인이었다. 지금은 초안을 하나 뽑고 플랫폼 조건만 바꿔 재생성한다.

    플랫폼별 조건

    네이버 파워링크는 노출 자릿수가 짧아 앞 열댓 자가 승부처다. 문장이 잘리는 지점까지 확인하고, 잘린 뒤가 궁금해지는 멈춤 패턴으로 다시 뽑는다. 인스타는 문구가 아니라 이미지와 헤드라인의 조합으로 움직인다. 계정 하나를 최근에 다시 봤더니 릴스와 피드의 조회수 중앙값 자체가 갈려서, 문구 배치도 포맷별로 따로 잡는다. 구글 검색광고는 키워드 정합성이 전부다. 헤드라인에 검색 키워드가 안 들어가면 그 초안은 폐기다.

    재요청 프롬프트는 이렇게 쓴다.

    위 초안 중 1, 4, 7번을 네이버 파워링크용으로 변형해줘. 조건: 앞 15자 안에 타깃 상황이 나올 것, 문장이 잘려도 앞부분만으로 의미가 통할 것, 물음표로 끝내지 말 것.

    플랫폼별 광고 문구란 노출 자릿수·경쟁 소재·사용자 상태가 다른 환경에 맞춰 같은 페인포인트를 다른 구조로 재작성한 결과물이다.

    AI가 뽑은 문구 중 실제로 쓸 문구를 고르는 기준

    3단 필터

    문구 20개를 받으면 필터를 세 번 통과시킨다. 첫 통과는 사실 확인이다. 문구에 들어간 숫자와 표현이 근거 있는지 원문으로 대조한다. 두 번째는 차별성이다. 경쟁사 문구에 갖다 붙여도 어색하지 않으면 탈락. 세 번째는 행동 유도다. 클릭해야 하는 이유가 문장 안에 없으면 남기지 않는다.

    사람과 기계로 검수를 나눈 이유

    이 블로그는 문체·사실성 자동 검사를 통과한 글만 공개되고, 걸린 초안은 사람이 본다. 광고 문구도 같은 구조로 돌린다. 자동 검사는 금지어와 구조 중복을 걸러주고, 최종 판단은 사람이 한다. 자동 생성 글의 AI 문체 지문을 재본 적이 있는데 손을 안 대면 1,000자당 10.1건이 나오다가 고치고 나면 1.4건으로 떨어졌다. 기계만으로는 안 잡히는 층위가 분명히 있다.

    A/B 테스트로 넘기는 법

    필터를 통과한 문구는 후보풀에 넣고 소재 두세 개씩 짝지어 돌린다. 한 짝에는 구조만 다른 문구를 넣어서 문구 자체의 영향을 분리한다. 여기서 ‘느낌이 좋은 문구’를 고르는 습관이 제일 비싸다. 클릭률은 느낌을 모른다.

    플랫폼별 광고 문구 선택 일러스트

    AI 문구가 다 똑같아 보일 때 피하는 법

    동질화가 생기는 이유

    문체 자동 검사가 유사 초안을 걸러내는 과정에서 반복 패턴이 눈에 밟혔다. 같은 입력 시트로 같은 구조를 요청하면 나오는 문구의 뼈대가 같았다. 모델이 아니라 내 요청이 같은 걸 만든 거였다.

    같은 맥락, 다른 구조로 뽑기

    지금은 네 가지 구조를 번갈아 요청한다. 질문형(“견적 미결 건 찾느라 한 시간 쓰나요?”), 시나리오형(“월말, 엑셀을 열고 47행을 내려다보는 중”), 숫자형(“입력 칸 3개, 알림 1통”), 부정형(“또 다른 관리 툴은 필요 없습니다”). 구조를 바꾸는 것만으로 초안의 겉모습이 달라진다.

    실제 고객 언어 섞기

    제일 잘 먹히는 방법은 후기와 문의 원문에서 문구를 가져오는 거였다. 고객이 쓴 표현을 입력 시트의 페인포인트 칸에 그대로 붙인다. “월말에 미결 견적 찾느라 한 시간씩 씀” 같은 문장은 내가 못 쓴다. 그 문장을 쓴 사람이 고객이기 때문이다.

    AI 문구 동질화란 입력 정보와 요청 구조가 같을 때 모델이 같은 뼈대의 문장을 반복 생성하는 현상이다. 구조와 어휘 출처를 바꾸지 않는 한 저절로 풀리지 않는다.

    광고 심의·과장 표현, AI는 모른다

    근거 없는 수치 사건

    한 번은 검토를 생략할 뻔한 초안에 근거 없는 수치가 박혀 있었다. “99%가 만족한” 같은 문장이었다. 우리 데이터에 그 숫자는 없었다. 이 일이 있고 나서 사람 검토 단계를 없애지 못했다. AI는 문구를 만들 뿐, 사실 여부를 보증하지 않는다.

    걸리기 쉬운 표현

    • 최대, 1위, 보장, 100% 같은 극단 표현. 근거 자료가 없으면 쓰지 않는다.
    • “완치”, “효능”, “체험 사례 보장” 같은 건강·의약 계열 표현. 해당 업종은 별도 심의 규정이 얹혀서 문구 수준에서 걸러지지 않는다.
    • 비교 표현. 경쟁사를 특정하지 않아도 우위를 암시하면 검토 대상이 된다.

    발행 전에는 3분 리스크 체크를 돌린다. 문구의 숫자에 근거 문서가 매칭되는지, 극단 표현이 남아 있는지, 업종 규제 표현이 섞였는지 순서로 본다. 법률 자문은 아니고, 실무에서 걸러지는 지점을 순서화한 것뿐이다. 애매하면 그 문구는 버린다. 아깝지 않다.

    정리: 광고 문구 AI에 시키기 전 3분 체크리스트

    입력 시트 점검

    타깃, 페인, 차별점, 금지어, 톤. 빈 슬롯이 있으면 생성하지 않는다. 페인포인트 칸에는 내 문장이 아니라 고객 원문이 들어가 있는지 본다.

    프롬프트 점검

    플랫폼 조건(자릿수, 키워드 정합성, 이미지 조합)을 요청에 명시했는지, 구조를 질문형·시나리오형·숫자형·부정형 중 바꿔 요청했는지 확인한다.

    검수 기준 점검

    사실 확인, 차별성, 행동 유도를 순서대로 통과시키고, 극단 표현과 근거 없는 수치를 걸러낸 뒤 후보를 A/B 짝지어 돌린다.

    이 흐름을 고정하고 나서 소재 제작에 쓰는 시간이 체감상 반 이하로 줄었다. 초안은 기계가 만들어도, 뭘 넣고 뭘 버릴지는 입력 시트를 만든 사람의 몫이다. 다음 글에서는 이렇게 뽑은 소재를 예약 발행까지 넘기는 파이프라인을 정리한다.

    근거로 삼은 문서


    글쓴이 정보

    초안을 쓰는 건 제가 만든 AI 파이프라인이고, 문체·사실성 자동 검사에 걸린 문장은 제가 직접 고친 뒤 공개합니다. 만드는 과정

    자주 나오는 질문

    AI 광고 문구가 계속 ‘혁신’, ‘스마트’ 같은 뻔한 표현만 내놓는 이유는?

    입력에 타깃, 페인포인트, 금지어가 없으면 모델은 가장 평균적인 답을 꺼냅니다. 평균은 이미 시장에 널려 있는 문장이고, 그건 클릭 이유가 되지 못합니다. ‘혁신, 스마트, 원스톱, 솔루션, 파트너’ 같은 표현을 아예 금지어 슬롯에 넣고 돌리면 초안이 달라집니다.

    AI 광고 문구 생성 시 프롬프트에 무엇을 넣어야 하나?

    타깃, 페인포인트, 차별점, 금지어, 톤 다섯 슬롯을 고정해서 씁니다. 하나라도 비면 초안 품질이 바닥으로 꺼지는 걸 여러 번 확인해서, 빈 슬롯이 있으면 생성을 아예 안 돌리는 규칙으로 굳히는 게 좋습니다. 마지막에 문구마다 어떤 페인포인트를 썼는지 표기하게 하면 지어내는 걸 줄일 수 있습니다.

    AI가 뽑은 광고 문구 중 실제로 쓸 문구는 어떻게 고르나?

    세 번의 필터를 통과시킵니다. 먼저 문구 속 숫자와 표현의 사실 확인, 다음은 경쟁사 문구에 갖다 붙여도 어색하지 않으면 탈락시키는 차별성 확인, 마지막으로 클릭 이유가 문장 안에 있는지 봅니다. 통과한 문구만 후보풀에 넣어 소재 두세 개씩 A/B 테스트로 넘깁니다.


  • 투자 일지 손으로 쓰면 1년 안에 실패합니다

    투자 일지 손으로 쓰면 1년 안에 실패합니다

    왜 손으로 쓰는 투자 일지는 1년을 못 버티나

    매매할 때마다 수기로 남기려다 세 달쯤에 포기한 경험이 있을 거다. 투자 일지 자동으로 쓰는법을 검색하는 순간은 대개 그 직후다. 장이 끝나고 매매 내역 앱을 열었다가, “내일 몰아서 쓰지” 하다가 결국 안 쓰는 날이 쌓인다.

    수기 일지가 실패하는 세 가지 이유

    내가 여러 번 실패하면서 찾은 패턴이 있다. 첫째는 매매 직후가 아니라 저녁에 쓰려니 체결가·수량을 다시 확인해야 한다. 둘째는 손익 계산이 손이다. 실현손익을 내 방식으로 계산하면 증권사 앱 숫자와 자꾸 어긋나서, 어느 쪽이 맞는지 확인하다 일지 쓰기 자체를 관둔다. 셋째는 회고다. 기록은 그럭저럭 남아도 한 달 치를 뒤져 요약하는 작업이 사람을 지치게 한다.

    기록이 아니라 집계와 회고가 실패 지점이었다.

    내가 자동화로 전환한 계기

    나는 혼자서 AI 자동화로 SaaS 여러 개를 굴리는 1인 빌더다. 지금 무인 크론이 63개 돌고 있고, 작업 폴더가 183개, git 저장소가 90개 쌓여 있다. 이 정도 규모가 되면 사람 손으로 뭔가를 기록하는 방식은 구조적으로 못 버틴다. 콘텐츠 발행도 처음엔 손으로 올리다 지금은 검사 통과분만 자동 공개된다. 투자 일지도 똑같은 문제라고 판단해서, 발행 파이프라인과 같은 구조로 갈아엎었다.

    투자 일지 자동화, 뭘부터 세팅해야 하나

    도구를 고르기 전에 내 자동화 레벨이 어디쯤인지부터 아는 게 빠르다.

    0~3단계 자동화 레벨 진단

    0단계는 전부 수기. 1단계는 매매 내역 엑셀을 증권사에서 수동으로 내려받아 붙여넣기. 2단계는 내려받기까진 사람이 하되 집계·손익 정리는 수식이나 스크립트가 처리. 3단계는 수집부터 회고 초안까지 주기적으로 기계가 하고 사람은 검수만 한다. 대부분 1단계에서 막혀 있는데, 1단계의 문제는 귀찮음이 아니라 “내려받기를 깜빡하면 그날 데이터가 구멍 난다”는 취약성이다.

    데이터 원천을 하나로 정하는 원칙

    SaaS를 만들면서 몸에 밴 원칙이 하나 있다. 원천 데이터는 단일 소스로 정하고 나머지는 전부 파생시킨다. 투자 일지에 대입하면 원천은 증권사 거래 데이터다. 일지·손익·회고는 전부 그 위에 얹히는 뷰일 뿐이다. 내가 예전에 수기 계산과 증권사 숫자가 어긋났던 것도, 원천이 둘이었기 때문이다. 원천을 하나로 정하면 “어느 숫자가 진짜냐”는 질문 자체가 사라진다.

    세팅에 실제로 걸리는 시간

    솔직히 말하면 처음 세팅은 반나절 걸린다. API 키 발급, 스프레드시트 권한, 크론 등록을 순서대로 밟아야 해서다. 다만 이건 일회용 비용이고, 이후 주간 유지는 점검 수준으로 줄어든다. 세팅 시간 아까워서 1단계에 머무는 게 진짜 손해다.

    매매 내역을 수동으로 받지 않고 자동으로 가져오는 법

    증권사별 자동 연동 가능 여부 비교

    국내 증권사는 Open API를 공개하는 곳과 아닌 곳이 갈린다. 한국투자증권은 KIS Developers에서 실전계좌 API 키를 발급받아 당일 체결내역·잔고를 조회할 수 있다. 키움은 영웅문 Open API+가 있는데 조회용 모듈을 로컬에 깔아야 한다. 토스증권·슬로우메이저 등 일부는 공식 개인용 조회 API를 제공하지 않는다. 그런 곳은 다음 절의 차선책으로 간다.

    스프레드시트·크론으로 주기 수집 설계

    내 블로그 발행은 cron이 주기적으로 초안을 만들고 검사를 통과한 글만 공개하는 구조다. 매매 수집도 같은 뼈대다. 매일 장 마감 뒤 한 번, 조회 API를 호출해 어제 분까지 스프레드시트에 붙이고, 이미 들어와 있는 주문번호면 건너뛴다. 중복 방지가 핵심인데, 이건 아래에서 다시 다룬다.

    가장 단순한 형태는 GOOGLEFINANCE로 시세를 당기는 것인데, 이건 시세용이지 내 체결 데이터가 아니다. 체결까지 자동으로 가져오려면 API 호출 스크립트를 cron에 올리는 수밖에 없다.

    # 매일 17시에 체결내역 동기화 (이미 수집한 주문번호는 skip)
    0 17 * * 1-5 /usr/bin/python3 /home/aileego/sync/kis_trades.py --dup-check order_no >> /var/log/trades.log 2>&1
    

    자동 수집이 안 될 때의 차선책

    API가 없는 증권사라면 매일 정해진 시간에 내려받기 자체를 자동화하는 우회로가 있다. 다만 이 방식은 증권사 화면이 바뀌면 깨지고, 로그인 2차 인증이 걸리면 그날 수집이 실패한다. 차선책은 어디까지나 차선이다. 실패하면 어떻게 알림을 받을지까지 같이 세팅해야 진짜 자동화다.

    실현손익·환손익, 왜 내 계산과 다르게 나오나

    증권사가 손익을 계산하는 산식

    실현손익이란 매도 금액에서 매수 금액과 제비용을 뺀, 증권사 산식으로 확정된 손익이다. 내 계산과 어긋나는 첫 지점이 매수 단가 처리다. 분할 매수한 종목을 일부 매도하면 증권사는 보통 이동평균이나 FIFO 방식으로 어떤 매수분을 파는지 정한다. 내가 “맨 마지막에 산 걸 팔았다”고 계산하면 산식이 다른 이상 숫자는 어긋날 수밖에 없다. 내 계산이 틀린 게 아니라 기준이 다른 거다.

    환율 적용 시점이 만드는 차이

    환손익이 말썽인 이유는 적용 환율이 시점마다 다르다. 매수 당일 환율로 잡느냐, 매도 당일 환율이냐, 정산 환율이냐에 따라 원화 손익이 달라진다. 같은 종목을 같은 가격에 사고 팔아도 통화 손익이 플러스일 수 있다. 증권사 앱의 산식 설명 페이지를 한 번 읽어두면, 이후 대사할 때 어긋난 원인을 짚는 속도가 확 달라진다.

    제비용·세금 포함 여부 확인법

    증권사 손익 화면은 수수료와 거래세 포함 여부를 안내 문구로 적어둔다. “수수료·제세금 포함” 같은 문구가 어디까지 감싸는지 확인하지 않고 내 계산과 비교하면 영영 맞춰지지 않는다. 나는 원천을 증권사로 정한 뒤로는 내 손익을 따로 계산하지 않는다. 증권사 숫자를 그대로 가져오고, 계산 로직은 증권사 산식을 따르는 걸로 통일했다.

    투자 일지를 자동으로 기록하는 디지털 루틴

    자동 기록이 사실과 다르게 저장되는 리스크와 검증법

    자동화가 실패하는 대표적인 네 가지 상황

    배치 지연, 중복 집계, 수정 거래 반영 실패, 권한 만료. 이 넷이면 열에 아홉이다. 실제로 겪은 건 배치 지연이었다. 장 마감 직후 조회를 돌렸는데 당일 체결분이 아직 조회 창구에 안 올라와 있어서, 그날 매매가 통째로 일지에서 빠졌다. 스크립트는 성공으로 종료했으니 로그에는 문제가 없었다. 이게 제일 무섭다. 에러 없이 조용히 틀린다.

    사실 검증 3단계 체크리스트

    그 뒤로 대사 루틴을 만들었다.

    1. 주 단위로 증권사 앱의 당주 체결 건수와 시트 행 수를 맞춘다.
    2. 월 단위로 앱의 월간 실현손익과 시트 합계를 맞춘다. 어긋나면 환율·제비용·FIFO 순서로 원인을 좁힌다.
    3. 수집 스크립트가 비정상 종료하면 알림이 오게 해서, 조용한 실패를 막는다.

    자동화 후에도 사람이 볼 지점

    내 블로그도 자동 검사를 통과한 글만 공개되지만, 걸린 초안은 사람이 검토한다. 투자 데이터도 구조가 같다. 숫자 집계는 기계 몫, “이 숫자가 진짜 맞나”를 눈으로 찍는 대사는 사람 몫으로 남긴다. 그래서 주간 10분 점검을 아래 루틴에 넣어뒀다.

    월간 회고까지 자동으로 만드는 루틴

    주간 10분 점검 루틴

    주말에 커피 한 잔 들고 세 가지만 본다. 이번 주 체결 건수 맞는지, 미리 정해둔 대사 항목 이상 없는지, 알림 온 게 있었는지. 여기서 어긋나는 걸 발견하면 그 자리에서 원인을 좁힌다. 미루면 다음 달에 세 배 고생한다.

    월간 30분 회고 자동 생성 흐름

    월간 회고 파이프라인은 블로그 발행 파이프라인을 그대로 재활용했다. 월 1회 크론이 월간 거래 요약(종목별 손익, 잦은 매매 패턴, 미국장 통화 손익)을 모아 회고 초안을 만든다. 이때 프롬프트는 사실만 다루게 좁혀둔다.

    아래 월간 거래 요약 표만 근거로 회고 초안을 써라. 표에 없는 해석·감정·전망은 한 줄도 쓰지 마라. 종목별 손익, 매매 빈도, 최대 손실 종목 순서로 정리하라.

    감정이나 전망을 기계가 지어내면 그 순간부터 회고가 소설이 된다. 근거 없는 문장을 봉쇄하는 프롬프트 설계가 회고 자동화의 절반이다.

    사람이 써야 할 한 문단

    매매 이유와 그때 심리는 사람이 쓴다. “급등 보고 물탔는데 흔들렸다” 같은 문장은 데이터에서 나오지 않는다. 자동 생성 요약 뒤에 빈 칸 하나를 남겨두고 거기만 손으로 채우는 구조다. 자동화 몫과 사람 몫의 경계선을 안 지키면, 회고가 점점 텅 비고 일지는 다시 죽는다.

    정리: 오늘 세팅하고 주말에 끝내는 행동 순서

    첫 주에 할 일 3가지

    첫째 날, 쓰는 증권사가 조회 API를 주는지 확인하고 키를 발급받는다. 둘째 날, 시트를 만들고 어제·그제 체결내역을 한 번 수동으로 붙여 구조를 잡는다. 주말에 조회 스크립트를 크론에 올리고, 월요일 장 마감 뒤 자동으로 쌓이는지 확인한다. 이 순서면 첫 주 안에 3단계 자동화에 들어간다.

    자동화하지 말아야 할 것

    매매 판단과 매매 이유 기록은 자동화하지 않는다. 나도 콘텐츠 파이프라인을 돌리면서 배웠는데, 자동 검사가 잘못 잡는 경우가 있다. 실제로 중복 검사 가드를 검증해 보니 발행된 글 35편끼리 비교했을 때 595쌍 중 73쌍을 중복이라고 잘못 판정했다. 도구는 검증 대상이지 신앙이 아니다. 투자 일지 자동화도 같다. 원천은 증권사, 집계는 기계, 대사와 회고의 마지막 한 문단은 사람. 이 경계선만 지키면 일지는 1년을 버틴다.

    근거로 삼은 문서


    글쓴이 정보

    이 글은 문체·사실성 두 가지 자동 검사를 통과했습니다. 초안을 쓰는 건 제가 만든 AI 파이프라인이고, 검사에 걸리면 공개하지 않습니다. 만드는 과정

    자주 묻는 질문

    투자 일지를 자동으로 쓰려면 뭐부터 세팅해야 하나요?

    먼저 내 자동화 레벨(0~3단계)이 어디쯤인지 진단하는 게 빠르다. 대부분 1단계, 즉 증권사에서 매매 내역을 수동으로 내려받는 단계에서 막혀 있는데, 깜빡하면 그날 데이터가 구멍 난다는 게 구조적 약점이다. 증권사 Open API(한국투자증권 KIS Developers, 키움 영웅문 Open API+)로 체결내역 조회를 스크립트·크론으로 주기 수집하면 수집부터 자동화된다. 초기 세팅은 반나절 정도 걸리지만 일회용 비용이다.

    실현손익이 내 계산과 증권사 앱 숫자가 다르게 나오는 이유는?

    산식이 다르기 때문이다. 분할 매수한 종목을 일부 매도하면 증권사는 보통 이동평균이나 FIFO 방식으로 매수분을 정하는데, 내가 임의 기준으로 계산하면 숫자가 어길 수밖에 없다. 해외 종목은 적용 환율 시점(매수일·매도일·정산 환율)에 따라서도 원화 손익이 달라진다. 증권사의 산식 설명 페이지를 한 번 읽어두면 대사할 때 원인 짚는 속도가 확 빨라진다.

    증권사가 API를 안 제공하면 투자 일지 자동화는 불가능인가요?

    불가능하진 않지만 차선책이다. 매일 정해진 시간에 매매 내역 내려받기 자체를 자동화하는 우회로가 있는데, 증권사 화면이 바뀌면 깨지고 2차 인증이 걸리면 그날 수집이 실패한다. 실패 시 알림을 받을 장치까지 같이 세팅해야 진짜 자동화다. 가능하면 API를 제공하는 증권사로 원천을 옮기는 게 구조적으로 안정적이다.

    GOOGLEFINANCE로 투자 일지를 자동화할 수 있나요?

    GOOGLEFINANCE는 시세를 당겨오는 용도일 뿐, 내 체결 데이터를 가져오지는 못한다. 체결가·수량·주문번호까지 자동 수집하려면 증권사 조회 API를 호출하는 스크립트를 크론에 등록하는 수밖에 없다. 중복 방지를 위해 이미 수집한 주문번호는 건너뛰는 로직을 꼭 넣어야 한다.

    손으로 쓰는 투자 일지가 실패하는 가장 큰 이유는 뭔가요?

    기록 자체보다 집계와 회고에서 무너진다. 매매 직후가 아니라 저녁에 쓰려다 체결가·수량을 다시 확인하는 게 귀찮아지고, 실현손익 계산이 증권사 숫자와 어긋나면 확인하다 일지 자체를 관두게 된다. 한 달 치를 뒤져 회고하는 작업도 사람을 지치게 한다. 결국 원천 데이터를 하나로 정하고 기계가 수집·집계하게 만드는 게 해답이다.


  • AI 영상 초안 검토 안 하면 광고 실패합니다

    AI 영상 초안 검토 안 하면 광고 실패합니다

    AI 영상 초안, 검수 없이는 결코 광고에 쓰지 마세요

    외주 영상 제작비는 점점 비싸지는데 내놓은 결과물은 에이전시 마음대로다. 이런 상황을 겪다 보니 클라이언트는 결국 영상 제안서 프롬프트를 찾아 직접 콘텐츠를 만들려 한다. 하지만 AI에게 “광고 영상 짜줘”라고 던져만 봤자 되는 게 없다. 나처럼 자동화 파이프라인을 돌려보면 안다. 시스템이 뱉어낸 글을 검수 없이 그대로 쓰면 어김없이 튕긴다. 한 달 반 동안 43편을 발행하며 겪은 일이다. 문체와 사실성 검사를 통과한 글만 공개하도록 해뒀는데, 통과하지 못한 초안은 대부분의 사람이 보자마자 “이거 AI가 쓴 거 아니야?”라고 느낄 정도로 딱딱했다. 광고 영상도 똑같다. 검수 과정을 거치지 않은 AI 초안은 고객을 설득하지 못한다.

    클라이언트가 보고 바로 사인을 누르게 하려면, 단순히 영상 이미지를 생성하는 게 아니라 ‘제안 설계’가 되어야 한다. AI에게 시나리오를 쓰라고 시키기 전에, 무엇을 설득해야 하는지 명확히 정의하지 않으면 쓸모없는 스토리보드만 쌓인다. 단순 영상 생성이 아니라 ‘제안 설계’가 문제다. 결과물을 만드는 도구로 AI를 쓰되, 그 안에 담을 내용은 내가 설계해야 한다.

    단순 영상 생성이 아니라 ‘제안 설계’가 문제다

    AI가 만든 초안을 그대로 쓰면 안 된다. 내 경험상 AI가 쓴 글은 논리적으로 완벽해 보여도 감정적 이입이 부족한 경우가 많다. 광고는 감정을 파는 것이다. 사람의 검수가 필수적이다.

    광고 영상 제안서에 빠지면 안 되는 핵심 요소 3가지

    AI에게 프롬프트를 입력하기 전에, 제안서가 갖춰야 할 뼈대를 먼저 이해해야 한다. 내 SaaS 랜딩페이지 제안서를 구성할 때도 이 원칙은 똑같이 적용된다. 복잡한 것 없다. 딱 세 가지만 집중하자.

    첫째는 타겟 페르소나와 그들이 겪는 문제 의식(Pain Point)다. 페르소나가 모호하면 영상은 엉뚱한 곳을 향하게 된다. “30대 직장인”이라고만 적으면 AI는 흔한 클리셰를 갖다 붙인다. “출근길에 지하철에서 업무 메신저를 확인하며 스트레스를 받는 30대 대리”라고 구체적인 상황을 프롬프트에 넣어야 한다.

    둘째는 솔루션과 브랜드만의 차별점(UVP)다. 제품 특성을 나열하는 게 아니다. 타겟이 겪는 문제를 우리 브랜드가 어떻게 해결해 주는지 보여줘야 한다. “기능이 좋다”가 아니라 “5분 만에 보고서를 완성해서 퇴근할 수 있다”식의 표현이어야 한다.

    셋째는 행동 촉구(CTA)로 이어지는 스토리라인 구조다. 문제 제시에서 시작해서 브랜드의 해결책을 거쳐 구매 혹은 문의라는 행동으로 유도하는 흐름이 필요하다. 이 흐름이 깨지면 영상은 그저 예쁜 영상 클립의 나열에 불과하다.

    AI 영상 초안 검토 안 하면 광고 실패합니다. 영상 제안서 프롬프트를 짤 때 이 세 가지 요소를 먼저 변수로 잡아야 한다.

    브랜드명 하나로 4안을 뽑아내는 마법의 프롬프트 구조

    준비가 되었으면 실제로 프롬프트를 짤 차례다. 브랜드명 하나만 던져주고 알아서 4가지 안을 뽑아내게 하려면 ‘컨텍스트 채우기’가 필요하다. 이 구조의 핵심은 변수를 프롬프트 앞부분에 몰아넣는 것이다.

    변수에는 브랜드 톤앤매너와 타겟 설정을 넣는다. 그리고 영상 시나리오와 카피를 동시에 요청하는 멀티태스킹 구문을 써야 시간이 준다. 내 자동화 파이프라인에도 이 로직이 들어있다. 단순히 “스크립트 짜줘”라고 하면 대사만 나온다. “화면 구성(Shot size, Action)과 대사를 표로 정리해줘”라고 해야 시각적 지시가 포함된 스토리보드가 나온다.

    복사해서 쓸 수 있는 ‘초안 생성용 마스터 프롬프트’를 공개한다. 아래 프롬프트의 [괄호] 안에 내 브랜드 정보만 채워 넣으면 된다.

    당신은 10년 차 광고 기획자다. [브랜드명]의 15초 짧은 광고 영상 제안서 4가지를 작성해라.

    1. 타겟: [구체적인 페르소나]
    2. 브랜드 톤앤매너: [친근함/전문성/신뢰감 중 택1 및 구체적 설명]
    3. 핵심 메시지: [제품이 해결해 주는 문제]
    4. 차별점: [경쟁사와 다른 점]

    각 안은 다음 형식을 지켜라:
    – 컨셉명: [한 줄 요약]
    – 스토리보드: (화면 구성 | 대사/내레이션) 형식의 표, 3컷 이상
    – CTA: [마지막 행동 유도 문구]

    이 프롬프트는 AI 스토리보드와 카피라이팅을 한 번에 처리한다. 변수만 바꿔 넣으면 수십 개의 제안안이 나온다. 나는 이 방식으로 헤드리스로 LLM을 부를 때 비용을 획기적으로 줄였다. 기본 설정은 1회 호출에 $0.78이었는데, 모델과 작업 디렉터리를 지정하고 불필요한 도구를 떼어내자 $0.028로 27배나 줄었다. 프롬프트 엔지니어링은 비용 절감과도 직결된다.

    브랜드 영상 4안 생성 과정

    AI가 뽑은 4안 중 살릴 1안 고르는 필터링 법칙

    4가지 안이 나왔다면 이제 골라내야 한다. 다 쓸 수 없다. 내가 자동화로 뽑은 글도 사실성 검사에 걸려 폐기하는 경우가 있다. AI가 쓴 글에서 맹신하지 말고 걸러내는 기준이 필요하다. 영상 초안도 마찬가지다.

    1. 감정적 이입이 되는지 확인한다. 논리적 흐름이 아무리 잘 맞아도, 보는 사람의 공감을 얻지 못하면 폐기다.
    2. 구체적인 시각적 지시(Shot size, Action)가 포함됐는지 검토한다. “남자가 웃는다”보다는 “클로즈업으로 남자가 안도의 한숨을 쉰다”가 제작팀에 더 정확히 전달된다.
    3. 클라이언트의 예산 범위 내에서 구현 가능한지 현실성을 점검한다. 헬리콥터 샷이나 대규모 엑스트라가 필요한 안은 예산이 빠듯한 소상공인 고객에게 쓸모가 없다.

    AI 초안 검수는 이런 기준으로 해야 한다. 나는 직접 만든 중복 검사 가드를 검증해 본 적이 있다. 이미 발행된 글 35편끼리 비교했는데, 595쌍 중 73쌍(12.3%)을 중복이라고 잘못 판정했다. 기계의 판단은 오류가 있다. 사람의 ‘안목’이 개입해야 하는 지점이다.

    초안을 제품급 퀄리티로 끌어올리는 수정 팁

    고른 1안도 그대로 쓰기엔 부족하다. AI가 쓴 글은 너무 기계적으로 느껴질 때가 많다. 자동화된 글의 AI 문체 지문을 재보니, 처음에는 1,000자당 10.1건이나 나왔다. 손으로 직접 고친 뒤에는 1.4건으로 떨어졌다. 사람이 손대는 포인트가 분명히 있다.

    모호한 표현을 제거하고 카메라 워킹을 구체적으로 수정해야 한다. “제품이 나온다”를 “손이 들어와 제품을 집어 든다(클로즈업)”으로 바꾸는 식이다. 브랜드 목소리(Voice of Brand)에 맞춰 대사를 다듬는 것도 중요하다. 너무 정중하거나 딱딱한 어미를 브랜드의 분위기에 맞게 바꿔라.

    마지막으로 인간적인 ‘착각’이나 ‘미스’를 의도적으로 추가해 자연스럽게 만들어라. 완벽한 대사보다는 더듬거리거나 말을 잇는 듯한 표현이 현실감 있게 들린다. AI 영상 수정은 이런 디테일에서 승패가 갈린다.

    AI 제안서, 검수 없이는 광고 실패로 직결됩니다. AI는 ‘생성’을, 당신은 ‘판단’을 해야 합니다. 1인 빌더로서 AI와 협업하는 철학은 바로 여기에 있다. 지금 바로 브랜드명을 넣고 첫 번째 안을 뽑아보세요.

    근거로 삼은 문서


    글쓴이 정보

    이 글의 초안도 운영자가 만든 AI 파이프라인이 씁니다. 문체·사실성 자동 검사를 통과한 글만 공개되고, 걸린 초안은 사람이 고쳐서 내보냅니다. 전체 구조는 포트폴리오에 적어 두었습니다.

    자주 묻는 질문

    AI가 만든 영상 제안서를 그대로 쓰면 안 되는 이유는?

    AI가 작성한 글은 논리적으로 완벽해 보여도 감정적 이입이 부족하고 기계적인 느낌을 줍니다. 검수 과정을 거치지 않은 초안은 고객을 설득하지 못하며 광고 효과를 떨어뜨립니다.

    AI 영상 프롬프트에 꼭 넣어야 할 핵심 요소 3가지는?

    구체적인 타겟 페르소나와 그들의 문제 의식, 브랜드만의 차별화된 솔루션(UVP), 그리고 문제 제시에서 행동 촉구(CTA)로 이어지는 스토리라인 구조를 반드시 포함해야 합니다.

    광고 영상 제안서용 마스터 프롬프트 구조는 어떻게 되나요?

    변수(타겟, 톤앤매너 등)를 앞부분에 몰아넣고, 화면 구성과 대사를 포함한 스토리보드 표를 요청하는 멀티태스킹 구문을 사용해야 합니다. 이렇게 하면 시각적 지시가 포함된 4가지 안을 효율적으로 뽑아낼 수 있습니다.

    AI가 제안한 4가지 안 중 최적안을 고르는 기준은?

    감정적 이입이 되는지, 구체적인 시각적 지시(샷 사이즈, 액션)가 포함됐는지, 그리고 클라이언트의 예산 범위 내에서 구현 가능한지 현실성을 기준으로 필터링해야 합니다.

    검수 없는 AI 영상 초안의 가장 큰 문제점은?

    텍스트와 마찬가지로 감정이 결여되어 사람에게 딱딱하게 느껴지며, 구체적인 제작 지시가 없어 실제 영상 제작 시 불필요한 수정 비용이 발생할 수 있습니다.

  • 워드프레스 자동 포스팅, 1인 빌더의 3단계 루틴

    워드프레스 자동 포스팅, 1인 빌더의 3단계 루틴

    워드프레스 자동 포스팅, 왜 사람의 개입을 줄여야 하는가?

    AI 초안을 일일이 검토하는 1인 빌더의 딜레마

    혼자서 여러 SaaS를 굴리다 보면 콘텐츠 발행이 발목을 잡는다. 워드프레스 자동 포스팅을 도입해도 결국 사람이 초안을 검수해야 하는 한계에 부딪히기 때문이다. AI가 만든 글을 일일이 읽고 사실 관계를 확인하고 어색한 문구를 고치는 데 시간이 턱없이 부족하다. SaaS를 혼자 운영하는 입장에서 콘텐츠 검수에 하루 종일 시간을 쓸 수는 없다.

    유인 자동화가 오히려 효율을 갉아먹는 이유

    기계가 초안을 만들고 사람이 최종 승인을 누르는 방식은 안전해 보이지만 비효율적이다. 검수 대기열에 글이 쌓이면 발행 주기가 흐트러지고, 결국 블로그는 방치된다. 사람의 개입을 줄이지 않으면 자동화의 의미가 없다. 지난 한 달 반 동안 43편을 발행하면서 이 병목 현상을 뼈저리게 느꼈다.

    무인 발행 시스템의 필요성과 구글 SEO의 현실

    구글이 AI 콘텐츠 자체를 패널티 주는 것은 아니다. 다만 아무런 가치도 없이 기계로 찍어낸 글은 결국 색인에서 밀려난다. 무인 발행 시스템이란 사람의 수동 검수 없이 기계가 자체 품질 기준을 통과한 콘텐츠만 공개하는 자동화 파이프라인이다. 이 기준을 어떻게 세우느냐가 1인 빌더의 생존을 가른다.

    1단계: REST API vs 플러그인, 발행 자동화 세팅의 선택

    워드프레스 REST API로 자동 발행 환경 구축하기

    발행 자동화를 세팅할 때 플러그인을 쓸지 REST API를 쓸지 고민하게 된다. 처음에는 편의를 위해 자동 포스팅 플러그인을 여러 개 깔았다. 설정이 간단해서 당장은 편했지만, 사이트가 무거워지고 충돌이 잦아졌다. 결국 확장성과 제어력을 위해 REST API 방식으로 갈아탔다. 지금은 작업 폴더 183개, git 저장소 90개를 관리하는 파이프라인에서 API로 직접 쏴서 발행한다.

    자동 포스팅 플러그인의 한계와 보안상 위험

    플러그인 방식은 의존성이 높다. 업데이트가 멈추거나 취약점이 발견되면 사이트 전체가 노출된다. 1인 빌더가 모든 플러그인의 보안 패치를 쫓기는 현실적으로 불가능하다. 발행 로직을 내 코드베이스로 가져오면 이런 외부 의존성을 끊어낼 수 있다.

    가장 적합한 방법은 무엇인가: 1인 빌더의 운영 기준

    REST API로 직접 통신하는 편이 유지보수에서 압도적으로 유리하다. 워드프레스 설치 경로나 환경이 바뀌어도 헤더와 엔드포인트만 수정하면 그만이다. 기초적인 통신 코드는 의외로 단순하다.

    import requests
    import base64
    
    wp_url = "https://your-domain.com/wp-json/wp/v2/posts"
    user = "your_username"
    password = "your_app_password"
    credentials = base64.b64encode(f"{user}:{password}".encode()).decode()
    headers = {"Authorization": f"Basic {credentials}", "Content-Type": "application/json"}
    
    payload = {
        "title": "자동 발행 테스트",
        "content": "본문 내용",
        "status": "publish"
    }
    
    response = requests.post(wp_url, headers=headers, json=payload)
    

    애플리케이션 비밀번호를 발급받아 헤더에 넣고 JSON 페이로드를 쏘면 끝이다. 플러그인 UI에 얽매이지 않고 내가 원하는 형태로 발행 로직을 구성할 수 있다.

    2단계: 메타 태그와 슬러그, SEO 요소 자동화 처리

    발행 전 메타 태그 자동 매핑 로직 설계

    발행 자체는 API로 해결되지만, SEO 요소를 비워두면 검색 유입은 기대할 수 없다. 타이틀, 설명, 슬러그를 사람이 넣어주는 건 자동화가 아니다. AI가 초안을 만들 때 메타 데이터도 함께 뽑아서 페이로드에 매핑해야 한다.

    URL 슬러그 자동 최적화 방법

    슬러그 자동 최적화란 검색 엔진과 사용자 모두에게 유리한 URL 구조를 AI가 생성 시점에 분석하여 적용하는 과정이다. 한글 제목을 그대로 인코딩하면 URL이 지저분해지므로, 핵심 키워드를 영문으로 번역하고 불필요한 불용어를 제거하는 로직을 앞단에 둔다.

    카테고리와 태그 자동 분류의 기준

    메타 태그 매핑은 AI 프롬프트에서 JSON 형태로 값을 받아 처리한다. 프롬프트에서 구조화된 데이터를 강제하면 코드에서 파싱하기 편하다.

    {“title”: “제목”, “description”: “80자 이내 요약”, “slug”: “english-slug-only”, “category”: [“SaaS”], “tags”: [“자동화”, “워드프레스”]}

    이 결과값을 REST API 페이로드의 필드에 맞게 꽂아 넣으면 메타 데이터 입력 과정이 완전히 자동화된다.

    3단계: 구글 패널티를 피하는 기계의 품질 검사 기준

    구글 SEO 패널티를 유발하는 AI 문체의 특징

    무인 발행에서 가장 까다로운 부분은 품질 검사다. 기계가 쓴 글은 특유의 정형화된 패턴을 보인다. AI 문체 지문이란 특정 LLM이 반복적으로 사용하는 구문 패턴과 어휘 분포를 수치화한 데이터로, 구글의 패널티 대상이 되는 기계적 텍스트의 징후다. 자동 생성한 글의 AI 문체 지문을 재보니 1,000자당 10.1건이었다. 이대로 발행하면 패널티를 피하기 어렵다.

    사실성 및 중복 콘텐츠 자동 검증 로직

    지문을 낮추기 위해 문체 변환기를 거치고 다시 검사를 돌린다. 손으로 고친 뒤에는 1.4건으로 떨어지는 걸 확인했다. 이 기준을 통과해야 발행 대기열로 넘어간다. 사실성 검증과 중복 검사도 병행한다. 직접 만든 중복 검사 가드를 검증해 보니, 이미 발행된 글 35편끼리 비교했을 때 595쌍 중 73쌍(12.3%)을 중복이라고 잘못 판정했다. 민감도 조절이 필요한 숙제다.

    사람이 개입하지 않는 안전한 자동화 기준선

    통과하지 못한 초안은 발행되지 않는다. 기계가 기준을 통제하기 때문에 품질이 떨어지는 글이 노출될 일이 없다. 다만 중복 검사의 오탐지율을 그대로 두면 발행량이 급감하므로, 예외 처리 로직을 보완하는 중이다.

    자동 포스팅 품질 검사 일러스트

    자동화 파이프라인의 비용과 스케줄 관리

    헤드리스 LLM 호출 비용 최적화

    무인으로 시스템을 돌리면 비용이 걱정된다. 헤드리스로 LLM을 부를 때 기본 설정은 1회 호출당 $0.78이었다. 매일 글을 쓰고 검사하면 비용이 감당이 안 된다. 모델과 작업 디렉터리를 지정하고 불필요한 도구를 떼어내니 $0.028로 27배 줄었다. 기본 설정 그대로 쓰면 큰일 난다.

    크론 스케줄링과 병렬 처리

    지금은 cron 63개를 무인으로 돌리고 있다. 글 생성, 검사, 발행, 모니터링이 각각의 크론으로 분리되어 있다. 시간대를 잘 분산시키지 않으면 서버 리소스가 튀고 API 호출이 실패한다.

    1인 빌더의 리소스 한계 관리

    자동화가 늘어난다고 해서 사람의 피로도가 없어지는 건 아니다. 파이프라인이 꼬일 때마다 어디서 문제가 났는지 추적하는 게 일이다. 로그를 꼼꼼히 남기지 않으면 디버깅 자체가 불가능해진다.

    발행 이후: 무인 크론 루틴과 예외 처리 전략

    크론(Cron)으로 이어지는 1인 빌더의 발행 루틴

    글은 자동 파이프라인이 주 1~5편으로 불규칙하게 초안을 만든다. 불규칙적인 주기가 오히려 자연스러운 발행 패턴으로 보인다. 문체와 사실성 자동 검사를 통과한 글만 워드프레스에 공개된다. 이 루틴은 사람이 개입하지 않는다.

    검사에서 걸린 초안, 사람은 어떻게 후속 처리하는가

    검사에서 불합격한 초안은 사람이 검토한다. 자동화가 완벽할 수 없기 때문에, 기계가 판단하기 애매했던 글은 결국 내가 열어보게 된다. 주로 팩트 오류나 심하게 뒤틀린 문맥이 원인이다. 이때는 초안을 폐기하거나 프롬프트를 수정하여 처음부터 다시 돌린다.

    자동화 시스템의 한계와 모니터링 세팅

    시스템이 멈췄을 때 알 수 있어야 한다. 에러 로그를 슬랙으로 쏘게 세팅해 두지 않으면, 발행이 멈춘 지 일주일이 지나서야 알게 된다. 모니터링은 선택이 아니라 필수다.

    요약 및 1인 빌더를 위한 다음 액션

    워드프레스 자동 발행 시스템 3단계 루틴 요약

    REST API로 발행 파이프라인을 잡고, 메타 태그와 슬러그를 자동 매핑하며, 기계의 자체 품질 검사로 패널티를 방어하는 것이 핵심이다. 플러그인에 의존하지 않고 비용을 통제하는 것도 빠질 수 없는 과정이다.

    지금 바로 세팅해야 할 자동화 체크리스트

    1인 빌더라면 다음 항목을 점검해 보자.

    • REST API 애플리케이션 비밀번호 발급 및 테스트 발행
    • AI 초안 생성 시 메타 데이터 JSON 매핑 로직 추가
    • 발행 전 AI 문체 지문 및 중복 검사 스크립트 구현
    • 불합격 초안의 후속 처리 및 에러 모니터링 세팅

    SaaS 규모를 키우기 위한 콘텐츠 전략

    콘텐츠 발행이 기계화되면 1인 빌더는 제품 개발에 집중할 수 있다. 완벽한 자동화는 없지만, 한계를 인정하고 기계가 통제할 수 있는 영역을 넓히는 게 결국 SaaS를 키우는 길이다.

    참고한 공식 문서


    글쓴이 정보

    이 글의 초안도 운영자가 만든 AI 파이프라인이 씁니다. 문체·사실성 자동 검사를 통과한 글만 공개되고, 걸린 초안은 사람이 고쳐서 내보냅니다. 전체 구조는 포트폴리오에 적어 두었습니다.

  • 텍스트 한 줄로 카드뉴스 영상 만드는 법

    텍스트 한 줄로 카드뉴스 영상 만드는 법

    이젠 Canva에서 이미지 10장 직접 넣는 게 의미 없다

    1인 사업자가 카드뉴스에 집착해야 하는 진짜 이유

    매일 블로그 글을 쓰고 나서 릴스로 옮기려니 영상 편집이 발목을 잡는다. 카드뉴스 영상 만드는 법을 검색해봐야 Canva에서 이미지 10장 넣고 텍스트 박고 음악 입히는 반복 작업이 전부다. 1인 사업자에게 편집 프로그램 켜는 시간은 곧 비용이다. 포토샵이나 프리미어프로를 배우는 것보다 텍스트 한 줄을 API에 던져서 완성본을 받아내는 방식으로 시스템을 바꿨다.

    인스타 한 계정의 최근 30편을 재보니 릴스 18편은 조회수 중앙값이 50이었고, 피드 12편은 0이었다. 숫자가 보여주듯 사진 카드뉴스는 피드에서 묻힌다. 세로형 영상 포맷이 아니면 노출 자체가 안 된다. 내가 카드뉴스에 매달리는 건 단순한 유행이 아니라 트래픽을 남기기 위한 가장 현실적인 출구라서다.

    편집 프로그램 없이 텍스트만으로 영상이 만들어지는 원리

    카드뉴스 자동화란 블로그 HTML이나 마크다운 텍스트를 파싱하여 이미지 생성 API와 비디오 렌더링 API로 전달해 완성본을 반환하는 무인 파이프라인을 뜻한다. 사람이 끼어들 지 않는다. 이 블로그는 한 달 반 동안 43편을 발행했다(2026-07-07~08-23, 47일). 이 작업이 가능한 이유는 편집을 기계에 떠넘겼기 때문이다. 주 1~5편으로 불규칙하게 초안을 만들고 문체와 사실성 검사를 통과한 글만 공개되는 구조다.

    블로그 텍스트 한 줄, 카드뉴스 영상으로 변환하는 워크플로우

    텍스트 입력부터 9:16 비율 변환까지 자동화 파이프라인

    아일리고(AILEEGO)가 실제 운영 중인 크론 기반 텍스트-영상 자동화 워크플로우는 4단계로 짜여 있다. 블로그 글이 발행되면 텍스트가 파싱되어 이미지로 변환되고, 9:16 캔버스에 합성된 뒤 렌더링 검증을 거쳐 영상으로 나온다.

    1. 블로그 텍스트를 문단 단위로 분할한다
    2. 각 문단의 핵심 키워드를 추출해 이미지를 매칭하거나 API로 생성한다
    3. 9:16 캔버스에 텍스트와 이미지를 합성해 렌더링한다
    4. 폰트 렌더링 깨짐 여부를 시각적 안전 마진 안에서 검증한다

    헤드리스로 LLM을 부를 때 기본 설정은 1회 $0.78 이었다. 모델과 작업 디렉터리를 지정하고 불필요한 도구를 떼자 $0.028 로 27배 줄었다. 텍스트와 이미지 매칭을 한 번에 처리하면 비용이 터지기 때문에 파싱 단계부터 극단적으로 쪼개서 던지는 게 낫다.

    node render_video.js --input post.md --aspect 9:16 --safeZone true

    API를 활용한 이미지-텍스트 매칭 및 자동 자막 생성

    이미지 매칭은 키워드 추출 API와 이미지 생성 API를 순차적으로 묶어서 처리한다. 텍스트가 입력되면 핵심 명사를 뽑아내고, 그 단어에 맞는 프롬프트를 조립해 비주얼을 만들어낸다.

    주어진 텍스트에서 한 문장씩 추출해 9:16 비율에 맞는 카드뉴스 장면을 JSON 형태로 설명하라. 각 장면은 배경 이미지 생성 프롬프트와 화면에 띄울 텍스트로 구성한다.

    9:16 세로형 카드뉴스 영상의 가장 이상적인 길이는?

    시청 지속률을 높이는 최적의 초 단위

    9:16 세로형 영상 최적화란 시청자의 첫 1초 이탈을 막기 위해 텍스트 노출 시간과 장면 전환 속도를 플랫폼 데이터 기반으로 조절하는 과정을 의미한다. 무작정 짧게 만들면 조회수가 나오는 게 아니다. 텍스트가 너무 길어 읽기 부담스러운 구간에서 시청자가 이탈하기 시작한다.

    영상 길이를 최소 단위로 쪼개고 첫 장면에서 시선을 끄집어오는 구조로 수정했다. 인스타 데이터를 보면 릴스 18편의 조회수 중앙값이 50이었고 피드 12편은 0이었다. 텍스트를 읽어주는 시간을 장면 전환 속도에 맞추다 보니 자연스럽게 짧아졌다.

    플랫폼(인스타/쇼츠)별 체류 시간 분석 데이터

    쇼츠와 릴스는 체류 시간 잣대가 다르다. 인스타는 첫 3초가 관건이고 쇼츠는 끝까지 보는 비율이 더 중요하다. 텍스트를 9:16 화면에 꽉 채우기보단 상단 3분의 1에만 배치하고 나머지는 여백으로 두니 이탈률이 낮아졌다.

    텍스트를 영상으로 자동 변환

    영상 제작 시 텍스트가 화면 밖으로 나가거나 깨지는 것 방지법

    모바일 노치(UI)를 고려한 9:16 안전 영역(Safe Zone) 설정

    안전 영역(Safe Zone)이란 스마트폰의 노치나 하단 UI 가림 현상을 피하기 위해 9:16 캔버스 중앙에 확보해야 하는 텍스트 렌더링 경계선이다. 자동화 과정에서 텍스트 오버플로우로 영상을 폐기한 적이 있다. AI가 만든 텍스트가 9:16 화면 밖으로 나가거나 폰트 렌더링이 깨지는 현상이 잦았다.

    직접 만든 중복 검사 가드를 검증해 보니 이미 발행된 글 35편끼리 비교했을 때 595쌍 중 73쌍(12.3%)을 중복이라고 잘못 판정했다. 텍스트 매칭 검증 로직도 비슷한 함정이 있다. 지나치게 엄격하게 걸러내면 정상 텍스트까지 잘려 나간다. 그래서 수동 검토 단계를 아예 없애지는 못했다.

    AI 자동 줄바꿈 및 폰트 렌더링 깨짐 방지 로직

    CSS 수준의 박스 모델을 캔버스에 그대로 적용했다. 자간과 행간을 고정하고, 텍스트가 상자를 벗어나면 글자 크기를 줄이거나 줄바꿈하는 스크립트를 넣었다.

    {
      "canvas": {
        "width": 1080,
        "height": 1920,
        "safe_zone": { "top": 200, "bottom": 200, "padding": 80 }
      },
      "text_box": "wrap_text_hard",
      "font": "Pretendard-Bold"
    }

    설정을 바꿔 렌더링을 다시 돌리니 폐기율이 줄었다. 텍스트가 가장자리로 나가는 문제는 safe_zone 여백을 넓히는 것으로 해결됐다. 폰트가 깨지는 건 시스템 기본 폰트를 쓰지 않고 웹폰트를 캔버스에 임베딩하면서 잡혔다.

    텍스트 1줄이면 콘텐츠 매트릭스가 완성된다

    1인 빌더를 위한 콘텐츠 자동화 다음 단계

    혼자서 여러 SaaS를 굴리려면 콘텐츠 발행이 기계화되어야 한다. 현재 작업 폴더가 183개, git 저장소가 90개 쌓여 있다. cron 63개를 무인으로 돌리고 있다. 1인 빌더의 생산성은 여기서 나온다.

    자동 생성한 글의 AI 문체 지문을 재보니 1,000자당 10.1건이었고, 손으로 고친 뒤 1.4건으로 떨어졌다. 영상 변환 전 텍스트 품질부터 잡아야 한다. 문체가 기계 티를 내면 시청자가 스와이프를 멈추지 않는다.

    지금 바로 실험해 볼 텍스트-영상 프롬프트

    텍스트만으로 영상을 찍어내는 시스템 구축이 끝났다면 다음은 자동화 시스템 고도화와 훅 설계로 넘어가면 된다. 아래 프롬프트를 복사해 바로 실험해 볼 수 있다.

    블로그 본문 500자를 입력할 테니, 9:16 카드뉴스 3장 분량의 콘티를 짜라. 각 장면은 상단에 들어갈 10자 이내의 헤드라인, 중앙의 본문 텍스트, 하단의 이미지 생성 키워드를 포함한다.

    이 흐름이 익숙해지면 텍스트 1줄로 영상 1편을 찍어내는 1인 공장 라인이 완성된다.

    근거로 삼은 문서


    글쓴이 정보

    여기 올라오는 글의 초안은 운영자가 만든 AI 파이프라인이 자동으로 만듭니다. 다만 문체·사실성 검사를 통과하지 못한 초안은 공개되지 않고 사람이 손봅니다. 그 과정은 포트폴리오에서 볼 수 있습니다.

    자주 나오는 질문

    카드뉴스 영상을 만들 때 텍스트가 화면 밖으로 나가는 건 어떻게 방지하나요?

    9:16 캔버스 중앙에 스마트폰 노치나 하단 UI를 피하는 안전 영역(Safe Zone)을 설정해야 합니다. CSS 박스 모델처럼 자간과 행간을 고정하고, 텍스트가 상자를 벗어나면 글자 크기를 줄이거나 줄바꿈하는 스크립트를 적용하면 렌더링 깨짐을 막을 수 있습니다.

    9:16 세로형 카드뉴스 영상의 가장 이상적인 길이는 얼마인가요?

    시청자의 첫 1초 이탈을 막기 위해 텍스트 노출 시간과 장면 전환 속도를 조절하는 것이 핵심입니다. 무작정 짧게 만들기보다 텍스트를 읽어주는 시간에 맞춰 전환 속도를 세팅하고, 텍스트는 화면 상단 3분의 1에만 배치해 이탈률을 낮추는 게 좋습니다.

    텍스트 한 줄로 카드뉴스 영상을 자동화하는 원리는 무엇인가요?

    블로그 HTML이나 마크다운 텍스트를 파싱해 이미지 생성 API와 비디오 렌더링 API로 전달하는 무인 파이프라인을 구축하는 방식입니다. 텍스트에서 핵심 명사를 추출해 이미지를 매칭하고 9:16 캔버스에 합성한 뒤 렌더링 검증을 거쳐 완성본을 받아냅니다.

    카드뉴스 자동화 작업 시 API 비용을 줄이려면 어떻게 해야 하나요?

    LLM을 호출할 때 모델과 작업 디렉터리를 지정하고 불필요한 도구를 제외하면 비용을 크게 낮출 수 있습니다. 텍스트와 이미지 매칭을 한 번에 처리하면 비용이 터지므로, 파싱 단계부터 극단적으로 잘게 쪼개서 API에 던지는 것이 유리합니다.

    쇼츠와 릴스는 카드뉴스 시청 지속률 기준이 어떻게 다른가요?

    인스타 릴스는 첫 3초가 관건이고, 쇼츠는 끝까지 보는 비율이 더 중요하게 작용합니다. 그래서 텍스트를 9:16 화면에 꽉 채우기보단 상단 3분의 1에만 배치하고 나머지는 여백으로 두는 방식으로 플랫폼별 이탈률을 낮출 수 있습니다.

    자동화된 카드뉴스에서 텍스트 중복이나 잘못된 매칭은 어떻게 검사하나요?

    자동화 과정에서 텍스트 오버플로우나 중복 판정이 발생할 수 있어 수동 검토 단계를 완전히 없애기는 어렵습니다. 지나치게 엄격하게 필터링하면 정상 텍스트까지 잘려 나가기 때문에, 검증 로직과 함께 최종적으로 수동 검토를 거치는 하이브리드 방식이 안전합니다.


  • 인스타 카드뉴스 만드는법 — 규격부터 표지까지

    인스타 카드뉴스 만드는법 — 규격부터 표지까지

    인스타 카드뉴스, 사이즈부터 정하고 시작하세요

    인스타 카드뉴스 만드는법을 검색하는 순간 대부분은 디자인 프로그램을 켜기도 전에 지쳐 있다. 뭘로 만들지, 몇 장을 만들지, 표지엔 뭘 쓰지. 첫 세트를 만들 때 사이즈와 장수부터 고정하고 시작해야 중간에 무너지지 않는다. 이 순서를 뒤집으면 만들다가 규격을 다시 바꾸는 일이 생기고, 그러면 이미 만든 장을 전부 다시 손보게 된다.

    피드 규격 1080×1350 vs 정사각형, 무엇을 고를까

    피드에서 세로로 긴 1080×1350은 화면 점유율이 커서 스크롤을 잡아낸다. 정사각형은 어떤 플랫폼에 돌려도 깨지지 않는 게 장점이다. 계정을 인스타 피드 중심으로 운영한다면 4:5 비율의 1080×1350을 기본값으로 두는 편이 낫다. 같은 콘텐츠를 블로그 썸네일로 재활용할 계획이라면 정사각형도 괜찮다. 내 경우엔 재활용 여부를 먼저 정하고 규격을 정한다. 순서가 반대면 결국 하나를 포기하게 된다.

    장수는 몇 장이 적당한가

    장수 설계는 의외로 아무도 안 알려주는 부분이다. 기준은 단순하다. 한 장이 하나의 문장을 담는다면, 전달하려는 문장의 개수가 장수다. 내 운영 기준으로는 표지 한 장, 본문 네다섯 장, 마무리 한 장을 한 세트로 묶는다. 장수를 늘려 욕심내면 중간 장부터 넘기는 속도가 빨라진다. 정리한 내용을 자르기 아까워서 길게 올리면 스와이프하는 손가락은 정직하다. 아끼는 문장부터 지우는 게 장수 줄이기의 시작이다.

    세로 긴 이미지를 피해야 할 때

    4:5보다 더 세로로 긴 규격은 피드에서 잘리는 영역이 생긴다. 잘리는 영역에 핵심 문구를 넣으면 표지인데도 메시지가 안 보인다. 안전선을 두고 텍스트를 배치하는 습관이 필요하다.

    디자인 못 해도 톤이 유지되는 ‘1페이지 규칙 시트’

    카드뉴스 계정의 통일감은 디자인 감각이 아니라 규칙에서 나온다. 계정을 들어가 봤을 때 “느낌이 있다”는 건 폰트와 색과 여백이 매 장 같다는 뜻이고, 그건 규칙으로 만들 수 있다.

    솔직히 고백하면 나도 처음엔 매번 새로 만들었다. 그날 기분대로 폰트를 고르고 색을 골랐더니 열 장쯤 쌓인 시점에서 피드가 지저분해졌다. 그러고 나서 만든 게 규칙 시트 한 장이다. 폰트 2종, 색 3개, 여백 기준만 적은 문서다. 그다음부터는 톤이 흔들리지 않았다.

    폰트 2종·색상 3개만 고정하는 이유

    선택지가 많으면 매번 판단이 필요하고, 판단은 실수를 낳는다. 제목용 굵은 폰트 한 종과 본문용 폰트 한 종, 배경색과 본문 글자색과 포인트색 하나씩. 이렇게 묶어두면 고를 게 없어서 오히려 빨라진다. 포인트색은 하이라이트 문구에만 쓴다는 규칙까지 적어두면 강조의 의미도 살아 있다.

    여백과 정렬 규칙이 통일감의 대부분을 만든다

    양옆 여백을 모든 장에서 같은 값으로 고정하고, 본문 텍스트는 왼쪽 정렬로 통일한다. 가운데 정렬과 왼쪽 정렬을 장마다 섞는 게 톤이 무너지는 가장 빠른 길이었다. 규칙 시트엔 이렇게 적어둔다.

    제목 폰트: 프리텐다드 볼드 / 본문 폰트: 프리텐다드 레귤러 / 배경 #FFFFFF / 본문 #1A1A1A / 포인트 #FF5A36 / 양옆 여백 96px / 본문 왼쪽 정렬 / 한 장 최대 3줄

    이 시트를 툴 옆에 띄워두고 만들면 디자인을 몰라도 열 장이 같은 옷을 입고 나온다.

    초보자에게 빠른 무료 툴 비교

    카드뉴스 제작 툴은 캔바와 미리캔버스가 양대 산맥이다. 어느 쪽이냐보다 중요한 건 템플릿 재사용이 얼마나 편하냐다. 세트를 한 번 만들면 그 세트가 다음 세트의 템플릿이 되니까.

    툴 무료 범위 이런 경우에 쓴다
    캔바 템플릿·클라우드 저장 대부분 무료, 일부 요소 유료 템플릿 복제해서 계정 단위로 굴릴 때
    미리캔버스 국내 템플릿 풍부, 다운로드에 제한 있는 경우 있음 한글 문구 완성형 템플릿에서 시작할 때
    PPT·키노트 설치돼 있으면 공짜 규칙 시트가 이미 있고 형태만 반복할 때

    캔바는 만든 세트를 복제해두고 텍스트만 바꾸는 흐름에 맞다. 미리캔버스는 한국어 문구가 들어간 템플릿이 많아서 첫 세트의 뼈대를 얻기 쉽다. PPT도 규칙 시트만 있으면 충분하다. 나는 어느 툴이냐보다 복제해서 수정하는 루틴을 지키느냐가 제작 속도를 갈랐다.

    폰트·이미지 저작권 주의점

    툴 안에 있는 요소라고 전부 자유로운 건 아니다. 무료 티어는 상업 계정 사용이 막힌 경우가 있어서, 나는 라이선스가 명시된 폰트만 쓴다. 이미지도 마찬가지로 출처가 확인되는 것만 쓴다. 스폰서 붙은 계정은 상업 이용에 해당하니 더 조심해야 한다.

    표지 한 장이 스와이프를 결정합니다

    표지는 세트 전체의 광고다. 표지에서 약속한 걸 본문이 이행해야 완주율이 살아난다.

    표지 문구 패턴 3유형

    질문형은 “주 몇 회가 효과 있을까”처럼 궁금증을 만든다. 숫자형은 “월 구독료 비교 5개 서비스”처럼 담긴 내용의 양을 보여준다. 결과 제시형은 “이렇게 바꿨더니 지출이 잡혔다”처럼 결론부터 노출한다. 과한 자극 문구보다 구체적인 약속이 사람을 끝까지 데려간다. 자극으로 한 번 넘겨놓고 본문이 약속을 못 지키면 이탈은 더 빨라진다.

    자동 생성 초안을 사람이 재검토하다 걸러낸 표지가 하나 있었다. “알아두면 돈 버는 정보”라는 문구였는데, 본문엔 구체적 금액이 하나도 없었다. 약속과 내용이 안 맞는 전형이다. 그 초안은 공개되지 못했다.

    표지에 넣지 말아야 할 것

    본문 미리보기를 전부 박는 건 금물이다. 표지엔 주 문장 하나와 보조 문장 하나면 충분하다. 로고도 작게 구석에 고정 위치를 정해두면 된다. 매 세트 로고 위치가 바뀌면 그것부터 통일감을 깨먹는다.

    카드뉴스 규격과 워크플로 일러스트

    한 세트 만드는 시간, 줄이는 워크플로

    느린 이유는 대개 툴이 아니라 매번 새로 만들기 때문이다. 증상부터 보자. 세트마다 두 시간 넘게 걸린다, 만들다가 중간에 규격을 바꾼다, 완성하고 나면 톤이 전 세트와 다르다. 원인은 셋 다 하나다. 재사용할 기준이 없다는 것.

    복제-수정 루틴

    첫 세트를 완성하면 그 프로젝트를 통째로 복제한다. 다음 세트는 장 구조를 그대로 두고 문장만 교체한다. 이 루틴 하나로 기획 외 작업이 사실상 사라진다. 내 워크플로는 기획에서 초안, 디자인, 검수까지 단계마다 걸린 시간을 기록하는 습관으로 묶여 있다. 기록을 해보면 병목이 어디인지 스스로 드러난다. 내 기록에서는 늘 검수가 제일 길었다.

    발행까지 자동화한 경우와 사람이 확인하는 지점

    소개하자면, 나는 혼자서 여러 SaaS를 돌리는 원맨 운영자다. 지금 cron 63개를 무인으로 돌리고 있고, 작업 폴더 183개에 git 저장소 90개가 쌓여 있다. 콘텐츠도 파이프라인이 주 1~5편으로 불규칙하게 초안을 만들고, 문체·사실성 자동 검사를 통과한 글만 공개된다. 걸린 초안은 사람이, 즉 내가 본다. 이 구조를 인스타 카드뉴스에도 그대로 얹었다.

    # 매일 정해진 시간에 초안 생성 → 검사 → 통과분만 발행 큐로
    0 7 * * * php /home/aileego/artisan cardnews:draft --account=main
    30 7 * * * php /home/aileego/artisan cardnews:publish --passed-only

    자동화에도 한계는 분명하다. 검사를 통과했더라도 표지 문구가 약속을 과장하는 경우는 기계가 못 잡는다. 앞서 말한 걸러낸 표지 초안이 그 사례다. 그래서 최종 공개 직전 확인은 사람이 한다.

    흔히 하는 실수와, 카드뉴스가 맞지 않는 경우

    실패담을 하나 더 까놓자. 본문 한 장에 설명을 다 넣으려다 완주하는 사람이 눈에 띄게 줄었던 세트가 있었다. 한 장에 세 문장 넘게 들어가면 이미 카드뉴스가 아니라 축약된 문서다. 한 장에 세 줄이 넘어가면 다음 장으로 쪼갠다는 규칙을 그 뒤로 시트에 추가했다.

    초보 실수를 수정 전후로 정리하면 이렇다. 장마다 폰트를 다르게 넣던 건 시트 고정으로 바꿨고, 표지에 본문 미리보기를 다 넣던 건 주 문장 하나로 줄였다. 텍스트를 이미지 가장자리까지 붙이던 건 여백 고정값으로 해결했다. 장수를 욕심내던 건 문장 개수로 장수를 세는 규칙으로 바꿨다. 색을 장마다 다르게 칠하던 건 포인트색 하나로 묶었다.

    카드뉴스보다 다른 형식이 나은 상황

    인스타 한 계정의 최근 30편을 다시 살펴본 적이 있다. 릴스 18편은 조회수 중앙값이 50이었고 피드 12편은 0이었다. 같은 계정에서 형식만 달랐는데 피드가 밀렸다. 몸을 움직이는 과정을 보여주는 콘텐츠라면 카드뉴스보다 릴스가 맞다. 반대로 비교표나 단계 요약처럼 눈으로 훑어야 하는 정보는 카드뉴스가 우세하다. 형식은 주제가 정하는 거지 유행이 정하는 게 아니다.

    요약, 오늘 바로 시작하는 체크리스트

    핵심 질문 다섯 개에 한 줄씩 답을 남긴다. 규격은 4:5 비율의 1080×1350을 기본으로. 장수는 표지와 마무리를 빼고 문장 개수로 정한다. 톤은 폰트 2종 색 3개 여백 고정값으로 만든 한 장짜리 시트가 지킨다. 툴은 캔바든 미리캔버스든 복제해서 수정하는 루틴이 속도를 결정한다. 표지는 약속을 구체적으로, 본문이 그 약속을 지키게 만든다.

    오늘 할 일은 작다. 규칙 시트를 메모장에 적고 여러 세트가 아니라 첫 세트 하나만 완성하는 것. 그 세트가 곧 템플릿이 되고 다음부터는 복제해서 문장만 바꾸면 된다. 해시태그 전략이나 발행 자동화 파이프라인 이야기는 다음 글에서 풀겠다. 내 운영 철학은 한 줄이다. 작은 규칙을 지키는 게 속도보다 오래간다.

    출처와 근거 자료


    글쓴이 정보

    초안은 AI 파이프라인이 쓰고, 검사를 통과한 글만 공개됩니다. 걸린 초안은 제가 직접 고칩니다. — 아일리고

    자주 묻는 질문

    인스타 카드뉴스 규격은 무엇으로 만들어야 하나요?

    인스타 피드 중심이면 4:5 비율의 1080×1350이 기본값입니다. 화면 점유율이 커서 스크롤을 잡아냅니다. 같은 콘텐츠를 블로그 썸네일 등 다른 플랫폼에 재활용할 계획이라면 정사각형(1080×1080)도 괜찮습니다. 4:5보다 더 세로로 긴 규격은 피드에서 잘리는 영역이 생기니 피하는 게 안전합니다.

    카드뉴스는 몇 장이 적당한가요?

    표지 한 장, 본문 네다섯 장, 마무리 한 장을 한 세트로 묶는 게 기준입니다. 한 장이 하나의 문장을 담는다고 생각하면 전달할 문장 개수가 곧 장수입니다. 장수를 늘려 욕심내면 중간부터 넘기는 속도가 빨라지니, 아까운 문장부터 지우는 게 장수 줄이기의 시작입니다.

    디자인을 못해도 카드뉴스 톤을 유지할 수 있나요?

    가능합니다. 통일감은 디자인 감각이 아니라 규칙에서 나옵니다. 폰트 2종, 색 3개, 양옆 여백 값, 정렬 방향을 적은 규칙 시트 한 장을 만들어 툴 옆에 두면 열 장이 같은 옷을 입고 나옵니다.

    카드뉴스 무료 제작 툴은 뭐가 좋나요?

    캔바는 만든 세트를 복제해 텍스트만 바꾸는 흐름에, 미리캔버스는 한글 문구가 들어간 템플릿이 많아 첫 세트 뼈대를 얻기에 좋습니다. 규칙 시트가 이미 있다면 PPT·키노트로도 충분합니다. 어떤 툴이냐보다 복제해서 수정하는 루틴을 지키느냐가 제작 속도를 가릅니다.