<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://chanwlee.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://chanwlee.github.io/" rel="alternate" type="text/html" /><updated>2026-09-14T05:44:10+00:00</updated><id>https://chanwlee.github.io/feed.xml</id><title type="html">Chan’s document repo</title><subtitle></subtitle><author><name>Chan</name><email>mailto:chan.lee@stayhome.li</email></author><entry><title type="html">LLM이 숫자를 지어내지 못하게 만드는 법 — 계산을 모델 밖으로 내보냈다</title><link href="https://chanwlee.github.io/architecture/llm-number-boundary/" rel="alternate" type="text/html" title="LLM이 숫자를 지어내지 못하게 만드는 법 — 계산을 모델 밖으로 내보냈다" /><published>2026-08-21T00:00:00+00:00</published><updated>2026-08-21T00:00:00+00:00</updated><id>https://chanwlee.github.io/architecture/llm-number-boundary</id><content type="html" xml:base="https://chanwlee.github.io/architecture/llm-number-boundary/"><![CDATA[<p>클라우드 청구서를 받아 낭비 항목과 절감액이 담긴 진단 리포트를 만드는 시스템을 짰다.
처음엔 단순하게 접근했다. CSV를 그대로 LLM에 넣고 “분석해서 리포트로 써줘”라고 했다.</p>

<p>결과물은 멀쩡해 보였다. 문장이 매끄럽고 구조가 깔끔했고 숫자가 구체적이었다.</p>

<p>그리고 그 숫자 중 일부는 청구서에 없는 숫자였다.</p>

<h2 id="왜-이게-다른-종류의-버그인가">왜 이게 다른 종류의 버그인가</h2>

<p>코드 버그는 터진다. 예외가 나거나 테스트가 깨지거나 최소한 로그에 남는다.</p>

<p>숫자 환각은 안 터진다. 그럴싸한 숫자로 조용히 나온다.</p>

<p>“유휴 리소스 정리로 월 480만 원 절감 가능”이라고 적힌 리포트를 보면, 그게 청구서에서
계산된 480인지 문장의 리듬에 맞게 생성된 480인지 읽는 쪽에서 구별할 방법이 없다.
쓴 쪽에서도 없다. 그래서 이건 품질 문제가 아니라 확인할 방법이 없다는 문제다.</p>

<p>여기서 흔한 처방이 프롬프트 강화다. “추측하지 마라”, “원본에 없는 값을 만들지 마라”,
“근거를 반드시 인용하라”. 나도 했다. 효과는 있었다. 빈도가 줄었다.</p>

<p>빈도가 줄었다는 게 문제다. <strong>지켰는지 확인할 방법이 없는 제약은 제약이 아니다.</strong>
프롬프트는 계약이 아니라 부탁이다. 부탁으로 돌아가는 파이프라인은 언젠가 틀린 숫자를
고객에게 보낸다. 그 리포트가 상품이면 그 한 번으로 끝난다.</p>

<p>그래서 방향을 바꿨다. LLM이 숫자를 안 지어내게 설득하는 대신,
<strong>숫자가 지나가는 경로에서 LLM을 내렸다.</strong></p>

<h2 id="3단-분리">3단 분리</h2>

<p>원칙은 한 줄로 줄었다.</p>

<blockquote>
  <p>숫자는 스크립트가, 판정은 룰셋이, 서술만 LLM이.</p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>비용 CSV
   │
   ▼
[1단 파서]  ─── 집계만. 판정하지 않는다
   │           출력: aggregates.json
   ▼
[2단 룰셋]  ─── 31개 룰 + 고정 상수표. 판정과 등급
   │
   ▼
[3단 LLM]   ─── 서술만. 없는 숫자는 쓸 재료가 없다
   │
   ▼
[4단 게이트] ─── 산술 대조. 안 맞으면 발행 중단
</code></pre></div></div>

<h3 id="1단--파서는-집계만-하고-아무-판단도-하지-않는다">1단 — 파서는 집계만 하고 아무 판단도 하지 않는다</h3>

<p>580줄쯤 되는 파이썬 스크립트 하나다. 표준 라이브러리만 쓴다.
AWS CUR, Cost Explorer 요약, Azure Cost Export, FOCUS 네 포맷을 헤더로 감지하고
<code class="language-plaintext highlighter-rouge">.csv</code> / <code class="language-plaintext highlighter-rouge">.csv.gz</code> / <code class="language-plaintext highlighter-rouge">.zip</code> 안의 csv를 스트리밍으로 읽는다.</p>

<p>출력은 집계 JSON 하나뿐이다.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"meta"</span><span class="p">:</span><span class="w">   </span><span class="p">{</span><span class="w"> </span><span class="nl">"formats"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="err">...</span><span class="p">],</span><span class="w"> </span><span class="nl">"providers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="err">...</span><span class="p">],</span><span class="w"> </span><span class="nl">"rows"</span><span class="p">:</span><span class="w"> </span><span class="mi">24</span><span class="p">,</span><span class="w">
              </span><span class="nl">"period"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="err">...</span><span class="p">},</span><span class="w"> </span><span class="nl">"matrix_only"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="p">},</span><span class="w">
  </span><span class="nl">"totals"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"gross_cost"</span><span class="p">:</span><span class="w"> </span><span class="mf">5136.1</span><span class="p">,</span><span class="w"> </span><span class="nl">"monthly_avg"</span><span class="p">:</span><span class="w"> </span><span class="mf">1672.03</span><span class="p">,</span><span class="w">
              </span><span class="nl">"credits"</span><span class="p">:</span><span class="w"> </span><span class="mf">-50.0</span><span class="p">,</span><span class="w"> </span><span class="nl">"tax"</span><span class="p">:</span><span class="w"> </span><span class="mf">120.0</span><span class="w"> </span><span class="p">},</span><span class="w">
  </span><span class="nl">"services"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"AmazonEC2"</span><span class="p">:</span><span class="w"> </span><span class="mf">2241.1</span><span class="p">,</span><span class="w"> </span><span class="nl">"AmazonS3"</span><span class="p">:</span><span class="w"> </span><span class="mf">975.0</span><span class="p">,</span><span class="w"> </span><span class="err">...</span><span class="w"> </span><span class="p">},</span><span class="w">
  </span><span class="nl">"usage_types_top"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"APN2-EBS:VolumeUsage.gp2"</span><span class="p">:</span><span class="w"> </span><span class="mf">400.0</span><span class="p">,</span><span class="w"> </span><span class="err">...</span><span class="w"> </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>이 단계에서 지킨 규칙이 둘이다.</p>

<p>판정을 하지 않는다. 파서는 “gp2 볼륨에 400달러가 찍혔다”까지만 안다.
그게 낭비인지, 얼마를 아낄 수 있는지는 모른다. 알려고 하면 판정 로직이 파서로
새어 들어오고, 그러면 어디서 무슨 판단이 일어났는지 추적이 끊긴다.</p>

<p>원본에 없는 값은 만들지 않고 <code class="language-plaintext highlighter-rouge">null</code>로 남긴다.</p>

<p>이게 생각보다 중요했다. 계산이 안 되는 필드에 0을 넣으면 편하다. 하류에서 분기가
줄고 템플릿이 안 깨진다. 대신 <strong>0은 사실로 전파된다.</strong> “미사용 EIP 비용 0원”은
“미사용 EIP가 없다”로 읽히지만 실제로는 “그 정보가 이 파일에 없다”였다.</p>

<p><code class="language-plaintext highlighter-rouge">null</code>은 “모른다”를 하류까지 그대로 들고 간다. 리포트는 그 항목을 “판단 불가”로
표시하거나 아예 빼고, 절감액 합계에서 제외한다. <strong>모른다는 정보가 사라지지 않는 게
파이프라인 전체의 신뢰를 지탱한다.</strong></p>

<h3 id="2단--판정은-룰셋과-고정-상수가-한다">2단 — 판정은 룰셋과 고정 상수가 한다</h3>

<p>31개 룰이 마크다운 문서 하나에 있다. 유휴 / 과다 프로비저닝 / 스토리지·네트워크 /
약정·거버넌스 네 영역이다. 룰마다 세 가지가 붙는다.</p>

<p>신뢰도 3단계가 리포트의 척추다.</p>

<table>
  <thead>
    <tr>
      <th>단계</th>
      <th>뜻</th>
      <th>절감액 처리</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>확정</strong></td>
      <td>청구 데이터만으로 사실이 확정된다</td>
      <td>단일 수치로 표기</td>
    </tr>
    <tr>
      <td><strong>추정</strong></td>
      <td>청구 데이터 기반 보수 추정</td>
      <td>보수 계수 적용 + 각주 필수</td>
    </tr>
    <tr>
      <td><strong>정밀진단</strong></td>
      <td>사용량 메트릭·구성 조회가 필요</td>
      <td>절감액 합계에 넣지 않는다</td>
    </tr>
  </tbody>
</table>

<p>미사용 공인 IP는 확정이다. 붙어 있지 않다는 게 청구 라인에 그대로 있다.
CPU 사용률 3% 미만인 유휴 인스턴스는 정밀진단이다. 청구서에 CPU 사용률이 없다.
이 둘을 같은 합계에 넣는 순간 그 합계는 못 쓰는 숫자가 된다.</p>

<p>보수 계수는 고정 상수표다.</p>

<table>
  <thead>
    <tr>
      <th>코드</th>
      <th>의미</th>
      <th>계수</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">K_SNAP</code></td>
      <td>고아 스냅샷 정리 가능 비율</td>
      <td>40%</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">K_VOL</code></td>
      <td>미연결 볼륨 의심 비율</td>
      <td>15%</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">K_GEN</code></td>
      <td>세대 교체 평균 절감</td>
      <td>20%</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">K_GP3</code></td>
      <td>gp2→gp3 단가 차</td>
      <td>20%</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">K_SCHED</code></td>
      <td>비프로덕션 스케줄링 절감 (168h→주 60h의 보수치)</td>
      <td>50%</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">K_NAT</code></td>
      <td>NAT 트래픽 중 엔드포인트 우회 가능분</td>
      <td>60%</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">K_SP</code></td>
      <td>약정 할인율 (1yr NoUpfront Compute SP 보수치)</td>
      <td>27%</td>
    </tr>
  </tbody>
</table>

<p>계수를 표에 못 박고 “임의 변경 금지”를 붙인 이유가 있다.</p>

<p><strong>계수를 고를 자유가 있으면, 결론에 맞는 계수가 선택된다.</strong> 사람도 그렇고 LLM도
그렇다. 절감액이 초라해 보이는 리포트를 앞에 두고 “이 케이스는 스케줄링 절감이
70%쯤 되겠지”라고 판단할 여지를 주면, 그 판단은 매번 위쪽으로 움직인다.
악의가 아니라 구조가 그렇다. 그래서 판정의 자유도를 0으로 만들었다.</p>

<p>등급 산정식도 고정이다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>월 낭비 추정액 = Σ(확정) + Σ(추정)        # 정밀진단은 제외
낭비율        = 월 낭비 추정액 / totals.monthly_avg
등급          = &lt;10% A · &lt;18% B · &lt;27% C · &lt;36% D · ≥36% F
</code></pre></div></div>

<p>리포트의 결론(등급)이 산술로 결정된다. 서술이 등급을 바꿀 수 없다.</p>

<h3 id="3단--llm은-서술만-한다">3단 — LLM은 서술만 한다</h3>

<p>여기까지 오면 LLM에게 남은 일은 문장이다. 집계 JSON과 판정 결과를 받아
왜 이 항목이 1순위인지, 어떤 순서로 손대야 하는지, 무엇이 위험한지를 쓴다.</p>

<p>LLM을 못 믿어서 이렇게 한 게 아니다.
우선순위를 설명하고 맥락을 붙이고 읽는 사람에게 맞는 톤으로 쓰는 일은 LLM이
스크립트보다 훨씬 잘한다. 그래서 그 일만 줬다.</p>

<p>그리고 이 구조에서 LLM은 없는 숫자를 쓸 재료가 없다. 집계에 없는 값은 근거 키를
댈 수 없다. 근거 키가 없는 항목은 다음 단계에서 걸린다.</p>

<h3 id="4단--발행-게이트-출력을-산술로-잠근다">4단 — 발행 게이트: 출력을 산술로 잠근다</h3>

<p>마지막이 실질적으로 가장 큰 몫을 한다. 리포트를 내보내기 전에 대조식을 통과해야 한다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>☐ Top 10 절감액의 합 == 헤드라인 낭비액           (정밀진단 제외 기준)
☐ 모든 확정·추정 항목에 evidence(집계 키·값)가 있다
☐ 정밀진단 항목이 절감액 합산에 섞이지 않았다
☐ 등급과 낭비율이 산정식과 일치한다
☐ 산정 기준 각주 3종(보수 추정·약정 전제·데이터 파기)이 있다
</code></pre></div></div>

<p>첫 줄이 핵심이다. 헤드라인 숫자와 항목별 숫자의 합이 일치하는지 더해본다.
LLM이 헤드라인을 조금 크게 쓰거나 항목 하나를 빠뜨리면 여기서 안 맞는다.
프롬프트로 “정확히 써라”라고 부탁하는 것과, 안 맞으면 발행이 멈추는 것은 다른 종류의 보장이다.</p>

<h2 id="부수-효과로-얻은-것-회귀-테스트가-가능해졌다">부수 효과로 얻은 것: 회귀 테스트가 가능해졌다</h2>

<p>의도하지 않았는데 이게 제일 컸다.</p>

<p>파서 출력이 결정적이므로 골든 파일과 그냥 <code class="language-plaintext highlighter-rouge">diff</code>로 비교된다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python3 scripts/parse_bill.py tests/aws_cur.csv <span class="nt">-o</span> /tmp/o.json
diff /tmp/o.json tests/out_aws.json
</code></pre></div></div>

<p>포맷별로 골든 출력을 두고 파서를 고칠 때마다 돌린다.
LLM이 끼는 파이프라인에서 회귀 테스트가 돌아간다는 건 큰 이득이다.
숫자 경로가 결정적이면 그 경로는 평범한 소프트웨어처럼 테스트된다.
LLM 단계는 평가가 어렵지만, 애초에 그 단계엔 틀려도 조용한 숫자가 없다.</p>

<h2 id="대가">대가</h2>

<p>공짜가 아니다.</p>

<p>룰셋 유지비가 생긴다. 새 서비스, 새 요금제, 새 인스턴스 패밀리가 나오면 사람이
룰을 추가해야 한다. 여기서 “룰도 LLM이 만들게 하면?” 하는 유혹이 오는데,
그러면 고정 상수의 의미가 사라지고 원점이다. 룰 추가는 사람이 하고, 추가된 룰은
골든 테스트로 고정한다.</p>

<p>적용 범위가 좁다. 이 구조는 <strong>답이 숫자이고 원본에 근거가 있는 도메인</strong>에만 맞다.
청구·재무 분석, 용량 산정, 성능 리포트, 정산. 반대로 열린 질문에 답하거나 아이디어를
내는 작업에 이 구조를 씌우면 LLM을 쓰는 이유가 없어진다.</p>

<h2 id="다른-데-옮길-때-쓸-체크리스트">다른 데 옮길 때 쓸 체크리스트</h2>

<p>숫자가 결과물에 들어가는 LLM 파이프라인을 만든다면 이 네 개만 봐도 대부분 막힌다.</p>

<ol>
  <li><strong>숫자가 지나가는 경로에서 LLM을 내려라.</strong> 집계는 코드가 한다.</li>
  <li><strong>모르는 값은 0이 아니라 <code class="language-plaintext highlighter-rouge">null</code>.</strong> 0은 사실로 전파되고 <code class="language-plaintext highlighter-rouge">null</code>은 모른다를 전파한다.</li>
  <li><strong>판정 상수를 코드에 못 박아라.</strong> 프롬프트에 둔 계수는 결론에 맞춰 움직인다.</li>
  <li><strong>출력에 검산식을 붙이고 게이트로 만들어라.</strong> 통과 못 하면 발행이 멈춰야 한다.
프롬프트의 부탁은 보장이 아니다.</li>
</ol>

<p>환각은 “하지 말라”고 말해서 막히지 않았다.
<strong>환각할 수 없는 자리로 옮겨야 막혔다.</strong></p>

<hr />

<p>이 구조로 돌아가는 <a href="https://chan7ee.tistory.com/426">판정 룰 31개 전문</a>은 따로 공개해뒀다.
판정 신호와 보수 계수, 등급 산정식까지 그대로 적었다.</p>

<p>산출물 실물이 궁금하다면 <a href="https://chanwlee.github.io/sample/">샘플 성적표</a>를 올려뒀다
(가상 회사 데이터로 만든 실제 산출물이다).</p>

<p><em>비용 CSV 한 장으로 성적표를 만들어 드리는 실험도 하고 있습니다 — 룰셋 검증용 실데이터가
필요해서입니다. 계정 권한 불필요, 파일은 30일 후 파기:
<a href="https://tally.so/r/A7Yyry?utm_source=blog-llm">무료 진단 신청</a></em></p>]]></content><author><name>Chan</name><email>mailto:chan.lee@stayhome.li</email></author><category term="architecture" /><category term="LLM" /><category term="환각" /><category term="아키텍처" /><category term="클라우드 비용" /><summary type="html"><![CDATA[프롬프트로 '지어내지 마라'고 하는 건 지켰는지 확인할 방법이 없다. 숫자가 지나가는 경로에서 LLM을 내리고, 출력을 산술 대조로 잠근 설계 기록.]]></summary></entry><entry><title type="html">SSH key &amp;amp; multi GitHub &amp;amp; IntelliJ</title><link href="https://chanwlee.github.io/chan/update/multi-github/" rel="alternate" type="text/html" title="SSH key &amp;amp; multi GitHub &amp;amp; IntelliJ" /><published>2020-09-19T14:03:30+00:00</published><updated>2020-09-19T14:03:30+00:00</updated><id>https://chanwlee.github.io/chan/update/multi-github</id><content type="html" xml:base="https://chanwlee.github.io/chan/update/multi-github/"><![CDATA[<h1 id="ssh-key-발급">SSH key 발급</h1>

<ul>
  <li>git bash에서 실행</li>
  <li>아래 명령 입력, 이메일은 수정</li>
</ul>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>ssh-keygen <span class="nt">-t</span> rsa <span class="nt">-b</span> 4096 <span class="nt">-C</span> <span class="s2">"your_email@example.com"</span>
</code></pre></div></div>
<ul>
  <li>엔터 클릭</li>
</ul>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Enter a file <span class="k">in </span>which to save the key <span class="o">(</span>/Users/you/.ssh/id_rsa<span class="o">)</span>: <span class="o">[</span>Press enter]
</code></pre></div></div>

<ul>
  <li>SSH 암호 입력, 암호입력없이 하려면 엔터</li>
</ul>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Enter passphrase <span class="o">(</span>empty <span class="k">for </span>no passphrase<span class="o">)</span>: <span class="o">[</span>Type a passphrase]
Enter same passphrase again: <span class="o">[</span>Type passphrase again]
</code></pre></div></div>
<ul>
  <li>ssh key 클립보드에 복사</li>
</ul>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>clip &lt; ~/.ssh/id_rsa.pub
</code></pre></div></div>

<h1 id="발급한-ssh-key를-ssh-agent에-등록">발급한 SSH key를 ssh-agent에 등록</h1>

<ul>
  <li>ssh-agent 시작하기
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># start the ssh-agent in the background
</code></pre></div>    </div>
  </li>
</ul>

<blockquote>
  <p>Git Bash</p>
  <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">eval</span> <span class="s2">"</span><span class="si">$(</span>ssh-agent <span class="nt">-s</span><span class="si">)</span><span class="s2">"</span>
</code></pre></div>  </div>
  <p>다른 terminal</p>
  <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">eval</span> <span class="si">$(</span>ssh-agent <span class="nt">-s</span><span class="si">)</span>
</code></pre></div>  </div>
</blockquote>

<ul>
  <li>SSH key를 ssh-agent에 추가
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>ssh-add ~/.ssh/id_rsa
</code></pre></div>    </div>
  </li>
</ul>

<h1 id="github-계정에-ssh-key-등록">GitHub 계정에 SSH key 등록</h1>

<ul>
  <li>Sign in  &gt; 아이콘 클릭 &gt; Settings</li>
</ul>

<blockquote>
  <p><img src="https://help.github.com/assets/images/help/settings/userbar-account-settings.png" alt="" /></p>
</blockquote>

<ul>
  <li>SSH keys &gt; New SSH key</li>
</ul>

<blockquote>
  <p><img src="https://help.github.com/assets/images/help/settings/settings-sidebar-ssh-keys.png" alt="" /></p>
</blockquote>

<ul>
  <li>Title 입력, Key &gt; Ctrl+V</li>
</ul>

<blockquote>
  <p><img src="https://help.github.com/assets/images/help/settings/ssh-key-paste.png" alt="" /></p>
</blockquote>

<ul>
  <li>Addd SSH key</li>
</ul>

<blockquote>
  <p><img src="https://help.github.com/assets/images/help/settings/ssh-add-key.png" alt="" /></p>
</blockquote>

<ul>
  <li>GitHub 암호 입력</li>
</ul>

<hr />

<h1 id="multi-ssh-keys-셋팅">Multi SSH keys 셋팅</h1>

<ul>
  <li>
    <p>위의 방법으로 여러개의 키를 생성, ssh-agent에 추가</p>
  </li>
  <li>
    <p>저장된 keys 확인</p>
  </li>
</ul>

<p><code class="language-plaintext highlighter-rouge">$ ssh-add -l</code></p>

<ul>
  <li>ssh config 수정</li>
</ul>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="nv">$ </span><span class="nb">cd</span> ~/.ssh/
    <span class="nv">$ </span><span class="nb">touch </span>config
    <span class="nv">$ </span>vi config
</code></pre></div></div>

<ul>
  <li>내용추가
    <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="c">#activehacker GitHub계정ID</span>
  Host github.com-activehacker
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa_activehacker

  <span class="c">#jexchan GitHub계정ID</span>
  Host github.com-jexchan
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa_jexchan
</code></pre></div>    </div>
    <hr />
    <h1 id="intellij-에-ssh-key-적용">IntelliJ 에 SSH key 적용</h1>
  </li>
  <li>VCS &gt; Checkout from Version Control &gt; Git</li>
</ul>

<blockquote>
  <p>Git Repository URL:  <code class="language-plaintext highlighter-rouge">github.com-jexchan:jexchan/repo</code></p>
</blockquote>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>github.com-jexchan: config에서 설정한 Host
jexchan: github의 id
repo: repository 이름
</code></pre></div></div>
<p>Parent Directory: <code class="language-plaintext highlighter-rouge">/User/workspace</code><br />
 Directory Name: <code class="language-plaintext highlighter-rouge">repo</code></p>

<ul>
  <li>
    <p>Test 클릭</p>
  </li>
  <li>
    <p>Clone 클릭</p>
  </li>
</ul>]]></content><author><name>Chan</name><email>mailto:chan.lee@stayhome.li</email></author><category term="chan" /><category term="update" /><summary type="html"><![CDATA[SSH key 발급]]></summary></entry></feed>