<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>영철맨</title>
    <link>https://janito.tistory.com/</link>
    <description>AI 에이전트 운영, 자동화, 실전 IT 활용, 개발 시행착오를 기록하는 블로그입니다. 직접 부딪히며 정리한 가이드와 운영 노하우를 공유합니다.</description>
    <language>ko</language>
    <pubDate>Wed, 17 Jun 2026 16:54:59 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>영철맨</managingEditor>
    <item>
      <title>개인 AI 자동화에서 시크릿 관리와 권한 분리를 먼저 해야 하는 이유</title>
      <link>https://janito.tistory.com/44</link>
      <description>&lt;h1&gt;개인 AI 자동화에서 시크릿 관리와 권한 분리를 먼저 해야 하는 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 AI 자동화가 편해질수록 더 먼저 챙겨야 하는 것이 있다. 바로 시크릿 관리와 권한 분리다. 많은 사람이 자동화를 만들 때 기능부터 붙인다. 캘린더 연결, 메시지 전송, 깃허브 작업, 서버 제어를 먼저 연결하고 나서 나중에 보안을 생각한다. 그런데 이 순서는 운영이 커질수록 위험하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번 연결한 토큰과 계정 권한은 자동화가 돌아가는 내내 함께 움직인다. 그래서 초반에 대충 묶어두면 작은 실수도 곧바로 큰 사고로 이어질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글에서는 개인 운영자나 소규모 팀이 AI 자동화를 돌릴 때 왜 시크릿 관리와 최소 권한 설계를 먼저 잡아야 하는지, 그리고 어떤 기준부터 세우면 좋은지 실무 관점에서 정리해보겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 기능보다 먼저 봐야 하는 것은 &amp;ldquo;이 자동화가 어디까지 할 수 있는가&amp;rdquo;다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화는 한 번 연결되면 생각보다 많은 일을 대신한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메신저에 메시지를 보낸다.&lt;/li&gt;
&lt;li&gt;브라우저에서 로그인된 세션으로 작업한다.&lt;/li&gt;
&lt;li&gt;깃허브 이슈를 읽고 PR을 올린다.&lt;/li&gt;
&lt;li&gt;서버에서 명령을 실행한다.&lt;/li&gt;
&lt;li&gt;캘린더, 메일, 드라이브 같은 개인 자산에 접근한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 이 기능들이 전부 같은 권한 묶음으로 연결되면, 자동화 하나의 오작동이 여러 서비스에 동시에 영향을 줄 수 있다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 메모 정리용 자동화라면 읽기 권한만 있어도 충분할 수 있다. 그런데 편하다는 이유로 쓰기, 삭제, 관리자 권한까지 함께 붙여두면 나중에 실패했을 때 피해 범위가 훨씬 커진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 단순하다. &lt;b&gt;자동화 설계의 출발점은 &amp;ldquo;무엇을 할까&amp;rdquo;보다 &amp;ldquo;어디까지 허용할까&amp;rdquo;여야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. env 파일 하나에 모든 키를 몰아넣으면 운영이 편해 보여도 나중에 더 위험해진다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 프로젝트에서는 &lt;code&gt;.env&lt;/code&gt; 파일 하나에 API 키, 봇 토큰, 데이터베이스 비밀번호, 관리자 계정 토큰까지 모두 넣는 경우가 많다. 초반에는 편하다. 하지만 운영이 길어질수록 이 구조는 빠르게 부담이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방식의 문제는 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 자동화가 어떤 키를 실제로 쓰는지 추적이 어렵다.&lt;/li&gt;
&lt;li&gt;특정 키만 교체하고 싶어도 전체 흐름이 함께 흔들린다.&lt;/li&gt;
&lt;li&gt;로그나 디버그 출력에서 민감한 값이 노출될 가능성이 커진다.&lt;/li&gt;
&lt;li&gt;다른 작업용 스크립트에 같은 파일을 재사용하면서 권한이 과하게 퍼진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 개인 AI 자동화는 여러 에이전트와 도구가 얽히기 쉽다. 이때 공용 &lt;code&gt;.env&lt;/code&gt; 하나로 모두 해결하려 하면 &amp;ldquo;작업 분리&amp;rdquo;는 했는데 &amp;ldquo;권한 분리&amp;rdquo;는 전혀 안 된 상태가 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실무 기준&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서비스별로 시크릿을 나눈다.&lt;/li&gt;
&lt;li&gt;읽기 전용 작업과 쓰기 작업의 자격증명을 분리한다.&lt;/li&gt;
&lt;li&gt;운영용 토큰과 테스트용 토큰을 분리한다.&lt;/li&gt;
&lt;li&gt;키 이름만 봐도 용도를 알 수 있게 규칙을 만든다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 개수보다 중요한 것은 &lt;b&gt;권한 경계가 눈에 보이게 나뉘어 있는가&lt;/b&gt;다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 최소 권한 원칙은 큰 회사만 필요한 것이 아니다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소 권한 원칙은 거창한 보안 조직의 규칙처럼 들릴 수 있다. 하지만 개인 운영자에게도 더 현실적이다. 왜냐하면 사고가 났을 때 수습할 사람이 결국 본인 한 명이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 아래처럼 나눌 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;알림 전송 에이전트: 특정 채널에 메시지 보내기만 가능&lt;/li&gt;
&lt;li&gt;깃허브 리뷰 에이전트: 특정 저장소 이슈/PR 읽기와 댓글만 가능&lt;/li&gt;
&lt;li&gt;배포 자동화: 특정 서버에서 허용된 명령만 실행 가능&lt;/li&gt;
&lt;li&gt;블로그 발행 자동화: 특정 블로그 계정과 카테고리 범위만 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 나누면 어떤 자동화가 잘못돼도 피해 범위를 좁힐 수 있다. 반대로 모든 작업이 동일한 관리자 토큰을 공유하면, 실패 원인 분석도 어렵고 대응도 더 늦어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소 권한은 불편을 늘리는 규칙이 아니라 &lt;b&gt;장애 반경을 줄이는 운영 장치&lt;/b&gt;다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 시크릿은 보관보다 회전과 폐기가 더 중요하다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 사람이 &amp;ldquo;어디에 저장할까&amp;rdquo;는 고민하지만 &amp;ldquo;언제 교체하고 어떻게 폐기할까&amp;rdquo;는 뒤로 미룬다. 그런데 실제 운영에서는 이쪽이 더 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토큰은 언젠가 노출될 수 있다고 가정하는 편이 안전하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실수로 로그에 찍힐 수 있다.&lt;/li&gt;
&lt;li&gt;스크린샷이나 화면 공유에 보일 수 있다.&lt;/li&gt;
&lt;li&gt;오래된 백업 파일에 남아 있을 수 있다.&lt;/li&gt;
&lt;li&gt;권한이 필요 없어졌는데도 계속 살아 있을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 필요한 것은 완벽한 은닉보다 빠른 교체 체계다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;최소한 정해야 할 것&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 키가 어느 자동화에 연결돼 있는지 목록화&lt;/li&gt;
&lt;li&gt;키 발급일과 마지막 교체일 기록&lt;/li&gt;
&lt;li&gt;사용 중지한 자동화의 토큰 즉시 폐기&lt;/li&gt;
&lt;li&gt;의심 상황이 생기면 교체할 우선순위 정의&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시크릿은 저장만 잘한다고 끝나는 자산이 아니다. &lt;b&gt;수명 주기 관리까지 포함해야 비로소 운영 자산&lt;/b&gt;이 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 머신 단위 권한을 과하게 주면 작은 자동화도 시스템 리스크가 된다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 AI 자동화는 종종 &amp;ldquo;내 맥미니니까 괜찮겠지&amp;rdquo;라는 마음으로 시작된다. 하지만 항상 켜져 있는 작업 머신은 생각보다 많은 권한을 품고 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우저 로그인 세션&lt;/li&gt;
&lt;li&gt;SSH 키&lt;/li&gt;
&lt;li&gt;클라우드 CLI 인증 정보&lt;/li&gt;
&lt;li&gt;메신저 세션&lt;/li&gt;
&lt;li&gt;로컬 파일 접근 권한&lt;/li&gt;
&lt;li&gt;스크립트 실행 권한&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 한 자동화가 머신 전체에 광범위한 접근을 갖게 되면, 단순한 글쓰기 자동화도 사실상 더 넓은 공격면을 갖게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 자동화 단위를 나누는 것만큼 &lt;b&gt;실행 환경도 나누는 습관&lt;/b&gt;이 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 다음이 현실적인 출발점이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테스트 자동화는 별도 작업공간에서 돌린다.&lt;/li&gt;
&lt;li&gt;민감한 키가 필요한 작업은 별도 프로세스나 별도 계정으로 분리한다.&lt;/li&gt;
&lt;li&gt;파일 시스템 전체 대신 필요한 디렉터리만 접근하게 한다.&lt;/li&gt;
&lt;li&gt;파괴적 명령은 사람 승인 단계를 둔다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;한 대에서 다 돌아간다&amp;rdquo;와 &amp;ldquo;모두 같은 권한으로 돌아간다&amp;rdquo;는 다른 이야기다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 운영자가 편하려면 보안 규칙도 단순해야 한다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 설계가 너무 복잡하면 결국 아무도 지키지 못한다. 개인 운영에서는 특히 그렇다. 그래서 규칙 수를 늘리기보다, 몇 가지 기준을 반복 가능하게 만드는 편이 낫다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개인 운영에 맞는 기본 체크리스트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자동화별 전용 토큰이 있는가&lt;/li&gt;
&lt;li&gt;읽기와 쓰기 권한이 분리돼 있는가&lt;/li&gt;
&lt;li&gt;테스트와 운영 시크릿이 분리돼 있는가&lt;/li&gt;
&lt;li&gt;로그에 시크릿 값이 남지 않게 돼 있는가&lt;/li&gt;
&lt;li&gt;사람 승인이 필요한 단계가 정의돼 있는가&lt;/li&gt;
&lt;li&gt;더 이상 쓰지 않는 키를 지우는 루틴이 있는가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 정도만 잡혀도 운영 안정성은 꽤 달라진다. 중요한 것은 완벽함보다 &lt;b&gt;반복 가능한 기준&lt;/b&gt;이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 AI 자동화에서 시크릿 관리와 권한 분리는 뒤늦게 덧붙일 장식이 아니다. 초반에는 기능보다 덜 눈에 띄지만, 운영이 길어질수록 사고 여부를 가르는 핵심 구조가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면 먼저 해야 할 일은 세 가지다. 각 자동화가 실제로 필요한 권한만 쓰게 만들고, 시크릿을 용도별로 분리하고, 노출이나 실패를 가정한 교체 루틴을 준비하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화는 편의성을 키워주지만, 권한이 뭉쳐 있으면 같은 속도로 리스크도 커진다. 개인 운영일수록 더 먼저 보안 경계를 정해두는 편이 오래 버티는 방법이다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>ai 자동화</category>
      <category>it</category>
      <category>권한 분리</category>
      <category>시크릿 관리</category>
      <category>운영 자동화</category>
      <category>최소 권한</category>
      <category>토큰 보안</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/44</guid>
      <comments>https://janito.tistory.com/44#entry44comment</comments>
      <pubDate>Thu, 16 Apr 2026 09:05:25 +0900</pubDate>
    </item>
    <item>
      <title>AI 에이전트 운영 비용이 새는 지점과 줄이는 방법</title>
      <link>https://janito.tistory.com/43</link>
      <description>&lt;h1&gt;AI 에이전트 운영 비용이 새는 지점과 줄이는 방법&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 에이전트를 몇 개만 붙여도 체감상 일은 빨라진다. 문제는 속도보다 비용이 먼저 무너지기 쉽다는 점이다. 특히 자동화가 돌아가기 시작하면 사람은 결과만 보고, 실제 비용은 재시도&amp;middot;긴 컨텍스트&amp;middot;불필요한 툴 호출 같은 보이지 않는 곳에서 조금씩 샌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글에서는 개인 운영자나 작은 팀이 실제로 자주 겪는 비용 누수 지점을 정리하고, 바로 적용할 수 있는 절감 기준을 함께 정리해보겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 실패한 작업을 무한 재시도하면 비용이 가장 먼저 커진다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화가 실패했을 때 가장 흔한 대응은 &quot;한 번 더 돌리기&quot;다. 그런데 이 반복이 구조 없이 누적되면 같은 입력을 비싼 모델로 여러 번 다시 태우게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 패턴은 이렇다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그인 만료나 권한 오류인데도 같은 작업을 계속 재시도한다.&lt;/li&gt;
&lt;li&gt;외부 API 장애인데 애플리케이션은 모델 실패로 오해한다.&lt;/li&gt;
&lt;li&gt;이미 사람이 확인해야 하는 단계인데 자동화가 끝까지 밀어붙인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 필요한 것은 더 많은 재시도가 아니라 **중단 기준**이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실무 기준&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 원인으로 2회 이상 실패하면 자동 재시도를 멈춘다.&lt;/li&gt;
&lt;li&gt;인증, 결제, 게시, 삭제처럼 사람이 봐야 하는 단계는 즉시 `blocked` 상태로 전환한다.&lt;/li&gt;
&lt;li&gt;실패 원인을 `timeout`, `auth`, `rate_limit`, `invalid_input`처럼 분류해서 남긴다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재시도 자체가 나쁜 것은 아니다. 다만 **재시도는 복구 전략일 때만 의미가 있고, 원인 분류 없는 재시도는 비용 누수**다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 컨텍스트를 길게 붙일수록 정확도가 아니라 청구서가 먼저 커진다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에이전트를 오래 운영하다 보면 &quot;혹시 필요할지 모르니 다 넣자&quot;는 유혹이 생긴다. 이전 대화, 과거 로그, 문서 전체, 작업 규칙, 관련 없는 예제까지 한 번에 밀어 넣는 식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 대부분의 작업은 그렇게 큰 문맥이 필요하지 않다. 오히려 아래 문제가 생긴다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;토큰 비용이 늘어난다.&lt;/li&gt;
&lt;li&gt;응답 속도가 느려진다.&lt;/li&gt;
&lt;li&gt;모델이 핵심보다 주변 정보를 더 많이 참고한다.&lt;/li&gt;
&lt;li&gt;실패 시 재실행 비용도 함께 커진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;줄이는 방법&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업마다 필요한 입력 블록을 분리한다.&lt;/li&gt;
&lt;li&gt;공통 규칙은 짧은 운영 규약으로 요약한다.&lt;/li&gt;
&lt;li&gt;긴 로그는 전체를 넣지 말고 최근 실패 구간만 첨부한다.&lt;/li&gt;
&lt;li&gt;참조 문서는 전문이 아니라 요약 + 원문 링크 구조로 준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현실적으로 중요한 것은 &quot;모든 정보를 다 주는 것&quot;이 아니라 **이번 작업에 필요한 정보만 정확히 주는 것**이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 불필요한 툴 호출이 생각보다 큰 비용과 지연을 만든다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람은 브라우저를 한두 번 더 열어도 큰 부담을 못 느끼지만, 자동화 시스템은 다르다. 툴 호출 하나가 추가될 때마다 시간도 늘고, 그 결과를 다시 모델이 읽고 판단하는 비용도 붙는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 이런 경우다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미 파일에 있는 정보를 다시 웹에서 확인한다.&lt;/li&gt;
&lt;li&gt;같은 화면을 여러 번 스냅샷으로 읽는다.&lt;/li&gt;
&lt;li&gt;한 번에 처리할 수 있는 조회를 여러 단계로 나눈다.&lt;/li&gt;
&lt;li&gt;상태 확인 없이 무조건 브라우저를 띄운다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실무 기준&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 로컬 상태 파일이나 큐를 확인하고, 외부 호출은 정말 필요할 때만 한다.&lt;/li&gt;
&lt;li&gt;읽기 작업은 병렬로 묶고, 쓰기 작업은 필요한 횟수만 최소화한다.&lt;/li&gt;
&lt;li&gt;브라우저는 &quot;확인&quot;이 아니라 &quot;실제 UI 상호작용이 필요할 때&quot;만 쓴다.&lt;/li&gt;
&lt;li&gt;같은 데이터를 다시 읽는 루프가 생기지 않도록 워크플로를 점검한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화 비용은 모델 요금만이 아니다. **툴 호출 수와 처리 단계 수가 전체 운영비를 함께 키운다.**&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 모든 단계를 최고급 모델로 처리하면 금방 비효율 구간에 들어간다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업마다 필요한 추론 강도는 다르다. 그런데 분류, 포맷 변환, 상태 점검, 단순 요약까지 모두 가장 비싼 모델에 맡기면 운영이 금방 무거워진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작게 운영할수록 이 차이는 더 크게 체감된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델 티어링 예시&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;**고성능 모델:** 기획, 복잡한 의사결정, 초안 설계, 최종 검수&lt;/li&gt;
&lt;li&gt;**중간 모델:** 요약, 문장 다듬기, 구조화, 분류&lt;/li&gt;
&lt;li&gt;**경량 모델 또는 룰 기반 처리:** 상태 체크, 포맷 변환, 단순 라우팅&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 모델 성능이 아니라 **작업 난이도에 맞는 배치**다. 모든 문제를 큰 모델로 푸는 방식은 초반엔 편하지만, 운영이 커질수록 지속 가능하지 않다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 완료 기준이 없으면 같은 일을 계속 다시 하게 된다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비용이 새는 팀을 보면 프롬프트보다 먼저 완료 기준이 모호하다. &quot;대충 괜찮으면 끝&quot; 같은 운영은 아래 문제로 이어진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미 끝난 작업을 다시 검토한다.&lt;/li&gt;
&lt;li&gt;리뷰어마다 요구가 달라 재작업이 생긴다.&lt;/li&gt;
&lt;li&gt;실패인지 보류인지 완료인지 상태가 섞인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;최소한 필요한 기준&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;무엇이 완료인지 한 줄로 정의한다.&lt;/li&gt;
&lt;li&gt;결과물이 어느 형식을 만족해야 하는지 명시한다.&lt;/li&gt;
&lt;li&gt;사람이 승인해야 끝나는 단계인지 자동 완료 가능한 단계인지 구분한다.&lt;/li&gt;
&lt;li&gt;`queued`, `in_progress`, `blocked`, `done` 같은 상태를 팀 전체가 같은 의미로 쓴다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완료 기준이 분명하면 모델 호출 수보다 먼저 **불필요한 왕복 자체가 줄어든다.**&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 비용을 줄이려면 사용량보다 가드레일부터 먼저 세워야 한다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영이 안정적인 팀은 비용 보고서를 나중에 보는 것이 아니라, 애초에 과금이 커질 수 있는 구조를 막아둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천하는 기본 가드레일은 아래 정도다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;바로 적용할 수 있는 비용 가드레일&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업별 최대 재시도 횟수 제한&lt;/li&gt;
&lt;li&gt;모델별 사용 목적 구분&lt;/li&gt;
&lt;li&gt;긴 컨텍스트 입력 상한선 설정&lt;/li&gt;
&lt;li&gt;동일 작업의 중복 실행 방지 키 도입&lt;/li&gt;
&lt;li&gt;실패 원인 분류 로그 남기기&lt;/li&gt;
&lt;li&gt;하루 기준 총 실행 횟수 또는 예산 경고 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 장치는 화려하지 않지만 운영 비용을 가장 현실적으로 잡아준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 에이전트 운영 비용은 한 번에 크게 터지기보다, 작은 비효율이 쌓이며 새는 경우가 많다. 반복 재시도, 과도한 컨텍스트, 불필요한 툴 호출, 무분별한 고성능 모델 사용, 모호한 완료 기준이 대표적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면 비용을 줄이는 가장 좋은 방법은 &quot;더 싸게 돌리는 비법&quot;을 찾는 것이 아니라, **어디서 비용이 새는지 구조적으로 보이게 만드는 것**이다. 상태를 나누고, 재시도 기준을 세우고, 모델 티어를 구분하고, 사람 승인 지점을 명확히 해두면 작은 팀도 훨씬 오래 버틸 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화를 오래 운영하고 싶다면, 프롬프트 튜닝보다 먼저 운영 비용이 새는 지점을 잡는 것부터 시작하는 편이 낫다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>ai 에이전트</category>
      <category>it</category>
      <category>모델 티어링</category>
      <category>비용 가드레일</category>
      <category>운영 비용</category>
      <category>자동화 비용</category>
      <category>토큰 비용</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/43</guid>
      <comments>https://janito.tistory.com/43#entry43comment</comments>
      <pubDate>Wed, 15 Apr 2026 09:05:07 +0900</pubDate>
    </item>
    <item>
      <title>브라우저 자동화에서 사람 승인을 남겨야 하는 순간들</title>
      <link>https://janito.tistory.com/42</link>
      <description>&lt;h1&gt;브라우저 자동화에서 사람 승인을 남겨야 하는 순간들&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저 자동화를 오래 운영하다 보면 한 가지 오해를 자주 보게 된다. 로그인도 자동, 클릭도 자동, 제출도 자동이면 결국 사람은 완전히 빠져도 된다고 생각하는 것이다. 데모 수준에서는 그럴 수 있다. 하지만 실제 운영에서는 끝까지 사람이 잡고 있어야 하는 경계선이 분명히 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 결제와 비슷한 행동, 계정 보안에 영향을 주는 행동, 외부 공개가 걸린 행동은 자동화가 혼자 밀어붙일수록 리스크가 커진다. 자동화의 목표는 사람을 없애는 것이 아니라, 사람이 꼭 봐야 하는 순간만 남기고 나머지를 줄이는 데 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 사람 승인이 필요한가&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저 자동화는 화면을 잘 다루는 도구이지, 결과의 책임까지 대신 지는 도구는 아니다. 버튼을 누를 수 있다고 해서 그 판단까지 위임해도 된다는 뜻은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실무에서는 아래 세 가지 이유 때문에 승인 경계를 남겨두는 편이 안전하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;되돌리기 어려운 행동이 있다&lt;/li&gt;
&lt;li&gt;로그인과 인증은 정책 변경 영향을 자주 받는다&lt;/li&gt;
&lt;li&gt;화면상 성공처럼 보여도 실제 결과는 다를 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화는 빠르게 반복하는 데 강하다. 반대로 한 번 잘못 누르면 비용, 공개 범위, 계정 상태에 직접 영향을 주는 일에는 약하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;반드시 승인 지점을 두는 대표 상황&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 삭제나 영구 변경이 들어가는 작업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게시글 삭제, 계정 설정 변경, 권한 회수, 대량 수정 같은 작업은 한 번 잘못 실행되면 복구 비용이 커진다. 특히 관리자 화면은 버튼 배치가 바뀌거나 확인 모달 문구가 달라져도 자동화가 다른 버튼을 누를 위험이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구간에서는 자동화가 여기까지만 하는 편이 좋다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대상 목록 수집&lt;/li&gt;
&lt;li&gt;변경 예정 항목 미리보기 생성&lt;/li&gt;
&lt;li&gt;위험도 높은 항목 표시&lt;/li&gt;
&lt;li&gt;마지막 실행 버튼 전 사람 승인 대기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 자동화는 &quot;무엇이 바뀔지&quot;를 정리하고 사람은 &quot;정말 바꿀지&quot;를 결정하는 구조가 안정적이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 로그인, 2차 인증, QR 인증이 필요한 순간&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 자동화는 생각보다 빨리 깨진다. 세션 만료, 기기 신뢰 해제, 캡차, QR 로그인, 보안 정책 강화 같은 변수가 계속 생긴다. 이때 자동화가 우회 시도를 반복하면 계정 잠금이나 이상 로그인 탐지로 이어질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 로그인 관련 단계는 보통 두 구간으로 나누는 편이 좋다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세션 유효 여부 확인: 자동화 가능&lt;/li&gt;
&lt;li&gt;실제 로그인 복구: 사람 승인 또는 사람 직접 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 QR 로그인은 실제 화면을 확인해 사용자에게 짧게 요청하고 멈추는 흐름이 낫다. 억지로 진행하는 것보다 안전하고, 이후 재개도 단순하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 결제, 구매, 광고, 유료 전환처럼 비용이 생기는 작업&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결제 버튼은 물론이고 광고 예산 변경, 유료 플랜 전환, 사용량 기반 과금 액션도 같은 범주로 보는 게 맞다. 자동화가 잘못된 상품이나 잘못된 수량을 선택하면 바로 돈 문제로 이어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구간은 승인 기준을 더 보수적으로 잡아야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최종 금액 표시&lt;/li&gt;
&lt;li&gt;변경 전후 차이 표시&lt;/li&gt;
&lt;li&gt;대상 계정 명시&lt;/li&gt;
&lt;li&gt;승인 없이는 제출 금지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저 자동화에서 사람 승인 경계를 두는 가장 쉬운 기준은 이것이다. &quot;이 버튼을 잘못 눌렀을 때 바로 비용이 나가나?&quot; 그렇다면 거의 무조건 사람이 마지막에 봐야 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 외부 공개가 걸린 최종 발행 단계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 글, 공지, 고객 공지사항, 채용 페이지, 공용 문서 발행은 공개 버튼 하나로 끝나는 것처럼 보이지만 실제로는 브랜드와 신뢰 문제에 가깝다. 초안 생성과 편집 보조는 자동화가 잘해도, 최종 공개 여부는 상황에 따라 사람이 보는 편이 낫다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 반복 패턴이 충분히 안정되고 검증 루프가 있다면 완전 자동 공개도 가능하다. 다만 아래 조건 중 하나라도 있으면 승인 지점을 남겨두는 편이 좋다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사실 오류 가능성이 있다&lt;/li&gt;
&lt;li&gt;카테고리나 공개 범위가 자주 틀린다&lt;/li&gt;
&lt;li&gt;그날 이슈와 충돌할 수 있다&lt;/li&gt;
&lt;li&gt;문장 톤이나 맥락 확인이 필요하다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 운영 초반에는 &quot;초안 자동화 + 최종 공개 전 검토&quot; 구조가 가장 현실적이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 권한 범위를 넓히는 설정 변경&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저 자동화가 건드리는 화면 중에는 API 키 발급, 팀원 초대, 앱 권한 허용, 외부 연동 승인처럼 권한 구조를 바꾸는 메뉴가 있다. 이건 단순 기능 실행이 아니라 향후 리스크 표면을 넓히는 작업이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 작업은 실행 순간만이 아니라 이후 영향도 본다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;누가 접근 가능해지는지&lt;/li&gt;
&lt;li&gt;어떤 데이터 범위가 열리는지&lt;/li&gt;
&lt;li&gt;만료나 철회가 쉬운지&lt;/li&gt;
&lt;li&gt;감사 로그가 남는지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;권한이 늘어나는 순간을 자동화에 전부 맡기면 편해 보이지만, 사고가 났을 때 제일 설명하기 어려운 영역이 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;승인 지점을 어떻게 설계하면 좋나&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람 승인이 필요하다고 해서 모든 단계에서 팝업을 띄우면 운영이 너무 번거로워진다. 핵심은 &quot;아무 때나 사람을 부르는 것&quot;이 아니라 &quot;정말 위험한 마지막 단계에서만 부르는 것&quot;이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사전 검토 정보는 자동으로 모아두기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람은 판단만 하고 싶어 한다. 따라서 승인 전에 필요한 정보를 자동화가 미리 정리해 두는 게 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 이런 식이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 페이지 제목과 대상 계정&lt;/li&gt;
&lt;li&gt;변경 전 값과 변경 후 값&lt;/li&gt;
&lt;li&gt;공개 범위&lt;/li&gt;
&lt;li&gt;예상 비용&lt;/li&gt;
&lt;li&gt;실행 후 되돌릴 수 있는지 여부&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 정보가 없으면 사람은 결국 브라우저를 처음부터 다시 확인해야 하고, 승인 단계가 형식적인 절차로 바뀐다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;승인 기준을 문서화하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;중요해 보이면 확인&quot; 같은 규칙은 실제 운영에서 거의 도움이 안 된다. 승인 조건은 가능한 한 명확해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;삭제, 비공개 전환, 권한 변경은 무조건 승인&lt;/li&gt;
&lt;li&gt;로그인/2FA/QR 복구는 사람 직접 처리&lt;/li&gt;
&lt;li&gt;공개 발행은 초반 운영 30회까지 승인 후 공개&lt;/li&gt;
&lt;li&gt;금액이 0원이 아니면 승인 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 기준을 적어두면 자동화도 멈출 이유가 분명해지고, 운영자도 왜 호출됐는지 바로 이해한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실패보다 보류를 우선하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위험한 구간에서는 실패보다 보류가 더 좋은 결과인 경우가 많다. 예를 들어 로그인 화면이 예상과 다르면 억지로 다음 버튼을 찾는 대신 보류 상태로 남기고 스크린샷과 함께 사람을 부르는 편이 훨씬 안전하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 관점에서 좋은 자동화는 &quot;끝까지 간 자동화&quot;가 아니라 &quot;가면 안 되는 순간에 멈춘 자동화&quot;다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실무 기준으로 나누면 이렇게 보면 편하다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저 자동화 단계는 대략 세 구간으로 나눌 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;자동 진행해도 되는 구간&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목록 수집&lt;/li&gt;
&lt;li&gt;상태 확인&lt;/li&gt;
&lt;li&gt;초안 입력&lt;/li&gt;
&lt;li&gt;미리보기 생성&lt;/li&gt;
&lt;li&gt;결과 검증용 정보 수집&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;조건부 자동 진행 구간&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카테고리 선택&lt;/li&gt;
&lt;li&gt;태그 입력&lt;/li&gt;
&lt;li&gt;예약 시간 설정&lt;/li&gt;
&lt;li&gt;내부 저장&lt;/li&gt;
&lt;li&gt;재시도 가능한 일반 오류 복구&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사람 승인 필수 구간&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그인 복구&lt;/li&gt;
&lt;li&gt;QR 또는 2차 인증&lt;/li&gt;
&lt;li&gt;삭제/영구 변경&lt;/li&gt;
&lt;li&gt;결제/유료 전환&lt;/li&gt;
&lt;li&gt;외부 공개 최종 발행&lt;/li&gt;
&lt;li&gt;권한 확대&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 분리해 두면 자동화 범위를 키우더라도 어디까지는 기계, 어디부터는 사람이 책임지는지가 선명해진다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저 자동화의 완성도는 얼마나 많은 버튼을 대신 눌러주느냐보다, 어디서 멈춰야 하는지를 얼마나 잘 아느냐로 갈린다. 사람 승인을 남겨두는 건 자동화의 패배가 아니라 운영 설계의 성숙함에 가깝다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 안정적인 팀은 위험한 행동까지 전부 무인으로 밀지 않는다. 대신 반복적인 준비 작업은 자동화하고, 비용&amp;middot;공개&amp;middot;보안&amp;middot;권한이 걸린 마지막 판단만 사람에게 남긴다. 브라우저 자동화를 실무에 붙이고 있다면, 지금 필요한 질문은 &quot;어디까지 자동화할 수 있나&quot;보다 &quot;어디서 사람 승인을 남겨야 사고가 줄어드나&quot;에 더 가깝다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>2fa</category>
      <category>it</category>
      <category>qa</category>
      <category>로그인</category>
      <category>브라우저 자동화</category>
      <category>사람 승인</category>
      <category>운영 자동화</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/42</guid>
      <comments>https://janito.tistory.com/42#entry42comment</comments>
      <pubDate>Tue, 14 Apr 2026 09:07:56 +0900</pubDate>
    </item>
    <item>
      <title>프롬프트보다 중요한 운영 자산: 상태, 로그, 평가 기준 버전 관리</title>
      <link>https://janito.tistory.com/41</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화를 운영하다 보면 결과가 흔들릴 때 가장 먼저 프롬프트부터 고치게 된다. 하지만 실무에서는 프롬프트 한 줄보다 상태 파일, 로그 포맷, 평가 기준, 승인 규칙 같은 주변 자산이 더 자주 문제를 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 프롬프트를 써도 입력 전처리, 상태 스키마, 외부 API 응답, 평가 기준이 바뀌면 결과는 충분히 달라진다. 그래서 자동화를 오래 굴릴수록 관리해야 할 대상은 프롬프트 하나가 아니라 운영 전체 문맥이 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 프롬프트만 관리하면 부족한가&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화 결과는 프롬프트만으로 결정되지 않는다. 아래처럼 프롬프트 바깥 요소가 바뀌어도 품질은 크게 흔들린다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;bullet&quot;&gt;
&lt;li&gt;입력 전처리 규칙이 바뀌었다&lt;/li&gt;
&lt;li&gt;상태 파일 형식이 달라졌다&lt;/li&gt;
&lt;li&gt;외부 API 응답 구조가 바뀌었다&lt;/li&gt;
&lt;li&gt;평가 기준이 암묵적으로 달라졌다&lt;/li&gt;
&lt;li&gt;발행 전 승인 단계가 빠졌다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 요소를 기록하지 않으면 나중에는 무엇이 결과를 바꿨는지 설명할 수 없게 된다. 문제를 추적할 때마다 감으로 대응하게 되는 이유다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;버전 관리해야 하는 진짜 운영 자산&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 상태 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큐 상태, 마지막 실행 시각, 처리 완료 여부, 게시 URL, 실패 이유 같은 값은 자동화의 재실행 방식을 결정한다. 상태 구조가 바뀌면 중복 처리 위험과 복구 방식도 함께 바뀐다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;bullet&quot;&gt;
&lt;li&gt;재실행에 필요한 필드를 추적할 수 있다&lt;/li&gt;
&lt;li&gt;스키마 변경 시 마이그레이션 기준을 남길 수 있다&lt;/li&gt;
&lt;li&gt;과거 로그와 현재 동작을 비교하기 쉬워진다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 로그 포맷&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그는 남기는 것만으로 끝나지 않는다. 어떤 날은 실패 원인을 남기고 어떤 날은 성공 여부만 남기면, 기록은 쌓여도 비교는 불가능해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소한 아래 항목은 매번 같은 구조로 남기는 편이 좋다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;bullet&quot;&gt;
&lt;li&gt;작업 이름&lt;/li&gt;
&lt;li&gt;실행 시각&lt;/li&gt;
&lt;li&gt;입력 대상&lt;/li&gt;
&lt;li&gt;중간 단계&lt;/li&gt;
&lt;li&gt;최종 결과&lt;/li&gt;
&lt;li&gt;실패 원인&lt;/li&gt;
&lt;li&gt;사람 개입 필요 여부&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 평가 기준&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평가 기준이 문서화돼 있지 않으면 품질 판단은 그날그날 달라진다. 예전에는 통과하던 결과가 오늘은 실패가 되고, 담당자가 바뀌면 또 합격이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 평가 기준에도 버전이 필요하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;bullet&quot;&gt;
&lt;li&gt;v1: 구조와 형식 준수 중심&lt;/li&gt;
&lt;li&gt;v2: 사실 정확성과 실행 가능성 추가&lt;/li&gt;
&lt;li&gt;v3: 과장 표현과 반복 감점&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기준 변경이 기록돼 있으면 품질 변화도 설명할 수 있고, 기준이 흔들릴 때 어디서부터 바로잡아야 하는지도 보인다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 승인 규칙과 예외 처리 규칙&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실무에서는 언제 자동 발행하고, 언제 사람 확인을 받고, 어떤 실패는 재시도하고, 어떤 실패는 즉시 멈출지 같은 규칙이 결과를 크게 좌우한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;bullet&quot;&gt;
&lt;li&gt;카테고리 미지정이면 발행 금지&lt;/li&gt;
&lt;li&gt;로그인 만료면 즉시 사용자 호출&lt;/li&gt;
&lt;li&gt;평가 점수 미달이면 초안 저장만 하고 공개 중단&lt;/li&gt;
&lt;li&gt;외부 서비스 오류는 제한된 횟수만 재시도&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실무에서 적용하는 간단한 방법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변경 단위를 작게 나누기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프롬프트, 상태 구조, 평가 기준, 발행 규칙을 한 번에 바꾸면 문제가 생겼을 때 원인을 찾기 어렵다. 운영 변경은 작게 쪼개야 비교가 가능하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변경 이유를 한 줄이라도 남기기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무엇을 바꿨는지만 적어두면 시간이 지나서 다시 볼 때 맥락이 사라진다. 짧더라도 변경 이유를 같이 적어야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;bullet&quot;&gt;
&lt;li&gt;카테고리 누락 발행이 발생해서 발행 전 검증 추가&lt;/li&gt;
&lt;li&gt;초안은 길지만 실행 기준이 약해서 평가 항목 보강&lt;/li&gt;
&lt;li&gt;로그인 만료가 잦아 사용자 호출 조건 명확화&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;운영 문서와 실제 파일을 같이 움직이기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서만 있고 실제 상태 파일과 로그 포맷이 따로 놀면 금방 문서가 낡는다. 반대로 파일만 있고 문서가 없으면 구조를 읽어내는 비용이 커진다. 둘을 함께 관리해야 운영 지식이 팀 안에 남는다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심은 복잡함이 아니라 비교 가능성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 관리의 본질은 거창한 체계가 아니라 비교 가능성이다. 언제 무엇이 바뀌었고, 그 뒤 결과가 어떻게 달라졌는지를 볼 수 있으면 운영은 훨씬 덜 감정적으로 변한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;bullet&quot;&gt;
&lt;li&gt;결과가 나빠진 이유를 추적할 수 있다&lt;/li&gt;
&lt;li&gt;수정이 실제 개선인지 비교할 수 있다&lt;/li&gt;
&lt;li&gt;비슷한 실수를 반복할 가능성이 줄어든다&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화는 겉으로 보면 프롬프트가 중심처럼 보이지만, 오래 운영할수록 진짜 중요한 것은 상태, 로그, 평가 기준, 승인 규칙 같은 운영 자산이다. 이 자산이 정리돼 있으면 프롬프트 수정도 덜 위험해지고, 장애가 나도 훨씬 빨리 복구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화를 계속 키우고 있다면 이제 질문을 바꿔볼 만하다. 프롬프트를 어떻게 바꿀까보다 먼저, 결과를 좌우하는 운영 자산이 무엇이고 그것을 어떻게 함께 관리할지 보는 쪽이 훨씬 실무적이다.&lt;/p&gt;</description>
      <category>IT</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/41</guid>
      <comments>https://janito.tistory.com/41#entry41comment</comments>
      <pubDate>Mon, 13 Apr 2026 09:05:07 +0900</pubDate>
    </item>
    <item>
      <title>AI 자동화에 평가 루프를 넣어야 품질이 무너지지 않는 이유</title>
      <link>https://janito.tistory.com/40</link>
      <description>&lt;h1&gt;AI 자동화에 평가 루프를 넣어야 품질이 무너지지 않는 이유&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화를 만들 때 많은 팀이 처음에는 프롬프트와 연결 코드에만 집중한다. 응답이 얼추 그럴듯하게 나오고, 브라우저 클릭이나 API 호출도 성공하면 자동화가 완성된 것처럼 느껴진다. 문제는 그다음부터다. 실제 운영에 들어가면 품질은 조용히 흔들리기 시작한다. 같은 입력인데 답변 길이가 달라지고, 예전에는 잘 되던 흐름이 어느 날부터 이상하게 꼬이고, 사람이 보기에는 미묘하게 틀린 결과가 조금씩 늘어난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 필요한 건 감으로 보는 점검이 아니라 평가 루프다. AI 자동화는 &quot;한 번 잘 됐다&quot;로 끝나는 시스템이 아니다. 계속 변하는 입력, 모델, 프롬프트, 외부 서비스 상태 사이에서 품질을 유지해야 하는 운영 시스템이다. 그래서 로그만큼 중요한 것이 평가 기준이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;평가 루프가 없는 자동화는 왜 쉽게 무너지나&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 자동화가 실패하는 이유는 모델이 멍청해서가 아니라, 운영자가 품질 저하를 너무 늦게 알아차리기 때문이다. 예를 들어 다음과 같은 상황이 자주 생긴다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초안 생성은 계속 되는데 제목 품질이 점점 약해진다&lt;/li&gt;
&lt;li&gt;요약은 되는데 중요한 숫자나 날짜가 빠진다&lt;/li&gt;
&lt;li&gt;브라우저 자동화는 성공했지만 잘못된 페이지를 기준으로 동작한다&lt;/li&gt;
&lt;li&gt;분류 작업이 대체로 맞지만 특정 케이스에서 연속으로 틀린다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 문제는 실행 성공 여부만 보면 보이지 않는다. &quot;돌아갔다&quot;와 &quot;제대로 됐다&quot;는 다르다. 평가 루프는 이 둘을 분리해서 보게 만든다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;평가 루프는 거창한 ML 시스템이 아니다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평가라고 하면 데이터셋, 리더보드, 복잡한 스코어링을 먼저 떠올리기 쉽다. 하지만 실무 자동화에서 시작점은 훨씬 단순해도 된다. 핵심은 자동화 결과가 괜찮았는지 반복적으로 확인할 기준을 만드는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 현실적인 시작은 아래 세 가지다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 실패 기준을 먼저 문장으로 적기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 블로그 초안 생성 자동화라면 이런 식이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제목이 너무 추상적이면 실패&lt;/li&gt;
&lt;li&gt;본문에 실제 행동 기준이 없으면 실패&lt;/li&gt;
&lt;li&gt;문단 구조 없이 말만 길면 실패&lt;/li&gt;
&lt;li&gt;확인되지 않은 단정 표현이 많으면 실패&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 적어두면 평가가 가능해진다. 반대로 기준이 없으면 모든 결과가 &quot;그럭저럭 괜찮아 보임&quot;으로 흘러간다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 소수의 샘플 입력을 고정하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 중에는 입력이 계속 달라지므로, 품질 비교를 하려면 고정된 테스트 입력이 필요하다. 예를 들어 다음처럼 만든다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쉬운 케이스 3개&lt;/li&gt;
&lt;li&gt;자주 실패하는 까다로운 케이스 3개&lt;/li&gt;
&lt;li&gt;사람이 보기엔 중요하지만 모델이 놓치기 쉬운 케이스 3개&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프롬프트나 모델을 바꿀 때 이 샘플부터 다시 돌려 보면 체감보다 정확하게 비교할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 사람 검토 포인트를 줄여서 명확히 하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평가 기준이 너무 많으면 결국 안 보게 된다. 초반에는 3~5개만 보는 게 낫다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정확성&lt;/li&gt;
&lt;li&gt;누락 여부&lt;/li&gt;
&lt;li&gt;형식 준수&lt;/li&gt;
&lt;li&gt;바로 실행 가능한 수준인지&lt;/li&gt;
&lt;li&gt;과장 표현 여부&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 정도만 반복적으로 체크해도 품질 저하를 빨리 잡아낼 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실무에서 평가 루프를 어디에 넣어야 하나&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화 전체를 다 평가하려고 하면 오래 못 간다. 영향이 큰 단계부터 넣는 게 맞다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과물이 바로 외부로 나가는 단계&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;게시물 발행&lt;/li&gt;
&lt;li&gt;메시지 전송&lt;/li&gt;
&lt;li&gt;고객 응답 초안&lt;/li&gt;
&lt;li&gt;태스크 분배 지시&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 단계는 한 번 잘못 나가면 되돌리기 어렵다. 그래서 최소한 공개 전 평가나 샘플 점검이 필요하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;중간 판단이 다음 단계를 바꾸는 단계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이슈를 어떤 담당자에게 넘길지 분류&lt;/li&gt;
&lt;li&gt;어떤 카테고리로 저장할지 결정&lt;/li&gt;
&lt;li&gt;재시도할지, 멈출지 판단&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 틀리면 뒤 단계가 전부 꼬인다. 이런 판단성 단계는 정확도 기준을 따로 보는 게 좋다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비용이 커지는 단계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대량 생성, 장시간 브라우저 작업, API 체인 호출은 결과 품질이 애매한데도 계속 돌면 손해가 커진다. 그래서 비용이 큰 자동화일수록 평가 루프가 먼저 필요하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;평가 루프를 넣으면 바뀌는 것&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 큰 변화는 프롬프트 수정 방식이다. 평가 루프가 없을 때는 보통 이런 흐름으로 간다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결과가 별로다&lt;/li&gt;
&lt;li&gt;프롬프트를 바꾼다&lt;/li&gt;
&lt;li&gt;이번엔 괜찮아 보인다&lt;/li&gt;
&lt;li&gt;며칠 뒤 다른 케이스가 망가진다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 평가 루프가 있으면 이렇게 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어느 기준에서 점수가 떨어졌는지 본다&lt;/li&gt;
&lt;li&gt;샘플 입력으로 전후 차이를 비교한다&lt;/li&gt;
&lt;li&gt;좋아진 부분과 나빠진 부분을 같이 확인한다&lt;/li&gt;
&lt;li&gt;변경을 유지할지 말지 결정한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 감으로 튜닝하는 대신 비교 가능한 운영으로 바뀐다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;평가 루프를 만들 때 흔한 실수&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사람 취향과 품질 기준을 섞는 것&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;내가 보기엔 별로&quot;만으로는 반복 평가가 어렵다. 취향은 메모로 남기되, 기준은 최대한 관찰 가능한 문장으로 바꾸는 게 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;나쁨: 좀 밋밋하다&lt;/li&gt;
&lt;li&gt;좋음: 제목에 구체적인 상황이나 대상이 없다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;완벽한 점수체계를 먼저 만들려는 것&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음부터 정교한 수치화에 집착하면 시작도 못 한다. 체크리스트와 pass/fail만으로도 충분히 의미 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;운영 로그와 평가 로그를 분리하지 않는 것&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 성공 로그와 품질 평가 로그는 다르다. 하나는 시스템이 돌았는지를 보여주고, 다른 하나는 결과가 쓸 만한지를 보여준다. 둘을 구분해야 원인을 빠르게 찾을 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;작은 자동화일수록 더 필요하다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 의외로 개인 자동화나 소규모 팀에서 더 중요하다. 대기업 시스템은 누군가 모니터링이라도 하지만, 개인 자동화는 한 번 흔들리면 며칠 동안 아무도 모른 채 지나가기 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 아래 같은 자동화는 평가 루프를 붙일 가치가 높다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블로그 초안 생성&lt;/li&gt;
&lt;li&gt;업무 요약 자동화&lt;/li&gt;
&lt;li&gt;에이전트 태스크 분배&lt;/li&gt;
&lt;li&gt;회의 정리 및 후속 액션 생성&lt;/li&gt;
&lt;li&gt;브라우저 기반 반복 작업&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작을수록 단순한 평가 기준부터 붙이는 게 효과가 크다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화의 품질은 프롬프트를 얼마나 길게 쓰느냐보다, 결과를 얼마나 반복적으로 검증하느냐에 더 크게 좌우된다. 평가 루프가 없으면 자동화는 처음 며칠만 반짝하고, 시간이 지날수록 조용히 품질이 무너진다. 반대로 기준이 조금만 있어도 자동화는 운영 가능한 시스템에 가까워진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화를 만들고 있다면 다음 질문부터 해보면 된다. &quot;이 결과가 괜찮은지 나는 무엇으로 판단할 건가?&quot; 이 질문에 답이 있어야 다음 수정도 의미가 생긴다. AI 자동화는 생성보다 평가가 붙을 때 비로소 안정된다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>ai</category>
      <category>evals</category>
      <category>it</category>
      <category>에이전트</category>
      <category>자동화</category>
      <category>평가 루프</category>
      <category>품질관리</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/40</guid>
      <comments>https://janito.tistory.com/40#entry40comment</comments>
      <pubDate>Sun, 12 Apr 2026 09:03:00 +0900</pubDate>
    </item>
    <item>
      <title>일본 식당에서 바로 쓰는 기본 일본어 표현 15가지</title>
      <link>https://janito.tistory.com/39</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;일본 여행을 가면 생각보다 식당에서 말할 일이 많다. 한국처럼 손짓으로만 다 해결되는 경우도 있지만, 자리 안내를 받거나 주문을 바꾸거나 계산을 할 때는 짧은 표현 몇 개만 알아도 훨씬 편하다. 일본어를 유창하게 하지 않아도 괜찮다. 식당에서 자주 쓰는 표현은 패턴이 비슷하고, 발음이 조금 어색해도 문맥이 분명해서 대부분 잘 통한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 일본 여행 초보가 실제 식당에서 바로 써먹을 수 있는 표현 위주로 정리했다. 너무 교과서적인 문장보다, 식당 입장부터 주문, 추가 요청, 계산까지 실제 동선에 맞는 표현만 골랐다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;먼저 기억하면 좋은 기본 원칙&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식당 일본어를 외울 때는 문장 전체를 길게 외우기보다 &quot;의미 단위&quot;로 익히는 편이 낫다. 예를 들어 &quot;이거 주세요&quot;와 &quot;물 좀 주세요&quot;는 구조가 비슷하다. 핵심 표현 몇 개만 알아두면 응용이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 아래 세 가지를 기억하면 훨씬 편하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;~쿠다사이(ください)&lt;/b&gt;를 붙이면 정중한 요청이 된다&lt;/li&gt;
&lt;li&gt;잘 못 들었을 때는 &lt;b&gt;모우 이치도(もう一度)&lt;/b&gt;로 다시 말해 달라고 할 수 있다&lt;/li&gt;
&lt;li&gt;민폐를 줄이려는 태도만 보여도 일본 식당에서는 대체로 친절하게 응대한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발음이 완벽하지 않아도 괜찮다. 너무 긴 문장보다 짧고 분명하게 말하는 게 낫다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입장할 때 자주 쓰는 표현&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 두 명입니다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;후타리 데스 (二人です)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 사람이면 이 표현 하나로 거의 끝난다. 혼자면 히토리 데스, 세 명이면 산닌 데스처럼 바꿔 말하면 된다. 직원이 먼저 인원 수를 물어보는 경우가 많아서 가장 먼저 익혀둘 만한 표현이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 예약했어요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요야쿠 시테이마스 (予約しています)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예약한 이름을 같이 말하면 더 좋다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;요야쿠 시테이마스. 김 데스.&lt;/li&gt;
&lt;li&gt;예약했습니다. 김입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 금연석 있나요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;킨엔세키 아리마스카? (禁煙席ありますか？)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘은 금연이 기본인 곳도 많지만, 좌석 구역이 나뉘거나 흡연 부스가 있는 곳도 있다. 냄새에 민감하면 미리 확인하는 게 좋다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주문할 때 가장 많이 쓰는 표현&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 이거 주세요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코레 쿠다사이 (これください)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메뉴판을 가리키면서 쓰면 된다. 일본어를 잘 못해도 가장 강력한 생존 표현이다. 이름을 정확히 못 읽어도 해결된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 이거 하나 주세요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코레 히토츠 쿠다사이 (これ一つください)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수량까지 말하고 싶을 때 쓴다. 두 개면 후타츠, 세 개면 밋츠로 바꿀 수 있다. 다만 손가락으로 숫자를 보여줘도 충분히 통한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 추천 메뉴가 뭐예요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오스스메와 난데스카? (おすすめは何ですか？)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현지 식당에서 실패 확률을 줄이는 좋은 표현이다. 관광지 식당에서도 비교적 자연스럽게 쓸 수 있다. 다만 답변을 길게 들으면 다 못 알아들을 수 있으니, 메뉴판에서 추천 표시를 같이 보면서 듣는 게 좋다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 매운가요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;카라이 데스카? (辛いですか？)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매운 음식을 잘 못 먹는 사람이라면 꽤 유용하다. 특히 라멘, 카레, 양념류에서 도움이 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8. 고수 들어가나요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파쿠치 하잇테이마스카? (パクチー入っていますか？)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알레르기나 못 먹는 재료가 있으면 &lt;b&gt;~하잇테이마스카?&lt;/b&gt; 패턴을 응용하면 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타마고 하잇테이마스카? 계란 들어가나요?&lt;/li&gt;
&lt;li&gt;니쿠 하잇테이마스카? 고기 들어가나요?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;요청하거나 수정할 때 쓰는 표현&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;9. 물 좀 주세요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오미즈 쿠다사이 (お水ください)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일본에서는 큰 소리로 부르기보다 직원이 지나갈 때 짧게 말하는 편이 더 자연스럽다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;10. 젓가락 하나 더 주세요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오하시 모우 히토츠 쿠다사이 (お箸もう一つください)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젓가락, 접시, 앞그릇, 물티슈 같은 것들은 이 패턴으로 대부분 해결된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사라 쿠다사이: 접시 주세요&lt;/li&gt;
&lt;li&gt;오시보리 쿠다사이: 물티슈 주세요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;11. 이거 빼주실 수 있나요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;코레 누이테 모라이마스카? (これ抜いてもらえますか？)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 완성된 요리는 조절이 어려운 경우도 있어서, 가능한지 아닌지는 식당마다 다르다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네기 누이테 모라이마스카? 파 빼주실 수 있나요?&lt;/li&gt;
&lt;li&gt;와사비 누키 데 오네가이시마스: 와사비 빼주세요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;12. 포장 가능할까요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모치카에리 데키마스카? (持ち帰りできますか？)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일본은 한국보다 포장 문화가 덜 자유로운 곳도 있으니, 가능 여부를 먼저 묻는 편이 좋다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;못 들었을 때, 문제 생겼을 때 쓰는 표현&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;13. 다시 한 번 말씀해 주세요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모우 이치도 오네가이시마스 (もう一度お願いします)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상대가 빠르게 말했을 때 가장 안전한 표현이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;14. 잘 모르겠어요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요쿠 와카리마센 (よくわかりません)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;긴 설명을 들었는데 이해가 안 될 때 쓸 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;15. 괜찮습니다 / 필요 없어요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다이죠부 데스 (大丈夫です)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가 주문, 옵션, 영수증, 비닐봉투 같은 것을 권할 때 정중하게 거절하는 의미로 많이 쓴다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;계산할 때 꼭 알아둘 표현&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;계산할게요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오카이케이 오네가이시마스 (お会計お願いします)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 많이 쓰는 계산 표현이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;카드 되나요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;카도 쓰카에마스카? (カード使えますか？)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작은 가게나 지방 식당에서는 한 번 확인하는 편이 안전하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;따로따로 계산 가능할까요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;베츠베츠 데 하라에마스카? (別々で払えますか？)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식당에 따라 개별 계산이 가능한 곳과 아닌 곳이 갈린다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제로는 이렇게만 말해도 충분하다&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;후타리 데스: 두 명입니다&lt;/li&gt;
&lt;li&gt;코레 쿠다사이: 이거 주세요&lt;/li&gt;
&lt;li&gt;오미즈 쿠다사이: 물 주세요&lt;/li&gt;
&lt;li&gt;모우 이치도 오네가이시마스: 다시 한 번 부탁합니다&lt;/li&gt;
&lt;li&gt;오카이케이 오네가이시마스: 계산 부탁합니다&lt;/li&gt;
&lt;li&gt;다이죠부 데스: 괜찮습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 여섯 개만 기억해도 식당에서 당황할 일이 꽤 줄어든다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;일본 식당에서 같이 알아두면 좋은 문화 포인트&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;직원을 큰 소리로 계속 부르기보다 타이밍을 봐서 짧게 요청하는 편이 좋다&lt;/li&gt;
&lt;li&gt;물이나 앞접시는 셀프인 가게가 적지 않다&lt;/li&gt;
&lt;li&gt;자리에 앉자마자 물수건이나 물이 바로 나오기도 한다&lt;/li&gt;
&lt;li&gt;계산은 테이블이 아니라 카운터에서 하는 식당도 많다&lt;/li&gt;
&lt;li&gt;사진 촬영이 자유롭지 않은 가게도 있어 내부 촬영은 눈치를 보는 편이 안전하다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일본은 규칙이 아주 엄격해서라기보다, 서로 번거롭지 않게 움직이는 분위기가 강한 편이다. 이 감각만 알고 가도 훨씬 편하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일본 여행에서 식당은 가장 자주 들어가는 장소 중 하나다. 그래서 복잡한 회화보다 식당 표현 몇 개를 먼저 익혀두는 게 체감 효율이 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 건 완벽한 일본어가 아니라, 짧고 분명하게 말하는 것이다. 메뉴를 가리키고, 필요한 표현을 붙이고, 못 알아들으면 다시 부탁하면 된다. 이 정도만 해도 일본 식당 이용 난이도는 생각보다 많이 내려간다.&lt;/p&gt;</description>
      <category>일본</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/39</guid>
      <comments>https://janito.tistory.com/39#entry39comment</comments>
      <pubDate>Sat, 11 Apr 2026 17:33:13 +0900</pubDate>
    </item>
    <item>
      <title>AI 자동화에서 예외처리를 빼먹으면 생기는 문제들</title>
      <link>https://janito.tistory.com/38</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화를 처음 만들 때는 보통 &quot;일단 돌아가게&quot; 만드는 데 집중한다. 프롬프트를 짜고, 스크립트를 붙이고, 예약 실행까지 걸어두면 꽤 그럴듯해 보인다. 문제는 그다음부터다. 실제 운영에서는 항상 예상 밖의 상황이 생긴다. 로그인 세션이 끊기고, 외부 API가 느려지고, 파일 경로 하나가 바뀌고, 사람이 중간에 확인해야 하는 순간도 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 예외처리를 빼먹은 자동화는 조용히 망가진다. 더 나쁜 경우에는 망가진 줄도 모른 채 잘못된 결과를 계속 만든다. AI 자동화를 오래 운영하려면 &quot;정상 흐름&quot;보다 &quot;비정상 흐름&quot;을 먼저 설계해야 한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 예외처리가 특히 더 중요한가&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적인 배치 작업도 예외처리가 중요하지만, AI 자동화는 변수의 종류가 더 많다. 모델 응답 길이가 달라질 수 있고, 브라우저 UI가 바뀔 수 있고, 사람이 승인해야 하는 단계가 끼어들 수도 있다. 즉, 코드만 안정적이라고 끝나는 구조가 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 아래 같은 특성이 예외처리를 더 중요하게 만든다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부 서비스 상태에 자주 영향을 받는다&lt;/li&gt;
&lt;li&gt;입력 형식이 매번 완전히 같지 않다&lt;/li&gt;
&lt;li&gt;사람 검수나 승인 지점이 중간에 들어간다&lt;/li&gt;
&lt;li&gt;한 번의 실패가 다음 작업까지 꼬이게 만들 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화가 많아질수록 중요한 건 &quot;실패를 없애는 것&quot;이 아니라 &quot;실패했을 때 안전하게 멈추고 복구하는 것&quot;이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예외처리를 빼먹으면 실제로 생기는 문제&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 실패했는데도 성공한 것처럼 기록된다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 가장 위험하다. 예를 들어 글 발행 자동화가 마지막 공개 단계에서 실패했는데, 상태 파일에는 published로 저장되는 경우가 있다. 그러면 운영자는 이미 끝난 줄 알고 넘어간다. 다음 날이 되면 큐는 밀리고, 누락 원인도 뒤늦게 찾게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 막으려면 결과 기록은 항상 마지막 확인 이후에 해야 한다. 가능하면 아래 순서가 안전하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행 시작 기록&lt;/li&gt;
&lt;li&gt;중간 단계별 체크포인트 기록&lt;/li&gt;
&lt;li&gt;최종 결과 실제 확인&lt;/li&gt;
&lt;li&gt;그다음에만 성공 상태 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;성공 처리&quot;는 가장 마지막에 해야 한다. 이 순서를 거꾸로 잡으면 운영 로그 전체가 거짓말을 하게 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 중간 실패 후 재실행이 더 어려워진다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예외처리가 없는 자동화는 처음부터 끝까지 한 번에 성공하는 것만 가정한다. 그런데 현실에서는 중간 단계에서 멈추는 일이 훨씬 많다. 예를 들어 초안은 생성됐는데 업로드만 실패했다면, 다음 실행에서는 어디서부터 다시 시작해야 할지 애매해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 때 필요한 게 중단 지점 설계다. 최소한 아래는 분리해 두는 게 좋다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초안 생성 완료&lt;/li&gt;
&lt;li&gt;사람 검수 완료&lt;/li&gt;
&lt;li&gt;외부 서비스 로그인 확인 완료&lt;/li&gt;
&lt;li&gt;발행 요청 완료&lt;/li&gt;
&lt;li&gt;공개 페이지 검증 완료&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 나누면 재실행할 때 불필요한 작업을 반복하지 않아도 된다. 반대로 경계가 없으면 이미 끝난 작업까지 다시 돌리다가 중복 게시나 중복 전송이 생긴다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 외부 서비스 문제를 내부 버그로 착각한다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화를 운영하다 보면 문제 원인이 코드가 아니라 외부 환경인 경우가 많다. 세션 만료, 일시적인 429, 브라우저 버튼 구조 변경, 업스트림 응답 지연 같은 것들이다. 그런데 예외처리가 없으면 이런 상황도 그냥 &quot;작동 안 함&quot;으로만 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 예외는 묶어서 처리하면 안 된다. 원인별로 나눠야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인증 실패&lt;/li&gt;
&lt;li&gt;권한 부족&lt;/li&gt;
&lt;li&gt;네트워크 지연&lt;/li&gt;
&lt;li&gt;응답 형식 이상&lt;/li&gt;
&lt;li&gt;사람이 개입해야 하는 보류 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 관점에서는 &quot;실패했다&quot;보다 &quot;왜 실패했는지 분류된다&quot;가 훨씬 중요하다. 그래야 복구 속도가 빨라진다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사람 개입 포인트를 미리 정해야 한다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화는 전부 무인으로 굴러가야 한다고 생각하기 쉽다. 그런데 실제로는 사람 개입 지점을 일부러 남겨두는 편이 더 안정적이다. 예를 들어 아래 같은 순간은 자동화가 무리하게 끝까지 밀지 않는 게 낫다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로그인이나 2차 인증이 필요한 순간&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션이 끊겼는데도 억지로 우회하려 하면 더 큰 문제가 생긴다. 이때는 바로 사람에게 짧게 알려주고, 로그인 복구 뒤 다시 이어가는 흐름이 좋다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공개 전 품질 검수가 필요한 순간&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI가 쓴 초안은 구조는 빨리 만들 수 있어도 맥락과 정확성은 흔들릴 수 있다. 검색 유입용 블로그, 기술 문서, 고객 노출 페이지처럼 품질이 중요한 글은 최종 검수 지점을 분리해 두는 게 맞다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비용이 커질 수 있는 순간&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대량 API 호출, 장시간 브라우저 작업, 외부 서비스 유료 액션은 실패 재시도 규칙을 아주 보수적으로 잡아야 한다. 자동 재시도를 무한대로 걸어두면 장애보다 비용 폭주가 먼저 올 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;예외처리를 설계할 때 꼭 넣어야 할 것&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 시스템이 아니어도 아래 네 가지는 거의 기본값으로 넣는 게 좋다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 실패 로그를 사람이 읽을 수 있게 남기기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택 트레이스만 저장하는 로그는 개발자에게도 피곤하다. 운영 로그에는 최소한 다음이 보여야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어떤 작업이었는지&lt;/li&gt;
&lt;li&gt;어디 단계에서 멈췄는지&lt;/li&gt;
&lt;li&gt;자동 재시도가 가능한지&lt;/li&gt;
&lt;li&gt;지금 사람이 해야 할 일이 뭔지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 예외 로그는 디버깅 자료이면서 운영 안내문이기도 하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 재시도 정책을 분리하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 실패를 같은 방식으로 재시도하면 안 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네트워크 타임아웃: 짧게 몇 번 재시도 가능&lt;/li&gt;
&lt;li&gt;인증 실패: 재시도보다 사용자 개입 요청&lt;/li&gt;
&lt;li&gt;입력 형식 오류: 즉시 중단 후 데이터 점검&lt;/li&gt;
&lt;li&gt;외부 서비스 429: 지연 후 제한적으로 재시도&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재시도는 많을수록 좋은 게 아니라, 원인에 맞을수록 좋다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 중복 실행 방지 장치 넣기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예외처리가 허술하면 실패 후 재실행 과정에서 같은 작업이 두 번 수행되기 쉽다. 특히 게시물 발행, 메시지 전송, 파일 업로드처럼 &quot;한 번만&quot; 실행돼야 하는 작업은 idempotency를 의식해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실무에서는 이런 식으로 막는다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행 전 상태 파일 확인&lt;/li&gt;
&lt;li&gt;작업 단위 고유 ID 부여&lt;/li&gt;
&lt;li&gt;이미 처리한 결과 URL이나 리소스 ID 저장&lt;/li&gt;
&lt;li&gt;최종 성공 전까지는 큐 상태를 queued/in_progress로 유지&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 최종 검증 단계 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화는 요청을 보냈다고 끝나면 안 된다. 실제로 반영됐는지 확인하는 마지막 단계가 꼭 필요하다. 글 발행이면 공개 페이지 확인, 메시지 전송이면 실제 전송 결과 확인, 파일 생성이면 내용 검증까지 보는 편이 안전하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청 성공과 결과 성공은 다르다. 운영에서는 이 차이를 놓치면 안 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;작은 자동화라도 운영 기준을 가져가야 한다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예외처리는 거대한 서비스에서만 필요한 게 아니다. 혼자 쓰는 블로그 자동화, 개인 업무 비서, 홈서버 스크립트에도 똑같이 중요하다. 오히려 소규모 자동화일수록 한 번 망가지면 한동안 아무도 모르고 지나가기 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 개인 자동화라도 최소한 아래 기준은 추천한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실패를 숨기지 말 것&lt;/li&gt;
&lt;li&gt;멈출 지점을 명확히 둘 것&lt;/li&gt;
&lt;li&gt;사람 호출 조건을 정해둘 것&lt;/li&gt;
&lt;li&gt;성공 기록은 검증 후에만 남길 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 네 가지만 지켜도 자동화의 신뢰도가 눈에 띄게 올라간다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화는 잘 돌아갈 때보다, 예상 밖 상황에서 어떻게 행동하는지가 더 중요하다. 예외처리를 빼먹으면 자동화는 편리한 도구가 아니라 관리 부담이 된다. 반대로 실패 경로를 잘 설계해 두면, 자동화는 오래 굴릴수록 더 믿을 만한 시스템이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음부터 완벽하게 만들 필요는 없다. 다만 최소한 &quot;어디서 실패할 수 있는지&quot;와 &quot;실패하면 어떻게 멈출지&quot;는 설계해 두는 게 맞다. 자동화의 완성도는 정상 시나리오가 아니라 예외 시나리오에서 드러난다.&lt;/p&gt;</description>
      <category>IT</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/38</guid>
      <comments>https://janito.tistory.com/38#entry38comment</comments>
      <pubDate>Sat, 11 Apr 2026 09:04:41 +0900</pubDate>
    </item>
    <item>
      <title>작은 홈서버나 맥미니를 AI 작업 허브로 쓰는 현실적인 방법</title>
      <link>https://janito.tistory.com/37</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화를 오래 굴려보면 결국 부딪히는 문제가 있다. 작업은 늘어나는데, 내가 항상 그 앞에 앉아 있을 수는 없다는 점이다. 노트북에서 모든 걸 돌리면 자리를 비우는 순간 흐름이 끊기고, 여러 에이전트나 스크립트를 동시에 관리하기도 점점 번거로워진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 때 작은 홈서버나 맥미니를 AI 작업 허브처럼 쓰면 운영이 한결 단순해진다. 거창한 서버실이 필요한 건 아니다. 중요한 건 성능보다도 &lt;b&gt;항상 켜져 있고, 상태를 확인하기 쉽고, 문제가 났을 때 복구하기 쉬운 구조&lt;/b&gt;를 만드는 것이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 별도 작업 허브가 필요할까&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 개인 PC 한 대로도 충분해 보인다. 하지만 AI 작업이 조금만 늘어나도 아래 문제가 반복된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;터미널 세션이 닫히면 작업도 같이 끊긴다&lt;/li&gt;
&lt;li&gt;장시간 실행 작업과 일상 작업이 서로 영향을 준다&lt;/li&gt;
&lt;li&gt;로그가 흩어져서 무엇이 실패했는지 찾기 어렵다&lt;/li&gt;
&lt;li&gt;외부에서 상태를 확인하거나 다시 실행하기가 불편하다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 허브를 따로 두면 적어도 실행 환경이 고정된다. 내가 어디에 있든 같은 위치에서 작업을 확인하고, 재시작하고, 로그를 볼 수 있다. 이 차이가 생각보다 크다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;어떤 장비가 적당한가&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 운영 기준에서는 처음부터 비싼 장비를 살 필요가 없다. 아래 정도면 충분하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;맥미니가 잘 맞는 경우&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미 맥 생태계를 쓰고 있다&lt;/li&gt;
&lt;li&gt;전력 소모와 소음이 중요하다&lt;/li&gt;
&lt;li&gt;원격 접속과 GUI 기반 작업도 함께 쓰고 싶다&lt;/li&gt;
&lt;li&gt;브라우저 자동화나 로컬 앱 연동이 필요하다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥미니의 장점은 안정성과 편의성이다. 항상 켜두기 좋고, 원격으로 붙어도 데스크톱 환경을 다루기 편하다. 특히 브라우저 자동화, 메시징 연동, 개인 비서형 워크플로를 함께 운영할 때 체감이 좋다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;리눅스 미니 PC나 홈서버가 잘 맞는 경우&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비용을 더 낮추고 싶다&lt;/li&gt;
&lt;li&gt;도커 기반으로 서비스 분리를 하고 싶다&lt;/li&gt;
&lt;li&gt;SSH 중심 운영에 익숙하다&lt;/li&gt;
&lt;li&gt;파일서버, 모니터링, 백업도 같이 돌리고 싶다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스 장비는 유연성이 크다. 대신 처음 구조를 잘못 잡으면 관리 포인트가 늘어나기 쉽다. 초보자라면 기능을 한꺼번에 올리기보다, 핵심 자동화부터 안정화하는 편이 낫다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;가장 먼저 정해야 할 4가지&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장비보다 중요한 건 운영 기준이다. 아래 네 가지를 먼저 정해두면 이후가 훨씬 편하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 어떤 작업을 이 장비에 몰아둘지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 걸 한 장비에 억지로 넣으면 금방 복잡해진다. 예를 들어 아래처럼 나누는 편이 좋다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AI 에이전트 실행&lt;/li&gt;
&lt;li&gt;정기 스크립트와 크론 작업&lt;/li&gt;
&lt;li&gt;로그 수집과 상태 확인&lt;/li&gt;
&lt;li&gt;브라우저 자동화&lt;/li&gt;
&lt;li&gt;메시지 알림 전송&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 개인 문서 편집, 무거운 영상 작업, 실시간 게임 같은 건 작업 허브와 성격이 다르다. 허브는 &quot;항상 켜진 운영 중심&quot; 역할에 집중시키는 게 맞다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 실패했을 때 어디서 확인할지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화는 잘 돌 때보다 실패했을 때 더 많은 시간을 잡아먹는다. 그래서 처음부터 확인 지점을 통일해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 이런 식이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행 로그는 특정 폴더에만 쌓기&lt;/li&gt;
&lt;li&gt;장시간 작업은 tmux 같은 세션 관리 도구로 유지하기&lt;/li&gt;
&lt;li&gt;에러가 나면 텔레그램이나 슬랙으로 짧게 알림 보내기&lt;/li&gt;
&lt;li&gt;재시작 절차를 문서로 남기기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;실패는 나중에 보면 되지&quot;라고 미루면, 실제로 문제가 생겼을 때 어디서부터 봐야 할지 몰라서 더 오래 멈춘다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 원격 확인 방법을 단순하게 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 허브의 핵심은 외부에서도 상태를 쉽게 보는 것이다. 여기서 중요한 건 기능이 많음이 아니라 진입 경로가 단순함이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;권장하는 기본 구성은 아래 정도다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH 또는 원격 데스크톱 진입 경로 1개&lt;/li&gt;
&lt;li&gt;상태 확인용 대시보드 또는 로그 위치 1개&lt;/li&gt;
&lt;li&gt;긴급 재시작 명령 1개&lt;/li&gt;
&lt;li&gt;알림 받는 채널 1개&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 네 가지가 명확하면 이동 중에도 대응이 가능하다. 반대로 접속 경로가 여러 개이고, 로그가 여기저기 흩어져 있으면 결국 &quot;집에 가서 봐야지&quot;가 된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 사람이 개입해야 하는 지점을 미리 정하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 자동화가 늘어날수록 모든 걸 무인으로 돌리고 싶어진다. 하지만 로그인, 결제, 공개 발행, 삭제 같은 작업은 사람 확인이 들어가는 편이 안전하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 이런 식으로 선을 그을 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초안 작성: 자동&lt;/li&gt;
&lt;li&gt;테스트 실행: 자동&lt;/li&gt;
&lt;li&gt;결과 요약: 자동&lt;/li&gt;
&lt;li&gt;외부 공개 발행: 최종 확인 후 진행&lt;/li&gt;
&lt;li&gt;계정 재로그인: 사람 개입 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기준이 있어야 자동화가 커져도 사고가 줄어든다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제 운영에서 체감 큰 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 기준으로는 화려한 인프라보다 아래 구성이 훨씬 실용적이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;작업 큐를 따로 둔다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;할 일을 파일이나 데이터로 명확히 남겨두면 매일 반복 작업이 쉬워진다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오늘 처리할 주제&lt;/li&gt;
&lt;li&gt;현재 상태(queued, drafted, published)&lt;/li&gt;
&lt;li&gt;마지막 실행 시각&lt;/li&gt;
&lt;li&gt;실패 이유&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 정도만 있어도 사람과 에이전트가 같은 상태를 본다. 운영 피로가 크게 줄어든다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;세션 유지 도구를 쓴다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장시간 실행 작업은 터미널 창 하나에 걸지 않는 편이 좋다. tmux 같은 도구를 쓰면 세션이 살아 있어서 중간에 끊겨도 다시 붙을 수 있다. AI 에이전트 작업, 로그 관찰, 배치 스크립트 확인에 특히 유용하다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로그를 읽기 쉽게 남긴다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그는 많다고 좋은 게 아니다. 나중에 사람이 읽을 수 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;권장하는 최소 기준은 이렇다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행 시작/종료 시각&lt;/li&gt;
&lt;li&gt;어떤 작업을 처리했는지&lt;/li&gt;
&lt;li&gt;성공/실패 여부&lt;/li&gt;
&lt;li&gt;실패 시 바로 볼 수 있는 원인 한 줄&lt;/li&gt;
&lt;li&gt;다음 액션&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 다섯 가지가 보이면 운영 중 판단이 빨라진다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;처음부터 크게 벌이지 않는 게 중요하다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 허브를 만들면 이것저것 더 얹고 싶어진다. 홈서버, NAS, 모니터링, 미디어 서버, 개발 환경, VPN, 자동화 플랫폼까지 한 번에 넣기 쉽다. 그런데 그렇게 시작하면 관리 대상만 늘어난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현실적으로는 아래 순서가 낫다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;항상 켜진 장비 1대 준비&lt;/li&gt;
&lt;li&gt;원격 접속 안정화&lt;/li&gt;
&lt;li&gt;작업 큐와 로그 구조 정리&lt;/li&gt;
&lt;li&gt;알림 연결&lt;/li&gt;
&lt;li&gt;자주 쓰는 자동화 1~2개만 고정 운영&lt;/li&gt;
&lt;li&gt;이후 필요할 때 기능 추가&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 한 달은 &quot;확장&quot;보다 &quot;안정화&quot;가 우선이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작은 홈서버나 맥미니를 AI 작업 허브로 쓰는 핵심은 성능 경쟁이 아니다. &lt;b&gt;항상 켜져 있고, 상태가 보이고, 실패했을 때 금방 복구할 수 있는 운영 구조&lt;/b&gt;를 만드는 데 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 AI 자동화는 거대한 시스템보다도, 내가 매일 다룰 수 있는 단순한 구조에서 더 오래 간다. 장비는 소박해도 괜찮다. 대신 작업 큐, 원격 확인, 로그, 사람 개입 지점을 분명히 정해두는 편이 훨씬 현실적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작게 시작해서 끊기지 않게 운영하는 것. 그게 결국 가장 강한 방식이다.&lt;/p&gt;</description>
      <category>IT</category>
      <category>ai자동화</category>
      <category>맥미니</category>
      <category>작업허브</category>
      <category>홈서버</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/37</guid>
      <comments>https://janito.tistory.com/37#entry37comment</comments>
      <pubDate>Fri, 10 Apr 2026 09:06:43 +0900</pubDate>
    </item>
    <item>
      <title>혼자서도 가능한 AI 개발팀 운영 루틴 만들기</title>
      <link>https://janito.tistory.com/36</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;혼자 개발한다고 해서 모든 일을 혼자 머리로만 감당할 필요는 없습니다. 요즘은 AI를 단순한 질문 답변 도구가 아니라, 역할을 나눠서 움직이는 작업 파트너처럼 운영하는 방식이 점점 현실적이 되고 있습니다. 문제는 여기서부터입니다. AI를 여러 개 붙인다고 자동으로 팀이 되지는 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 혼자서 AI를 활용해 개발 일을 굴리다 보면 금방 비슷한 문제가 반복됩니다. 누가 무엇을 맡았는지 애매하고, 같은 일을 두 번 시키거나, 결과물은 많이 나오는데 정작 검수가 안 돼서 다시 사람이 처음부터 보는 경우가 많습니다. 결국 중요한 건 AI 숫자가 아니라 운영 루틴입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 혼자서도 AI 개발팀처럼 일할 때 실제로 도움이 되는 운영 루틴을 정리해보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 먼저 역할을 나눠야 중복이 줄어든다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼자 일할 때 가장 흔한 실수는 기획, 구현, 검수, 기록을 한 흐름에 다 섞어버리는 것입니다. 사람 혼자 하더라도 역할은 분리하는 편이 훨씬 안정적입니다. AI를 붙일 때도 마찬가지입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 아래처럼 나누면 작업이 훨씬 선명해집니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기획 역할: 요구사항 정리, 작업 단위 분해, 우선순위 결정&lt;/li&gt;
&lt;li&gt;구현 역할: 코드 작성, 초안 생성, 테스트 보조&lt;/li&gt;
&lt;li&gt;리뷰 역할: 누락 항목 점검, 위험 요소 체크, 품질 확인&lt;/li&gt;
&lt;li&gt;운영 역할: 로그 기록, 상태 업데이트, 다음 액션 정리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 나누면 같은 AI를 쓰더라도 매번 목적이 달라집니다. 중요한 건 모델 이름보다도, 지금 어떤 역할로 쓰고 있는지 분명히 하는 것입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 하루 시작은 짧은 체크리스트로 고정한다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 루틴이 흔들리는 이유는 보통 시작점이 매번 달라서입니다. 어떤 날은 바로 코딩부터 하고, 어떤 날은 문서부터 보다가, 또 어떤 날은 에러 하나에 하루가 묶입니다. 그래서 하루 시작 루틴은 최대한 짧고 고정된 형태가 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 아래 정도면 충분합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;하루 시작 체크리스트&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;오늘 끝내야 할 작업 1~3개를 적는다.&lt;/li&gt;
&lt;li&gt;각 작업을 기획, 구현, 검수 단계로 나눈다.&lt;/li&gt;
&lt;li&gt;이미 진행 중인 세션이나 브랜치 상태를 확인한다.&lt;/li&gt;
&lt;li&gt;어제 실패한 지점이나 막힌 원인을 먼저 본다.&lt;/li&gt;
&lt;li&gt;오늘 사람 판단이 꼭 필요한 구간을 표시한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 체크리스트의 장점은 생산성 도구를 바꾸더라도 유지된다는 점입니다. 노션을 쓰든, 텍스트 파일을 쓰든, tmux 세션을 쓰든 핵심은 같습니다. 오늘 뭘 끝낼지, 누가 어떤 역할을 맡을지, 어디서 사람이 개입할지를 먼저 정하는 것입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 완료 기준이 없으면 AI 출력만 쌓인다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI를 붙여서 일할 때 가장 위험한 상태는 &quot;뭔가 많이 진행된 것처럼 보이는데 실제 완료는 아닌 상태&quot;입니다. 초안은 나왔고, 코드도 얼핏 그럴듯한데, 정작 배포 가능하거나 공유 가능한 수준은 아닌 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 작업마다 완료 기준을 미리 적어두는 습관이 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 이런 식입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능 작업: 실행 가능 + 기본 테스트 통과 + 변경 파일 설명 가능&lt;/li&gt;
&lt;li&gt;문서 작업: 초안 작성 + 사실 확인 + 구조 정리 완료&lt;/li&gt;
&lt;li&gt;자동화 작업: 정상 경로 동작 + 실패 시 로그 남김 + 재시도 기준 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완료 기준은 거창할 필요가 없습니다. 대신 결과물을 보고 &quot;이제 끝난 건지 아닌지&quot; 바로 판단할 수 있어야 합니다. 혼자 일할수록 이 기준이 더 중요합니다. 팀원이 없으니 누가 대신 물어봐주지 않기 때문입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 중간 기록을 남겨야 다음 날이 덜 무너진다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼자 운영하는 AI 개발 루틴이 쉽게 망가지는 이유 중 하나는 맥락이 너무 빨리 사라진다는 점입니다. 어제 왜 이 결정을 했는지, 어떤 시도가 실패했는지, 다음엔 어디서 재개해야 하는지 기록이 없으면 매번 다시 생각하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 아래 정보는 짧게라도 남기는 편이 좋습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지금 어디까지 진행됐는지&lt;/li&gt;
&lt;li&gt;무엇이 완료됐는지&lt;/li&gt;
&lt;li&gt;무엇이 실패했는지&lt;/li&gt;
&lt;li&gt;다음에 바로 이어서 할 일은 무엇인지&lt;/li&gt;
&lt;li&gt;사람이 최종 판단해야 할 포인트는 무엇인지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 기록은 길 필요가 없습니다. 오히려 한두 문장씩 자주 남기는 게 낫습니다. 운영 로그가 쌓이면 AI를 여러 역할로 돌리더라도 흐름이 덜 끊깁니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 사람이 직접 보는 구간을 일부러 남겨둬야 한다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼자 AI 개발팀을 운영할 때 흔히 빠지는 착각은 &quot;거의 다 자동화되면 더 좋다&quot;는 생각입니다. 하지만 실제로는 사람 확인 구간이 명확할수록 전체 품질이 좋아집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 아래 구간은 사람이 직접 보는 편이 안전합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;요구사항이 모호할 때 방향을 확정하는 순간&lt;/li&gt;
&lt;li&gt;외부 공개 전 제목, 문구, 구조를 최종 점검하는 순간&lt;/li&gt;
&lt;li&gt;보안, 비용, 삭제, 배포처럼 되돌리기 어려운 작업&lt;/li&gt;
&lt;li&gt;테스트 결과가 애매하거나 예외가 반복될 때&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI를 잘 쓰는 사람은 모든 걸 맡기는 사람이 아니라, 어디까지 맡기고 어디서 직접 잡아야 하는지 아는 사람입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;바로 적용할 수 있는 1일 운영 루틴 예시&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, 혼자서 AI 개발팀처럼 일할 때 쓸 수 있는 간단한 하루 루틴을 예시로 정리해보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오전&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오늘 핵심 작업 1~3개 결정&lt;/li&gt;
&lt;li&gt;작업별 완료 기준 작성&lt;/li&gt;
&lt;li&gt;기획용 AI로 작업 분해&lt;/li&gt;
&lt;li&gt;구현용 AI나 자동화 세션 시작&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오후&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중간 결과물 검토&lt;/li&gt;
&lt;li&gt;중복 작업이나 누락 항목 정리&lt;/li&gt;
&lt;li&gt;실패 로그와 재시도 포인트 기록&lt;/li&gt;
&lt;li&gt;필요하면 작업 단위를 더 잘게 나눔&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오늘 완료된 것과 미완료된 것 구분&lt;/li&gt;
&lt;li&gt;다음 시작 지점을 한 줄로 기록&lt;/li&gt;
&lt;li&gt;사람이 직접 확인할 항목 표시&lt;/li&gt;
&lt;li&gt;내일 바로 이어갈 수 있게 세션, 문서, 로그 정리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 정도만 해도 작업 체감이 꽤 달라집니다. 혼자 일해도 머릿속에서만 굴리지 않고, 작은 팀처럼 일을 나눠 다루게 되기 때문입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼자서 AI를 활용해 개발한다고 해서 무조건 빠르거나 편해지는 것은 아닙니다. 오히려 역할이 섞이고 기준이 흐려지면 더 쉽게 지칩니다. 그래서 필요한 건 더 많은 도구보다도, 반복 가능한 운영 루틴입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루 시작 체크리스트, 역할 분리, 완료 기준, 짧은 로그, 사람 확인 구간만 잡아도 혼자 하는 개발은 훨씬 안정적으로 돌아갑니다. AI를 잘 쓰는 핵심은 많이 붙이는 것이 아니라, 팀처럼 운영하는 흐름을 만드는 데 있습니다.&lt;/p&gt;</description>
      <category>IT</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/36</guid>
      <comments>https://janito.tistory.com/36#entry36comment</comments>
      <pubDate>Thu, 9 Apr 2026 09:04:10 +0900</pubDate>
    </item>
    <item>
      <title>AI가 작성한 글을 사람이 검수할 때 보는 핵심 포인트</title>
      <link>https://janito.tistory.com/35</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AI로 초안을 빠르게 만드는 건 이제 특별한 일이 아닙니다. 문제는 그다음입니다. 초안이 빨리 나오는 것과, 읽을 만한 글이 되는 것은 전혀 다른 문제입니다. 실제로 블로그나 기술 문서를 AI로 쓰다 보면 얼핏 그럴듯하지만 그대로 올리기엔 위험한 문장이 자주 섞입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 IT, 개발, 자동화 주제는 단어만 맞다고 좋은 글이 되지 않습니다. 사실 관계, 실제 운영 경험, 독자가 바로 이해할 수 있는 구조가 같이 맞아야 합니다. 그래서 사람의 검수는 여전히 필수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 AI가 작성한 초안을 사람이 검수할 때 꼭 확인해야 하는 다섯 가지 포인트를 정리해보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 사실이 맞는지 먼저 본다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 볼 것은 문장 품질이 아니라 사실 관계입니다. AI는 자신 있게 틀린 말을 하는 경우가 많습니다. 특히 아래 영역은 자주 틀립니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;버전 정보&lt;/li&gt;
&lt;li&gt;서비스 정책이나 요금제&lt;/li&gt;
&lt;li&gt;CLI 명령어와 옵션 이름&lt;/li&gt;
&lt;li&gt;보안 관련 권장 설정&lt;/li&gt;
&lt;li&gt;제품 간 지원 범위&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 어떤 자동화 도구를 설명하면서 실제로는 없는 명령어를 적거나, 예전 버전 기준 설정값을 최신 정보처럼 설명할 수 있습니다. 이런 글은 문장이 부드러워도 독자에게 바로 피해를 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 검수할 때는 다음 순서가 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 제품명, 버전, 명령어부터 체크한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 공식 문서 기준과 다른 부분이 없는지 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 실제로 실행 가능한 예시인지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술 글에서 가장 먼저 제거해야 할 것은 어색한 표현이 아니라 틀린 정보입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 경험이 빠진 문장을 보강한다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 초안은 보통 평균적인 설명은 잘하지만, 실제로 부딪혀 본 사람의 문장은 부족합니다. 그래서 읽다 보면 맞는 말인데 기억에 남지 않고, 현실적인 도움이 덜 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 이런 문장입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그를 잘 남기면 운영에 도움이 됩니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;틀린 말은 아니지만 너무 평평합니다. 사람이 검수하면서 이런 식으로 바꿔줘야 글이 살아납니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동화가 늘어날수록 문제는 반드시 생깁니다. 그때 로그가 없으면 어디서 실패했는지조차 찾기 어렵습니다. 결국 장애 자체보다 원인 추적에 더 많은 시간을 쓰게 됩니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검수의 핵심은 문장을 화려하게 만드는 게 아니라, 경험이 빠진 자리에 실제 운영 감각을 넣는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보강할 때는 아래 질문이 유용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 문장은 실제로 겪어본 사람이 쓴 느낌이 나는가?&lt;/li&gt;
&lt;li&gt;독자가 바로 떠올릴 만한 실패 사례가 들어 있는가?&lt;/li&gt;
&lt;li&gt;왜 중요한지 설명이 충분한가?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 구조가 독자 기준으로 정리되어 있는지 본다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI는 개별 문단은 잘 쓰지만, 글 전체 구조는 종종 헐겁습니다. 주제가 넓은데 문단 순서가 어색하거나, 앞에서 한 말을 뒤에서 다시 반복하는 경우도 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 때 사람은 글을 독자 기준으로 재배치해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 구조는 보통 다음 흐름을 가집니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제 제기&lt;/li&gt;
&lt;li&gt;왜 중요한지 설명&lt;/li&gt;
&lt;li&gt;핵심 포인트 정리&lt;/li&gt;
&lt;li&gt;실제 예시&lt;/li&gt;
&lt;li&gt;마무리와 적용 포인트&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반대로 읽기 힘든 글은 이런 특징이 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서론이 길고 결론이 없음&lt;/li&gt;
&lt;li&gt;비슷한 내용이 반복됨&lt;/li&gt;
&lt;li&gt;예시 없이 추상적인 설명만 이어짐&lt;/li&gt;
&lt;li&gt;소제목은 있는데 흐름이 끊김&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검수할 때는 각 문단을 따로 보지 말고, 글을 처음 읽는 사람이 어디서 멈출지 상상해보는 게 좋습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 과장된 표현과 빈 문장을 걷어낸다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 초안에는 쓸모없는 강조가 자주 들어갑니다. 예를 들면 이런 표현들입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;혁신적인&lt;/li&gt;
&lt;li&gt;획기적인&lt;/li&gt;
&lt;li&gt;반드시 필요한&lt;/li&gt;
&lt;li&gt;완벽한&lt;/li&gt;
&lt;li&gt;엄청난 생산성 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 표현은 실제 정보보다 광고처럼 들리게 만듭니다. 특히 개발자 독자는 이런 문장을 굉장히 빨리 알아차립니다. 신뢰를 깎는 가장 쉬운 방법 중 하나입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 다른 문제는 빈 문장입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효율적인 협업은 매우 중요합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문장은 틀리진 않지만 정보가 없습니다. 검수 단계에서는 이런 문장을 과감히 지우거나, 구체적인 설명으로 바꿔야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 이렇게 바꿀 수 있습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할이 섞인 상태에서 여러 AI 에이전트를 동시에 돌리면 같은 파일을 중복 수정하거나, 책임이 애매한 결과물이 나오기 쉽습니다. 그래서 기획, 구현, 검수 역할을 분리하는 편이 안정적입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 검수는 문장을 부드럽게 다듬는 일만이 아니라, 정보가 없는 문장을 제거하는 작업이기도 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 독자가 바로 가져갈 수 있는 결론이 있는지 본다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 글은 읽고 나서 바로 적용할 수 있는 한 가지라도 남깁니다. 반면 AI 초안은 정리 문단까지 무난하게 끝나 버리는 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 마지막에는 독자가 실제로 가져갈 수 있는 체크포인트를 남겨주는 게 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 이런 식입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AI 초안 검수 체크리스트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령어, 버전, 설정값이 실제와 맞는가&lt;/li&gt;
&lt;li&gt;경험이 없는 문장이 반복되고 있지 않은가&lt;/li&gt;
&lt;li&gt;문단 순서가 독자 입장에서 자연스러운가&lt;/li&gt;
&lt;li&gt;과장 표현이나 빈 문장이 남아 있지 않은가&lt;/li&gt;
&lt;li&gt;읽고 바로 실행할 수 있는 결론이 있는가&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 체크리스트 하나만 있어도 글의 완성도는 꽤 달라집니다. 실제로 AI 글의 품질 차이는 초안을 누가 더 잘 뽑았는가보다, 마지막에 누가 더 제대로 검수했는가에서 많이 갈립니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI는 초안을 빠르게 만드는 데 매우 유용합니다. 하지만 기술 글의 신뢰도와 완성도는 결국 사람의 검수에서 결정됩니다. 특히 IT나 자동화 글은 말이 그럴듯한 것보다, 실제로 맞는 정보와 운영 감각이 더 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 AI로 글을 쓸수록 사람은 덜 중요해지는 게 아니라, 오히려 더 중요한 검수자 역할을 맡게 됩니다. 좋은 글을 만드는 마지막 단계는 생성이 아니라 검수입니다.&lt;/p&gt;</description>
      <category>IT</category>
      <author>영철맨</author>
      <guid isPermaLink="true">https://janito.tistory.com/35</guid>
      <comments>https://janito.tistory.com/35#entry35comment</comments>
      <pubDate>Wed, 8 Apr 2026 09:11:06 +0900</pubDate>
    </item>
  </channel>
</rss>