<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발노트</title>
    <link>https://range31.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 21 Jul 2026 06:26:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>숨쉬는 개발자</managingEditor>
    <item>
      <title>AI 엔지니어링이란</title>
      <link>https://range31.tistory.com/53</link>
      <description>&lt;div&gt;
&lt;style&gt;
  /* Design tokens: cal/DESIGN.md (Cal Sans → Inter 600 대체) */
  .post {
    max-width: 720px; margin: 0 auto; padding: 48px 24px 96px;
    font-family: &quot;Inter&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, sans-serif;
    font-size: 16px; line-height: 1.5; color: #374151; background: #ffffff;
  }
  .post h1 {
    font-size: 36px; font-weight: 600; line-height: 1.15; letter-spacing: -1px;
    color: #111111; margin: 0 0 12px;
  }
  .post h2 {
    font-size: 28px; font-weight: 600; line-height: 1.2; letter-spacing: -0.5px;
    color: #111111; margin: 64px 0 16px;
  }
  .post h3 {
    font-size: 18px; font-weight: 600; line-height: 1.4; letter-spacing: 0;
    color: #111111; margin: 32px 0 12px;
  }
  .post p { margin: 0 0 16px; }
  .post .lead { font-size: 18px; color: #6b7280; margin-bottom: 32px; }
  .post .badge {
    display: inline-block; background: #f5f5f5; color: #111111;
    font-size: 13px; font-weight: 500; border-radius: 9999px;
    padding: 4px 12px; margin-bottom: 16px;
  }
  .post blockquote {
    background: #f5f5f5; border: none; border-radius: 12px;
    padding: 24px 32px; margin: 24px 0;
    font-size: 18px; font-weight: 600; letter-spacing: -0.3px; color: #111111;
  }
  .post pre {
    background: #101010; color: #ffffff; border-radius: 12px;
    padding: 24px; margin: 16px 0 24px; overflow-x: auto;
    font-family: &quot;JetBrains Mono&quot;, ui-monospace, monospace;
    font-size: 14px; line-height: 1.5;
  }
  .post pre .cm { color: #a1a1aa; }   /* comment */
  .post pre .st { color: #34d399; }   /* string */
  .post pre .kw { color: #8b5cf6; }   /* keyword */
  .post code.inline {
    font-family: &quot;JetBrains Mono&quot;, ui-monospace, monospace;
    font-size: 14px; background: #f5f5f5; color: #111111;
    border-radius: 4px; padding: 2px 6px;
  }
  .post table {
    width: 100%; border-collapse: collapse; margin: 16px 0 24px;
    font-size: 14px;
  }
  .post table th {
    text-align: left; font-weight: 600; color: #111111;
    background: #f8f9fa; padding: 10px 14px; border-bottom: 1px solid #e5e7eb;
  }
  .post table td {
    padding: 10px 14px; border-bottom: 1px solid #f3f4f6; color: #374151;
  }
  .post ul, .post ol { margin: 0 0 16px; padding-left: 24px; }
  .post li { margin-bottom: 8px; }
  .post .card {
    background: #f5f5f5; border-radius: 12px; padding: 32px; margin: 24px 0;
  }
  .post .card h3 { margin-top: 0; }
  .post .card p:last-child { margin-bottom: 0; }
  .post .divider { border: none; border-top: 1px solid #f3f4f6; margin: 48px 0; }
  .post .num {
    display: inline-flex; align-items: center; justify-content: center;
    width: 28px; height: 28px; border-radius: 9999px;
    background: #111111; color: #ffffff; font-size: 14px; font-weight: 600;
    margin-right: 10px; vertical-align: middle;
  }
  .post .outro { color: #6b7280; font-size: 14px; margin-top: 32px; }
&lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;post&quot;&gt;&lt;span class=&quot;badge&quot;&gt;AI Engineering&lt;/span&gt;
&lt;h1&gt;AI 엔지니어링이란 무엇인가 &amp;mdash; ML 엔지니어링과 뭐가 다를까&lt;/h1&gt;
&lt;p class=&quot;lead&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT가 나온 이후, 채용 공고에 낯선 직군이 하나 늘었습니다. 바로 AI 엔지니어입니다. 데이터 사이언티스트도 아니고, ML 엔지니어도 아닌 이 직군은 정확히 무슨 일을 할까요? 코드와 함께 정리합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;한 문장 정의&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;AI 엔지니어링은 이미 학습된 파운데이션 모델(GPT, Claude, Gemini, Llama 등)을 활용해서 실제 제품과 서비스를 만드는 일입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 &quot;모델을 만드는 것&quot;이 아니라 &quot;모델을 &lt;b&gt;쓰는&lt;/b&gt; 것&quot;입니다. 이 차이가 ML 엔지니어링과의 결정적인 분기점입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ML 엔지니어링 vs AI 엔지니어링&lt;/h2&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;구분&lt;/th&gt;
&lt;th&gt;ML 엔지니어링&lt;/th&gt;
&lt;th&gt;AI 엔지니어링&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;모델&lt;/td&gt;
&lt;td&gt;직접 학습시킴&lt;/td&gt;
&lt;td&gt;API로 가져다 씀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터&lt;/td&gt;
&lt;td&gt;학습용 데이터셋 구축&lt;/td&gt;
&lt;td&gt;컨텍스트(문서&amp;middot;검색 결과) 주입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;주요 작업&lt;/td&gt;
&lt;td&gt;피처 엔지니어링, 튜닝&lt;/td&gt;
&lt;td&gt;프롬프트 설계, RAG, 에이전트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;평가&lt;/td&gt;
&lt;td&gt;accuracy, F1 score&lt;/td&gt;
&lt;td&gt;출력 품질 평가(evals)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;진입 장벽&lt;/td&gt;
&lt;td&gt;수학/통계 지식 필요&lt;/td&gt;
&lt;td&gt;백엔드 개발 경험이면 시작 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거에는 &quot;감성 분석 기능&quot;을 만들려면 데이터 수집&amp;middot;라벨링&amp;middot;학습에 몇 달이 걸렸습니다. 지금은 API 호출 한 번이면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model=&quot;claude-opus-4-8&quot;,
    max_tokens=256,
    messages=[{
        &quot;role&quot;: &quot;user&quot;,
        &quot;content&quot;: &quot;다음 리뷰의 감성을 긍정/부정/중립 중 하나로 분류해줘: '배송은 빨랐는데 면이 다 부서져 있었어요.'&quot;
    }]
)
print(response.content[0].text)  # 부정&lt;/code&gt;&lt;/pre&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;AI 엔지니어가 실제로 하는 일 4가지&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span class=&quot;num&quot;&gt;1&lt;/span&gt;프롬프트 엔지니어링 &amp;mdash; 지시를 설계하는 일&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 &quot;잘 부탁해&quot; 수준이 아니라, 출력 형식&amp;middot;예외 처리&amp;middot;말투까지 명세하는 작업입니다. 프롬프트는 사실상 &lt;b&gt;자연어로 쓰는 코드&lt;/b&gt;입니다.&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;system_prompt = &quot;&quot;&quot;당신은 고객 문의 분류 시스템입니다.

규칙:
- 문의를 다음 중 하나로 분류: 배송 / 환불 / 제품불량 / 기타
- 반드시 JSON으로만 응답: {&quot;category&quot;: &quot;...&quot;, &quot;urgent&quot;: true/false}
- 환불 요청 + 화난 어조면 urgent를 true로
&quot;&quot;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인트는 &lt;b&gt;출력을 기계가 파싱할 수 있게 강제&lt;/b&gt;하는 것입니다. 요즘은 JSON 스키마를 API 레벨에서 강제하는 Structured Outputs 기능을 쓰는 게 표준입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span class=&quot;num&quot;&gt;2&lt;/span&gt;RAG &amp;mdash; 모델에게 &quot;우리 회사 지식&quot;을 주입하는 일&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM은 우리 회사 내부 규정이나 어제 올라온 공지사항을 모릅니다. 그래서 질문과 관련된 문서를 &lt;b&gt;검색해서 프롬프트에 끼워 넣는&lt;/b&gt; 패턴이 필요한데, 이게 RAG(Retrieval-Augmented Generation)입니다.&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# RAG의 뼈대 &amp;mdash; 실제로는 벡터 DB(Chroma, pgvector 등)를 사용
def answer(question: str) -&amp;gt; str:
    # 1. 질문과 유사한 문서 검색 (벡터 유사도)
    docs = vector_db.search(question, top_k=3)

    # 2. 검색된 문서를 컨텍스트로 넣어서 질문
    context = &quot;\n\n&quot;.join(d.text for d in docs)
    response = client.messages.create(
        model=&quot;claude-opus-4-8&quot;,
        max_tokens=1024,
        messages=[{
            &quot;role&quot;: &quot;user&quot;,
            &quot;content&quot;: f&quot;다음 문서를 근거로 답변해줘.\n\n&amp;lt;문서&amp;gt;\n{context}\n&amp;lt;/문서&amp;gt;\n\n질문: {question}&quot;
        }]
    )
    return response.content[0].text&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사내 문서 챗봇, 규정 검색기 같은 서비스가 전부 이 구조입니다. 실무의 상당 부분이 &quot;검색 품질을 어떻게 올리느냐&quot;(청킹 전략, 임베딩 모델 선택, 리랭킹)에 쓰입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span class=&quot;num&quot;&gt;3&lt;/span&gt;에이전트 &amp;mdash; 모델에게 도구를 쥐여주는 일&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번 묻고 한 번 답하는 챗봇을 넘어서, 모델이 &lt;b&gt;스스로 도구를 골라 쓰면서 여러 단계를 수행&lt;/b&gt;하게 만드는 것이 에이전트입니다. &quot;메일함을 확인하고 &amp;rarr; 중요한 메일을 요약해서 &amp;rarr; 메신저로 보내줘&quot; 같은 작업이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 메커니즘은 의외로 단순합니다. 모델에게 사용 가능한 도구 목록을 주고, 모델이 &quot;이 도구를 이 인자로 실행해줘&quot;라고 답하면 실행 결과를 다시 넣어주는 &lt;b&gt;루프&lt;/b&gt;입니다.&lt;/p&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;tools = [{
    &quot;name&quot;: &quot;search_mail&quot;,
    &quot;description&quot;: &quot;메일함에서 조건에 맞는 메일을 검색한다&quot;,
    &quot;input_schema&quot;: {
        &quot;type&quot;: &quot;object&quot;,
        &quot;properties&quot;: {&quot;query&quot;: {&quot;type&quot;: &quot;string&quot;}},
        &quot;required&quot;: [&quot;query&quot;]
    }
}]

# 모델이 tool_use를 요청하면 &amp;rarr; 실행 &amp;rarr; 결과를 다시 전달 &amp;rarr; 반복
# 이 루프가 에이전트의 전부입니다&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude Code, Cursor 같은 코딩 도구가 전부 이 패턴 위에서 동작합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span class=&quot;num&quot;&gt;4&lt;/span&gt;평가(Evals) &amp;mdash; &quot;잘 되는지&quot;를 숫자로 만드는 일&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM의 가장 큰 골칫거리는 &lt;b&gt;출력이 매번 다르고, 정답이 하나가 아니라는 것&lt;/b&gt;입니다. 프롬프트를 고쳤을 때 좋아졌는지 나빠졌는지 감으로 판단할 수는 없으니, 테스트 케이스를 만들어 자동으로 채점합니다.&lt;/p&gt;
&lt;pre class=&quot;monkey&quot;&gt;&lt;code&gt;test_cases = [
    {&quot;input&quot;: &quot;환불해주세요 진짜 화나네요&quot;, &quot;expected_category&quot;: &quot;환불&quot;, &quot;expected_urgent&quot;: True},
    {&quot;input&quot;: &quot;배송 언제 오나요?&quot;, &quot;expected_category&quot;: &quot;배송&quot;, &quot;expected_urgent&quot;: False},
]

passed = 0
for case in test_cases:
    result = classify(case[&quot;input&quot;])  # 위에서 만든 분류기
    if result[&quot;category&quot;] == case[&quot;expected_category&quot;] and result[&quot;urgent&quot;] == case[&quot;expected_urgent&quot;]:
        passed += 1

print(f&quot;통과율: {passed}/{len(test_cases)}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답이 명확하지 않은 작업(요약, 글쓰기)은 &lt;b&gt;다른 LLM에게 채점을 시키는&lt;/b&gt; LLM-as-judge 방식을 씁니다. 프롬프트를 바꿀 때마다 이 평가를 돌려서 회귀(regression)를 잡는 것이 실무의 핵심 루틴입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;그 외에 신경 써야 하는 것들&lt;/h2&gt;
&lt;div class=&quot;card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비용과 레이턴시&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토큰 단위 과금이므로 프롬프트 길이 = 돈입니다. 반복되는 컨텍스트는 프롬프트 캐싱으로 90%까지 절감할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;card&quot;&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;/div&gt;
&lt;div class=&quot;card&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;가드레일&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 &quot;이전 지시를 무시해&quot;라고 입력하는 프롬프트 인젝션에 대한 방어도 AI 엔지니어의 몫입니다.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;어떻게 시작하면 될까&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;API로 뭔가 하나 만들어보기&lt;/b&gt; &amp;mdash; 챗봇 말고, 자기 업무를 자동화하는 작은 도구가 좋습니다. 메일 요약기, 회의록 정리기 같은 것.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Structured Outputs로 파싱 가능한 출력 다루기&lt;/b&gt; &amp;mdash; LLM을 &quot;함수&quot;처럼 쓰는 감각이 생깁니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RAG를 직접 구현해보기&lt;/b&gt; &amp;mdash; 프레임워크 없이 검색 &amp;rarr; 프롬프트 조립을 직접 짜보면 원리가 잡힙니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;평가 셋 만들기&lt;/b&gt; &amp;mdash; 테스트 케이스 10개만 만들어도 개발 방식이 달라집니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr class=&quot;divider&quot; data-ke-style=&quot;style1&quot; /&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;소프트웨어 엔지니어링에 새로운 부품(LLM)이 하나 추가된 것&lt;/b&gt;에 가깝습니다. 모델 내부의 수학을 몰라도, API&amp;middot;프롬프트&amp;middot;검색&amp;middot;평가라는 네 가지 축을 다룰 줄 알면 실무를 시작할 수 있습니다. 그리고 이 부품은 지금 소프트웨어 업계에서 가장 빠르게 발전하는 부품이기도 합니다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>기타</category>
      <category>Ai</category>
      <category>AI Engineer</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/53</guid>
      <comments>https://range31.tistory.com/53#entry53comment</comments>
      <pubDate>Sun, 19 Jul 2026 22:25:31 +0900</pubDate>
    </item>
    <item>
      <title>도쿄 여행</title>
      <link>https://range31.tistory.com/52</link>
      <description>&lt;head&gt;&lt;style&gt;
  .tokyo-guide {
    --canvas: #ffffff;
    --ink: #111111;
    --tg-body: #374151;
    --muted: #6b7280;
    --hairline: #e5e7eb;
    --hairline-soft: #f3f4f6;
    --surface-soft: #f8f9fa;
    --surface-card: #f5f5f5;
    --on-dark: #ffffff;
    --success: #10b981;
    --warning: #f59e0b;
    --rounded-md: 8px;
    --rounded-lg: 12px;
    --rounded-pill: 9999px;
    font-family: &quot;Inter&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Apple SD Gothic Neo&quot;, sans-serif;
    color: var(--tg-body);
    line-height: 1.5;
    font-size: 16px;
  }
  .tokyo-guide *, .tokyo-guide *::before, .tokyo-guide *::after { box-sizing: border-box; }
  .tokyo-guide p, .tokyo-guide h1, .tokyo-guide h2, .tokyo-guide h3, .tokyo-guide h4 { margin: 0; }

  /* ── HERO ── */
  .tokyo-guide .hero {
    padding: 48px 0 56px;
    text-align: center;
  }
  .tokyo-guide .hero-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--surface-card);
    border-radius: var(--rounded-pill);
    padding: 6px 14px;
    font-size: 13px;
    font-weight: 500;
    color: var(--ink);
    margin-bottom: 24px;
  }
  .tokyo-guide .hero-badge span {
    display: inline-block;
    width: 6px; height: 6px;
    border-radius: 50%;
    background: var(--success);
  }
  .tokyo-guide .hero h1 {
    font-size: clamp(30px, 5vw, 44px);
    font-weight: 600;
    line-height: 1.1;
    letter-spacing: -1.5px;
    color: var(--ink);
    margin-bottom: 20px;
  }
  .tokyo-guide .hero .sub {
    font-size: 17px;
    color: var(--muted);
    max-width: 560px;
    margin: 0 auto 24px;
  }
  .tokyo-guide .hero-meta {
    display: flex;
    justify-content: center;
    gap: 8px;
    flex-wrap: wrap;
  }
  .tokyo-guide .meta-pill {
    background: var(--surface-card);
    border-radius: var(--rounded-pill);
    padding: 4px 12px;
    font-size: 13px;
    font-weight: 500;
    color: var(--ink);
  }

  /* ── SECTIONS ── */
  .tokyo-guide .band {
    padding: 48px 0;
    border-top: 1px solid var(--hairline-soft);
  }
  .tokyo-guide .band.soft {
    background: var(--surface-soft);
    border-radius: var(--rounded-lg);
    padding: 40px 28px;
    border-top: none;
    margin: 24px 0;
  }
  .tokyo-guide .section-label {
    font-size: 13px;
    font-weight: 500;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 10px;
  }
  .tokyo-guide h2 {
    font-size: clamp(24px, 4vw, 32px);
    font-weight: 600;
    line-height: 1.15;
    letter-spacing: -1px;
    color: var(--ink);
    margin-bottom: 12px;
  }
  .tokyo-guide .section-desc {
    font-size: 15px;
    color: var(--tg-body);
    margin-bottom: 28px;
  }

  /* ── CARDS ── */
  .tokyo-guide .card-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 16px;
  }
  .tokyo-guide .feature-card {
    background: var(--canvas);
    border: 1px solid var(--hairline);
    border-radius: var(--rounded-lg);
    padding: 24px;
  }
  .tokyo-guide .band:not(.soft) .feature-card { background: var(--surface-card); border: none; }
  .tokyo-guide .feature-card .icon { font-size: 22px; display: block; margin-bottom: 12px; }
  .tokyo-guide .feature-card h4 {
    font-size: 16px;
    font-weight: 600;
    color: var(--ink);
    margin-bottom: 8px;
  }
  .tokyo-guide .feature-card p { font-size: 14px; }
  .tokyo-guide .feature-card p + p { margin-top: 8px; }
  .tokyo-guide .feature-card b, .tokyo-guide td b, .tokyo-guide .callout b, .tokyo-guide .step-card b { color: var(--ink); font-weight: 600; }

  /* ── CALLOUT ── */
  .tokyo-guide .callout {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    background: var(--canvas);
    border: 1px solid var(--hairline);
    border-radius: var(--rounded-lg);
    padding: 16px 20px;
    margin-top: 20px;
    font-size: 14px;
  }
  .tokyo-guide .callout.warn { border-left: 3px solid var(--warning); }
  .tokyo-guide .callout.tip  { border-left: 3px solid var(--success); }

  /* ── STEPS ── */
  .tokyo-guide .steps {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 16px;
  }
  .tokyo-guide .step-card {
    background: var(--canvas);
    border: 1px solid var(--hairline);
    border-radius: var(--rounded-lg);
    padding: 20px;
  }
  .tokyo-guide .step-num {
    width: 32px; height: 32px;
    border-radius: 50%;
    background: var(--ink);
    color: var(--on-dark);
    font-size: 14px;
    font-weight: 600;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 12px;
  }
  .tokyo-guide .step-card h4 { font-size: 15px; font-weight: 600; color: var(--ink); margin-bottom: 6px; }
  .tokyo-guide .step-card p { font-size: 14px; }

  /* ── TABLE ── */
  .tokyo-guide .table-wrap {
    overflow-x: auto;
    border: 1px solid var(--hairline);
    border-radius: var(--rounded-lg);
    background: var(--canvas);
  }
  .tokyo-guide table {
    width: 100%;
    border-collapse: collapse;
    font-size: 14px;
    margin: 0;
  }
  .tokyo-guide th {
    text-align: left;
    font-weight: 600;
    color: var(--ink);
    background: var(--surface-soft);
    padding: 12px 16px;
    border-bottom: 1px solid var(--hairline);
    white-space: nowrap;
  }
  .tokyo-guide td {
    padding: 12px 16px;
    border-bottom: 1px solid var(--hairline-soft);
    color: var(--tg-body);
  }
  .tokyo-guide tr:last-child td { border-bottom: none; }

  /* ── ITINERARY ── */
  .tokyo-guide .day-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 16px;
  }
  .tokyo-guide .day-card {
    background: var(--surface-card);
    border-radius: var(--rounded-lg);
    padding: 24px;
  }
  .tokyo-guide .day-badge {
    display: inline-block;
    border-radius: var(--rounded-pill);
    padding: 4px 12px;
    font-size: 13px;
    font-weight: 500;
    color: var(--ink);
    margin-bottom: 12px;
  }
  .tokyo-guide .day-1 { background: #ffedd5; }
  .tokyo-guide .day-2 { background: #fce7f3; }
  .tokyo-guide .day-3 { background: #ede9fe; }
  .tokyo-guide .day-4 { background: #d1fae5; }
  .tokyo-guide .day-card h4 { font-size: 17px; font-weight: 600; color: var(--ink); margin-bottom: 8px; }
  .tokyo-guide .day-card p { font-size: 14px; }
  .tokyo-guide .day-card .route { font-size: 13px; font-weight: 500; color: var(--muted); margin-top: 10px; }

  /* ── CTA ── */
  .tokyo-guide .cta-band {
    background: var(--surface-card);
    border-radius: var(--rounded-lg);
    padding: 40px 28px;
    text-align: center;
    margin-top: 40px;
  }
  .tokyo-guide .cta-band h2 { font-size: 22px; letter-spacing: -0.5px; margin-bottom: 10px; }
  .tokyo-guide .cta-band p { color: var(--muted); font-size: 14px; }
&lt;/style&gt;

&lt;/head&gt;
&lt;body&gt;&lt;div class=&quot;tokyo-guide&quot;&gt;

  &lt;!-- HERO --&gt;
  &lt;div class=&quot;hero&quot;&gt;
    &lt;div class=&quot;hero-badge&quot;&gt;&lt;span&gt;&lt;/span&gt;2026년 최신 정보 기준&lt;/div&gt;
    &lt;h1&gt;도쿄 여행,&lt;br&gt;이 글 하나로 준비 끝.&lt;/h1&gt;
    &lt;p class=&quot;sub&quot;&gt;eSIM 준비부터 스카이라이너 왕복권 사용법, 스이카 교통 정리, 3박 4일 추천 코스까지 — 출발 전 30분이면 충분합니다.&lt;/p&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;span class=&quot;meta-pill&quot;&gt;✈️ 나리타 입국 기준&lt;/span&gt;
      &lt;span class=&quot;meta-pill&quot;&gt;  3박 4일&lt;/span&gt;
      &lt;span class=&quot;meta-pill&quot;&gt;⏱️ 읽는 시간 7분&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 1. 준비 --&gt;
  &lt;div class=&quot;band soft&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;Step 1 — 출발 전 준비&lt;/div&gt;
    &lt;h2&gt;eSIM은 미리 설치해두세요&lt;/h2&gt;
    &lt;p class=&quot;section-desc&quot;&gt;요즘은 포켓와이파이보다 eSIM이 대세입니다. 기기 수령·반납이 없고 QR코드 하나로 끝나기 때문인데, 구매 전 딱 두 가지만 확인하면 됩니다.&lt;/p&gt;

    &lt;div class=&quot;card-grid&quot;&gt;
      &lt;div class=&quot;feature-card&quot;&gt;
        &lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;
        &lt;h4&gt;차감 시점 확인&lt;/h4&gt;
        &lt;p&gt;대부분 구매 시점이 아니라 &lt;b&gt;현지에서 활성화한 순간부터&lt;/b&gt; 날짜가 차감됩니다. 한국에서 미리 설치해도 기간이 줄지 않아요.&lt;/p&gt;
        &lt;p&gt;단, &quot;설치 즉시 개통&quot; 상품은 설치하는 순간 차감이 시작되니 바우처를 꼭 확인하세요.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;feature-card&quot;&gt;
        &lt;span class=&quot;icon&quot;&gt; ️&lt;/span&gt;
        &lt;h4&gt;날짜 계산 방식&lt;/h4&gt;
        &lt;p&gt;개통 후 24시간 단위가 아니라 &lt;b&gt;현지 날짜 기준 1일씩&lt;/b&gt; 차감되는 상품이 많습니다.&lt;/p&gt;
        &lt;p&gt;밤 11시에 개통하면 그 1시간도 하루로 계산될 수 있으니, 늦은 도착이면 하루 여유 있는 상품이 안전합니다.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;feature-card&quot;&gt;
        &lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;
        &lt;h4&gt;Visit Japan Web&lt;/h4&gt;
        &lt;p&gt;입국심사·세관 QR을 미리 발급받으면 입국 줄이 훨씬 빨라집니다.&lt;/p&gt;
        &lt;p&gt;스이카(Suica) 모바일 카드도 아이폰 지갑에서 미리 발급해두세요. 지하철·편의점·자판기 전부 해결됩니다.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;callout tip&quot;&gt;  &lt;div&gt;&lt;b&gt;팁:&lt;/b&gt; 한국에서 eSIM을 설치만 해두고 &lt;b&gt;데이터 로밍 OFF&lt;/b&gt; 상태로 두었다가, 일본 도착 후 해당 회선의 로밍을 켜면 그때부터 개통됩니다.&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 2. 스카이라이너 --&gt;
  &lt;div class=&quot;band&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;Step 2 — 공항에서 시내로&lt;/div&gt;
    &lt;h2&gt;스카이라이너 왕복권, 이 순서대로&lt;/h2&gt;
    &lt;p class=&quot;section-desc&quot;&gt;나리타공항에서 우에노까지 약 40~45분. 온라인 왕복권이 현장 구매보다 저렴하지만, QR만으로는 탑승할 수 없다는 게 핵심입니다.&lt;/p&gt;

    &lt;div class=&quot;steps&quot;&gt;
      &lt;div class=&quot;step-card&quot;&gt;
        &lt;div class=&quot;step-num&quot;&gt;1&lt;/div&gt;
        &lt;h4&gt;온라인 구매&lt;/h4&gt;
        &lt;p&gt;케이세이 공식 e-ticket 또는 클룩에서 왕복권 구매. 이메일로 QR코드 바우처를 받습니다.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;step-card&quot;&gt;
        &lt;div class=&quot;step-num&quot;&gt;2&lt;/div&gt;
        &lt;h4&gt;실물 티켓 교환 (필수)&lt;/h4&gt;
        &lt;p&gt;나리타공항 터미널역의 &lt;b&gt;Skyliner &amp;amp; Keisei Information Center&lt;/b&gt;에서 QR + &lt;b&gt;여권&lt;/b&gt; 제시 → 왕로 티켓과 복로 교환권 2장 수령.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;step-card&quot;&gt;
        &lt;div class=&quot;step-num&quot;&gt;3&lt;/div&gt;
        &lt;h4&gt;왕로 탑승&lt;/h4&gt;
        &lt;p&gt;전 좌석 지정석. 티켓으로 개찰 통과 후 지정 좌석에 앉으면 끝. 캐리어 들고 서서 갈 걱정이 없습니다.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;step-card&quot;&gt;
        &lt;div class=&quot;step-num&quot;&gt;4&lt;/div&gt;
        &lt;h4&gt;귀국일 복로 교환&lt;/h4&gt;
        &lt;p&gt;공항 가는 날 &lt;b&gt;우에노역·닛포리역&lt;/b&gt; 케이세이 카운터에서 교환권을 내고 열차 시간과 좌석을 지정받습니다. 당일 교환이 원칙.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;callout warn&quot;&gt;⚠️ &lt;div&gt;바우처의 실물 교환 유효기간은 판매처에 따라 &lt;b&gt;구매일로부터 90~180일&lt;/b&gt;입니다. 기간이 지나면 환불되지 않으니 예약 확인서를 확인하세요. 하네다 입국이라면 스카이라이너 대신 게이큐선·도쿄 모노레일이 더 가깝습니다.&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 3. 시내 교통 --&gt;
  &lt;div class=&quot;band soft&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;Step 3 — 시내 교통&lt;/div&gt;
    &lt;h2&gt;스이카 하나면 충분합니다&lt;/h2&gt;
    &lt;p class=&quot;section-desc&quot;&gt;도쿄 지하철은 복잡해 보이지만, 실제로는 구글맵이 알려주는 대로 스이카를 찍고 타면 끝입니다.&lt;/p&gt;

    &lt;div class=&quot;table-wrap&quot;&gt;
      &lt;table&gt;
        &lt;tbody&gt;&lt;tr&gt;&lt;th&gt;수단&lt;/th&gt;&lt;th&gt;추천 상황&lt;/th&gt;&lt;th&gt;비고&lt;/th&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;b&gt;스이카 (모바일)&lt;/b&gt;&lt;/td&gt;&lt;td&gt;기본. 지하철·JR·버스·편의점 전부 해결&lt;/td&gt;&lt;td&gt;아이폰 지갑에서 즉시 발급&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;b&gt;도쿄 서브웨이 패스&lt;/b&gt;&lt;/td&gt;&lt;td&gt;하루 지하철 4회 이상 타는 뚜벅이 일정&lt;/td&gt;&lt;td&gt;24/48/72시간권&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;b&gt;택시&lt;/b&gt;&lt;/td&gt;&lt;td&gt;심야 이동, 3~4인 단거리&lt;/td&gt;&lt;td&gt;기본요금 약 500엔&lt;/td&gt;&lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 4. 코스 --&gt;
  &lt;div class=&quot;band&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;Step 4 — 일정&lt;/div&gt;
    &lt;h2&gt;3박 4일 추천 코스&lt;/h2&gt;
    &lt;p class=&quot;section-desc&quot;&gt;첫날은 무리하지 않는 게 포인트. 스카이라이너 종점인 우에노에서 시작해 마지막 날 다시 우에노로 돌아오는 동선입니다.&lt;/p&gt;

    &lt;div class=&quot;day-grid&quot;&gt;
      &lt;div class=&quot;day-card&quot;&gt;
        &lt;span class=&quot;day-badge day-1&quot;&gt;Day 1 · 도착일&lt;/span&gt;
        &lt;h4&gt;우에노 · 아사쿠사&lt;/h4&gt;
        &lt;p&gt;아메요코 시장에서 늦은 점심 → 센소지·나카미세 거리 산책 → 스미다강 변에서 도쿄 스카이트리 야경.&lt;/p&gt;
        &lt;p class=&quot;route&quot;&gt;우에노 → 아사쿠사 (긴자선 5분)&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;day-card&quot;&gt;
        &lt;span class=&quot;day-badge day-2&quot;&gt;Day 2&lt;/span&gt;
        &lt;h4&gt;시부야 · 하라주쿠 · 오모테산도&lt;/h4&gt;
        &lt;p&gt;메이지신궁 → 다케시타 거리 → 오모테산도 쇼핑 → 시부야 스크램블 → 시부야 스카이 전망대(일몰 시간대 예약 필수). 저녁은 논베이 요코초 이자카야.&lt;/p&gt;
        &lt;p class=&quot;route&quot;&gt;하라주쿠 → 오모테산도 → 시부야 (도보 이동 가능)&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;day-card&quot;&gt;
        &lt;span class=&quot;day-badge day-3&quot;&gt;Day 3 · 선택&lt;/span&gt;
        &lt;h4&gt;신주쿠 · 기치조지 or 디즈니&lt;/h4&gt;
        &lt;p&gt;도심파: 신주쿠 교엔 → 가부키초·오모이데 요코초. 감성파: 이노카시라 공원 + 지브리 미술관(매월 10일 다음 달 티켓 오픈). 테마파크파: 디즈니랜드/디즈니씨.&lt;/p&gt;
        &lt;p class=&quot;route&quot;&gt;취향에 따라 하루를 통째로&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;day-card&quot;&gt;
        &lt;span class=&quot;day-badge day-4&quot;&gt;Day 4 · 귀국일&lt;/span&gt;
        &lt;h4&gt;긴자 · 츠키지&lt;/h4&gt;
        &lt;p&gt;츠키지 장외시장에서 스시 조식 → 긴자 마지막 쇼핑 → 우에노/닛포리에서 복로 교환권 발권 후 공항으로. 비행기 3시간 전 시내 출발이 안전합니다.&lt;/p&gt;
        &lt;p class=&quot;route&quot;&gt;츠키지 → 긴자 → 우에노 → 나리타공항&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 5. 팁 --&gt;
  &lt;div class=&quot;band soft&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;Step 5 — 실전 팁&lt;/div&gt;
    &lt;h2&gt;놓치기 아까운 5가지&lt;/h2&gt;
    &lt;p class=&quot;section-desc&quot;&gt;알고 가면 사소하지만 확실히 편해지는 것들.&lt;/p&gt;

    &lt;div class=&quot;card-grid&quot;&gt;
      &lt;div class=&quot;feature-card&quot;&gt;
        &lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;
        &lt;h4&gt;식당은 타베로그 3.5+&lt;/h4&gt;
        &lt;p&gt;일본 기준으로 평점 3.5 이상이면 상당한 맛집. 인기 스시집·야키니쿠는 구글맵 예약 가능 여부를 미리 확인하세요.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;feature-card&quot;&gt;
        &lt;span class=&quot;icon&quot;&gt; ️&lt;/span&gt;
        &lt;h4&gt;면세는 5,000엔부터&lt;/h4&gt;
        &lt;p&gt;한 매장 5,000엔 이상 구매 시 여권 제시로 소비세 10% 면세. 돈키호테·드럭스토어는 면세 카운터가 따로 있습니다.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;feature-card&quot;&gt;
        &lt;span class=&quot;icon&quot;&gt; ️&lt;/span&gt;
        &lt;h4&gt;쓰레기통이 없습니다&lt;/h4&gt;
        &lt;p&gt;도쿄 시내에는 쓰레기통이 거의 없으니 작은 봉투를 하나 들고 다니면 편합니다.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;feature-card&quot;&gt;
        &lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;
        &lt;h4&gt;에스컬레이터는 왼쪽&lt;/h4&gt;
        &lt;p&gt;오사카와 반대입니다. 도쿄는 왼쪽에 서고 오른쪽을 비워둡니다.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;feature-card&quot;&gt;
        &lt;span class=&quot;icon&quot;&gt; ️&lt;/span&gt;
        &lt;h4&gt;오프라인 지도&lt;/h4&gt;
        &lt;p&gt;구글맵에서 도쿄 지역을 미리 다운로드해두면 지하에서 데이터가 끊겨도 안심입니다.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;feature-card&quot;&gt;
        &lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;
        &lt;h4&gt;현금 1일 1만 엔&lt;/h4&gt;
        &lt;p&gt;카드가 보편화됐지만 라멘집·신사·시장은 아직 현금만 받는 곳이 있습니다.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- CTA --&gt;
  &lt;div class=&quot;cta-band&quot;&gt;
    &lt;h2&gt;준비의 90%는 이미 끝났습니다&lt;/h2&gt;
    &lt;p&gt;출발 전 eSIM 설치 + Visit Japan Web + 스이카 발급, 도착 후 스카이라이너 티켓 교환.&lt;br&gt;나머지는 스이카 하나 들고 구글맵 따라 다니면 됩니다.&lt;/p&gt;
  &lt;/div&gt;

&lt;/div&gt;
&lt;/body&gt;</description>
      <category>기타</category>
      <category>esim</category>
      <category>도쿄</category>
      <category>여행</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/52</guid>
      <comments>https://range31.tistory.com/52#entry52comment</comments>
      <pubDate>Thu, 9 Jul 2026 00:51:09 +0900</pubDate>
    </item>
    <item>
      <title>해커는 원래 '나쁜 사람'이 아니다</title>
      <link>https://range31.tistory.com/51</link>
      <description>&lt;body&gt;&lt;article style=&quot;max-width:760px;margin:0 auto;padding:0 20px;font-family:Inter,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Apple SD Gothic Neo','Malgun Gothic',sans-serif;color:#374151;line-height:1.7;font-size:16px;-webkit-font-smoothing:antialiased;&quot;&gt;

  &lt;!-- 카테고리 뱃지 --&gt;
  &lt;div style=&quot;margin:0 0 20px;&quot;&gt;
    &lt;span style=&quot;display:inline-block;background:#f5f5f5;color:#111111;font-size:13px;font-weight:500;border-radius:9999px;padding:5px 14px;letter-spacing:0;&quot;&gt;IT · 보안 상식&lt;/span&gt;
  &lt;/div&gt;

  &lt;!-- Hero 헤드라인 (Cal Sans 대용: Inter 600 + 네거티브 트래킹) --&gt;
  &lt;h1 style=&quot;font-family:Inter,sans-serif;font-size:42px;font-weight:600;line-height:1.12;letter-spacing:-1.5px;color:#111111;margin:0 0 20px;&quot;&gt;
    해커는 원래 '나쁜 사람'이 아니었다
  &lt;/h1&gt;

  &lt;p style=&quot;font-size:18px;line-height:1.6;color:#6b7280;margin:0 0 40px;&quot;&gt;
    해커란 본래 컴퓨터와 네트워크에 대한 고도의 지식·기술을 가진 사람을 뜻하는 말입니다.
    악의나 악용 여부와는 아무 상관이 없습니다. 우리가 오해해 온 이 단어의 진짜 의미를 짚어봅니다.
  &lt;/p&gt;

  &lt;!-- 구분선 --&gt;
  &lt;hr style=&quot;border:none;border-top:1px solid #f3f4f6;margin:0 0 40px;&quot;&gt;

  &lt;!-- 본문 1 --&gt;
  &lt;h2 style=&quot;font-family:Inter,sans-serif;font-size:28px;font-weight:600;line-height:1.2;letter-spacing:-0.5px;color:#111111;margin:0 0 16px;&quot;&gt;
    '해커 = 범죄자'라는 오해
  &lt;/h2&gt;
  &lt;p style=&quot;margin:0 0 16px;&quot;&gt;
    뉴스에서 &quot;해커가 기업 서버를 뚫었다&quot;, &quot;해커에게 개인정보가 유출됐다&quot; 같은 표현을
    자주 듣습니다. 그래서 많은 사람이 &lt;strong style=&quot;color:#111111;&quot;&gt;해커 = 컴퓨터로 나쁜 짓을 하는 사람&lt;/strong&gt;이라고
    생각합니다. 하지만 이건 단어의 절반만 본 것입니다.
  &lt;/p&gt;
  &lt;p style=&quot;margin:0 0 32px;&quot;&gt;
    원래 &lt;strong style=&quot;color:#111111;&quot;&gt;해커(Hacker)&lt;/strong&gt;는
    컴퓨터·네트워크·시스템에 대해 깊이 이해하고, 그것을 자유자재로 다루며,
    한계를 탐구하고 새로운 방법을 찾아내는 사람을 가리키는 말이었습니다.
    여기에 '선하다' 혹은 '악하다'는 의미는 처음부터 들어 있지 않았습니다.
  &lt;/p&gt;

  &lt;!-- 강조 인용 카드 --&gt;
  &lt;div style=&quot;background:#f5f5f5;border-radius:12px;padding:32px;margin:0 0 40px;&quot;&gt;
    &lt;p style=&quot;margin:0;font-size:20px;line-height:1.5;font-weight:600;color:#111111;letter-spacing:-0.3px;&quot;&gt;
      &quot;해커는 기술의 깊이를 뜻하는 말이지, 의도의 방향을 뜻하는 말이 아니다.&quot;
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- 본문 2 --&gt;
  &lt;h2 style=&quot;font-family:Inter,sans-serif;font-size:28px;font-weight:600;line-height:1.2;letter-spacing:-0.5px;color:#111111;margin:0 0 16px;&quot;&gt;
    단어의 뿌리: MIT의 'Hack' 문화
  &lt;/h2&gt;
  &lt;p style=&quot;margin:0 0 16px;&quot;&gt;
    '해킹(Hacking)'이라는 말은 1950~60년대 미국 MIT의 공대 동아리 문화에서 나왔습니다.
    당시 학생들은 기계 장치나 전자 시스템을 뜯어보고, 정해진 사용법을 넘어
    &lt;strong style=&quot;color:#111111;&quot;&gt;더 영리하고 기발한 방법&lt;/strong&gt;으로 작동시키는 것을
    'hack'이라고 불렀습니다.
  &lt;/p&gt;
  &lt;p style=&quot;margin:0 0 32px;&quot;&gt;
    즉 해킹은 본래 &quot;주어진 것을 깊이 이해해서, 남들이 생각하지 못한 방식으로 다루는
    창의적 문제 해결&quot;에 가까운 말이었습니다. 컴퓨터가 등장하면서 이 정신이
    프로그래머 문화로 이어졌고, 그 주인공을 '해커'라 부르게 된 것입니다.
  &lt;/p&gt;

  &lt;!-- 본문 3: 해커의 분류 (모자 색깔) --&gt;
  &lt;h2 style=&quot;font-family:Inter,sans-serif;font-size:28px;font-weight:600;line-height:1.2;letter-spacing:-0.5px;color:#111111;margin:0 0 24px;&quot;&gt;
    그래서 해커는 '모자 색'으로 나눈다
  &lt;/h2&gt;
  &lt;p style=&quot;margin:0 0 24px;&quot;&gt;
    해커라는 단어 자체에 선악이 없기 때문에, 보안 업계에서는 &lt;strong style=&quot;color:#111111;&quot;&gt;의도와 합법성&lt;/strong&gt;을
    기준으로 해커를 구분합니다. 흔히 '모자(hat) 색깔'에 비유합니다.
  &lt;/p&gt;

  &lt;!-- 3-up 카드 (세로 스택, 모바일 안전) --&gt;
  &lt;div style=&quot;margin:0 0 16px;background:#ffffff;border:1px solid #e5e7eb;border-radius:12px;padding:24px;&quot;&gt;
    &lt;h3 style=&quot;font-size:16px;font-weight:600;color:#111111;margin:0 0 8px;&quot;&gt;  화이트 햇 (White Hat)&lt;/h3&gt;
    &lt;p style=&quot;margin:0;font-size:15px;color:#374151;line-height:1.6;&quot;&gt;
      허락을 받고 시스템의 취약점을 찾아 &lt;strong style=&quot;color:#111111;&quot;&gt;방어를 돕는&lt;/strong&gt; 해커.
      보안 전문가, 모의해킹(침투 테스트) 엔지니어가 여기 속합니다. 합법적이고 직업으로 인정받습니다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;margin:0 0 16px;background:#ffffff;border:1px solid #e5e7eb;border-radius:12px;padding:24px;&quot;&gt;
    &lt;h3 style=&quot;font-size:16px;font-weight:600;color:#111111;margin:0 0 8px;&quot;&gt;⚫ 블랙 햇 (Black Hat)&lt;/h3&gt;
    &lt;p style=&quot;margin:0;font-size:15px;color:#374151;line-height:1.6;&quot;&gt;
      허락 없이 침입해 데이터를 훔치거나 시스템을 망가뜨리는 &lt;strong style=&quot;color:#111111;&quot;&gt;범죄자&lt;/strong&gt;.
      우리가 뉴스에서 '해커'라고 부르는 대상은 사실 대부분 이쪽입니다. 명확한 불법입니다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;div style=&quot;margin:0 0 40px;background:#ffffff;border:1px solid #e5e7eb;border-radius:12px;padding:24px;&quot;&gt;
    &lt;h3 style=&quot;font-size:16px;font-weight:600;color:#111111;margin:0 0 8px;&quot;&gt;⚪ 그레이 햇 (Gray Hat)&lt;/h3&gt;
    &lt;p style=&quot;margin:0;font-size:15px;color:#374151;line-height:1.6;&quot;&gt;
      그 사이의 회색지대. 악의는 없지만 허락 없이 취약점을 찾아내 알리는 식으로,
      합법과 불법의 경계를 넘나드는 해커입니다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- 본문 4 --&gt;
  &lt;h2 style=&quot;font-family:Inter,sans-serif;font-size:28px;font-weight:600;line-height:1.2;letter-spacing:-0.5px;color:#111111;margin:0 0 16px;&quot;&gt;
    그렇다면 '나쁜 해커'는 뭐라고 불러야 할까
  &lt;/h2&gt;
  &lt;p style=&quot;margin:0 0 16px;&quot;&gt;
    엄밀히 말하면, 악의를 가지고 시스템을 침해하는 사람은
    &lt;strong style=&quot;color:#111111;&quot;&gt;크래커(Cracker)&lt;/strong&gt;라고 부르는 것이 정확합니다.
    'crack(부수다)'에서 나온 말이지요. 해커 커뮤니티 스스로는 오래전부터
    &quot;우리는 해커이고, 범죄를 저지르는 자들은 크래커다&quot;라며 둘을 구분해 왔습니다.
  &lt;/p&gt;
  &lt;p style=&quot;margin:0 0 32px;&quot;&gt;
    물론 일상 언어와 미디어에서는 이미 '해커'가 부정적 의미로 굳어졌기 때문에,
    이 구분을 모두가 지키기는 어렵습니다. 하지만 적어도 단어의 원래 뜻이
    &lt;strong style=&quot;color:#111111;&quot;&gt;'기술의 깊이'&lt;/strong&gt;였다는 사실은 기억해 둘 만합니다.
  &lt;/p&gt;

  &lt;!-- 마무리 CTA 밴드 --&gt;
  &lt;div style=&quot;background:#f5f5f5;border-radius:12px;padding:40px 32px;margin:0 0 48px;text-align:center;&quot;&gt;
    &lt;h2 style=&quot;font-family:Inter,sans-serif;font-size:24px;font-weight:600;line-height:1.3;letter-spacing:-0.5px;color:#111111;margin:0 0 12px;&quot;&gt;
      정리하자면
    &lt;/h2&gt;
    &lt;p style=&quot;margin:0;font-size:16px;color:#374151;line-height:1.6;&quot;&gt;
      해커는 &lt;strong style=&quot;color:#111111;&quot;&gt;'무엇을 하느냐'가 아니라 '얼마나 깊이 아느냐'&lt;/strong&gt;를 가리키는 말입니다.&lt;br&gt;
      그 깊은 지식을 어디에 쓰느냐 — 그것이 화이트 햇과 블랙 햇을 가릅니다.
    &lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- 다크 푸터 (페이지를 닫는 시그니처) --&gt;
  &lt;div style=&quot;background:#101010;border-radius:12px;padding:32px;text-align:center;&quot;&gt;
    &lt;p style=&quot;margin:0 0 6px;font-size:14px;color:#ffffff;font-weight:600;letter-spacing:-0.3px;&quot;&gt;읽어주셔서 감사합니다  &lt;/p&gt;
    &lt;p style=&quot;margin:0;font-size:13px;color:#a1a1aa;line-height:1.5;&quot;&gt;
      이 글이 도움이 되었다면 공감과 댓글 부탁드려요.&lt;br&gt;
      IT·보안 상식을 쉽게 풀어 계속 올리겠습니다.
    &lt;/p&gt;
  &lt;/div&gt;

&lt;/article&gt;
&lt;/body&gt;</description>
      <category>기타</category>
      <category>해커</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/51</guid>
      <comments>https://range31.tistory.com/51#entry51comment</comments>
      <pubDate>Thu, 25 Jun 2026 22:49:53 +0900</pubDate>
    </item>
    <item>
      <title>2026 북중미 월드컵 32강 대한민국 킹우의 수</title>
      <link>https://range31.tistory.com/50</link>
      <description>&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;대한민국 32강 진출 경우의 수 총정리. 6월 25일 남아공전, 비기기만 해도 조 2위 직행! 패배 시 멕시코-체코 결과에 따른 시나리오와 와일드카드 진출 확률까지 한눈에 정리했습니다.&quot;&gt;
&lt;title&gt;대한민국 32강 진출 경우의 수 총정리 | 2026 북중미 월드컵 A조&lt;/title&gt;
&lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;&gt;
&lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin=&quot;&quot;&gt;
&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&amp;amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;style&gt;
  :root {
    --canvas: #ffffff;
    --ink: #111111;
    --body: #374151;
    --muted: #6b7280;
    --muted-soft: #898989;
    --hairline: #e5e7eb;
    --hairline-soft: #f3f4f6;
    --surface-soft: #f8f9fa;
    --surface-card: #f5f5f5;
    --surface-dark: #101010;
    --on-dark: #ffffff;
    --on-dark-soft: #a1a1aa;
    --brand-accent: #3b82f6;
    --success: #10b981;
    --warning: #f59e0b;
    --error: #ef4444;
    --badge-orange: #fb923c;
    --rounded-sm: 6px;
    --rounded-md: 8px;
    --rounded-lg: 12px;
    --rounded-xl: 16px;
    --rounded-pill: 9999px;
    --font: &quot;Inter&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, sans-serif;
  }

  * { margin: 0; padding: 0; box-sizing: border-box; }

  body {
    font-family: var(--font);
    background: var(--canvas);
    color: var(--body);
    line-height: 1.5;
    font-size: 16px;
  }

  /* ── NAV ── */
  nav {
    position: sticky;
    top: 0;
    z-index: 100;
    height: 64px;
    background: var(--canvas);
    border-bottom: 1px solid var(--hairline);
    display: flex;
    align-items: center;
    padding: 0 48px;
    justify-content: space-between;
  }
  .nav-logo {
    font-size: 16px;
    font-weight: 600;
    color: var(--ink);
    text-decoration: none;
    letter-spacing: -0.3px;
  }
  .nav-tags {
    display: flex;
    gap: 8px;
  }
  .nav-pill {
    background: var(--surface-soft);
    border-radius: var(--rounded-pill);
    padding: 6px;
    display: flex;
    gap: 2px;
  }
  .nav-pill a {
    font-size: 14px;
    font-weight: 500;
    color: var(--muted);
    text-decoration: none;
    padding: 6px 14px;
    border-radius: var(--rounded-md);
    transition: background 0.15s, color 0.15s;
  }
  .nav-pill a.active {
    background: var(--canvas);
    color: var(--ink);
    box-shadow: 0 1px 2px rgba(0,0,0,0.08);
  }

  /* ── HERO ── */
  .hero {
    padding: 96px 48px 72px;
    max-width: 1200px;
    margin: 0 auto;
  }
  .hero-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--surface-card);
    border-radius: var(--rounded-pill);
    padding: 6px 14px;
    font-size: 13px;
    font-weight: 500;
    color: var(--ink);
    margin-bottom: 32px;
  }
  .hero-badge span {
    display: inline-block;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--success);
  }
  .hero h1 {
    font-family: var(--font);
    font-weight: 600;
    font-size: 56px;
    line-height: 1.05;
    letter-spacing: -0.04em;
    color: var(--ink);
    max-width: 860px;
    margin-bottom: 24px;
  }
  .hero-sub {
    font-size: 18px;
    color: var(--muted);
    max-width: 560px;
    line-height: 1.6;
  }
  .hero-sub strong { color: var(--ink); font-weight: 600; }
  .hero-divider {
    margin-top: 48px;
    height: 1px;
    background: var(--hairline);
  }

  /* ── ARTICLE BODY ── */
  .article {
    max-width: 860px;
    margin: 0 auto;
    padding: 72px 48px 96px;
  }

  /* ── STANDINGS CARD ── */
  .section { margin-bottom: 72px; }

  .section-label {
    font-size: 13px;
    font-weight: 500;
    color: var(--muted);
    letter-spacing: 0.04em;
    text-transform: uppercase;
    margin-bottom: 20px;
  }

  .section h2 {
    font-weight: 600;
    font-size: 28px;
    letter-spacing: -0.03em;
    color: var(--ink);
    line-height: 1.2;
    margin-bottom: 24px;
  }

  .section p {
    font-size: 16px;
    color: var(--body);
    line-height: 1.7;
    margin-bottom: 16px;
  }

  /* ── TABLE ── */
  .table-wrap {
    background: var(--surface-card);
    border-radius: var(--rounded-lg);
    overflow: hidden;
    margin: 24px 0;
  }
  table {
    width: 100%;
    border-collapse: collapse;
  }
  thead tr {
    background: var(--canvas);
    border-bottom: 1px solid var(--hairline);
  }
  thead th {
    font-size: 13px;
    font-weight: 500;
    color: var(--muted);
    text-align: left;
    padding: 14px 20px;
  }
  tbody td {
    padding: 16px 20px;
    font-size: 15px;
    color: var(--body);
    border-bottom: 1px solid var(--hairline-soft);
  }
  tbody tr:last-child td { border-bottom: none; }
  tbody tr.highlight td { color: var(--ink); font-weight: 600; }
  .rank-num {
    font-weight: 600;
    color: var(--muted-soft);
    font-size: 14px;
  }
  .team-name { font-weight: 600; color: var(--ink); }
  .pts {
    font-weight: 700;
    font-size: 17px;
    color: var(--ink);
  }
  .badge-pill-sm {
    display: inline-block;
    background: var(--surface-card);
    border: 1px solid var(--hairline);
    border-radius: var(--rounded-pill);
    font-size: 12px;
    font-weight: 500;
    color: var(--muted);
    padding: 3px 10px;
  }
  .badge-confirmed {
    background: #ecfdf5;
    border-color: #a7f3d0;
    color: #065f46;
  }
  .badge-kr {
    background: #eff6ff;
    border-color: #bfdbfe;
    color: #1e40af;
  }

  /* ── SCENARIO CARDS ── */
  .scenario-grid {
    display: flex;
    flex-direction: column;
    gap: 16px;
    margin: 24px 0;
  }
  .scenario-card {
    background: var(--surface-card);
    border-radius: var(--rounded-lg);
    padding: 28px 32px;
    display: flex;
    gap: 24px;
    align-items: flex-start;
  }
  .scenario-card.dark {
    background: var(--surface-dark);
  }
  .scenario-icon {
    font-size: 28px;
    line-height: 1;
    flex-shrink: 0;
    margin-top: 2px;
  }
  .scenario-body { flex: 1; }
  .scenario-title {
    font-weight: 600;
    font-size: 17px;
    color: var(--ink);
    margin-bottom: 8px;
    letter-spacing: -0.2px;
  }
  .scenario-card.dark .scenario-title { color: var(--on-dark); }
  .scenario-desc {
    font-size: 15px;
    color: var(--muted);
    line-height: 1.65;
  }
  .scenario-card.dark .scenario-desc { color: var(--on-dark-soft); }
  .scenario-desc strong { color: var(--ink); font-weight: 600; }
  .scenario-card.dark .scenario-desc strong { color: var(--on-dark); }
  .result-badge {
    display: inline-block;
    margin-top: 12px;
    font-size: 13px;
    font-weight: 600;
    border-radius: var(--rounded-pill);
    padding: 4px 14px;
  }
  .result-ok { background: #ecfdf5; color: #065f46; }
  .result-warn { background: #fef3c7; color: #92400e; }
  .result-danger { background: #fef2f2; color: #991b1b; }

  /* ── ANALYSIS CARD (체코 가능성) ── */
  .analysis-card {
    background: var(--canvas);
    border: 1px solid var(--hairline);
    border-radius: var(--rounded-xl);
    padding: 32px;
    margin: 24px 0;
    box-shadow: 0 4px 12px rgba(0,0,0,0.05);
  }
  .analysis-card h3 {
    font-weight: 600;
    font-size: 20px;
    letter-spacing: -0.3px;
    color: var(--ink);
    margin-bottom: 20px;
  }
  .reason-list {
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 12px;
  }
  .reason-list li {
    display: flex;
    gap: 14px;
    align-items: flex-start;
    font-size: 15px;
    color: var(--body);
    line-height: 1.6;
  }
  .reason-icon {
    font-size: 18px;
    flex-shrink: 0;
    margin-top: 1px;
  }

  /* ── RESULT TABLE (패배 시) ── */
  .result-table {
    background: var(--surface-card);
    border-radius: var(--rounded-lg);
    overflow: hidden;
    margin: 24px 0;
  }
  .result-table table { width: 100%; border-collapse: collapse; }
  .result-table thead tr {
    background: var(--canvas);
    border-bottom: 1px solid var(--hairline);
  }
  .result-table thead th {
    font-size: 13px;
    font-weight: 500;
    color: var(--muted);
    padding: 14px 20px;
    text-align: left;
  }
  .result-table tbody td {
    padding: 16px 20px;
    font-size: 15px;
    border-bottom: 1px solid var(--hairline-soft);
    color: var(--body);
    line-height: 1.5;
  }
  .result-table tbody tr:last-child td { border-bottom: none; }
  .outcome-ok { color: #065f46; font-weight: 600; }
  .outcome-warn { color: #92400e; font-weight: 600; }
  .outcome-danger { color: #991b1b; font-weight: 600; }

  /* ── SUMMARY TABLE ── */
  .summary-card {
    background: var(--surface-card);
    border-radius: var(--rounded-lg);
    overflow: hidden;
    margin: 24px 0;
  }
  .summary-card table { width: 100%; border-collapse: collapse; }
  .summary-card thead tr {
    background: var(--canvas);
    border-bottom: 1px solid var(--hairline);
  }
  .summary-card thead th {
    font-size: 13px;
    font-weight: 500;
    color: var(--muted);
    padding: 14px 20px;
    text-align: left;
  }
  .summary-card tbody td {
    padding: 18px 20px;
    font-size: 15px;
    border-bottom: 1px solid var(--hairline-soft);
    color: var(--body);
  }
  .summary-card tbody tr:last-child td { border-bottom: none; }

  /* ── WILDCARD CALLOUT ── */
  .callout {
    background: var(--surface-soft);
    border-left: 3px solid var(--hairline);
    border-radius: 0 var(--rounded-md) var(--rounded-md) 0;
    padding: 20px 24px;
    margin: 24px 0;
  }
  .callout p { font-size: 15px; color: var(--body); line-height: 1.7; }
  .callout strong { color: var(--ink); font-weight: 600; }

  /* ── CLOSING BAND ── */
  .closing-band {
    background: var(--surface-card);
    border-radius: var(--rounded-lg);
    padding: 56px 48px;
    text-align: center;
    margin-bottom: 96px;
  }
  .closing-band .flag-big { font-size: 56px; display: block; margin-bottom: 24px; }
  .closing-band h2 {
    font-weight: 600;
    font-size: 36px;
    letter-spacing: -0.04em;
    color: var(--ink);
    line-height: 1.15;
    margin-bottom: 16px;
  }
  .closing-band p {
    font-size: 17px;
    color: var(--muted);
    line-height: 1.65;
    max-width: 480px;
    margin: 0 auto;
  }

  /* ── FOOTER ── */
  footer {
    background: var(--surface-dark);
    padding: 64px 48px;
    color: var(--on-dark-soft);
  }
  .footer-inner {
    max-width: 1200px;
    margin: 0 auto;
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 48px;
  }
  .footer-brand {
    font-size: 15px;
    font-weight: 600;
    color: var(--on-dark);
    margin-bottom: 10px;
  }
  .footer-desc { font-size: 13px; color: var(--on-dark-soft); line-height: 1.6; }
  .footer-note { font-size: 13px; color: var(--on-dark-soft); max-width: 360px; line-height: 1.6; }

  /* ── RESPONSIVE ── */
  @media (max-width: 768px) {
    nav { padding: 0 20px; }
    .nav-tags { display: none; }
    .hero { padding: 56px 24px 48px; }
    .hero h1 { font-size: 36px; }
    .article { padding: 48px 24px 72px; }
    .scenario-card { padding: 20px; flex-direction: column; gap: 12px; }
    .closing-band { padding: 40px 24px; }
    .closing-band h2 { font-size: 26px; }
    footer { padding: 48px 24px; }
    .footer-inner { flex-direction: column; gap: 24px; }
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;div class=&quot;hero&quot;&gt;
  &lt;div class=&quot;hero-badge&quot;&gt;
    &lt;span&gt;&lt;/span&gt;
    2026 북중미 월드컵 · A조 최종전 분석
  &lt;/div&gt;
  &lt;h1&gt;  대한민국 32강 진출&lt;br&gt;경우의 수 총정리&lt;/h1&gt;
  &lt;p class=&quot;hero-sub&quot;&gt;
    &lt;strong&gt;6월 25일 오전 10시&lt;/strong&gt;, 남아공전. 비기기만 해도 직행.&lt;br&gt;
    단, 패배하면 체코-멕시코 결과가 우리 운명을 가릅니다.
  &lt;/p&gt;
  &lt;div class=&quot;hero-divider&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;article&quot;&gt;

  &lt;!-- 현재 순위 --&gt;
  &lt;div class=&quot;section&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;현재 A조 순위&lt;/div&gt;
    &lt;h2&gt;2차전 종료 기준 순위표&lt;/h2&gt;
    &lt;p&gt;대한민국은 1차전에서 체코를 &lt;strong style=&quot;color:var(--ink)&quot;&gt;2-1로 격파&lt;/strong&gt;했지만, 2차전에서 멕시코에 &lt;strong style=&quot;color:var(--ink)&quot;&gt;0-1로 아쉽게 패&lt;/strong&gt;하며 1승 1패를 기록 중입니다. 그래도 조 2위 자리는 지키고 있다는 점이 핵심입니다.&lt;/p&gt;

    &lt;div class=&quot;table-wrap&quot;&gt;
      &lt;table&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th&gt;#&lt;/th&gt;
            &lt;th&gt;팀&lt;/th&gt;
            &lt;th&gt;전적&lt;/th&gt;
            &lt;th&gt;승점&lt;/th&gt;
            &lt;th&gt;상태&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr&gt;
            &lt;td&gt;&lt;span class=&quot;rank-num&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;team-name&quot;&gt;  멕시코&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;2승 0무 0패&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;pts&quot;&gt;6&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;badge-pill-sm badge-confirmed&quot;&gt;1위 확정&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr class=&quot;highlight&quot;&gt;
            &lt;td&gt;&lt;span class=&quot;rank-num&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;team-name&quot;&gt;  대한민국&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;1승 0무 1패&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;pts&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;badge-pill-sm badge-kr&quot;&gt;결전 대기&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;&lt;span class=&quot;rank-num&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;team-name&quot;&gt;  체코&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;0승 1무 1패&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;pts&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;badge-pill-sm&quot;&gt;탈락 위기&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;&lt;span class=&quot;rank-num&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;team-name&quot;&gt;  남아공&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;0승 1무 1패&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;pts&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
            &lt;td&gt;&lt;span class=&quot;badge-pill-sm&quot;&gt;탈락 위기&lt;/span&gt;&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;p style=&quot;font-size:14px; color:var(--muted); margin-top:8px;&quot;&gt;최종전 동시 진행 · 6월 25일 오전 10:00 — 한국 vs 남아공 / 멕시코 vs 체코&lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- 핵심 요약 --&gt;
  &lt;div class=&quot;section&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;핵심 요약&lt;/div&gt;
    &lt;h2&gt;비기기만 해도 32강 직행&lt;/h2&gt;
    &lt;p&gt;복잡하게 생각할 것 없습니다. 남아공전에서 무승부만 거두면 우리 손으로 32강을 확정할 수 있습니다.&lt;/p&gt;

    &lt;div class=&quot;scenario-grid&quot;&gt;
      &lt;div class=&quot;scenario-card&quot;&gt;
        &lt;div class=&quot;scenario-icon&quot;&gt; &lt;/div&gt;
        &lt;div class=&quot;scenario-body&quot;&gt;
          &lt;div class=&quot;scenario-title&quot;&gt;① 한국이 남아공을 이기면&lt;/div&gt;
          &lt;div class=&quot;scenario-desc&quot;&gt;승점 6으로 자력 조 2위 확정. 더 볼 것도 없이 &lt;strong&gt;32강 직행&lt;/strong&gt;입니다.&lt;/div&gt;
          &lt;span class=&quot;result-badge result-ok&quot;&gt;✅ 확정 진출&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class=&quot;scenario-card&quot;&gt;
        &lt;div class=&quot;scenario-icon&quot;&gt; &lt;/div&gt;
        &lt;div class=&quot;scenario-body&quot;&gt;
          &lt;div class=&quot;scenario-title&quot;&gt;② 한국이 비기면&lt;/div&gt;
          &lt;div class=&quot;scenario-desc&quot;&gt;
            승점 4 확보. 체코가 멕시코를 잡아 승점 4로 따라붙어도 걱정 없습니다.&lt;br&gt;
            &lt;strong&gt;1차전 맞대결에서 한국이 체코를 2-1로 이긴 우위&lt;/strong&gt;가 있어 동점이어도 한국이 앞섭니다. 남아공은 비겨도 승점 2에 그쳐 따라올 수 없습니다.
          &lt;/div&gt;
          &lt;span class=&quot;result-badge result-ok&quot;&gt;✅ 확정 진출&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class=&quot;scenario-card dark&quot;&gt;
        &lt;div class=&quot;scenario-icon&quot;&gt;⚠️&lt;/div&gt;
        &lt;div class=&quot;scenario-body&quot;&gt;
          &lt;div class=&quot;scenario-title&quot;&gt;③ 한국이 지면&lt;/div&gt;
          &lt;div class=&quot;scenario-desc&quot;&gt;
            남아공이 승점 4로 올라오고, &lt;strong&gt;멕시코-체코 결과가 우리 운명을 가릅니다.&lt;/strong&gt;&lt;br&gt;
            이때 &quot;체코가 멕시코를 이기는 시나리오&quot;가 가장 위험합니다.
          &lt;/div&gt;
          &lt;span class=&quot;result-badge result-warn&quot;&gt;⏳ 타결과 의존&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 체코 가능성 --&gt;
  &lt;div class=&quot;section&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;핵심 변수 분석&lt;/div&gt;
    &lt;h2&gt;체코가 멕시코를 이길 수 있을까?&lt;/h2&gt;
    &lt;p&gt;&quot;멕시코가 당연히 이기겠지&quot;라고 넘기기엔 무시할 수 없는 이유들이 있습니다.&lt;/p&gt;

    &lt;div class=&quot;analysis-card&quot;&gt;
      &lt;h3&gt;  멕시코를 방심하게 만드는 3가지 이유&lt;/h3&gt;
      &lt;ul class=&quot;reason-list&quot;&gt;
        &lt;li&gt;
          &lt;span class=&quot;reason-icon&quot;&gt; &lt;/span&gt;
          &lt;div&gt;&lt;strong style=&quot;color:var(--ink)&quot;&gt;주력 선수 로테이션 가능성&lt;/strong&gt; — 멕시코는 이미 2승으로 조 1위를 확정했습니다. 부상 방지와 체력 안배를 위해 후보 선수를 대거 기용할 유인이 충분합니다.&lt;/div&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;span class=&quot;reason-icon&quot;&gt; ‍ &lt;/span&gt;
          &lt;div&gt;&lt;strong style=&quot;color:var(--ink)&quot;&gt;동기 부여 저하&lt;/strong&gt; — 이미 1위가 확정된 멕시코 입장에서 이 경기는 사실상 소화전(消化戰)입니다. 절박함이 현저히 떨어집니다.&lt;/div&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;span class=&quot;reason-icon&quot;&gt; &lt;/span&gt;
          &lt;div&gt;&lt;strong style=&quot;color:var(--ink)&quot;&gt;체코의 절박함&lt;/strong&gt; — 반대로 체코는 이 경기를 반드시 잡아야만 32강 희망이 살아납니다. 절박한 팀이 방심한 팀을 이기는 것, 월드컵 역사에서 수없이 반복된 장면입니다.&lt;/div&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;

    &lt;p&gt;결론적으로 &lt;strong style=&quot;color:var(--ink)&quot;&gt;&quot;체코의 승리 가능성을 0으로 볼 수 없다&quot;&lt;/strong&gt;는 것이 핵심입니다. 우리에겐 가장 피하고 싶은 시나리오입니다.&lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- 한국 패배 시 --&gt;
  &lt;div class=&quot;section&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;패배 시 시나리오&lt;/div&gt;
    &lt;h2&gt;한국이 지면? 경우의 수 3가지&lt;/h2&gt;

    &lt;div class=&quot;result-table&quot;&gt;
      &lt;table&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th&gt;멕시코 vs 체코&lt;/th&gt;
            &lt;th&gt;한국 최종 순위&lt;/th&gt;
            &lt;th&gt;결과&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr&gt;
            &lt;td&gt;  &lt;strong&gt;체코 승리&lt;/strong&gt;&lt;/td&gt;
            &lt;td&gt;체코 4점 / 남아공 4점 / 한국 3점 → &lt;strong&gt;조 4위&lt;/strong&gt;&lt;/td&gt;
            &lt;td class=&quot;outcome-danger&quot;&gt;❌ 탈락&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;  무승부&lt;/td&gt;
            &lt;td&gt;체코 2점 / 남아공 4점 / 한국 3점 → &lt;strong&gt;조 3위&lt;/strong&gt;&lt;/td&gt;
            &lt;td class=&quot;outcome-warn&quot;&gt;⏳ 와일드카드 경쟁&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;  멕시코 승리&lt;/td&gt;
            &lt;td&gt;체코 1점 / 남아공 4점 / 한국 3점 → &lt;strong&gt;조 3위&lt;/strong&gt;&lt;/td&gt;
            &lt;td class=&quot;outcome-warn&quot;&gt;⏳ 와일드카드 경쟁&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;

    &lt;div class=&quot;callout&quot;&gt;
      &lt;p&gt;
        &lt;strong&gt;와일드카드 진출이란?&lt;/strong&gt;&lt;br&gt;
        2026 북중미 월드컵은 사상 처음 48개국 체제로 열립니다. 12개 조 각 조 1·2위 24팀 외에 &lt;strong&gt;각 조 3위 12팀 중 성적 상위 8팀&lt;/strong&gt;이 추가로 32강에 진출합니다.
        FIFA 집계에 따르면 A조 3위 팀이 32강에 진출하는 경우의 수는 &lt;strong&gt;총 495가지 중 330가지(약 67%)&lt;/strong&gt;로 비교적 유리한 편이지만, 다른 조 3위 팀들의 승점·골득실에 운명이 달려 있어 자력 진출은 아닙니다.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 최종 요약 --&gt;
  &lt;div class=&quot;section&quot;&gt;
    &lt;div class=&quot;section-label&quot;&gt;최종 요약&lt;/div&gt;
    &lt;h2&gt;한눈에 보는 경우의 수&lt;/h2&gt;

    &lt;div class=&quot;summary-card&quot;&gt;
      &lt;table&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th&gt;남아공전 결과&lt;/th&gt;
            &lt;th&gt;32강 진출 여부&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt;
          &lt;tr&gt;
            &lt;td&gt;  &lt;strong style=&quot;color:var(--ink)&quot;&gt;승리&lt;/strong&gt;&lt;/td&gt;
            &lt;td class=&quot;outcome-ok&quot;&gt;✅ 조 2위 확정 진출&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;  &lt;strong style=&quot;color:var(--ink)&quot;&gt;무승부&lt;/strong&gt;&lt;/td&gt;
            &lt;td class=&quot;outcome-ok&quot;&gt;✅ 조 2위 확정 진출 (맞대결 우위)&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;  패배 + 체코 무·패&lt;/td&gt;
            &lt;td class=&quot;outcome-warn&quot;&gt;⏳ 조 3위, 와일드카드 경쟁&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
            &lt;td&gt;❌ &lt;strong style=&quot;color:var(--ink)&quot;&gt;패배 + 체코 승리&lt;/strong&gt;&lt;/td&gt;
            &lt;td class=&quot;outcome-danger&quot;&gt;❌ 조 4위 탈락&lt;/td&gt;
          &lt;/tr&gt;
        &lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- CLOSING BAND --&gt;
  &lt;div class=&quot;closing-band&quot;&gt;
    &lt;span class=&quot;flag-big&quot;&gt; &lt;/span&gt;
    &lt;h2&gt;가장 깔끔한 방법은&lt;br&gt;우리 손으로 끝내는 것&lt;/h2&gt;
    &lt;p&gt;비기기만 해도 32강 직행. 하지만 이왕이면 이겨서 홀가분하게 다음 라운드로 갑시다.&lt;br&gt;&lt;br&gt;&lt;strong style=&quot;color:var(--ink)&quot;&gt;대~한민국!  &lt;/strong&gt;&lt;/p&gt;
  &lt;/div&gt;

&lt;/div&gt;</description>
      <category>기타</category>
      <category>2026</category>
      <category>대한민국</category>
      <category>북중미</category>
      <category>월드컵</category>
      <category>킹우의 수</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/50</guid>
      <comments>https://range31.tistory.com/50#entry50comment</comments>
      <pubDate>Wed, 24 Jun 2026 22:55:45 +0900</pubDate>
    </item>
    <item>
      <title>MCP란 무엇인가?</title>
      <link>https://range31.tistory.com/49</link>
      <description>&lt;div style=&quot;max-width: 760px; margin: 0 auto; font-family: 'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; color: #374151; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;!-- ===== HERO ===== --&gt;
&lt;div style=&quot;padding: 8px 0 36px;&quot;&gt;&lt;span style=&quot;display: inline-block; font-size: 13px; font-weight: 500; border-radius: 9999px; padding: 4px 12px; background: rgba(59,130,246,0.1); color: #3b82f6; margin-bottom: 18px;&quot;&gt;⚙️ 엔지니어링 &amp;middot; AI 인프라&lt;/span&gt;
&lt;h1 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 42px; line-height: 1.1; letter-spacing: -1.5px; color: #111111; margin: 0;&quot;&gt;MCP란 무엇인가?&lt;br /&gt;AI에게 손과 발을 달아주는 표준&lt;/h1&gt;
&lt;p style=&quot;font-size: 18px; color: #6b7280; line-height: 1.6; margin: 18px 0 0;&quot; data-ke-size=&quot;size16&quot;&gt;언어 모델은 똑똑하지만 갇혀 있습니다. MCP(Model Context Protocol)는 AI가 여러분의 도구&amp;middot;데이터&amp;middot;시스템에 안전하게 연결되는 단 하나의 표준 규격입니다.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- ===== LEAD ===== --&gt;
&lt;p style=&quot;font-size: 18px; font-weight: 500; color: #111111; line-height: 1.6; margin: 0 0 32px; border-left: 3px solid #111111; padding-left: 16px;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;챗봇은 똑똑한데, 왜 우리 사내 시스템 하나도 못 건드리지?&quot; 이 질문에 대한 답이 바로 MCP입니다.&lt;/p&gt;
&lt;!-- ===== WHAT ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.15; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;MCP란 무엇인가?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 16px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;MCP(Model Context Protocol)&lt;/b&gt;는 AI 모델(챗봇, 에이전트)을 외부 도구와 데이터 소스에 연결하기 위한 &lt;b&gt;개방형 표준 프로토콜&lt;/b&gt;입니다. Anthropic이 2024년 말 공개했고, 지금은 다양한 AI 클라이언트와 도구들이 함께 채택하고 있습니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 16px;&quot; data-ke-size=&quot;size16&quot;&gt;비유하자면 MCP는 &lt;b&gt;'AI를 위한 USB-C 포트'&lt;/b&gt;입니다. 예전에는 기기마다 충전 단자가 제각각이라 케이블이 산더미였죠. USB-C가 하나의 표준으로 이를 정리한 것처럼, MCP는 &quot;AI &amp;harr; 외부 시스템&quot; 연결 방식을 하나로 통일합니다.&lt;/p&gt;
&lt;!-- 한 줄 요약 코드카드 (다크면) --&gt;
&lt;div style=&quot;background: #101010; border-radius: 12px; padding: 24px; margin: 16px 0 24px; overflow-x: auto;&quot;&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 6px; margin-bottom: 12px;&quot;&gt;&lt;span style=&quot;width: 10px; height: 10px; border-radius: 9999px; background: #fb923c; display: inline-block;&quot;&gt;&lt;/span&gt; &lt;span style=&quot;width: 10px; height: 10px; border-radius: 9999px; background: #f59e0b; display: inline-block;&quot;&gt;&lt;/span&gt; &lt;span style=&quot;width: 10px; height: 10px; border-radius: 9999px; background: #34d399; display: inline-block;&quot;&gt;&lt;/span&gt; &lt;span style=&quot;color: #a1a1aa; font-family: 'JetBrains Mono',monospace; font-size: 12px; margin-left: 8px;&quot;&gt;한 줄 요약&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;properties&quot; style=&quot;font-family: 'JetBrains Mono',ui-monospace,monospace; font-size: 14px; line-height: 1.7; color: #e5e7eb; white-space: pre; margin: 0; background: #101010;&quot;&gt;&lt;code&gt;# MCP가 없을 때
AI 모델 &amp;times; N개의 도구 = N개의 맞춤형 연동 코드

# MCP가 있을 때
AI 모델 &amp;times; MCP &amp;times; N개의 도구 = 1개의 표준 규격&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;!-- ===== WHY ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.15; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;왜 MCP를 쓰면 좋은가?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 24px;&quot; data-ke-size=&quot;size16&quot;&gt;가장 큰 문제는 &lt;b&gt;'M&amp;times;N 통합 지옥'&lt;/b&gt;입니다. AI 클라이언트가 M개, 연결하고 싶은 도구가 N개라면 기존 방식으로는 M&amp;times;N개의 맞춤형 커넥터를 따로 만들어야 합니다. MCP는 이를 &lt;b&gt;M+N&lt;/b&gt;으로 줄입니다. 클라이언트는 MCP만 알면 되고, 도구는 MCP 서버만 만들면 됩니다.&lt;/p&gt;
&lt;!-- 베네핏 카드 6개 (flex-wrap 2-up) --&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 16px; margin-bottom: 8px;&quot;&gt;
&lt;div style=&quot;flex: 1 1 220px; background: #f5f5f5; border-radius: 12px; padding: 24px;&quot;&gt;
&lt;div style=&quot;font-size: 22px; margin-bottom: 10px;&quot;&gt; &lt;/div&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 18px; letter-spacing: -0.3px; color: #111111; margin: 0 0 6px;&quot; data-ke-size=&quot;size23&quot;&gt;한 번 만들면 끝&lt;/h3&gt;
&lt;p style=&quot;font-size: 15px; color: #6b7280; margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;MCP 서버를 한 번 구현하면 MCP를 지원하는 모든 AI 클라이언트에서 그대로 동작합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;flex: 1 1 220px; background: #f5f5f5; border-radius: 12px; padding: 24px;&quot;&gt;
&lt;div style=&quot;font-size: 22px; margin-bottom: 10px;&quot;&gt; &lt;/div&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 18px; letter-spacing: -0.3px; color: #111111; margin: 0 0 6px;&quot; data-ke-size=&quot;size23&quot;&gt;안전한 경계&lt;/h3&gt;
&lt;p style=&quot;font-size: 15px; color: #6b7280; margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;데이터를 통째로 넣는 대신, 서버가 허용한 도구와 리소스만 노출합니다. 권한 통제가 명확합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;flex: 1 1 220px; background: #f5f5f5; border-radius: 12px; padding: 24px;&quot;&gt;
&lt;div style=&quot;font-size: 22px; margin-bottom: 10px;&quot;&gt;⚡&lt;/div&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 18px; letter-spacing: -0.3px; color: #111111; margin: 0 0 6px;&quot; data-ke-size=&quot;size23&quot;&gt;실시간 컨텍스트&lt;/h3&gt;
&lt;p style=&quot;font-size: 15px; color: #6b7280; margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;학습 시점에 멈춘 지식 대신, 사내 DB&amp;middot;파일&amp;middot;API의 최신 상태를 그때그때 읽어 옵니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;flex: 1 1 220px; background: #f5f5f5; border-radius: 12px; padding: 24px;&quot;&gt;
&lt;div style=&quot;font-size: 22px; margin-bottom: 10px;&quot;&gt; &lt;/div&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 18px; letter-spacing: -0.3px; color: #111111; margin: 0 0 6px;&quot; data-ke-size=&quot;size23&quot;&gt;조립식 생태계&lt;/h3&gt;
&lt;p style=&quot;font-size: 15px; color: #6b7280; margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;Slack, GitHub, Google Drive, Notion 등 이미 만들어진 MCP 서버를 레고처럼 끼워 씁니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;flex: 1 1 220px; background: #f5f5f5; border-radius: 12px; padding: 24px;&quot;&gt;
&lt;div style=&quot;font-size: 22px; margin-bottom: 10px;&quot;&gt; &lt;/div&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 18px; letter-spacing: -0.3px; color: #111111; margin: 0 0 6px;&quot; data-ke-size=&quot;size23&quot;&gt;벤더 종속 탈피&lt;/h3&gt;
&lt;p style=&quot;font-size: 15px; color: #6b7280; margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;개방형 표준이라 특정 AI 제공사에 묶이지 않습니다. 모델을 바꿔도 연동 자산은 그대로 재사용됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;flex: 1 1 220px; background: #f5f5f5; border-radius: 12px; padding: 24px;&quot;&gt;
&lt;div style=&quot;font-size: 22px; margin-bottom: 10px;&quot;&gt; ️&lt;/div&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 18px; letter-spacing: -0.3px; color: #111111; margin: 0 0 6px;&quot; data-ke-size=&quot;size23&quot;&gt;읽기를 넘어 실행까지&lt;/h3&gt;
&lt;p style=&quot;font-size: 15px; color: #6b7280; margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;조회뿐 아니라 PR 생성, 메시지 전송, 일정 등록 같은 '행동'을 도구(Tool)로 위임합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ===== BEFORE / AFTER ===== --&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 22px; letter-spacing: -0.5px; color: #111111; margin: 40px 0 16px;&quot; data-ke-size=&quot;size23&quot;&gt;Before / After&lt;/h3&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 16px;&quot;&gt;
&lt;div style=&quot;flex: 1 1 280px; background: #f5f5f5; border-radius: 12px; padding: 24px;&quot;&gt;
&lt;div style=&quot;font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; color: #ef4444; margin-bottom: 8px;&quot;&gt;✕ MCP 이전&lt;/div&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 16px; color: #111111; margin: 0 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;맞춤형 연동의 늪&lt;/h3&gt;
&lt;ul style=&quot;margin: 0 0 0 18px; padding: 0;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;font-size: 14px; color: #374151; margin-bottom: 8px;&quot;&gt;도구마다 별도 연동 코드 작성&lt;/li&gt;
&lt;li style=&quot;font-size: 14px; color: #374151; margin-bottom: 8px;&quot;&gt;클라이언트가 바뀌면 전부 다시 작업&lt;/li&gt;
&lt;li style=&quot;font-size: 14px; color: #374151; margin-bottom: 8px;&quot;&gt;인증&amp;middot;권한 처리를 매번 새로 구현&lt;/li&gt;
&lt;li style=&quot;font-size: 14px; color: #374151; margin: 0;&quot;&gt;유지보수 비용이 곱셈으로 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;flex: 1 1 280px; background: #101010; border-radius: 12px; padding: 24px;&quot;&gt;
&lt;div style=&quot;font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; color: #34d399; margin-bottom: 8px;&quot;&gt;✓ MCP 이후&lt;/div&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 16px; color: #ffffff; margin: 0 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;표준 하나로 통일&lt;/h3&gt;
&lt;ul style=&quot;margin: 0 0 0 18px; padding: 0;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;font-size: 14px; color: #a1a1aa; margin-bottom: 8px;&quot;&gt;MCP 서버 한 번 구현 &amp;rarr; 어디서나 동작&lt;/li&gt;
&lt;li style=&quot;font-size: 14px; color: #a1a1aa; margin-bottom: 8px;&quot;&gt;새 클라이언트 추가해도 코드 그대로&lt;/li&gt;
&lt;li style=&quot;font-size: 14px; color: #a1a1aa; margin-bottom: 8px;&quot;&gt;인증&amp;middot;권한을 서버 한 곳에서 관리&lt;/li&gt;
&lt;li style=&quot;font-size: 14px; color: #a1a1aa; margin: 0;&quot;&gt;비용이 덧셈으로 완만하게 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ===== HOW ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.15; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;MCP는 어떻게 작동하는가?&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 24px;&quot; data-ke-size=&quot;size16&quot;&gt;MCP는 &lt;b&gt;호스트 ─ 클라이언트 ─ 서버&lt;/b&gt; 구조로 동작합니다. 호스트(예: 채팅 앱) 안의 클라이언트가, 각 기능을 제공하는 MCP 서버와 1:1로 연결됩니다.&lt;/p&gt;
&lt;!-- 아키텍처 다이어그램 (flex-wrap) --&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 12px; padding: 32px; background: #f8f9fa; border-radius: 12px; margin-bottom: 24px;&quot;&gt;
&lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px 20px; text-align: center; min-width: 120px; box-shadow: 0 1px 2px rgba(0,0,0,0.05);&quot;&gt;
&lt;div style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 15px; letter-spacing: -0.3px; color: #111111;&quot;&gt;Host&lt;/div&gt;
&lt;div style=&quot;font-size: 12px; color: #6b7280; margin-top: 4px;&quot;&gt;AI 앱 / 챗봇&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;color: #898989; font-size: 20px; font-weight: 600;&quot;&gt;&amp;rarr;&lt;/span&gt;
&lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px 20px; text-align: center; min-width: 120px; box-shadow: 0 1px 2px rgba(0,0,0,0.05);&quot;&gt;
&lt;div style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 15px; letter-spacing: -0.3px; color: #111111;&quot;&gt;MCP Client&lt;/div&gt;
&lt;div style=&quot;font-size: 12px; color: #6b7280; margin-top: 4px;&quot;&gt;프로토콜 연결&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;color: #898989; font-size: 20px; font-weight: 600;&quot;&gt;&amp;rarr;&lt;/span&gt;
&lt;div style=&quot;background: #ffffff; border: 1px solid #3b82f6; border-radius: 8px; padding: 16px 20px; text-align: center; min-width: 120px; box-shadow: 0 1px 2px rgba(0,0,0,0.05);&quot;&gt;
&lt;div style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 15px; letter-spacing: -0.3px; color: #111111;&quot;&gt;MCP Server&lt;/div&gt;
&lt;div style=&quot;font-size: 12px; color: #6b7280; margin-top: 4px;&quot;&gt;도구&amp;middot;데이터 노출&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;color: #898989; font-size: 20px; font-weight: 600;&quot;&gt;&amp;rarr;&lt;/span&gt;
&lt;div style=&quot;background: #ffffff; border: 1px solid #e5e7eb; border-radius: 8px; padding: 16px 20px; text-align: center; min-width: 120px; box-shadow: 0 1px 2px rgba(0,0,0,0.05);&quot;&gt;
&lt;div style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 15px; letter-spacing: -0.3px; color: #111111;&quot;&gt;실제 시스템&lt;/div&gt;
&lt;div style=&quot;font-size: 12px; color: #6b7280; margin-top: 4px;&quot;&gt;DB&amp;middot;API&amp;middot;파일&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 12px;&quot; data-ke-size=&quot;size16&quot;&gt;MCP 서버는 클라이언트에게 세 가지를 제공합니다:&lt;/p&gt;
&lt;ul style=&quot;margin: 0 0 16px 20px; padding: 0;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;Tools(도구)&lt;/b&gt; &amp;mdash; 모델이 호출해 실행하는 함수. 예: &quot;PR 생성&quot;, &quot;메일 보내기&quot;&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;Resources(리소스)&lt;/b&gt; &amp;mdash; 모델이 읽어 들이는 데이터. 예: 파일, DB 레코드, 문서&lt;/li&gt;
&lt;li style=&quot;margin: 0;&quot;&gt;&lt;b&gt;Prompts(프롬프트)&lt;/b&gt; &amp;mdash; 재사용 가능한 프롬프트 템플릿. 예: &quot;코드 리뷰 양식&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- 설정 예제 코드카드 --&gt;
&lt;h3 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 22px; letter-spacing: -0.5px; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;연결 설정은 이렇게 생겼습니다&lt;/h3&gt;
&lt;div style=&quot;background: #101010; border-radius: 12px; padding: 24px; margin: 0 0 16px; overflow-x: auto;&quot;&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 6px; margin-bottom: 12px;&quot;&gt;&lt;span style=&quot;width: 10px; height: 10px; border-radius: 9999px; background: #fb923c; display: inline-block;&quot;&gt;&lt;/span&gt; &lt;span style=&quot;width: 10px; height: 10px; border-radius: 9999px; background: #f59e0b; display: inline-block;&quot;&gt;&lt;/span&gt; &lt;span style=&quot;width: 10px; height: 10px; border-radius: 9999px; background: #34d399; display: inline-block;&quot;&gt;&lt;/span&gt; &lt;span style=&quot;color: #a1a1aa; font-family: 'JetBrains Mono',monospace; font-size: 12px; margin-left: 8px;&quot;&gt;mcp.config.json&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;json&quot; style=&quot;font-family: 'JetBrains Mono',ui-monospace,monospace; font-size: 14px; line-height: 1.7; color: #e5e7eb; white-space: pre; margin: 0; background: #101010;&quot;&gt;&lt;code&gt;{
  &quot;mcpServers&quot;: {
    &quot;github&quot;: {
      &quot;command&quot;: &quot;npx&quot;,
      &quot;args&quot;: [&quot;-y&quot;, &quot;@modelcontextprotocol/server-github&quot;],
      &quot;env&quot;: { &quot;GITHUB_TOKEN&quot;: &quot;ghp_...&quot; }
    },
    &quot;filesystem&quot;: {
      &quot;command&quot;: &quot;npx&quot;,
      &quot;args&quot;: [&quot;-y&quot;, &quot;@modelcontextprotocol/server-filesystem&quot;, &quot;./docs&quot;]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 16px;&quot; data-ke-size=&quot;size16&quot;&gt;이 한 파일만 등록하면, AI는 GitHub 저장소를 읽고 PR을 만들거나 &lt;code style=&quot;background: #f5f5f5; padding: 2px 6px; border-radius: 4px; font-family: 'JetBrains Mono',monospace; font-size: 14px;&quot;&gt;./docs&lt;/code&gt; 폴더의 문서를 참고해 답변할 수 있게 됩니다.&lt;/p&gt;
&lt;!-- ===== START ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.15; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;어디서부터 시작할까?&lt;/h2&gt;
&lt;ul style=&quot;margin: 0 0 16px 20px; padding: 0;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;1단계 &amp;mdash;&lt;/b&gt; 이미 공개된 MCP 서버(GitHub, Slack, Filesystem 등)를 클라이언트에 연결해 본다.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 8px;&quot;&gt;&lt;b&gt;2단계 &amp;mdash;&lt;/b&gt; 우리 회사 내부 API를 감싸는 나만의 MCP 서버를 SDK로 작성한다.&lt;/li&gt;
&lt;li style=&quot;margin: 0;&quot;&gt;&lt;b&gt;3단계 &amp;mdash;&lt;/b&gt; 권한&amp;middot;로깅&amp;middot;감사(audit)를 붙여 사내 표준 게이트웨이로 운영한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- 인용 --&gt;
&lt;div style=&quot;background: #f5f5f5; border-radius: 12px; padding: 24px; margin: 32px 0;&quot;&gt;
&lt;p style=&quot;font-size: 16px; color: #111111; margin: 0 0 16px;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;사내 게시판&amp;middot;메일&amp;middot;메신저를 각각 따로 붙이던 자동화 파이프라인을, MCP 서버 몇 개로 정리하니 유지보수가 훨씬 단순해졌습니다.&quot;&lt;/p&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px;&quot;&gt;&lt;span style=&quot;width: 36px; height: 36px; border-radius: 9999px; background: #fb923c; color: #fff; display: inline-flex; align-items: center; justify-content: center; font-weight: 600; font-size: 14px;&quot;&gt;N&lt;/span&gt;
&lt;div&gt;
&lt;div style=&quot;font-weight: 600; font-size: 14px; color: #111111;&quot;&gt;현업 개발자&lt;/div&gt;
&lt;div style=&quot;font-size: 13px; color: #6b7280;&quot;&gt;사내 자동화 담당&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ===== 정리 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.15; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 16px;&quot; data-ke-size=&quot;size16&quot;&gt;MCP는 새로운 AI 모델이 아니라, &lt;b&gt;AI와 세상을 잇는 '배선 규격'&lt;/b&gt;입니다. 모델이 아무리 똑똑해도 외부와 단절되어 있으면 쓸모가 제한됩니다. MCP는 그 단절을 표준화된 방식으로 메워, AI를 '대화 상대'에서 '실제로 일하는 동료'로 끌어올립니다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 32px;&quot; data-ke-size=&quot;size16&quot;&gt;M&amp;times;N의 혼돈을 M+N으로 바꾸는 것 &amp;mdash; 그것이 MCP를 써야 하는 가장 단순하고 강력한 이유입니다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>기타</category>
      <category>Ai</category>
      <category>MCP</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/49</guid>
      <comments>https://range31.tistory.com/49#entry49comment</comments>
      <pubDate>Tue, 23 Jun 2026 22:21:25 +0900</pubDate>
    </item>
    <item>
      <title>2026 6.3 전국지방동시선거</title>
      <link>https://range31.tistory.com/48</link>
      <description>&lt;div style=&quot;max-width: 760px; margin: 0 auto; font-family: 'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; color: #374151; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;!-- ===== HERO ===== --&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 32px; align-items: center; padding: 8px 0 40px;&quot;&gt;
&lt;div style=&quot;flex: 1 1 300px; min-width: 280px;&quot;&gt;&lt;span style=&quot;display: inline-block; font-size: 13px; font-weight: 500; border-radius: 9999px; padding: 4px 12px; background: #f5f5f5; color: #111111; margin-bottom: 18px;&quot;&gt; ️ 시사 이슈&lt;/span&gt;
&lt;h1 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 42px; line-height: 1.1; letter-spacing: -1.5px; color: #111111; margin: 0;&quot;&gt;6&amp;middot;3 투표용지&lt;br /&gt;부족 사태&lt;/h1&gt;
&lt;p style=&quot;font-size: 18px; color: #6b7280; line-height: 1.6; margin: 18px 0 0;&quot; data-ke-size=&quot;size16&quot;&gt;투표소에서 용지가 동났다. 청년들이 올림픽공원으로 모였고, 선관위 수장은 사의를 밝혔다. 무슨 일이 있었고, 어디로 가고 있나.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- product-mockup-card: 사태 타임라인 위젯 --&gt;
&lt;div style=&quot;flex: 1 1 280px; min-width: 280px; background: #ffffff; border: 1px solid #e5e7eb; border-radius: 16px; padding: 24px; box-shadow: 0 4px 12px rgba(0,0,0,0.08);&quot;&gt;
&lt;div style=&quot;display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;font-weight: 600; font-size: 16px; color: #111111;&quot;&gt;사태 일지&lt;/span&gt; &lt;span style=&quot;font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;2026.6&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px; margin-bottom: 10px;&quot;&gt;&lt;span style=&quot;flex: 0 0 44px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;6.3&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #fca5a5; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #7f1d1d; font-weight: 600;&quot;&gt;오후 1시, 용지 동남 ⚠️&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px; margin-bottom: 10px;&quot;&gt;&lt;span style=&quot;flex: 0 0 44px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;6.4&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #f5f5f5; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #6b7280;&quot;&gt;잠실 투표소 농성 시작&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px; margin-bottom: 10px;&quot;&gt;&lt;span style=&quot;flex: 0 0 44px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;6.5&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #f5f5f5; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #6b7280;&quot;&gt;올림픽공원서 개표&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px;&quot;&gt;&lt;span style=&quot;flex: 0 0 44px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;6.6~&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #111111; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #ffffff; font-weight: 600;&quot;&gt;2030 집결&amp;middot;국정조사 합의&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #f3f4f6; margin: 0 0 40px;&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;!-- 대표 이미지 --&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;투표소.jpeg&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HgSWP/dJMcaaeFgCW/vVDUVkQq92qKnqayyTSpi0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HgSWP/dJMcaaeFgCW/vVDUVkQq92qKnqayyTSpi0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HgSWP/dJMcaaeFgCW/vVDUVkQq92qKnqayyTSpi0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHgSWP%2FdJMcaaeFgCW%2FvVDUVkQq92qKnqayyTSpi0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;658&quot; height=&quot;394&quot; data-filename=&quot;투표소.jpeg&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;2026년 6월 3일, 제9회 전국동시지방선거 당일. 서울 송파구의 투표소들에서 오후 1시 무렵부터 &lt;b&gt;투표용지가 동나는&lt;/b&gt; 초유의 일이 벌어졌다. 한 표를 행사하러 온 유권자들이 용지가 없어 발길을 돌리거나 기약 없이 대기해야 했다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;행정 착오로 끝날 수도 있던 일은, 그 직후 벌어진 일들 때문에 전혀 다른 국면으로 번졌다. 무슨 일이 있었는지, 왜 청년들이 거리로 나왔는지, 정부는 어떻게 대응했는지 차례로 짚어본다.&lt;/p&gt;
&lt;!-- ===== 섹션 1 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;무슨 일이 벌어졌나&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;선관위 발표 기준 용지가 부족했던 곳은 &lt;b&gt;14개 투표소&lt;/b&gt;(송파 12&amp;middot;강남 1&amp;middot;광진 1)였지만, 추가 조사에서 비상용 투표지를 끌어다 쓴 투표소가 &lt;b&gt;91곳&lt;/b&gt;에 달했다고 보도됐다. 진앙지는 잠실7동 제2투표소였다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;원인 &amp;mdash; '아껴 찍은' 투표용지&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;보도를 종합하면, 선관위가 투표용지 인쇄 물량을 평소보다 &lt;b&gt;비정상적으로 적게&lt;/b&gt; 잡은 것이 직접 원인으로 지목된다. 인쇄 비율을 유권자 대비 60%에서 50% 수준으로 낮췄다는 것이다. 배경으로는 ▲사전투표율 상승으로 당일 수요를 낮게 본 점, ▲과거 선거 뒤 잔여 용지 유출로 불거진 &lt;b&gt;부정선거 음모론을 의식해&lt;/b&gt; 여분을 줄인 점이 함께 거론된다.&lt;/p&gt;
&lt;div style=&quot;border-left: 3px solid #111; padding: 4px 0 4px 18px; margin: 24px 0; color: #374151;&quot;&gt;
&lt;p style=&quot;margin: 0; font-size: 17px;&quot; data-ke-size=&quot;size16&quot;&gt;음모론을 잠재우려 여분을 줄였는데, 그 결정이 오히려 &lt;b&gt;더 큰 불신을 부른&lt;/b&gt; 역설. 사태의 아이러니가 여기에 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;개표 국면도 매끄럽지 않았다. 출구조사&amp;middot;초기 개표에서 특정 후보의 열세가 점쳐지는 가운데, 시위대가 잠실 투표소에 모이자 선관위는 &lt;b&gt;6월 5일 투표함을 옮겨 올림픽공원 핸드볼경기장(개표소)에서 개표&lt;/b&gt;를 진행했다. 이후 일부 지역에서 득표수가 공교롭게 맞아떨어진다는 의혹까지 제기되며 재선거 주장에 불이 붙었다.&lt;/p&gt;
&lt;!-- ===== 섹션 2 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;2030 청년들은 왜 올림픽공원에 모이는가&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;이번 사태에서 가장 눈에 띈 장면은 &lt;b&gt;20&amp;middot;30대의 자발적 집결&lt;/b&gt;이었다. 처음엔 잠실7동 제2투표소 앞에서 2~3일간 농성이 이어졌고, 경찰이 투표함을 옮기는 과정에서 강제 해산되자 시위대는 개표소가 차려진 올림픽공원으로 자리를 옮겼다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;'진영'이 아니라 '공정'&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;보도에 따르면 청년 참가자들은 이를 부정선거 음모나 진영 싸움이 아니라 &lt;b&gt;&quot;헌법상 참정권이 국가 기관에 침해당한 사건&quot;&lt;/b&gt;으로 규정했다. 요구는 단순했다 &amp;mdash; 재선거 실시와 책임자 처벌. 특정 정당이 아니라 '제도가 한 표를 못 지켰다'는 데 분노의 초점이 있었다는 분석이다.&lt;/p&gt;
&lt;div style=&quot;background: #fafafa; border: 1px solid #f0f0f0; border-radius: 12px; padding: 20px 24px; margin: 8px 0 18px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지도부 없는 집회.&lt;/b&gt; 특정 단체나 리더 없이 SNS로 정보를 공유하고, 교통정리&amp;middot;질서유지도 참가자들이 자체적으로 맡았다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대학가로 확산.&lt;/b&gt; 80여 개 대학에서 자발적 대자보와 시국선언이 이어졌다고 보도됐다.&lt;/p&gt;
&lt;p style=&quot;margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;현장 고수.&lt;/b&gt; &quot;청와대 인근으로 집회를 옮기라&quot;는 정치권 제안을 거부하고 &quot;본질인 잠실 현장을 지키겠다&quot;는 입장을 고수했다.&lt;/p&gt;
&lt;/div&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;외신도 주목, 그러나 갈라치기 우려도&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;로이터통신은 6월 5~6일 올림픽공원에 &lt;b&gt;1만~3만여 명&lt;/b&gt;이 모인 재선거 요구 시위를 연속 보도하며 '한국의 민주주의 리스크'로 조명했다. 다만 주말엔 2030 비중이 높았던 반면 평일로 갈수록 고령층 비중이 늘고 기존 극우 집회의 구호&amp;middot;상징이 현장에 등장하면서, &lt;b&gt;&quot;청년들이 진영 프레임에 밀려난다&quot;&lt;/b&gt;는 우려도 함께 제기됐다(세계일보 심층기획 등).&lt;/p&gt;
&lt;!-- ===== 섹션 3 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;정부&amp;middot;선관위 대응&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;선관위는 긴급위원회 논의 끝에 &lt;b&gt;&quot;투표용지 부족은 공직선거법상 선거 연기나 재선거 사유에 해당하지 않는다&quot;&lt;/b&gt;는 입장을 냈다. 법리적 선은 그었지만, 책임 문제는 별개였다.&lt;/p&gt;
&lt;div style=&quot;background: #fafafa; border: 1px solid #f0f0f0; border-radius: 12px; padding: 20px 24px; margin: 8px 0 18px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수장 사의.&lt;/b&gt; 사태 책임을 지고 중앙선관위 위원장과 사무총장이 사의를 표명했다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;진상조사.&lt;/b&gt; 선관위는 자체 진상조사위원회 구성 방침을 밝혔고, 경찰 수사도 별도로 진행된다.&lt;/p&gt;
&lt;p style=&quot;margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;국정조사 합의.&lt;/b&gt; 더불어민주당&amp;middot;국민의힘 &lt;b&gt;여야 모두&lt;/b&gt;가 국회 차원의 국정조사 실시에 의견을 같이했다.&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;즉, '재선거는 어렵다'는 선관위 입장과 '진상은 끝까지 규명한다'는 정치권&amp;middot;시민의 요구가 맞물린 상태다. 책임 규명(사의&amp;middot;수사&amp;middot;국정조사)은 빠르게 가동됐지만, &lt;b&gt;결과의 정당성(재선거 여부)&lt;/b&gt;을 둘러싼 핵심 쟁점은 아직 매듭지어지지 않았다.&lt;/p&gt;
&lt;!-- ===== 섹션 4 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;향후 전망&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;앞으로의 관전 포인트는 세 갈래로 정리된다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;1. 국정조사&amp;middot;특검, 어디까지&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;여야가 합의한 국정조사가 출발점이다. 여기서 인쇄 물량 결정 경위와 개표 과정의 적절성이 어디까지 규명되느냐에 따라, 특검 수사 요구로 확대될지가 갈린다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;2. 재선거 vs 결과 유지&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;일부 지역의 득표수 일치 의혹과 참정권 침해 주장이 재선거 요구의 근거다. 반면 선관위는 법정 사유가 아니라는 입장이어서, 결국 &lt;b&gt;선거소송 등 사법 절차&lt;/b&gt;로 넘어갈 가능성이 크다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;3. 선관위 개혁의 강도&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;땜질 처방으론 안 된다&quot;며 &lt;b&gt;선관위 시스템 전면 재설계&amp;middot;해체 수준 개혁&lt;/b&gt;을 요구하는 목소리(뉴데일리 등)가 나온다. 신뢰 회복을 위한 제도 개편이 이번 사태의 최종 청구서가 될 전망이다.&lt;/p&gt;
&lt;!-- ===== 맺음말 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;결국 신뢰의 문제&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;투표용지 한 장의 부족은 행정의 문제였지만, 그것이 키운 것은 &lt;b&gt;제도에 대한 신뢰의 위기&lt;/b&gt;였다. 음모론을 피하려던 결정이 더 큰 불신을 부르고, 그 불신이 청년들을 광장으로 불러냈다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;2030이 외친 것이 '진영'이 아니라 '공정'이었다는 점은, 이 사태를 어떻게 마무리해야 하는지에 대한 답을 이미 가리키고 있는지도 모른다. 책임 규명과 제도 신뢰 회복, 두 가지가 함께 가야 비로소 사태가 닫힌다.&lt;/p&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #f3f4f6; margin: 40px 0;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;font-size: 13px; color: #898989; margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 2026년 6월 현재 진행 중인 사안에 대한 언론 보도를 정리한 것입니다. 일부 수치&amp;middot;정황(추가 용지 사용 투표소 수, 득표수 일치 의혹, 인쇄 물량 비율 등)은 조사 진행에 따라 달라질 수 있으며, 재선거 여부&amp;middot;부정 여부는 확정된 사실이 아니라 쟁점 단계입니다. 참고: 나무위키&amp;middot;위키백과 해당 문서, YTN&amp;middot;문화일보&amp;middot;세계일보&amp;middot;일요신문&amp;middot;펜앤마이크&amp;middot;PPSS&amp;middot;VOA&amp;middot;뉴데일리 보도.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>기타</category>
      <category>2030</category>
      <category>선관위</category>
      <category>올림픽공원</category>
      <category>투표용지</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/48</guid>
      <comments>https://range31.tistory.com/48#entry48comment</comments>
      <pubDate>Thu, 18 Jun 2026 23:10:01 +0900</pubDate>
    </item>
    <item>
      <title>6.25 미스터리</title>
      <link>https://range31.tistory.com/47</link>
      <description>&lt;div style=&quot;max-width: 760px; margin: 0 auto; font-family: 'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; color: #374151; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;!-- ===== HERO ===== --&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 32px; align-items: center; padding: 8px 0 40px;&quot;&gt;
&lt;div style=&quot;flex: 1 1 300px; min-width: 280px;&quot;&gt;&lt;span style=&quot;display: inline-block; font-size: 13px; font-weight: 500; border-radius: 9999px; padding: 4px 12px; background: #f5f5f5; color: #111111; margin-bottom: 18px;&quot;&gt; ️ 역사 미스터리&lt;/span&gt;
&lt;h1 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 42px; line-height: 1.1; letter-spacing: -1.5px; color: #111111; margin: 0;&quot;&gt;6&amp;middot;25, 아직&lt;br /&gt;풀리지 않은 네 가지&lt;/h1&gt;
&lt;p style=&quot;font-size: 18px; color: #6b7280; line-height: 1.6; margin: 18px 0 0;&quot; data-ke-size=&quot;size16&quot;&gt;스탈린의 변심, 중국군 30만의 그림자, 사흘 만의 서울 함락, 그리고 하필 전날 풀린 휴가. 70년이 지나도 다시 묻게 되는 질문들.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- product-mockup-card: 1950년 타임라인 위젯 --&gt;
&lt;div style=&quot;flex: 1 1 280px; min-width: 280px; background: #ffffff; border: 1px solid #e5e7eb; border-radius: 16px; padding: 24px; box-shadow: 0 4px 12px rgba(0,0,0,0.08);&quot;&gt;
&lt;div style=&quot;display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;font-weight: 600; font-size: 16px; color: #111111;&quot;&gt;1950년, 그해의 카운트다운&lt;/span&gt; &lt;span style=&quot;font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;1월&amp;ndash;6월&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px; margin-bottom: 10px;&quot;&gt;&lt;span style=&quot;flex: 0 0 52px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;1.12&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #f5f5f5; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #6b7280;&quot;&gt;애치슨 라인 발표&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px; margin-bottom: 10px;&quot;&gt;&lt;span style=&quot;flex: 0 0 52px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;4월&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #f5f5f5; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #6b7280;&quot;&gt;스탈린, 남침 최종 승인&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px; margin-bottom: 10px;&quot;&gt;&lt;span style=&quot;flex: 0 0 52px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;6.24&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #fca5a5; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #7f1d1d; font-weight: 600;&quot;&gt;비상경계 해제&amp;middot;휴가 ⚠️&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px;&quot;&gt;&lt;span style=&quot;flex: 0 0 52px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;6.25&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #111111; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #ffffff; font-weight: 600;&quot;&gt;새벽 4시, 남침 시작&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #f3f4f6; margin: 0 0 40px;&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;!-- 대표 이미지 --&gt;&lt;!-- ===== 인트로 ===== --&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.26 image.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chFngL/dJMcacKlewy/xzXIKfPhd6gqwajlHpS4Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chFngL/dJMcacKlewy/xzXIKfPhd6gqwajlHpS4Vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chFngL/dJMcacKlewy/xzXIKfPhd6gqwajlHpS4Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchFngL%2FdJMcacKlewy%2FxzXIKfPhd6gqwajlHpS4Vk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;6.26 image.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;전쟁의 큰 줄거리는 누구나 안다. 1950년 6월 25일 새벽 북한이 38선 전역에서 남침했고, 사흘 만에 서울이 떨어졌으며, 인천상륙으로 전세가 뒤집혔다가 중국군 개입으로 다시 밀렸다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 결과를 알고 나서 거꾸로 들여다보면, &lt;b&gt;&quot;왜 하필 그때, 왜 하필 그렇게?&quot;&lt;/b&gt; 라는 질문이 네 군데에서 걸린다. 우연이라기엔 공교롭고, 음모라기엔 증거가 애매한 지점들이다. 하나씩 풀어보자.&lt;/p&gt;
&lt;!-- ===== 미스터리 1 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;① 스탈린은 왜 남침을 허가했나&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;의외의 사실부터. 스탈린은 &lt;b&gt;계속 반대하던 쪽&lt;/b&gt;이었다. 김일성은 1949년 내내 &quot;내려가게 해달라&quot;고 졸랐지만, 스탈린은 미국과 정면충돌을 우려해 번번이 제동을 걸었다. 그런데 1950년 초, 입장이 뒤집힌다. 무엇이 바뀌었을까.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;바뀐 것은 '판세'였다&lt;/h3&gt;
&lt;div style=&quot;background: #fafafa; border: 1px solid #f0f0f0; border-radius: 12px; padding: 20px 24px; margin: 8px 0 18px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1949년 8월 &amp;mdash; 소련 핵실험 성공.&lt;/b&gt; 미국의 원폭 독점이 깨졌다. 전면전 리스크 계산이 달라졌다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1949년 10월 &amp;mdash; 중국 공산화.&lt;/b&gt; 마오쩌둥의 승리로 한반도 뒤에 든든한 '대리 보증인'이 생겼다.&lt;/p&gt;
&lt;p style=&quot;margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1950년 1월 &amp;mdash; 애치슨 라인.&lt;/b&gt; 미 국무장관 애치슨이 극동 방위선에서 한국과 대만을 &lt;b&gt;뺀&lt;/b&gt; 선언을 했다. 스탈린은 이걸 &quot;미국은 안 들어온다&quot;는 신호로 읽었다.&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;여기에 김일성의 장담이 더해졌다. &quot;남쪽에서 민중 봉기가 일어나 &lt;b&gt;몇 주면 끝난다&lt;/b&gt;&quot;는 속전속결 시나리오였다. 짧게 끝나면 미국이 개입할 틈도 없다 &amp;mdash; 스탈린의 손익계산서가 여기서 '승인' 쪽으로 기울었다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;다만 스탈린은 영리하게 빠져나갔다. 최종 결정권을 마오쩌둥에게 떠넘긴 것이다. &quot;구체적인 건 마오와 상의하라.&quot; 소련은 무기와 계획만 대고, &lt;b&gt;피와 책임은 중국&amp;middot;북한이 지는&lt;/b&gt; 구도. 미국과 중국을 아시아에 묶어두면 유럽에서 소련의 운신 폭이 넓어진다는 큰 그림까지 깔려 있었다.&lt;/p&gt;
&lt;div style=&quot;border-left: 3px solid #111; padding: 4px 0 4px 18px; margin: 24px 0; color: #374151;&quot;&gt;
&lt;p style=&quot;margin: 0; font-size: 17px;&quot; data-ke-size=&quot;size16&quot;&gt;핵심은 &lt;b&gt;애치슨 라인이라는 '오독'&lt;/b&gt;이다. 미국은 선을 그었을 뿐이지만, 스탈린은 그 선을 '초대장'으로 읽었다. 오판 하나가 3년 전쟁의 방아쇠가 됐다.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- ===== 미스터리 2 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;② 중국군 개입을 왜 예측하지 못했나&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;인천상륙(9월) 이후 전세는 완전히 뒤집혔다. 국군과 유엔군은 38선을 넘어 압록강을 향해 북진했다. 맥아더는 &quot;&lt;b&gt;크리스마스 전에는 집에 간다&lt;/b&gt;&quot;고 했다. 그런데 11월 말, 압록강 너머에서 30만 중국군이 쏟아져 내려왔다. 미국은 정말 몰랐을까?&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;경고는 분명히 있었다&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;중국은 여러 차례 경고했다. 가장 유명한 건 저우언라이가 베이징 주재 인도 대사 파니카를 통해 보낸 메시지 &amp;mdash; &quot;유엔군이 38선을 넘으면 중국은 가만있지 않는다.&quot; 하지만 워싱턴은 이를 &lt;b&gt;엄포(블러핑)&lt;/b&gt;로 치부했다. 중국 같은 신생국이 세계 최강 미국에 덤빌 리 없다는 전제였다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;정보 실패 + 맥아더의 자만&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.25image2.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uzAwl/dJMcagy8tyd/7mNIX0KXZ6xK4x8EZXu7pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uzAwl/dJMcagy8tyd/7mNIX0KXZ6xK4x8EZXu7pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uzAwl/dJMcagy8tyd/7mNIX0KXZ6xK4x8EZXu7pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuzAwl%2FdJMcagy8tyd%2F7mNIX0KXZ6xK4x8EZXu7pk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;6.25image2.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;중국군은 미군 정찰을 따돌리는 데 능했다. &lt;b&gt;야간에만 이동&lt;/b&gt;하고 낮에는 산속에 완벽히 은폐했다. 항공정찰은 텅 빈 산을 찍었다. 게다가 웨이크섬 회담에서 맥아더는 트루먼에게 &quot;중국 개입 가능성은 거의 없고, 들어와도 대량 살상으로 끝난다&quot;고 호언했다. 사령관의 확신이 곧 정보 판단을 압도해버린 것이다.&lt;/p&gt;
&lt;div style=&quot;border-left: 3px solid #111; padding: 4px 0 4px 18px; margin: 24px 0; color: #374151;&quot;&gt;
&lt;p style=&quot;margin: 0; font-size: 17px;&quot; data-ke-size=&quot;size16&quot;&gt;이건 정보가 없어서 생긴 실패가 아니다. &lt;b&gt;&quot;믿고 싶은 결론&quot;이 정보를 걸러낸&lt;/b&gt; 실패였다. 전쟁사에서 반복되는 가장 비싼 종류의 오류다.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- ===== 미스터리 3 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;③ 서울 함락이 왜 그렇게 빨랐나&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;6월 25일 새벽 침공, 6월 28일 서울 함락. &lt;b&gt;단 사흘&lt;/b&gt;이었다. 수도가 이렇게 빨리 무너진 데는 겹겹의 이유가 있다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;1. 전차 242 대 0&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;북한군은 소련제 &lt;b&gt;T-34 전차 약 242대&lt;/b&gt;를 앞세웠다. 국군은 전차가 &lt;b&gt;단 한 대도&lt;/b&gt; 없었고, T-34를 멈출 대전차 무기도 빈약했다. 보병의 용기로 막을 수 있는 격차가 아니었다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;2. 일요일 새벽의 기습&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;하필 일요일 새벽 4시. 뒤에서 다룰 휴가&amp;middot;외출 문제와 맞물려 전방 부대의 상당수가 자리에 없었다. 첫 타격의 충격이 그만큼 컸다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;3. 한강 인도교 조기 폭파&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;6월 28일 새벽 2시 30분, 국군은 한강 인도교를 폭파했다. 적의 도하를 늦추려는 결정이었지만, 다리 위엔 피란민과 후퇴 병력이 가득했다. 결과적으로 &lt;b&gt;국군 주력이 한강 이북에 고립&lt;/b&gt;됐고, 방어선을 재정비할 골든타임을 스스로 끊어버렸다. 너무 일렀던 폭파는 지금도 논쟁거리다.&lt;/p&gt;
&lt;!-- ===== 미스터리 4 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;④ 왜 하필 전날 휴가가 풀렸나&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;가장 공교로운 대목. 침공 바로 전날인 &lt;b&gt;6월 24일, 군은 비상경계령을 해제&lt;/b&gt;했다. 장병 다수가 외출&amp;middot;휴가를 나갔고, 그날 밤 서울에선 육군 장교클럽 개관 기념 연회가 열려 지휘관들이 늦게까지 자리를 지켰다. 다음 날 새벽, 전쟁이 터졌다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;음모가 아니라 '경계 피로'였다&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;내통설까지 도는 대목이지만, 정황은 오히려 만성적 방심을 가리킨다.&lt;/p&gt;
&lt;div style=&quot;background: #fafafa; border: 1px solid #f0f0f0; border-radius: 12px; padding: 20px 24px; margin: 8px 0 18px;&quot;&gt;
&lt;p style=&quot;margin: 0 0 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;농번기 휴가.&lt;/b&gt; 모내기철이라 영농 지원을 위해 장병들을 대거 내보내는 게 관행이었다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 10px;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;반복된 38선 충돌.&lt;/b&gt; 1949년부터 국지 도발이 워낙 잦아, &quot;또 그러다 말겠지&quot;라는 둔감함이 쌓여 있었다.&lt;/p&gt;
&lt;p style=&quot;margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;묵살된 경고.&lt;/b&gt; 남침 징후 첩보가 올라왔지만 &quot;흔한 도발&quot;로 분류돼 경계 강화로 이어지지 못했다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;border-left: 3px solid #111; padding: 4px 0 4px 18px; margin: 24px 0; color: #374151;&quot;&gt;
&lt;p style=&quot;margin: 0; font-size: 17px;&quot; data-ke-size=&quot;size16&quot;&gt;늑대가 온다는 외침을 너무 자주 들으면, 진짜 늑대가 와도 문을 잠그지 않는다. 6월 24일의 휴가는 &lt;b&gt;'양치기 소년 효과'가 국가 단위로 발생한&lt;/b&gt; 사례에 가깝다.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- ===== 맺음말 ===== --&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;네 개의 의문, 하나의 공통점&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;스탈린의 승인도, 중국군 오판도, 서울의 조기 함락도, 전날의 휴가도 &amp;mdash; 결국 &lt;b&gt;'설마'라는 한 단어&lt;/b&gt;로 꿰인다. 설마 미국이 들어오겠나, 설마 중국이 덤비겠나, 설마 진짜 쳐들어오겠나.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;미스터리의 정체는 거창한 음모가 아니라, 사람과 조직이 &lt;b&gt;믿고 싶은 것을 믿어버린&lt;/b&gt; 판단의 누적이었다. 그래서 70년이 지난 지금도 이 질문들은 군사사를 넘어, 위기 앞에서 우리가 정보를 어떻게 다루는가에 대한 거울로 남아 있다.&lt;/p&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #f3f4f6; margin: 40px 0;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;font-size: 13px; color: #898989; margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 공개된 역사 연구&amp;middot;기록을 바탕으로 한 정리이며, 일부 해석(한강교 폭파 시점, 스탈린의 의도 등)은 학계에서도 견해가 갈리는 논쟁 영역입니다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>기타</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/47</guid>
      <comments>https://range31.tistory.com/47#entry47comment</comments>
      <pubDate>Thu, 18 Jun 2026 22:38:25 +0900</pubDate>
    </item>
    <item>
      <title>배드민턴 동호회 현실...</title>
      <link>https://range31.tistory.com/46</link>
      <description>&lt;div style=&quot;max-width: 760px; margin: 0 auto; font-family: 'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif; color: #374151; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;!-- ===== HERO ===== --&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; gap: 32px; align-items: center; padding: 8px 0 40px;&quot;&gt;
&lt;div style=&quot;flex: 1 1 300px; min-width: 280px;&quot;&gt;&lt;span style=&quot;display: inline-block; font-size: 13px; font-weight: 500; border-radius: 9999px; padding: 4px 12px; background: #f5f5f5; color: #111111; margin-bottom: 18px;&quot;&gt;  동호회 적응기&lt;/span&gt;
&lt;h1 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 42px; line-height: 1.1; letter-spacing: -1.5px; color: #111111; margin: 0;&quot;&gt;배드민턴 동호회&lt;br /&gt;신입의 현실&lt;/h1&gt;
&lt;p style=&quot;font-size: 18px; color: #6b7280; line-height: 1.6; margin: 18px 0 0;&quot; data-ke-size=&quot;size16&quot;&gt;운동하러 갔다가 운동은 30분, 대기는 2시간. 내향인 신입이 2시간을 벽 보고 서 있다가 찾아낸 '가는 타이밍'에 대하여.&lt;/p&gt;
&lt;/div&gt;
&lt;!-- product-mockup-card: 운동 타임라인 위젯 --&gt;
&lt;div style=&quot;flex: 1 1 280px; min-width: 280px; background: #ffffff; border: 1px solid #e5e7eb; border-radius: 16px; padding: 24px; box-shadow: 0 4px 12px rgba(0,0,0,0.08);&quot;&gt;
&lt;div style=&quot;display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;font-weight: 600; font-size: 16px; color: #111111;&quot;&gt;오늘의 운동 (3시간)&lt;/span&gt; &lt;span style=&quot;font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;PM 7:00&amp;ndash;10:00&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px; margin-bottom: 10px;&quot;&gt;&lt;span style=&quot;flex: 0 0 48px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;7:00&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #f5f5f5; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #6b7280;&quot;&gt;레슨 30분&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px; margin-bottom: 10px;&quot;&gt;&lt;span style=&quot;flex: 0 0 48px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;7:30&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #f5f5f5; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #898989;&quot;&gt;대기&amp;hellip;  &lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px; margin-bottom: 10px;&quot;&gt;&lt;span style=&quot;flex: 0 0 48px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;8:30&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #34d399; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #064e3b; font-weight: 600;&quot;&gt;⭐ 지금이 도착 타이밍&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; align-items: center; gap: 12px;&quot;&gt;&lt;span style=&quot;flex: 0 0 48px; font-size: 13px; font-weight: 500; color: #898989;&quot;&gt;9:00&lt;/span&gt;
&lt;div style=&quot;flex: 1; height: 36px; border-radius: 8px; background: #111111; display: flex; align-items: center; padding: 0 12px; font-size: 13px; color: #ffffff; font-weight: 600;&quot;&gt;게임 ✓&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- ===== 본문 ===== --&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;glen-carrie-imHF66HA3VY-unsplash.jpg&quot; data-origin-width=&quot;5472&quot; data-origin-height=&quot;3648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nomrM/dJMb99NsZ0H/eDxurVRxKgqfx5E8Kc8AkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nomrM/dJMb99NsZ0H/eDxurVRxKgqfx5E8Kc8AkK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nomrM/dJMb99NsZ0H/eDxurVRxKgqfx5E8Kc8AkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnomrM%2FdJMb99NsZ0H%2FeDxurVRxKgqfx5E8Kc8AkK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;5472&quot; height=&quot;3648&quot; data-filename=&quot;glen-carrie-imHF66HA3VY-unsplash.jpg&quot; data-origin-width=&quot;5472&quot; data-origin-height=&quot;3648&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;설레는 마음으로 가입한 동호회&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;운동도 하고 사람도 사귈 겸 동네 배드민턴 동호회에 가입했다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;운영 시간은 &lt;b&gt;3시간&lt;/b&gt;. 그중 &lt;b&gt;레슨 30분&lt;/b&gt;을 빼면 두 시간 반이나 마음껏 칠 수 있다는 계산이었다. 라켓도 새로 사고, 운동화도 챙기고, 나름 단단히 준비해서 &lt;b&gt;제 시간에 딱 맞춰&lt;/b&gt; 체육관 문을 열었다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;그런데&amp;hellip; 그게 실수였다.&lt;/p&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 48px 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;신입이 적응하기 어려운 진짜 이유&lt;/h2&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;1. 배드민턴은 '4명'이 모여야 시작되는 운동&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;muktasim-azlan-tkVwhG6yqKo-unsplash.jpg&quot; data-origin-width=&quot;3726&quot; data-origin-height=&quot;5264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vHZwk/dJMcaftqfPG/1lAKRzDQWOBCht6LSGVFu0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vHZwk/dJMcaftqfPG/1lAKRzDQWOBCht6LSGVFu0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vHZwk/dJMcaftqfPG/1lAKRzDQWOBCht6LSGVFu0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvHZwk%2FdJMcaftqfPG%2F1lAKRzDQWOBCht6LSGVFu0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3726&quot; height=&quot;5264&quot; data-filename=&quot;muktasim-azlan-tkVwhG6yqKo-unsplash.jpg&quot; data-origin-width=&quot;3726&quot; data-origin-height=&quot;5264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;테니스처럼 1:1이면 차라리 쉬웠을 거다. 배드민턴 복식은 &lt;b&gt;무조건 4명&lt;/b&gt;이 맞아야 게임이 굴러간다. 한 명이 비면 게임이 안 된다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;문제는, 이미 &lt;b&gt;친한 사람들끼리 4명 파티가 다 짜여 있다&lt;/b&gt;는 것. 신입 한 명이 그 사이를 비집고 들어갈 틈이 없다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;2. 일찍 갈수록 코트는 만석&lt;/h3&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;제 시간에 가면 부지런해 보이지만, 현실은 정반대였다. 시작 직후엔 모든 코트가 꽉 차 있다. &lt;b&gt;&quot;4명 중 1명이 부족한 상황&quot;&lt;/b&gt;이 아예 생기지 않으니, 나를 필요로 하는 순간도 없다. 그냥&amp;hellip; 벽 보고 서 있게 된다.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;3. 운영진이 있어도 파티를 짜주진 않는다&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;waiting alone.png&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;1122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvL1zd/dJMcabEycuR/0SHy7rQyrJ9alWy7NOlHa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvL1zd/dJMcabEycuR/0SHy7rQyrJ9alWy7NOlHa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvL1zd/dJMcabEycuR/0SHy7rQyrJ9alWy7NOlHa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvL1zd%2FdJMcabEycuR%2F0SHy7rQyrJ9alWy7NOlHa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1402&quot; height=&quot;1122&quot; data-filename=&quot;waiting alone.png&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;1122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;운영진은 분명히 있었다. 하지만 신입을 챙겨 게임에 넣어주는 시스템은 없었다. 가만히 있으면 아무도 먼저 말 걸지 않는다. 그리고 여기서 진짜 벽이 하나 더 있었다.&lt;/p&gt;
&lt;div style=&quot;margin: 24px 0; padding: 20px 24px; background: #101010; color: #ffffff; border-radius: 12px; font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 18px; line-height: 1.5; letter-spacing: -0.3px;&quot;&gt;&quot;나는 내향적인 사람이라, '저 좀 끼워주세요'라는 그 한마디가 세상에서 제일 어려웠다.&quot;&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;라켓을 들고 코트 옆에 서 있어도, &quot;한 게임 같이 하실래요?&quot;라는 말을 내가 먼저 꺼내는 건 너무 큰 용기가 필요했다. 그렇게 시간만 흘렀다.&lt;/p&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #f3f4f6; margin: 48px 0;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;2시간이 지나고&amp;hellip; 겨우 한 게임&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;결국 &lt;b&gt;2시간이 지나서야 딱 한 번&lt;/b&gt; 게임을 했다. 누군가 한 명이 빠지면서 인원이 비었고, 그제서야 &quot;한 분 부족한데 들어오실래요?&quot;라는 말을 들을 수 있었다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;운동하러 와서 운동은 30분, 게임은 한 판. 집에 가는 길에 생각했다.&lt;/p&gt;
&lt;div style=&quot;margin: 24px 0; padding: 24px; background: #f5f5f5; border-radius: 12px; font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 22px; line-height: 1.4; letter-spacing: -0.4px; color: #111111;&quot;&gt;&quot;그럼 대체 몇 시에 가야 하는 거지?&quot;&lt;/div&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #f3f4f6; margin: 48px 0;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;'제 시간'이 아니라 '사람이 빠지는 시간'&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;며칠 고민하고 직접 겪어보니 핵심 원리는 하나였다.&lt;/p&gt;
&lt;div style=&quot;margin: 24px 0; padding: 24px; background: #f5f5f5; border-radius: 12px; font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 22px; line-height: 1.4; letter-spacing: -0.4px; color: #111111;&quot;&gt;  &quot;내가 필요해지는 순간&quot;에 가라&lt;/div&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;3시간 운동이면 사람들은 보통 &lt;b&gt;1.5~2시간이 지나면 하나둘 빠지기 시작&lt;/b&gt;한다. 인원이 줄어들면 4명을 채우기가 빡빡해지고, 그때부터는 &lt;b&gt;남은 사람들이 오히려 나를 찾는다&lt;/b&gt;. 4명이 안 되면 본인들도 게임을 못 하니까.&lt;/p&gt;
&lt;h3 style=&quot;font-weight: 600; font-size: 18px; line-height: 1.4; color: #111111; margin: 32px 0 12px;&quot; data-ke-size=&quot;size23&quot;&gt;⏰ 타이밍별 정리&lt;/h3&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin: 8px 0 24px; border: 1px solid #e5e7eb; border-radius: 12px; overflow: hidden; font-size: 15px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background: #f5f5f5;&quot;&gt;
&lt;th style=&quot;text-align: left; font-weight: 600; font-size: 14px; color: #111; padding: 14px 16px;&quot;&gt;타이밍&lt;/th&gt;
&lt;th style=&quot;text-align: left; font-weight: 600; font-size: 14px; color: #111; padding: 14px 16px;&quot;&gt;상황&lt;/th&gt;
&lt;th style=&quot;text-align: center; font-weight: 600; font-size: 14px; color: #111; padding: 14px 16px;&quot;&gt;추천&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; color: #374151;&quot;&gt;시작 ~ 30분 (레슨)&lt;/td&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; color: #374151;&quot;&gt;파티 형성 중, 끼기 어려움&lt;/td&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; text-align: center;&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; color: #374151;&quot;&gt;시작 후 1시간&lt;/td&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; color: #374151;&quot;&gt;코트 만석, 대기만&lt;/td&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; text-align: center;&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background: #f8f9fa;&quot;&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; color: #111;&quot;&gt;&lt;b&gt;시작 후 1.5~2시간&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; color: #111;&quot;&gt;&lt;b&gt;인원 빠지기 시작, 4명 채우려 나를 찾음&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; text-align: center;&quot;&gt;⭐&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; color: #374151;&quot;&gt;종료 30분 전&lt;/td&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; color: #374151;&quot;&gt;남은 사람과 자연스럽게 합류&lt;/td&gt;
&lt;td style=&quot;padding: 14px 16px; border-top: 1px solid #e5e7eb; text-align: center;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style=&quot;background: #f5f5f5; border-radius: 12px; padding: 32px; margin-bottom: 8px;&quot;&gt;
&lt;p style=&quot;margin: 0;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론.&lt;/b&gt; 운동 절반 지점(약 1.5시간 후)에 도착해서 후반 1.5시간을 알차게 치는 것이 지금의 나에게는 가성비 최고였다.&lt;/p&gt;
&lt;/div&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #f3f4f6; margin: 48px 0;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;내향인을 위한 현실 팁&lt;/h2&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;타이밍만으로 다 해결되진 않는다. 말 거는 게 어려운 나 같은 사람을 위한 작은 요령들.&lt;/p&gt;
&lt;div style=&quot;display: flex; gap: 14px; background: #ffffff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 20px 22px; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;flex: 0 0 28px; height: 28px; border-radius: 9999px; background: #111; color: #fff; font-family: 'Manrope',sans-serif; font-weight: bold; font-size: 14px; display: flex; align-items: center; justify-content: center;&quot;&gt;1&lt;/span&gt;
&lt;div&gt;
&lt;h4 style=&quot;margin: 2px 0 6px; font-weight: 600; font-size: 16px; color: #111;&quot; data-ke-size=&quot;size20&quot;&gt;레슨 30분은 무조건 제 시간에&lt;/h4&gt;
&lt;p style=&quot;margin: 0; font-size: 15px; color: #374151; line-height: 1.55;&quot; data-ke-size=&quot;size16&quot;&gt;레슨은 정해진 시간이라 늦으면 손해다. &lt;b&gt;레슨만 제 시간에 받고 &amp;rarr; 잠깐 쉬다가 &amp;rarr; 후반부 게임에 합류&lt;/b&gt;하는 식으로 시간을 쪼개도 된다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; gap: 14px; background: #ffffff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 20px 22px; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;flex: 0 0 28px; height: 28px; border-radius: 9999px; background: #111; color: #fff; font-family: 'Manrope',sans-serif; font-weight: bold; font-size: 14px; display: flex; align-items: center; justify-content: center;&quot;&gt;2&lt;/span&gt;
&lt;div&gt;
&lt;h4 style=&quot;margin: 2px 0 6px; font-weight: 600; font-size: 16px; color: #111;&quot; data-ke-size=&quot;size20&quot;&gt;&quot;말 걸기&quot; 대신 &quot;신호 보내기&quot;&lt;/h4&gt;
&lt;p style=&quot;margin: 0; font-size: 15px; color: #374151; line-height: 1.55;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 &quot;끼워주세요&quot;라고 말 못 하겠다면, &lt;b&gt;라켓 들고 코트 옆에 서 있기&lt;/b&gt;라도 하자. 앉아 있으면 아무도 안 부르지만, 서 있으면 &quot;한 명 부족한데 들어올래요?&quot; 소리를 들을 확률이 확 올라간다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;display: flex; gap: 14px; background: #ffffff; border: 1px solid #e5e7eb; border-radius: 12px; padding: 20px 22px; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;flex: 0 0 28px; height: 28px; border-radius: 9999px; background: #111; color: #fff; font-family: 'Manrope',sans-serif; font-weight: bold; font-size: 14px; display: flex; align-items: center; justify-content: center;&quot;&gt;3&lt;/span&gt;
&lt;div&gt;
&lt;h4 style=&quot;margin: 2px 0 6px; font-weight: 600; font-size: 16px; color: #111;&quot; data-ke-size=&quot;size20&quot;&gt;운영진에겐 '카톡'으로&lt;/h4&gt;
&lt;p style=&quot;margin: 0; font-size: 15px; color: #374151; line-height: 1.55;&quot; data-ke-size=&quot;size16&quot;&gt;면전에서 말하기 부담스럽다면, &lt;b&gt;동호회 단톡방이나 운영진 개인 메시지로&lt;/b&gt; &quot;신입인데 아직 파티에 못 껴서요, 게임 좀 연결해주시면 감사하겠습니다&quot; 한 줄만 보내보자. 운영진은 안 챙기는 게 아니라, &lt;b&gt;신입이 힘들어하는 걸 모를 뿐&lt;/b&gt;인 경우가 많다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr style=&quot;border: none; border-top: 1px solid #f3f4f6; margin: 48px 0;&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 30px; line-height: 1.2; letter-spacing: -1px; color: #111111; margin: 0 0 16px;&quot; data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;sunset badminton.png&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;1122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQ9ba5/dJMcaalj1Ld/XNxQ219i2nXQykDymFVWp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQ9ba5/dJMcaalj1Ld/XNxQ219i2nXQykDymFVWp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQ9ba5/dJMcaalj1Ld/XNxQ219i2nXQykDymFVWp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQ9ba5%2FdJMcaalj1Ld%2FXNxQ219i2nXQykDymFVWp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1402&quot; height=&quot;1122&quot; data-filename=&quot;sunset badminton.png&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;1122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;배드민턴 동호회 신입의 첫 적응은 생각보다 어렵다. 특히 나처럼 말 거는 게 어려운 사람에겐 더더욱.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 18px;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 &lt;b&gt;&quot;제 시간 강박&quot;을 버리고, 사람이 빠지는 후반부를 노리는 것&lt;/b&gt;만으로도 게임 횟수가 확 달라졌다. 거기에 단톡방 메시지 한 줄을 더하니, 조금씩 얼굴을 트는 사람도 생겼다.&lt;/p&gt;
&lt;p style=&quot;margin: 0 0 32px;&quot; data-ke-size=&quot;size16&quot;&gt;같은 고민을 하는 누군가에게 이 글이 작은 도움이 되길.  &lt;/p&gt;
&lt;!-- ===== CTA / 다크 마무리 밴드 ===== --&gt;
&lt;div style=&quot;background: #101010; border-radius: 12px; padding: 48px 32px; text-align: center;&quot;&gt;
&lt;h2 style=&quot;font-family: 'Manrope','Inter',sans-serif; font-weight: bold; font-size: 26px; line-height: 1.2; letter-spacing: -0.5px; color: #ffffff; margin: 0 0 12px;&quot; data-ke-size=&quot;size26&quot;&gt;여러분의 동호회 적응 꿀팁은?&lt;/h2&gt;
&lt;p style=&quot;color: #a1a1aa; margin: 0 0 24px;&quot; data-ke-size=&quot;size16&quot;&gt;같은 고민을 하는 신입들을 위해 댓글로 공유해주세요.&lt;/p&gt;
&lt;span style=&quot;display: inline-block; font-size: 13px; color: #a1a1aa;&quot;&gt;#배드민턴동호회 &amp;nbsp;#배드민턴신입 &amp;nbsp;#동호회적응 &amp;nbsp;#내향인운동 &amp;nbsp;#배드민턴팁&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>기타</category>
      <category>내향인운동</category>
      <category>동호회적응</category>
      <category>배드민턴동호회</category>
      <category>배드민턴신입</category>
      <category>배드민턴팁</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/46</guid>
      <comments>https://range31.tistory.com/46#entry46comment</comments>
      <pubDate>Mon, 15 Jun 2026 21:51:11 +0900</pubDate>
    </item>
    <item>
      <title>왕따는 왜 계속되는가</title>
      <link>https://range31.tistory.com/45</link>
      <description>&lt;div class=&quot;post-wrap&quot; style=&quot;max-width: 720px; margin: 0 auto; font-family: 'Pretendard', Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Noto Sans KR', sans-serif; color: #374151; font-size: 16px; line-height: 1.75; letter-spacing: 0;&quot;&gt;

  &lt;!-- 상단 메타: 배지 + 캡션 --&gt;
  &lt;div style=&quot;margin: 0 0 32px 0;&quot;&gt;
    &lt;span style=&quot;display: inline-block; background-color: #f5f5f5; color: #111111; font-size: 13px; font-weight: 500; line-height: 1.4; border-radius: 9999px; padding: 4px 12px;&quot;&gt;에세이&lt;/span&gt;
    &lt;span style=&quot;display: inline-block; margin-left: 8px; color: #898989; font-size: 13px; font-weight: 500;&quot;&gt;학교폭력 · 방관자 · 한국 사회&lt;/span&gt;
  &lt;/div&gt;

  &lt;!-- 도입부 --&gt;
  &lt;p style=&quot;margin: 0 0 24px 0; font-size: 18px; font-weight: 600; line-height: 1.6; color: #111111;&quot;&gt;학교폭력 뉴스를 볼 때마다 떠오르는 얼굴이 하나 있다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;중학교 때 같은 반이었던 아이다. 이름은 굳이 적지 않겠다. 특별히 잘못한 것도 없었다. 말투가 조금 어눌했고, 반응이 반 박자 느렸고, 그게 전부였다. 그런데 어느 순간부터 그 아이의 책상에는 아무도 앉지 않았고, 그 아이가 말을 걸면 다들 못 들은 척했고, 점심시간이 되면 그 아이는 혼자였다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;괴롭히는 애들은 두세 명이었다. 반은 서른 명이 넘었다. 그러니까 스물 몇 명은 나처럼 그냥 보고만 있었다는 얘기다. 나는 그 아이를 때린 적도, 놀린 적도 없다. 그 사실로 꽤 오랫동안 스스로를 변호해왔다. 하지만 솔직해지자면, 나는 알고 있었다. &lt;strong style=&quot;color: #111111; font-weight: 600;&quot;&gt;내 침묵도 그 풍경의 일부였다는 걸.&lt;/strong&gt;&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;시대가 이렇게 변했는데도 학교폭력 뉴스는 사라지지 않는다. CCTV가 생기고, 학폭위가 생기고, 익명 신고 앱까지 나왔는데도. 교실에서 단톡방으로, 단톡방에서 익명 커뮤니티로 무대만 옮겨갔을 뿐이다. 그 뉴스들을 볼 때마다 나는 같은 질문으로 돌아온다. 가해자는 언제나 소수인데, 다수는 왜 침묵하는가. 그때의 나는 왜 아무 말도 하지 않았는가.&lt;/p&gt;

  &lt;!-- 섹션 1 --&gt;
  &lt;h2 style=&quot;margin: 64px 0 20px 0; font-size: 28px; font-weight: 600; line-height: 1.2; letter-spacing: -0.5px; color: #111111;&quot;&gt;그때의 나는 계산하고 있었다&lt;/h2&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;어른이 되고 나서야 인정하게 된 게 있다. 그때 내 침묵은 비겁함이라기보다 계산이었다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;그 아이 편에 서는 순간 치러야 할 비용을, 열네 살의 나는 정확하게 알고 있었다. 다음 타깃이 될 수도 있다는 것. 무리에서 밀려날 수도 있다는 것. “쟤 왜 나서?”라는 시선을 받게 된다는 것. 반대로 침묵의 비용은 거의 없었다. 양심이 조금 불편한 정도. 그리고 그 불편함은 “내가 때린 것도 아닌데”라는 말로 그럭저럭 덮을 수 있었다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;심리학에 방관자 효과라는 말이 있다는 건 한참 뒤에 알았다. 지켜보는 사람이 많을수록 “내가 아니어도 누군가 하겠지”라며 책임이 분산된다는 것. 1964년 미국에서 키티 제노비스라는 여성이 살해당할 때 목격자 38명 중 아무도 신고하지 않았다는 그 유명한 사건. 그 이야기를 처음 읽었을 때 나는 미국의 어느 골목이 아니라 우리 반 교실을 떠올렸다. &lt;strong style=&quot;color: #111111; font-weight: 600;&quot;&gt;서른 명의 목격자. 그 많은 눈이 오히려 모두를 무책임하게 만들었다.&lt;/strong&gt;&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;하지만 방관자 효과만으로는 설명이 안 되는 게 있다. 그건 만국 공통의 심리인데, 우리 교실의 침묵에는 뭔가 더 한국적인 것이 작동하고 있었다.&lt;/p&gt;

  &lt;!-- 섹션 2 --&gt;
  &lt;h2 style=&quot;margin: 64px 0 20px 0; font-size: 28px; font-weight: 600; line-height: 1.2; letter-spacing: -0.5px; color: #111111;&quot;&gt;“괜히 나서지 마라” — 나는 그렇게 배웠다&lt;/h2&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;언젠가 집에서 반에 그런 애가 있다는 얘기를 흘리듯 한 적이 있다. 돌아온 말은 지금도 기억난다.&lt;/p&gt;

  &lt;!-- 인용 카드 (surface-card #f5f5f5, rounded 12px) --&gt;
  &lt;div style=&quot;background-color: #f5f5f5; border-radius: 12px; padding: 24px; margin: 0 0 24px 0;&quot;&gt;
    &lt;p style=&quot;margin: 0; font-size: 18px; font-weight: 600; line-height: 1.5; color: #111111;&quot;&gt;“너는 끼어들지 마라. 괜히 휘말리면 너만 손해다.”&lt;/p&gt;
  &lt;/div&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;나를 아끼니까 한 말이라는 걸 안다. 그 시절 어느 집이나 비슷한 말을 했을 것이다. 그런데 지금 와서 보면, 그 현실적인 조언이야말로 방관을 가정에서부터 가르치는 교육이었다. 정의감은 대학 가서, 취직하고 나서, 자리 잡고 나서로 무한히 미뤄도 되는 사치품이라고. 나는 그렇게 배웠고, 아마 그 말을 한 어른도 그렇게 배웠을 것이다. &lt;strong style=&quot;color: #111111; font-weight: 600;&quot;&gt;방관은 이렇게 세습된다.&lt;/strong&gt;&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;학교는 그 교육이 완성되는 곳이었다. 우리는 같은 교복을 입고 같은 시간표대로 움직이며 같은 목표를 향해 달렸다. 그 동질성의 공간에서 ‘다름’은 개성이 아니라 결함이었다. 그 아이의 죄목이 뭐였는지 지금 생각해보면 어이가 없다. 말투가 어눌하다는 것. 평균에서 벗어났다는 것. 그게 전부였다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;모난 돌이 정 맞는다는 속담을 나는 오랫동안 처세의 지혜인 줄 알았다. 지금은 다르게 읽힌다. 그건 지혜가 아니라 이 사회의 작동 원리에 대한 묘사다. 그리고 그 원리 아래에서는 피해자 편에 서는 것 자체가 ‘모난 행동’이 된다. 정의로운 행동조차 평균에서 벗어나는 순간 처벌 대상이 되는 것이다. 그래서 우리는 배웠다. 눈에 띄지 말 것. 그리고 눈에 띈 아이 옆에 서지 말 것.&lt;/p&gt;

  &lt;!-- 섹션 3 --&gt;
  &lt;h2 style=&quot;margin: 64px 0 20px 0; font-size: 28px; font-weight: 600; line-height: 1.2; letter-spacing: -0.5px; color: #111111;&quot;&gt;폭력이 폭력으로 보이지 않게 되는 순간&lt;/h2&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;더 무서운 걸 하나 고백하자면, 어느 순간부터 나는 그 풍경이 이상하게 보이지도 않았다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;학기 초에는 분명 불편했다. 그런데 한 학기가 지나자 그건 그냥 ‘우리 반의 일상’이 되어 있었다. “쟤는 원래 그런 애야.” 누가 처음 한 말인지도 모를 그 문장이 모든 걸 설명해줬다. &lt;strong style=&quot;color: #111111; font-weight: 600;&quot;&gt;서열이 한번 굳어지면 폭력은 폭력으로 보이지 않는다. 질서로 보인다.&lt;/strong&gt; 방관자는 폭력을 목격하고 있는 게 아니라 그냥 교실의 평범한 하루를 보고 있다고 느끼게 된다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;군대에 가서 나는 똑같은 구조를 다시 만났다. 직장에 와서도 마찬가지였다. 부조리, 직장 내 괴롭힘, 간호사들 사회의 ‘태움’ 같은 단어들. 무대와 등장인물만 바뀌었을 뿐, 서열의 맨 아래를 향한 폭력이 ‘관행’이라는 이름으로 굴러가는 구조는 똑같았다. 그제야 알았다. 학교의 왕따는 한국 사회 서열 문화의 예고편이었다는 걸. 우리는 그 교실에서 평생 쓸 생존 기술을 익히고 있었던 것이다. 위에는 복종하고, 아래의 고통에는 둔감해지기.&lt;/p&gt;

  &lt;!-- 섹션 4 --&gt;
  &lt;h2 style=&quot;margin: 64px 0 20px 0; font-size: 28px; font-weight: 600; line-height: 1.2; letter-spacing: -0.5px; color: #111111;&quot;&gt;“신고하면 되잖아”라고 말하는 사람들에게&lt;/h2&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;이런 이야기를 하면 꼭 묻는 사람이 있다. 신고하면 되지 않느냐고.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;우리 때도 신고한 아이가 아주 없지는 않았다. 그래서 어떻게 됐는지 아는가. 담임은 양쪽을 불러 악수를 시켰고, 가해자들은 그날 오후부터 ‘고자질’에 대한 응징을 시작했다. 그 장면을 본 우리들이 뭘 학습했겠는가. &lt;strong style=&quot;color: #111111; font-weight: 600;&quot;&gt;신고는 위험하기만 하고 효과는 없다는 것.&lt;/strong&gt;&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;지금이라고 크게 다른지 모르겠다. 학교는 학폭 건수가 실적에 불리하니 축소하려는 유인이 있고, 학폭위 처분은 가볍고, 가해자 부모가 행정소송으로 시간을 끄는 동안 두 아이는 같은 교실에 앉아 있다. 결국 전학 가는 쪽은 피해자인 경우가 흔하다. 몇 년 전 운동선수와 연예인들의 ‘학폭 미투’가 줄줄이 터졌을 때, 나는 그 폭로들이 10년, 20년 묵은 것이라는 사실이 제일 아팠다. 그들이 학창 시절에 기댈 수 있는 창구가 사실상 없었다는 뜻이니까.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;아이들의 침묵은 시스템에 대한 불신의 결과다. 그리고 솔직히 말해, 그 불신에는 근거가 있다.&lt;/p&gt;

  &lt;!-- 섹션 5 (처벌의 비대칭) --&gt;
  &lt;h2 style=&quot;margin: 64px 0 20px 0; font-size: 28px; font-weight: 600; line-height: 1.2; letter-spacing: -0.5px; color: #111111;&quot;&gt;어른이었다면 전과가 남았을 일&lt;/h2&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;회사를 다니면서 가끔 섬뜩한 상상을 한다. 그때 그 교실에서 벌어지던 일들이 지금 내 사무실에서 그대로 벌어진다면 어떻게 될까.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;동료를 둘러싸고 조롱하면 모욕죄다. 밀치고 때리면 폭행죄, 다치게 하면 상해죄다. 돈을 뜯으면 공갈이고, 단톡방에서 험담을 퍼뜨리면 명예훼손이다. 어른의 세계에서 그것들은 전부 전과가 남는 범죄다. 경찰이 오고, 재판을 받고, 인생에 기록이 남는다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;그런데 똑같은 행위가 교문 안에서 일어나면 이름이 바뀐다. ‘학교폭력’. 범죄가 아니라 ‘학생 지도의 문제’가 된다. 처분은 서면 사과, 교내 봉사, 길어야 출석 정지. 만 14세 미만이면 촉법소년이라 형사처벌 자체가 불가능하고, 그 위라도 소년법이 막아준다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;아이들이 이걸 모를 거라고 생각하면 순진한 것이다. “나 촉법이라 괜찮은데요?” 경찰서에서 이렇게 말하는 아이들 이야기가 뉴스에 나오는 시대다. 우리 때도 가해자들은 본능적으로 알고 있었다. 교사 앞에서까지만 조심하면 된다는 것, 일이 커져봐야 반성문이라는 것. &lt;strong style=&quot;color: #111111; font-weight: 600;&quot;&gt;처벌의 공백은 정확하게 학습되고, 정확하게 이용된다.&lt;/strong&gt;&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;소년법의 취지를 모르는 게 아니다. 아이는 어른보다 교화 가능성이 크고, 한 번의 잘못으로 인생 전체에 낙인을 찍는 건 또 다른 폭력일 수 있다. 그 말에 일부분 동의한다. 그런데 지금 우리의 현실은 이상하다. 처벌을 면제해주는 대신 약속됐던 교화는 어디서 이뤄지고 있는가. 강제 전학 간 가해자는 새 학교에서 같은 일을 반복하고, 보호처분은 며칠짜리 교육으로 끝난다. 처벌도 없고 교화도 없는, 면죄부만 남은 시스템.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;그래서 이 질문을 피할 수가 없다. &lt;strong style=&quot;color: #111111; font-weight: 600;&quot;&gt;폭력을 ‘비용 없는 행위’로 학습한 아이를, 우리는 그대로 사회에 내보내도 되는가.&lt;/strong&gt; 학폭 미투가 답의 일부를 보여줬다. 아무 기록도 책임도 없이 사회에 나간 가해자들은 운동선수가 되고 연예인이 되어 있었다. 그들의 폭력을 기억하는 건 피해자뿐이었다. 가해자는 잊고 출세하고, 피해자는 기억하고 무너지는 것. 그게 우리가 만든 시스템의 결과물이다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;그리고 이 공백은 방관자의 계산에도 들어간다. 신고해봤자 가해자가 멀쩡히 교실로 돌아온다는 걸 아이들은 안다. 처벌받지 않는 폭력 앞에서 침묵은 더 합리적인 선택이 된다.&lt;/p&gt;

  &lt;!-- 섹션 6 --&gt;
  &lt;h2 style=&quot;margin: 64px 0 20px 0; font-size: 28px; font-weight: 600; line-height: 1.2; letter-spacing: -0.5px; color: #111111;&quot;&gt;용기가 덜 필요한 구조를 만드는 일&lt;/h2&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;그 아이가 지금 어디서 뭘 하고 사는지 나는 모른다. 잘 살고 있기를 바란다는 말조차 염치없게 느껴질 때가 있다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;다만 어른이 된 지금, 그때의 나 같은 아이들에게 “용기를 내라”고 말하는 건 무책임하다는 것만은 분명히 알겠다. &lt;strong style=&quot;color: #111111; font-weight: 600;&quot;&gt;열네 살의 나는 용기가 없었던 게 아니라, 용기의 값이 너무 비싼 교실에 앉아 있었다.&lt;/strong&gt; 왕따를 가해자 개인의 인성 문제로 보는 한 답은 없다. 가해자를 골라내 처벌해도 구조가 그대로면 다음 가해자가 그 자리를 채운다. 바꿔야 하는 건 다수, 그러니까 방관자의 계산식이다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;핀란드의 키바 코울루(KiVa)라는 학교폭력 프로그램이 효과를 봤다는 기사를 읽은 적이 있다. 인상적이었던 건 그 프로그램의 초점이 가해자 처벌이 아니라 방관자 교육이라는 점이었다. “지켜보는 너도 이 상황의 일부”라는 메시지, 그리고 익명으로 안전하게 개입할 수 있는 통로. 침묵의 비용은 올리고 개입의 비용은 낮추는 것. 열네 살의 나에게 필요했던 게 정확히 그것이었다.&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;그리고 신고가 작동한다는 증거를 아이들에게 보여줘야 한다. 시스템이 한 번 제대로 작동하는 모습이 백 번의 캠페인보다 강하다. 악수시키고 끝내는 담임을 본 아이와, 가해자가 분리되는 걸 본 아이는 다음 사건 앞에서 다르게 행동한다. 그 작동에는 가해의 비용이 반드시 포함되어야 한다. &lt;strong style=&quot;color: #111111; font-weight: 600;&quot;&gt;교화는 처벌의 면제가 아니라, 자기 행동의 무게를 배우는 과정 위에서만 가능하다.&lt;/strong&gt;&lt;/p&gt;

  &lt;p style=&quot;margin: 0 0 24px 0;&quot;&gt;마지막으로, 어른들의 세계가 먼저 바뀌어야 한다. 회사에서 괴롭힘을 보고도 고개 숙이는 어른이 집에 와서 “친구를 도와줘야지”라고 말하는 건 공허하다. 아이들은 어른의 말이 아니라 어른의 계산을 배운다. 내가 그 계산을 집에서 배웠던 것처럼.&lt;/p&gt;

  &lt;!-- 맺으며: 다크 클로징 밴드 (surface-dark #101010 — 페이지를 닫는 유일한 다크 서피스) --&gt;
  &lt;div style=&quot;background-color: #101010; border-radius: 12px; padding: 48px 32px; margin: 64px 0 0 0;&quot;&gt;
    &lt;h2 style=&quot;margin: 0 0 16px 0; font-size: 24px; font-weight: 600; line-height: 1.25; letter-spacing: -0.5px; color: #ffffff;&quot;&gt;맺으며&lt;/h2&gt;
    &lt;p style=&quot;margin: 0 0 16px 0; color: #a1a1aa; font-size: 16px; line-height: 1.75;&quot;&gt;왕따가 계속되는 이유는 가해자가 강해서가 아니다. 다수의 침묵이 합리적인 선택이 되는 구조가 그대로이기 때문이다. 가해자는 언제나 소수다. 침묵하던 다수가 입을 여는 순간 판은 뒤집힌다.&lt;/p&gt;
    &lt;p style=&quot;margin: 0; color: #a1a1aa; font-size: 16px; line-height: 1.75;&quot;&gt;문제는 그 ‘입을 여는 비용’을 지금까지 전부 개인의 용기에 떠넘겨왔다는 것이다. 나는 그 비용 앞에서 침묵을 골랐던 사람으로서, 아이들에게 용기를 요구하기 전에 &lt;span style=&quot;color: #ffffff; font-weight: 600;&quot;&gt;용기가 덜 필요한 구조를 만드는 게 어른의 일&lt;/span&gt;이라고 생각한다. 그게 그 아이에게 끝내 아무 말도 건네지 못했던 내가, 이제 와서 할 수 있는 거의 유일한 말이다.&lt;/p&gt;
  &lt;/div&gt;

&lt;/div&gt;</description>
      <category>기타</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/45</guid>
      <comments>https://range31.tistory.com/45#entry45comment</comments>
      <pubDate>Thu, 11 Jun 2026 20:58:46 +0900</pubDate>
    </item>
    <item>
      <title>AI Agent는 개발자를 대체할 수 있을까?</title>
      <link>https://range31.tistory.com/44</link>
      <description>&lt;div style=&quot;max-width:760px;margin:0 auto;font-family:'Apple SD Gothic Neo','Pretendard','Inter','Malgun Gothic',sans-serif;color:#000;line-height:1.7;&quot;&gt;

&lt;!-- Eyebrow + Title --&gt;
&lt;p style=&quot;font-family:'JetBrains Mono','Menlo',monospace;font-size:13px;letter-spacing:1.4px;text-transform:uppercase;color:#666;margin:0 0 24px;&quot;&gt;COLUMN · 2026.06.03 · AI · 개발자&lt;/p&gt;

&lt;h1 style=&quot;font-size:48px;font-weight:340;line-height:1.05;letter-spacing:-1px;margin:0 0 16px;&quot;&gt;AI Agent는&lt;br /&gt;개발자를 대체할 수 있을까?&lt;/h1&gt;

&lt;p style=&quot;font-size:22px;font-weight:340;line-height:1.4;letter-spacing:-0.3px;color:#000;margin:0 0 32px;&quot;&gt;2026년, 우리가 마주한 가장 솔직한 질문 — AI 자동화는 어디까지 왔고, 개발자는 어디로 가는가.&lt;/p&gt;

&lt;hr style=&quot;border:0;border-top:1px solid #e6e6e6;margin:32px 0;&quot; /&gt;

&lt;!-- 도입부 (white) --&gt;
&lt;p style=&quot;font-size:20px;font-weight:340;line-height:1.7;letter-spacing:-0.14px;margin:0 0 24px;&quot;&gt;
새벽 두 시, 한 스타트업의 백엔드 개발자가 터미널 앞에 앉아 있다. 그러나 그는 코드를 직접 치고 있지 않다. &lt;strong style=&quot;font-weight:540;&quot;&gt;Claude Code&lt;/strong&gt;에게 &quot;어제 배포한 결제 모듈에서 5xx가 튀는 원인을 찾아 패치하고, 회귀 테스트까지 짜라&quot;고 지시했고, 옆 창에서는 &lt;strong style=&quot;font-weight:540;&quot;&gt;Codex CLI&lt;/strong&gt;가 동시에 마이그레이션 스크립트를 검토 중이다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
그가 하는 일은 명령을 내리고, 결과를 읽고, 판단하는 것. 어쩌면 이것이 2026년 개발자의 새로운 일상이다. 그래서 우리는 묻게 된다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 40px;font-weight:480;&quot;&gt;
AI Agent는 정말 개발자를 대체할 수 있을까?
&lt;/p&gt;

&lt;!-- Block 1: AI Agent란 (lime) --&gt;
&lt;div style=&quot;background:#dceeb1;border-radius:24px;padding:48px 40px;margin:40px 0;&quot;&gt;
&lt;p style=&quot;font-family:'JetBrains Mono','Menlo',monospace;font-size:13px;letter-spacing:1.4px;text-transform:uppercase;color:#000;opacity:0.7;margin:0 0 20px;&quot;&gt;PART 01 · WHAT IS AI AGENT&lt;/p&gt;

&lt;h2 style=&quot;font-size:28px;font-weight:600;line-height:1.3;letter-spacing:-0.3px;margin:0 0 24px;&quot;&gt;AI Agent란 무엇인가&lt;/h2&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
AI Agent는 단순히 &quot;물으면 답하는 챗봇&quot;이 아니다. 가장 큰 차이는 한 단어로 요약된다 — &lt;strong style=&quot;font-weight:540;&quot;&gt;행동(act)&lt;/strong&gt;.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
기존 챗봇은 질문에 텍스트로 답하고 거기서 끝났다. 반면 AI Agent는 목표를 받아 계획을 세우고, 파일을 직접 편집하고, 셸 명령을 실행하고, 외부 API를 호출하며, 그 결과를 스스로 검증해 다음 행동을 결정한다. &quot;답변하는 AI&quot;가 아니라 &quot;행동하는 AI&quot;인 것이다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0;&quot;&gt;
2026년 현재 개발자들이 실무에서 쓰는 Agent는 대체로 다섯 갈래다. &lt;strong style=&quot;font-weight:540;&quot;&gt;Claude Code&lt;/strong&gt;(Anthropic, 멀티파일 리팩토링·장문 추론), &lt;strong style=&quot;font-weight:540;&quot;&gt;Codex CLI&lt;/strong&gt;(OpenAI, 빠른 일회성 작업), &lt;strong style=&quot;font-weight:540;&quot;&gt;Gemini CLI&lt;/strong&gt;(Google, GCP 친화), &lt;strong style=&quot;font-weight:540;&quot;&gt;OpenHands&lt;/strong&gt;(오픈소스, Docker 샌드박스 자율 실행), 그리고 &lt;strong style=&quot;font-weight:540;&quot;&gt;OpenManus&lt;/strong&gt;(멀티 Agent 협업). 강점은 다르지만 공통점은 같다 — 모두 행동한다.
&lt;/p&gt;
&lt;/div&gt;

&lt;!-- White canvas paragraph --&gt;
&lt;h2 style=&quot;font-size:32px;font-weight:540;line-height:1.2;letter-spacing:-0.4px;margin:64px 0 24px;&quot;&gt;최근 AI Agent의 발전 수준&lt;/h2&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
지난 1년간 AI Agent가 실무에서 다룰 수 있게 된 작업 범위는 놀라울 정도로 넓어졌다. 코드 생성, 버그 수정, 테스트 작성, 문서 생성은 이제 사람이 손대지 않는 영역에 가깝다. 서버 배포와 CI/CD 워크플로 작성도 정형화된 패턴 안에서는 거의 자동화됐다. GitHub와의 연동을 통해 PR 생성·리뷰 코멘트·머지까지 한 사이클로 돌아간다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 40px;&quot;&gt;
요약하면, &lt;strong style=&quot;font-weight:540;&quot;&gt;&quot;명세가 분명한 작업&quot;은 거의 사람 손을 떠났다&lt;/strong&gt;. 반면 &quot;왜 이 기능이 필요한가&quot;를 묻는 영역은 여전히 사람의 자리다. 이 경계가 어디에 그어지는지를 이해하는 것이, 지금 개발자에게 가장 중요한 감각이다.
&lt;/p&gt;

&lt;!-- Block 2: 비교표 (cream) --&gt;
&lt;div style=&quot;background:#f4ecd6;border-radius:24px;padding:48px 40px;margin:40px 0;&quot;&gt;
&lt;p style=&quot;font-family:'JetBrains Mono','Menlo',monospace;font-size:13px;letter-spacing:1.4px;text-transform:uppercase;color:#000;opacity:0.7;margin:0 0 20px;&quot;&gt;PART 02 · TOOL COMPARISON&lt;/p&gt;

&lt;h2 style=&quot;font-size:28px;font-weight:600;line-height:1.3;letter-spacing:-0.3px;margin:0 0 24px;&quot;&gt;2026년 주요 코딩 Agent 비교&lt;/h2&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 24px;&quot;&gt;
어느 Agent도 &quot;전부 잘하지&quot; 않는다. 자신의 워크플로에 맞는 도구를 고르는 것 자체가 개발자의 새로운 역량이 됐다.
&lt;/p&gt;

&lt;div style=&quot;overflow-x:auto;margin:0 0 16px;&quot;&gt;
&lt;table style=&quot;width:100%;border-collapse:collapse;font-size:15px;line-height:1.5;background:#fff;border-radius:8px;overflow:hidden;&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;background:#000;color:#fff;&quot;&gt;
&lt;th style=&quot;padding:14px 12px;text-align:left;font-weight:540;letter-spacing:-0.1px;&quot;&gt;항목&lt;/th&gt;
&lt;th style=&quot;padding:14px 12px;text-align:left;font-weight:540;letter-spacing:-0.1px;&quot;&gt;Claude Code&lt;/th&gt;
&lt;th style=&quot;padding:14px 12px;text-align:left;font-weight:540;letter-spacing:-0.1px;&quot;&gt;Codex CLI&lt;/th&gt;
&lt;th style=&quot;padding:14px 12px;text-align:left;font-weight:540;letter-spacing:-0.1px;&quot;&gt;Gemini CLI&lt;/th&gt;
&lt;th style=&quot;padding:14px 12px;text-align:left;font-weight:540;letter-spacing:-0.1px;&quot;&gt;OpenHands&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;border-bottom:1px solid #f1f1f1;&quot;&gt;
&lt;td style=&quot;padding:12px;font-weight:480;&quot;&gt;개발사&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;Anthropic&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;OpenAI&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;Google&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;오픈소스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border-bottom:1px solid #f1f1f1;&quot;&gt;
&lt;td style=&quot;padding:12px;font-weight:480;&quot;&gt;라이선스&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;상용 (Pro/Max)&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;오픈소스 + API&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;무료 티어 + API&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border-bottom:1px solid #f1f1f1;&quot;&gt;
&lt;td style=&quot;padding:12px;font-weight:480;&quot;&gt;실행 환경&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;터미널·IDE·웹&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;터미널 (Node.js)&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;터미널&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;Docker 샌드박스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border-bottom:1px solid #f1f1f1;&quot;&gt;
&lt;td style=&quot;padding:12px;font-weight:480;&quot;&gt;강점&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;장문 추론, 멀티파일 리팩토링, 1M 컨텍스트&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;빠른 일회성 작업, OpenAI 생태계&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;GCP·BigQuery 친화&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;완전 자율 실행, 자가 호스팅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;border-bottom:1px solid #f1f1f1;&quot;&gt;
&lt;td style=&quot;padding:12px;font-weight:480;&quot;&gt;약점&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;상위 플랜 비용&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;컨텍스트 관리 수동&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;추론 깊이가 상대적으로 얕음&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;환경 셋업이 무거움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding:12px;font-weight:480;&quot;&gt;추천 사용자&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;실무 개발자·기업 팀&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;개인·빠른 프로토타입&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;GCP 사용 조직&lt;/td&gt;
&lt;td style=&quot;padding:12px;&quot;&gt;보안 민감 환경·연구&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p style=&quot;font-size:15px;line-height:1.6;margin:16px 0 0;opacity:0.7;&quot;&gt;
※ 2026년 6월 기준. 각 도구는 빠르게 진화 중이며, 강·약점은 사용자의 워크플로에 따라 달라진다.
&lt;/p&gt;
&lt;/div&gt;

&lt;!-- Block 3: 잘하는 일 (mint) --&gt;
&lt;div style=&quot;background:#c8e6cd;border-radius:24px;padding:48px 40px;margin:40px 0;&quot;&gt;
&lt;p style=&quot;font-family:'JetBrains Mono','Menlo',monospace;font-size:13px;letter-spacing:1.4px;text-transform:uppercase;color:#000;opacity:0.7;margin:0 0 20px;&quot;&gt;PART 03 · WHAT IT DOES WELL&lt;/p&gt;

&lt;h2 style=&quot;font-size:28px;font-weight:600;line-height:1.3;letter-spacing:-0.3px;margin:0 0 24px;&quot;&gt;AI Agent가 잘하는 일&lt;/h2&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
실제 현장에서 검증된 영역은 분명하다. &lt;strong style=&quot;font-weight:540;&quot;&gt;반복 작업&lt;/strong&gt;이 첫 번째다. 100개의 DTO 클래스 일괄 변환, 수십 개 파일의 import 경로 수정처럼 사람이 하면 지치고 실수가 나는 일을 Agent는 5분 만에 끝낸다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
&lt;strong style=&quot;font-weight:540;&quot;&gt;코드 리팩토링&lt;/strong&gt;도 강력하다. &quot;이 함수를 순수 함수로 바꾸고 테스트도 짜줘&quot; 수준은 거의 1샷에 끝난다. &lt;strong style=&quot;font-weight:540;&quot;&gt;문서화&lt;/strong&gt; 역시 그렇다. 함수 시그니처만 보고 JSDoc과 Swagger 주석을 만들어내는 일은 더 이상 사람이 하지 않는다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
&lt;strong style=&quot;font-weight:540;&quot;&gt;테스트 자동화&lt;/strong&gt;는 커버리지 향상에 직접 기여한다. 기존 코드를 읽고 엣지 케이스를 포함한 단위 테스트를 만들어낸다. &lt;strong style=&quot;font-weight:540;&quot;&gt;단순 CRUD 개발&lt;/strong&gt;은 이제 스키마를 던지면 컨트롤러·서비스·리포지토리 한 세트가 한 번에 나온다. &lt;strong style=&quot;font-weight:540;&quot;&gt;레거시 코드 분석&lt;/strong&gt;도 마찬가지다. 10년 묵은 PHP 코드를 읽고 흐름을 설명해주는 일은 신입의 통과 의례가 아니게 됐다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0;&quot;&gt;
AI Agent를 적극 도입한 팀의 신규 기능 출시 주기가 평균 30~40% 단축됐다는 사례가 늘고 있다. 생산성은 분명히 오른다.
&lt;/p&gt;
&lt;/div&gt;

&lt;!-- Block 4: 어려운 일 (pink) --&gt;
&lt;div style=&quot;background:#efd4d4;border-radius:24px;padding:48px 40px;margin:40px 0;&quot;&gt;
&lt;p style=&quot;font-family:'JetBrains Mono','Menlo',monospace;font-size:13px;letter-spacing:1.4px;text-transform:uppercase;color:#000;opacity:0.7;margin:0 0 20px;&quot;&gt;PART 04 · WHERE IT FAILS&lt;/p&gt;

&lt;h2 style=&quot;font-size:28px;font-weight:600;line-height:1.3;letter-spacing:-0.3px;margin:0 0 24px;&quot;&gt;아직 어려워하는 일&lt;/h2&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
그러나 같은 도구가 다음 영역에서는 처참하게 무너진다. &lt;strong style=&quot;font-weight:540;&quot;&gt;요구사항이 모호한 프로젝트&lt;/strong&gt;가 첫 번째 벽이다. &quot;사용자가 좋아할 만한 화면을 만들어줘&quot; 같은 지시 앞에서 Agent는 평균값에 수렴한 결과물을 낼 뿐이다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
&lt;strong style=&quot;font-weight:540;&quot;&gt;고객과의 커뮤니케이션&lt;/strong&gt;도 사람의 자리다. 영업팀이 두루뭉술하게 가져온 요구를 &quot;진짜 문제&quot;로 번역하는 일을 Agent는 못한다. &lt;strong style=&quot;font-weight:540;&quot;&gt;비즈니스 의사결정&lt;/strong&gt;도 마찬가지다 — &quot;이 기능을 지금 만들 것인가, 다음 분기로 미룰 것인가&quot;는 코드 문제가 아니다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
&lt;strong style=&quot;font-weight:540;&quot;&gt;복잡한 시스템 설계&lt;/strong&gt;는 트래픽 패턴, 비용, 조직의 운영 역량을 모두 고려해야 한다. Agent에게 주어지는 컨텍스트의 폭이 압도적으로 부족한 영역이다. &lt;strong style=&quot;font-weight:540;&quot;&gt;대규모 장애 대응&lt;/strong&gt;은 더 그렇다. 새벽 3시 알림이 빗발칠 때, 어느 신호를 믿고 어느 신호를 버릴지는 경험치의 문제다. &lt;strong style=&quot;font-weight:540;&quot;&gt;조직 내 정치적 문제&lt;/strong&gt; — &quot;이 API는 누구 영역인가&quot; 같은 갈등 — 은 모델이 답할 일이 아니다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0;&quot;&gt;
공통점은 하나다. &lt;strong style=&quot;font-weight:540;&quot;&gt;컨텍스트가 코드 밖에 있다.&lt;/strong&gt; Agent는 코드를 읽지만, 회의록과 표정과 침묵을 읽지 못한다.
&lt;/p&gt;
&lt;/div&gt;

&lt;!-- White canvas: 역사 --&gt;
&lt;h2 style=&quot;font-size:32px;font-weight:540;line-height:1.2;letter-spacing:-0.4px;margin:64px 0 24px;&quot;&gt;개발자는 정말 사라질까?&lt;/h2&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
역사는 비슷한 질문에 이미 답한 적이 있다. &lt;strong style=&quot;font-weight:540;&quot;&gt;계산기가 나왔을 때&lt;/strong&gt; &quot;회계사는 끝났다&quot;는 말이 나왔다. 회계사는 사라지지 않았다. 대신 세무 자문과 재무 분석가로 역할이 옮겨갔다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
&lt;strong style=&quot;font-weight:540;&quot;&gt;로봇이 공장에 들어왔을 때&lt;/strong&gt; 노동자가 전부 사라질 것이라는 예측이 있었다. 단순 조립공은 줄었지만, 로봇 운영·유지보수 인력이 새로 생겼다. &lt;strong style=&quot;font-weight:540;&quot;&gt;IntelliSense, 자동 리팩토링, Copilot&lt;/strong&gt;이 차례로 나왔을 때도 &quot;개발자가 줄어든다&quot;는 말이 반복됐지만, 결과는 정반대였다. 개발자 수요는 더 늘었다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 40px;&quot;&gt;
기술은 직업을 없애기보다 &lt;strong style=&quot;font-weight:540;&quot;&gt;직업의 정의를 바꿔왔다&lt;/strong&gt;. AI Agent도 같은 경로를 밟을 가능성이 크다.
&lt;/p&gt;

&lt;!-- Block 5: 미래 역할 (lilac) --&gt;
&lt;div style=&quot;background:#c5b0f4;border-radius:24px;padding:48px 40px;margin:40px 0;&quot;&gt;
&lt;p style=&quot;font-family:'JetBrains Mono','Menlo',monospace;font-size:13px;letter-spacing:1.4px;text-transform:uppercase;color:#000;opacity:0.7;margin:0 0 20px;&quot;&gt;PART 05 · WHAT DEVELOPERS BECOME&lt;/p&gt;

&lt;h2 style=&quot;font-size:28px;font-weight:600;line-height:1.3;letter-spacing:-0.3px;margin:0 0 24px;&quot;&gt;앞으로 개발자의 역할은 어떻게 변할까&lt;/h2&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
2026년 이후 개발자에게 필요한 역량은 명확하게 재편되고 있다. 프롬프트만 잘 짜는 것이 아니라 &lt;strong style=&quot;font-weight:540;&quot;&gt;어느 작업을 어느 Agent에 맡길지 판단하는 능력&lt;/strong&gt;이 핵심이다. 코드 한 줄을 짜는 일보다 &lt;strong style=&quot;font-weight:540;&quot;&gt;코드를 어떻게 나누고 묶을지를 결정하는 시스템 설계&lt;/strong&gt;가 중심이 된다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;&quot;&gt;
&lt;strong style=&quot;font-weight:540;&quot;&gt;비즈니스 이해&lt;/strong&gt;는 더 이상 &quot;있으면 좋은&quot; 것이 아니다. &quot;왜 이 기능인가&quot;를 설명할 수 있어야 Agent에게도 정확한 지시를 내릴 수 있다. 가장 큰 병목은 더 이상 &quot;어떻게 만드느냐&quot;가 아니라 &lt;strong style=&quot;font-weight:540;&quot;&gt;&quot;무엇을 만들 것인가&quot;라는 문제 정의&lt;/strong&gt;다. 여러 Agent의 결과를 검수하고, 충돌을 조정하고, 책임 범위를 정하는 &lt;strong style=&quot;font-weight:540;&quot;&gt;Agent 관리 능력&lt;/strong&gt;이 새로운 일상 업무가 된다.
&lt;/p&gt;

&lt;p style=&quot;font-size:20px;line-height:1.6;margin:24px 0 0;font-weight:480;letter-spacing:-0.2px;&quot;&gt;
&quot;코드를 작성하는 사람&quot;에서 &quot;AI Agent를 지휘하는 사람&quot;으로. 개발자는 사라지지 않고, 더 위로 올라간다.
&lt;/p&gt;
&lt;/div&gt;

&lt;!-- Block 6: 개인적인 생각 (navy, inverse) --&gt;
&lt;div style=&quot;background:#1f1d3d;color:#fff;border-radius:24px;padding:48px 40px;margin:40px 0;&quot;&gt;
&lt;p style=&quot;font-family:'JetBrains Mono','Menlo',monospace;font-size:13px;letter-spacing:1.4px;text-transform:uppercase;color:#fff;opacity:0.7;margin:0 0 20px;&quot;&gt;PART 06 · MY TAKE&lt;/p&gt;

&lt;h2 style=&quot;font-size:28px;font-weight:600;line-height:1.3;letter-spacing:-0.3px;margin:0 0 24px;color:#fff;&quot;&gt;개인적인 생각&lt;/h2&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;color:#fff;&quot;&gt;
그래서 다시, 처음 질문으로 돌아간다. &lt;strong style=&quot;font-weight:540;&quot;&gt;&quot;AI Agent는 개발자를 대체하는가, 아니면 개발자의 능력을 증폭시키는가?&quot;&lt;/strong&gt;
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 20px;color:#fff;&quot;&gt;
내 결론은 이렇다 — &lt;strong style=&quot;font-weight:540;&quot;&gt;단기적으로는 증폭, 중장기적으로는 재정의(redefine).&lt;/strong&gt; 오늘의 시니어 개발자는 AI Agent 덕분에 혼자서 두세 명 몫을 해낸다. 명백한 증폭이다. 그러나 시간이 지나면 &quot;주니어에서 시니어로 가는 경로&quot; 자체가 흔들린다. 단순 CRUD를 손으로 짜며 배우던 통과 의례가 사라지면, &lt;strong style=&quot;font-weight:540;&quot;&gt;무엇을 보고 시니어가 되는가&lt;/strong&gt;라는 새로운 질문이 시작된다.
&lt;/p&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0;color:#fff;&quot;&gt;
비관도 낙관도 답이 되지 않는다. 비관은 사람을 무력하게 만들고, 낙관은 사람을 게으르게 만든다. 우리에게 필요한 건 &lt;strong style=&quot;font-weight:540;&quot;&gt;&quot;AI Agent가 못 하는 일이 무엇인지 정확히 아는 개발자&quot;&lt;/strong&gt;다.
&lt;/p&gt;
&lt;/div&gt;

&lt;!-- Conclusion (white, list) --&gt;
&lt;h2 style=&quot;font-size:32px;font-weight:540;line-height:1.2;letter-spacing:-0.4px;margin:64px 0 24px;&quot;&gt;결론 — 5가지로 요약&lt;/h2&gt;

&lt;ol style=&quot;font-size:18px;line-height:1.8;padding-left:24px;margin:0 0 32px;&quot;&gt;
&lt;li style=&quot;margin:0 0 14px;&quot;&gt;&lt;strong style=&quot;font-weight:540;&quot;&gt;AI Agent는 답하는 AI가 아니라 행동하는 AI다.&lt;/strong&gt; Claude Code, Codex CLI, Gemini CLI, OpenHands가 대표 주자이며 각자 강점이 다르다.&lt;/li&gt;
&lt;li style=&quot;margin:0 0 14px;&quot;&gt;&lt;strong style=&quot;font-weight:540;&quot;&gt;명세가 분명한 작업은 거의 자동화됐다.&lt;/strong&gt; 코드 생성, 테스트, 문서, 단순 CRUD는 Agent의 영역으로 넘어갔다.&lt;/li&gt;
&lt;li style=&quot;margin:0 0 14px;&quot;&gt;&lt;strong style=&quot;font-weight:540;&quot;&gt;컨텍스트가 코드 밖에 있는 작업은 여전히 사람의 영역이다.&lt;/strong&gt; 요구 정의, 의사결정, 조직 조율, 장애 대응이 그렇다.&lt;/li&gt;
&lt;li style=&quot;margin:0 0 14px;&quot;&gt;&lt;strong style=&quot;font-weight:540;&quot;&gt;역사적으로 기술은 직업을 없애기보다 재정의해 왔다.&lt;/strong&gt; AI Agent도 같은 경로를 갈 가능성이 크다.&lt;/li&gt;
&lt;li style=&quot;margin:0;&quot;&gt;&lt;strong style=&quot;font-weight:540;&quot;&gt;미래의 개발자는 &quot;코드를 짜는 사람&quot;이 아니라 &quot;AI Agent를 지휘하는 사람&quot;이다.&lt;/strong&gt; 문제 정의력, 시스템 사고, Agent 관리 역량이 새로운 핵심 경쟁력이 된다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p style=&quot;font-size:18px;line-height:1.8;margin:0 0 64px;&quot;&gt;
AI 자동화의 흐름은 더 빨라질 것이다. 그러나 그 흐름 위에 어떤 시스템을 띄울지 결정하는 것은, 여전히 사람이다.
&lt;/p&gt;

&lt;hr style=&quot;border:0;border-top:1px solid #e6e6e6;margin:32px 0;&quot; /&gt;

&lt;p style=&quot;font-family:'JetBrains Mono','Menlo',monospace;font-size:12px;letter-spacing:1.2px;text-transform:uppercase;color:#999;margin:0;&quot;&gt;
TAGS · AI AGENT · CLAUDE CODE · 개발자 · AI 자동화 · CODEX CLI · GEMINI CLI · OPENHANDS
&lt;/p&gt;

&lt;/div&gt;</description>
      <category>기타</category>
      <category>AI AGENT #CLAUDE CODE #개발자 #AI 자동화 #CODEX CLI #GEMINI CLI #OPENHANDS</category>
      <author>숨쉬는 개발자</author>
      <guid isPermaLink="true">https://range31.tistory.com/44</guid>
      <comments>https://range31.tistory.com/44#entry44comment</comments>
      <pubDate>Wed, 3 Jun 2026 23:58:25 +0900</pubDate>
    </item>
  </channel>
</rss>