주차 회고 8주차 2026-09-09

초록불은 "돌았다"는 뜻이지 "맞다"는 뜻이 아니다 — 자동화를 8주 만에 처음 의심해본 주

봇이 열흘 넘게 에러 하나 없이 돌고 있었다. n8n 화면은 전부 초록색이었다. 그런데 위키 링크를 눌러보니 LFP 배터리 항목에서 K9 자주포 기사가 열렸다. 에러는 안 나는데 결과만 조용히 틀리고 있던 자동화를 잡아내며 배운 다섯 가지.

한 줄 요약: 8주 동안 자동화를 만들면서 “돌아가나”만 봤지 “맞나”는 한 번도 안 봤다. 이번 주에 처음 눌러봤더니 링크 88개 중 27개가 엉뚱한 기사를 가리키고 있었다. 고치는 과정에서 배운 걸 정리한 글이다.

이런 분께 도움이 돼요: 자동화를 굴리는데 한 번도 결과물을 검증해본 적 없는 분, LLM에게 목록에서 뭔가를 “그대로 옮겨 적게” 시키고 있는 분, 그리고 에러는 안 나는데 왠지 찜찜한 파이프라인을 갖고 계신 분.

무슨 일이 있었는지 자세한 추적 과정은 근거 기사 링크가 엉뚱한 기사를 가리키고 있었다에 따로 써뒀어요. 이 글은 거기서 뭘 배웠나만 다룹니다.


Before → After

Before (8/24 ~ 9/2)After (9/3 이후)
n8n 화면열흘 내내 전부 초록색그대로 초록색
링크 정확도88개 중 27개 오배정 (31%)검증 대상 전부 정정
링크를 붙이는 주체AI가 130줄 목록을 보고 받아 적음프로그램이 배열에서 꺼내 붙임
못 찾았을 때아무거나 붙음그날 그 섹터는 저장 안 함
Claude 호출하루 6번하루 3번

에러율은 0%였는데 정확도는 69%였다. 이 둘이 다른 숫자라는 걸 8주 만에 처음 알았다.


배운 것 ① — 초록불은 “돌았다”는 뜻이다

자동화를 만들면 확인하게 되는 건 대개 이 셋이다. 에러가 났나 / 텔레그램이 왔나 / 커밋이 올라갔나. 셋 다 통과였다.

그런데 이 셋은 전부 **“과정이 끝까지 갔나”**를 보는 신호지, **“내용이 맞나”**를 보는 신호가 아니다. 링크가 틀려도 텔레그램은 오고, 커밋은 올라가고, 에러는 안 난다.

💡 자동화를 붙였으면 결과물을 직접 눌러보는 날을 따로 잡아야 한다. 초록불은 그걸 대신해주지 않는다.

배운 것 ② — LLM에게 짧은 ID를 목록에서 옮겨 적게 시키지 않는다

원인은 프롬프트 구조였다. AI에게 130줄짜리 번호. 제목 | 링크 목록을 보여주고, 기사를 고른 뒤 그 링크를 받아 적게 하고 있었다.

Before

기사 목록:
{{ $json.title.map((t, i) => `${i}. ${t} | ${$json.link[i]}`).join('\n') }}

- 원문: 그 기사의 링크

전화번호부 130줄을 보면서 번호를 눈으로 옮겨 적는 일이다. 사람도 틀린다.

After — AI에게 URL을 아예 안 보여준다

아래는 오늘 수집된 기사 목록입니다. 각 줄 맨 앞 [숫자]가 그 기사의 번호입니다.

{{ $json.title.map((t, i) => '[' + i + '] ' + t).join('\n') }}

- 기사번호: 위 목록에서 그 기사 앞에 붙은 번호 (숫자만)
- 기사제목: 그 기사의 제목을 위 목록에 있는 그대로 복사

중요: URL(링크)은 절대 쓰지 마세요. 목록에 없는 번호를 지어내지 마세요.

그리고 진짜 링크는 Code 노드가 배열에서 꺼내 붙인다.

💡 고르는 건 AI, 이어붙이는 건 프로그램. 판단은 AI가 잘하고, 정확한 복사는 프로그램이 잘한다. 잘하는 걸 시켜야 한다.

배운 것 ③ — 짐작을 숫자로 바꿔서 확인한다

“긴 목록에서 잘못 베낀 것”이라는 짐작이 맞는지 확인할 방법이 있었다. 그 말이 맞다면, URL이 헷갈리게 생긴 매체일수록 많이 틀렸어야 한다.

링크를 전부 열어서 매체별로 세어봤다.

매체URL 생김새정확오배정오배정률
ZDNet?no=20260903112619 (날짜+시각 14자리)3912.5%
한국경제/article/202609031504i (불투명)9536%
디일렉?idxno=61717 (숫자 5자리)132162%

날짜가 통째로 박힌 ZDNet은 거의 안 틀렸고, 다섯 자리 숫자만 다른 디일렉은 62%가 틀렸다. 가설이 데이터로 확정되는 순간이었다.

💡 원인을 “짐작”에서 “확인”으로 올리려면, 그 짐작이 맞을 때 숫자가 어떻게 나와야 하는지를 먼저 정하고 세어보면 된다. 이게 있으면 고친 뒤에 “진짜 고쳐졌나”도 같은 방법으로 확인할 수 있다.

배운 것 ④ — 틀린 걸 남기느니 안 남긴다

링크를 찾는 코드를 3단으로 짰다.

1순위  제목이 정확히 일치하는 기사        (문장부호·공백·대소문자 무시)
2순위  번호가 가리키는 기사               (제목이 서로 품고 있으면 인정)
3순위  제목이 부분적으로 겹치는 기사       (AI가 제목을 줄여 쓴 경우)
────────────────────────────────────────
셋 다 실패 → null → 그 섹터는 그날 저장하지 않는다

마지막 줄이 핵심이다. 예전 구조는 “뭐라도 붙인다”였고, 새 구조는 **“확실하지 않으면 안 붙인다”**다. 하루 비는 것보다 틀린 게 남는 게 더 나쁘다.

번호만 받지 않고 제목까지 같이 받은 것도 이 안전망을 위해서다. 번호가 밀려도 제목으로 되찾을 수 있다.

배운 것 ⑤ — 고치러 들어간 김에 구조를 한 번 본다

노드를 뜯어보다가, 텔레그램용 LLM 노드와 위키용 LLM 노드가 같은 기사 목록을 두 번 물어보고 있다는 걸 알게 됐다. 원래 고치려던 것과 상관없는 발견이었다.

[Before]  Aggregate ─┬→ 텔레그램_LLM → 텔레그램
                     └→ Wiki_LLM    → GitHub

[After]   Aggregate → Wiki_LLM ─┬→ Code(섹터분리+링크조회) → GitHub
                                └→ Code(문장조립+링크조회) → 텔레그램
  • Claude 호출 하루 6번 → 3번 (비용 절반)
  • 텔레그램과 위키가 항상 같은 키워드를 말하게 됨 (전엔 따로 물어봐서 다를 수 있었다)

💡 파이프라인을 뜯을 일은 자주 없다. 열었을 때 전체를 한 번 훑어보면 이런 게 나온다.


솔직하게 — 하루 동안 지뢰 다섯 개를 밟았다

고치는 게 30분이면 될 줄 알았는데 하루가 걸렸다. 대부분 n8n 자체와 싸운 시간이었다.

지뢰뭘 몰랐나
노드 이름이 전부 Code in JavaScript, ...1, ...2텔레그램용 코드를 섹터분리 노드에 붙여넣고 한참 헤맴
중간 노드를 지우면 양옆이 자동으로 이어짐지우자마자 Aggregate → 텔레그램이 저절로 생김
노드를 연결선 위에 떨어뜨리면 그 사이에 끼워 넣어짐섹터분리 노드가 텔레그램 전송 응답을 입력으로 받고 있었음
Received undefined 에러화면에 보이던 줄은 그냥 스크롤 위치였고, 에러 난 줄이 아니었음
링크 원본을 못 찾은 항목 5개복구를 포기하고 “봇의 링크 오배정 버그로 유실” 문구로 대체

발견했을 때는 솔직히 식겁했다. 포트폴리오로 보여줄 사이트인데, 링크를 눌러본 사람이 전자담배 기사를 보게 되는 상황이었으니까. 그래서 프롬프트만 살짝 고치고 넘어가지 않고 노드 구조까지 다시 짰다.

📷 여기에 n8n 워크플로 화면(합치기 전 → 합친 후)을 넣으면 좋아요.


이번 주에 하나 더 — 8주 치 교훈을 한자리에 모았다

이번 일을 겪고 나서 든 생각이 하나 있었다. “이런 걸 여러 번 배웠는데, 매번 어디 있는지 못 찾겠다.”

교훈이 주차별 사례글 안에 흩어져 있었다. 1주차 글 안에 Git 얘기, 4주차 글 안에 n8n 얘기, 7주차 글 안에 정보구조 얘기. 필요할 때 찾으려면 여덟 개 글을 다 뒤져야 했다.

그래서 8주 치를 주제별로 다시 묶어 개발 노트 일곱 개로 만들었다 — Git·배포 / n8n 자동화 / 자동화 속 AI / 정보구조 / 디버깅 태도 / AI 협업, 그리고 이 여섯을 한눈에 보는 지도 한 장.

만들어놓고 보니 이건 남한테 보여줄 글이 아니라 내가 꺼내 볼 서랍이라는 생각이 들어서, 학습일지처럼 나만 보는 쪽으로 돌렸다. 사이트에는 안 올라가고 내 컴퓨터에서만 열린다. (공개용 정리는 지금 읽고 계신 이 주간 회고글이 하고 있으니 중복이기도 했다.)

💡 정리본을 만들 때 “누가 읽나”를 먼저 정하면 공개 여부가 저절로 정해진다. 남이 읽을 글과 내가 꺼내 볼 서랍은 애초에 다른 물건이다.


가져다 쓰실 것 — 자동화 결과물 검증 체크리스트

자동화를 붙이고 나서 한 번은 이걸 돌려보세요. 저는 8주 만에 처음 했고, 31%가 틀려 있었습니다.

  1. 결과물을 하나 골라 직접 눌러본다. 링크면 열어보고, 숫자면 원본과 맞춰본다. 화면이 초록불인 것과 무관하게.
  2. 한 개가 틀렸으면 열 개를 더 본다. 틀린 게 랜덤인지 패턴인지부터 가른다. (저는 두 항목의 링크가 서로 맞바뀐 걸 보고 “뒤섞임”이라고 확정했습니다.)
  3. 가설이 맞다면 숫자가 어떻게 나와야 하는지 정하고 세어본다. 매체별·시간대별·종류별로 갈라서.
  4. AI에게 시키는 일 중 “옮겨 적기”가 있는지 본다. 있으면 프로그램이 하게 넘긴다. AI는 고르기만.
  5. 못 찾았을 때 뭘 하는지 정한다. 기본값이 “아무거나 붙임”이면 “안 붙임”으로 바꾼다.
  6. 과거 데이터도 전수 확인한다. 오늘 고쳐도 어제까지 쌓인 건 그대로 틀려 있다.

마무리

8주 동안 “돌아가게 만드는 것”만 배웠다. 이번 주에 배운 건 **“돌아가는 걸 의심하는 법”**이다.

만들 때는 안 되던 게 되면 기쁘다. 그런데 자동화는 만든 다음이 더 길다. 그 긴 시간 동안 조용히 틀린 걸 쌓고 있을 수 있고, 그건 화면이 알려주지 않는다. 지난주에 “봇이 제대로 모으고 있는지 모니터링하겠다”고 적어뒀는데, 그 다짐을 지킨 첫 주에 바로 큰 게 걸렸다. 다짐을 글로 남겨두길 잘했다.

📷 여기에 정정 전/후 위키 화면(틀린 링크 → 맞는 링크)을 나란히 넣으면 좋아요.