<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>kenji.blog</title><link>http://kenji.blog/ko/</link><description>Recent content on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ko</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 05 Sep 2026 22:10:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ko/index.xml" rel="self" type="application/rss+xml"/><item><title>【완전 해부】 양자 컴퓨터란 무엇인가? ~기초부터 아는 궁극의 계산 원리~</title><link>http://kenji.blog/ko/p/quantum-computer-basics/</link><pubDate>Sat, 05 Sep 2026 22:10:00 +0900</pubDate><guid>http://kenji.blog/ko/p/quantum-computer-basics/</guid><description>&lt;img src="http://kenji.blog/p/quantum-computer-basics/quantum_basics_eyecatch_1788613712487.jpg" alt="Featured image of post 【완전 해부】 양자 컴퓨터란 무엇인가? ~기초부터 아는 궁극의 계산 원리~" />&lt;h2 id="시작하며-양자-컴퓨터가-가져올-계산의-패러다임-시프트">시작하며: 양자 컴퓨터가 가져올 &amp;lsquo;계산의 패러다임 시프트&amp;rsquo;
&lt;/h2>&lt;p>최근 뉴스나 기술 기사에서 &amp;lsquo;양자 컴퓨터&amp;rsquo;라는 단어를 보지 않는 날이 없습니다. &amp;lsquo;현재의 슈퍼컴퓨터로 수천 년 걸릴 계산을 몇 분 만에 끝낸다&amp;rsquo;, &amp;lsquo;현재의 암호 기술이 모두 뚫릴지도 모른다&amp;rsquo;는 등 SF 영화 같은 이야기들이 그럴듯하게 들려옵니다. Google이나 IBM, Microsoft 같은 거대 IT 기업부터 전 세계의 대학과 스타트업까지, 이 꿈의 기술을 상용화하기 위해 치열하게 경쟁하고 있습니다.&lt;/p>
&lt;p>하지만 &amp;lsquo;양자 컴퓨터가 결국 무엇인가?&amp;lsquo;라는 질문을 받으면, 정확하게 대답할 수 있는 사람은 많지 않을 것입니다. 많은 사람들이 &amp;lsquo;모든 조합을 동시에 계산할 수 있는 마법의 상자&amp;rsquo;라는 막연한 이미지를 가지고 있지만, 엄밀히 말해 그것은 정확하지 않습니다.&lt;/p>
&lt;p>본 기사에서는 양자 컴퓨터가 고전 컴퓨터(우리가 평소에 사용하는 PC나 스마트폰)와 근본적으로 어떻게 다른지, 그리고 &amp;lsquo;중첩(Superposition)&amp;rsquo;, &amp;lsquo;양자 얽힘(Entanglement)&amp;rsquo;, &amp;lsquo;양자 게이트(Quantum gates)&amp;lsquo;와 같은 양자역학의 신비한 현상들을 어떻게 계산에 이용하고 있는지를 기초부터 철저하게, 전문적이면서도 알기 쉽게 해설합니다. 이 기사를 다 읽을 즈음에는 양자 컴퓨터의 본질적인 대단함과 현재의 과제를 명확히 이해할 수 있을 것입니다.&lt;/p>
&lt;hr>
&lt;h2 id="제1장-고전-컴퓨터와-양자-컴퓨터의-결정적인-차이">제1장: 고전 컴퓨터와 양자 컴퓨터의 결정적인 차이
&lt;/h2>&lt;p>양자 컴퓨터의 작동 방식을 이해하려면 먼저 우리가 현재 사용하고 있는 &amp;lsquo;고전 컴퓨터&amp;rsquo;가 어떻게 작동하는지 복습할 필요가 있습니다.&lt;/p>
&lt;h3 id="비교표-고전-컴퓨터-vs-양자-컴퓨터">비교표: 고전 컴퓨터 vs 양자 컴퓨터
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>항목&lt;/th>
&lt;th>고전 컴퓨터&lt;/th>
&lt;th>양자 컴퓨터&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>기본 단위&lt;/strong>&lt;/td>
&lt;td>비트 (0 또는 1)&lt;/td>
&lt;td>양자 비트 (0과 1의 중첩)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>상태의 표현&lt;/strong>&lt;/td>
&lt;td>확정적&lt;/td>
&lt;td>확률적 (관측할 때까지 결정되지 않음)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>계산 방식&lt;/strong>&lt;/td>
&lt;td>순차 처리 (병렬화에는 물리 코어 필요)&lt;/td>
&lt;td>양자 병렬성 (지수함수적인 상태를 동시에 조작)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>잘하는 계산&lt;/strong>&lt;/td>
&lt;td>사칙연산, 일상적인 데이터 처리&lt;/td>
&lt;td>소인수분해, 양자 화학 계산&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>오류 내성&lt;/strong>&lt;/td>
&lt;td>매우 강함&lt;/td>
&lt;td>매우 약함 (극저온 환경이나 오류 정정이 필요)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="고전-컴퓨터의-세계-0인가-1인가의-비트bit">고전 컴퓨터의 세계: 0인가 1인가의 &amp;lsquo;비트(Bit)&amp;rsquo;
&lt;/h3>&lt;p>고전 컴퓨터는 모든 정보를 &amp;lsquo;0&amp;rsquo; 또는 &amp;lsquo;1&amp;rsquo; 둘 중 하나의 상태로 표현합니다. 이것을 &lt;strong>비트(Bit)&lt;/strong> 라고 부릅니다. 물리적으로는 반도체 칩 위의 트랜지스터 전압이 높냐(1) 낮냐(0)로 표현됩니다.
스마트폰에 있는 고화질 사진도, 지금 읽고 있는 이 글도, 즐겨보는 YouTube 영상도 궁극적으로는 방대한 수의 &amp;lsquo;0과 1의 나열&amp;rsquo;로 환원됩니다. 계산이란 이 0과 1의 나열에 대해 AND(논리곱), OR(논리합), NOT(논리부정)과 같은 기본적인 논리 회로를 조합하여 조작을 가하는 과정에 다름 아닙니다.
이것은 매우 확실하고 결정론적인 세계입니다. 입력이 같으면 반드시 같은 출력을 얻습니다.&lt;/p>
&lt;h3 id="양자-컴퓨터의-세계-0이면서-1이기도-한-양자-비트qubit">양자 컴퓨터의 세계: 0이면서 1이기도 한 &amp;lsquo;양자 비트(Qubit)&amp;rsquo;
&lt;/h3>&lt;p>반면, 양자 컴퓨터의 최소 정보 단위는 &lt;strong>양자 비트(Qubit: Quantum bit)&lt;/strong> 라고 불립니다.
양자 비트의 가장 큰 특징은 고전적인 비트처럼 &amp;lsquo;0&amp;rsquo; 또는 &amp;lsquo;1&amp;rsquo; 둘 중 하나의 상태에 있을 뿐만 아니라, &amp;lsquo;0과 1이 특정 확률로 섞인 상태&amp;rsquo;를 취할 수 있다는 점입니다. 이것을 &lt;strong>&amp;lsquo;중첩(Superposition)&amp;rsquo;&lt;/strong> 이라고 부릅니다.&lt;/p>
&lt;p>예를 들어 고전 비트가 &amp;lsquo;앞면&amp;rsquo; 또는 &amp;lsquo;뒷면&amp;rsquo; 중 하나가 위로 놓인 동전이라고 한다면, 양자 비트는 &amp;lsquo;공중에서 계속 회전하고 있는 동전&amp;rsquo;에 자주 비유됩니다. 회전 중인 동전은 앞면이라고도 뒷면이라고도 할 수 없으며 양쪽의 상태가 겹쳐져 있습니다. 그리고 동전이 바닥에 떨어져 움직임을 멈추는 순간(이를 양자역학에서는 &amp;lsquo;관측&amp;rsquo;이라고 부릅니다) 처음으로 &amp;lsquo;앞면&amp;rsquo;인지 &amp;lsquo;뒷면&amp;rsquo;인지가 확정됩니다.&lt;/p>
&lt;p>이 &amp;lsquo;관측할 때까지 상태가 확정되지 않는다&amp;rsquo;는 미시 세계(양자역학) 특유의 성질을 그대로 정보 처리 과정에 통합한 것이 양자 컴퓨터입니다.&lt;/p>
&lt;hr>
&lt;h2 id="제2장-계산을-근본부터-바꾸는-3가지-양자역학적-성질">제2장: 계산을 근본부터 바꾸는 3가지 양자역학적 성질
&lt;/h2>&lt;p>양자 컴퓨터의 경이로운 계산 능력의 원천은 단순히 클럭 주파수가 높다거나 부품이 작다는 것이 아닙니다. 물리 법칙 자체를 계산 리소스로 이용한다는 점에 있습니다. 주로 다음의 3가지 양자역학적 현상이 핵심이 됩니다.&lt;/p>
&lt;h3 id="1-중첩superposition과-지수함수적인-정보량">1. 중첩(Superposition)과 지수함수적인 정보량
&lt;/h3>&lt;p>앞서 말했듯이, 양자 비트는 0과 1 양쪽의 상태를 동시에 유지할 수 있습니다. 1개의 양자 비트는 &amp;lsquo;0과 1의 중첩&amp;rsquo;인데, 양자 비트의 수를 늘리면 어떻게 될까요?&lt;/p>
&lt;ul>
&lt;li>1 양자 비트: 2가지 상태(0, 1)의 중첩&lt;/li>
&lt;li>2 양자 비트: 4가지 상태(00, 01, 10, 11)의 중첩&lt;/li>
&lt;li>3 양자 비트: 8가지 상태의 중첩&lt;/li>
&lt;li>&lt;strong>N개의 양자 비트: $2^N$개 패턴의 중첩&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>단 50개의 양자 비트만 있으면 $2^{50}$(약 1100조)개의 상태를 동시에 유지할 수 있습니다. 그리고 불과 300개의 양자 비트가 있으면 $2^{300}$개(우주에 존재하는 모든 원자의 수보다 많은 수!)의 패턴을 한 번에 유지할 수 있는 것입니다. 이 지수함수적인 정보 유지 능력이 양자 컴퓨터의 잠재력의 토대가 됩니다. 고전 컴퓨터에서 우주의 원자 수보다 많은 상태를 메모리에 기억시키는 것은 물리적으로 불가능합니다.&lt;/p>
&lt;h3 id="2-양자-얽힘entanglement-기이한-원격-작용">2. 양자 얽힘(Entanglement): 기이한 원격 작용
&lt;/h3>&lt;p>양자 얽힘은 아인슈타인이 &amp;lsquo;기이한 원격 작용(Spooky action at a distance)&amp;lsquo;이라고 부르며 평생 받아들이지 못했을 정도로 인간의 직관에 반하는 신비한 현상입니다.&lt;/p>
&lt;p>여러 양자 비트가 &amp;lsquo;양자 얽힘&amp;rsquo; 상태가 되면, 그것들은 서로 강하게 결합하여 &lt;strong>&amp;lsquo;한쪽의 상태가 확정되면 아무리 거리가 떨어져 있어도 다른 한쪽의 상태가 즉시 확정된다&amp;rsquo;&lt;/strong> 는 운명 공동체 같은 관계가 됩니다.&lt;/p>
&lt;p>예를 들어 얽힘 상태에 있는 두 양자 비트 A와 B가 있다고 가정해 봅시다(이들은 각각 0과 1의 중첩 상태에 있습니다). A를 관측해서 &amp;lsquo;0&amp;rsquo;이었을 경우, 정보 전달 속도의 한계인 빛의 속도를 뛰어넘어 즉시 B의 상태도 (예를 들어 반드시 &amp;lsquo;1&amp;rsquo;이 되도록) 확정됩니다.
양자 컴퓨터에서는 이 양자 얽힘을 이용함으로써 여러 양자 비트 간의 복잡한 상관관계를 표현하고, 초병렬적인 정보 처리를 수행합니다. 얽힘이 없다면 양자 컴퓨터의 계산 능력은 고전 컴퓨터와 크게 다르지 않을 것입니다.&lt;/p>
&lt;h3 id="3-양자-간섭quantum-interference-정답을-떠오르게-하는-마법">3. 양자 간섭(Quantum Interference): 정답을 떠오르게 하는 마법
&lt;/h3>&lt;p>&amp;lsquo;모든 패턴을 동시에 유지할 수 있다면 그것을 단번에 병렬 계산해서 순식간에 답이 나오는 것 아닌가?&amp;lsquo;라고 생각할 수도 있습니다. 이것이 양자 컴퓨터에 대해 가장 흔히 하는 오해입니다.
중첩 상태에서 계산을 수행해도 최종적으로 답을 알기 위해서는 &amp;lsquo;관측&amp;rsquo;을 해야 합니다. 하지만 관측하는 순간 상태는 $2^N$개의 패턴 중 어느 하나로 무작위로 수축해 버립니다. 이러면 단순히 엉터리(무작위적인) 답이 나올 뿐입니다.&lt;/p>
&lt;p>여기서 등장하는 것이 &lt;strong>&amp;lsquo;양자 간섭(Interference)&amp;rsquo;&lt;/strong> 입니다. 파도와 파도가 부딪힐 때 파장이 맞는 곳은 서로를 강화하고, 어긋나는 곳은 서로를 상쇄하는 현상을 이용합니다(노이즈 캔슬링 이어폰의 원리와 본질적으로 같습니다).&lt;/p>
&lt;p>우수한 &amp;lsquo;양자 알고리즘&amp;rsquo;은 계산 과정에서 &lt;strong>&amp;lsquo;정답으로 이어지는 상태(파동)의 확률 진폭을 강화(증폭)하고&amp;rsquo;, &amp;lsquo;오답으로 이어지는 상태의 확률 진폭을 서로 상쇄&amp;rsquo;&lt;/strong> 하도록 교묘하게 양자 상태를 조작합니다. 그리고 최종적으로 관측했을 때 한없이 100%에 가까운 확률로 &amp;lsquo;정답&amp;rsquo;이 툭 튀어나오도록 유도하는 것입니다. 이 간섭의 과정을 잘 설계하는 것이야말로 양자 프로그래밍의 정수입니다.&lt;/p>
&lt;hr>
&lt;h2 id="제3장-어떻게-계산하는가-양자-게이트와-양자-회로">제3장: 어떻게 계산하는가? &amp;lsquo;양자 게이트&amp;rsquo;와 &amp;lsquo;양자 회로&amp;rsquo;
&lt;/h2>&lt;p>고전 컴퓨터가 논리 게이트(AND, OR, NOT 등)를 사용하여 계산을 진행하는 것처럼, 양자 컴퓨터도 &lt;strong>&amp;lsquo;양자 게이트(Quantum Gates)&amp;rsquo;&lt;/strong> 라는 조작을 양자 비트에 적용하여 계산을 진행합니다. 여러 양자 게이트를 조합한 것을 ** 양자 회로(Quantum Circuit)** 라고 부릅니다.&lt;/p>
&lt;p>양자 비트의 상태는 &amp;lsquo;블로흐 구면(Bloch sphere)&amp;lsquo;이라는 3차원 구체의 표면 위 점으로 수학적으로 표현됩니다. 북극이 &amp;lsquo;0&amp;rsquo;, 남극이 &amp;lsquo;1&amp;rsquo;, 적도 위가 &amp;lsquo;0과 1이 반반씩 겹쳐진 상태&amp;rsquo;입니다. 양자 게이트란 이 구의 표면에서 상태(벡터)를 회전시키는 조작에 다름 아닙니다.&lt;/p>
&lt;p>대표적인 양자 게이트를 몇 가지 소개해 보겠습니다.&lt;/p>
&lt;h3 id="1-아다마르-게이트h-게이트">1. 아다마르 게이트(H 게이트)
&lt;/h3>&lt;p>고전 컴퓨터에는 존재하지 않는, 양자 컴퓨터만의 가장 기본적인 게이트입니다. 상태가 완전히 &amp;lsquo;0&amp;rsquo;인 양자 비트에 H 게이트를 통과시키면 0과 1이 정확히 반반의 확률로 관측되는 &amp;lsquo;완전한 중첩 상태&amp;rsquo;(블로흐 구면에서 적도 위의 점)를 만들어 냅니다. 양자 계산의 초기화 단계로서 많은 알고리즘이 먼저 이 H 게이트를 모든 양자 비트에 적용하는 것에서 시작합니다.&lt;/p>
&lt;h3 id="2-파울리-게이트x-y-z-게이트">2. 파울리 게이트(X, Y, Z 게이트)
&lt;/h3>&lt;p>고전 컴퓨터의 NOT 게이트(0을 1로, 1을 0으로 반전시키는 것)에 해당하는 조작을 포함하는 게이트입니다. 블로흐 구면에서 X축, Y축, Z축을 중심으로 180도 회전시키는 조작에 해당합니다. 특히 X 게이트는 북극(0)을 남극(1)으로 반전시키기 때문에 고전의 NOT 게이트와 완전히 같은 역할을 합니다. Z 게이트는 중첩의 &amp;lsquo;위상(파동의 타이밍 같은 것)&amp;lsquo;을 반전시키는 역할을 가지며, 양자 간섭을 일으키는 데 극히 중요합니다.&lt;/p>
&lt;h3 id="3-cnot-게이트제어-not-게이트">3. CNOT 게이트(제어 NOT 게이트)
&lt;/h3>&lt;p>양자 얽힘을 만들어내기 위한 매우 중요한 게이트입니다. 2개의 양자 비트(제어 비트와 타깃 비트)를 사용합니다.
&amp;lsquo;만약 제어 비트가 1이라면 타깃 비트의 상태를 반전(X 게이트)시킨다. 제어 비트가 0이라면 아무것도 하지 않는다&amp;rsquo;는 동작을 합니다. 언뜻 보면 단순한 IF 조건 분기 같지만, 제어 비트가 &amp;lsquo;0과 1의 중첩 상태&amp;rsquo;였다면 어떻게 될까요? 타깃 비트는 &amp;lsquo;반전된 것과 반전되지 않은 것이 겹쳐진 상태&amp;rsquo;가 되어 두 비트의 운명이 완전히 연결됩니다. 멋지게 두 양자 비트가 &amp;lsquo;얽히게&amp;rsquo; 되는 것입니다.&lt;/p>
&lt;p>이러한 게이트들을 음악의 악보처럼 왼쪽에서 오른쪽으로 순서대로 배치하고 적용해 나감으로써 복잡한 알고리즘을 실행합니다.&lt;/p>
&lt;hr>
&lt;h2 id="제4장-양자-컴퓨터는-무엇을-잘하고-무엇을-못하는가">제4장: 양자 컴퓨터는 무엇을 잘하고, 무엇을 못하는가?
&lt;/h2>&lt;p>여기서 중요한 사실을 말씀드립니다. 양자 컴퓨터는 만능의 신이 아닙니다.
웹 브라우징, 동영상 렌더링, 엑셀의 매크로 처리, 혹은 일반적인 스마트폰 앱의 동작과 같은 일상적인 작업에서 양자 컴퓨터가 고전 컴퓨터를 능가하는 일은 아마 영원히 없을 것입니다. 이러한 순차적인 처리는 이미 고도로 최적화되어 압도적인 속도와 저렴함을 자랑하는 고전 컴퓨터가 더 적합합니다.&lt;/p>
&lt;p>양자 컴퓨터가 그 진가를 발휘하는 것은 &lt;strong>&amp;lsquo;고전 컴퓨터로는 계산 조합이 지수함수적으로 폭발하여 우주의 수명만큼의 시간이 걸려버리는 특정한 문제&amp;rsquo;&lt;/strong> 에 대해서뿐입니다. 이것을 &amp;lsquo;양자 우월성(Quantum Supremacy)&amp;rsquo; 또는 &amp;lsquo;양자 우위성(Quantum Advantage)&amp;lsquo;이라고 부릅니다.&lt;/p>
&lt;h3 id="양자-컴퓨터가-잘하는-것킬러-애플리케이션">양자 컴퓨터가 잘하는 것(킬러 애플리케이션)
&lt;/h3>&lt;h4 id="1-소인수분해와-암호-해독쇼어의-알고리즘">1. 소인수분해와 암호 해독(쇼어의 알고리즘)
&lt;/h4>&lt;p>현재 인터넷상의 안전한 통신(신용카드 결제나 개인정보 전송 등)을 지키고 있는 &amp;lsquo;RSA 암호&amp;rsquo; 등은 &amp;lsquo;거대한 수의 소인수분해는 고전 컴퓨터로는 실질적으로 불가능(방대한 시간이 걸림)하다&amp;rsquo;는 전제에 기반하고 있습니다.
하지만 1994년 수학자 피터 쇼어가 발견한 &amp;lsquo;쇼어의 알고리즘&amp;rsquo;을 사용하면, 양자 컴퓨터는 간섭을 교묘하게 이용하여 이를 극적인 속도(다항 시간)로 풀 수 있습니다. 이로 인해 장래에 현재의 암호 체계가 붕괴할 위험이 있어 전 세계의 중앙은행과 정부 기관이 &amp;lsquo;양자 내성 암호(Post-Quantum Cryptography)&amp;lsquo;로의 전환을 서두르고 있습니다.&lt;/p>
&lt;h4 id="2-양자-화학-계산과-신소재신약-개발">2. 양자 화학 계산과 신소재·신약 개발
&lt;/h4>&lt;p>자연계의 분자나 원자의 움직임은 애초에 양자역학의 법칙을 따르고 있습니다. 고전 컴퓨터로 복잡한 분자의 움직임을 시뮬레이션하려고 하면 전자 간의 상호작용 조합이 폭발하여 비교적 작은 분자라도 계산량의 한계에 부딪힙니다.
노벨 물리학상 수상자인 리처드 파인만이 &amp;ldquo;자연을 시뮬레이션하고 싶다면 양자역학적으로 만들어야 한다&amp;quot;고 말했듯, 양자 컴퓨터는 물질 시뮬레이션에서 압도적인 네이티브 파워를 발휘합니다. 획기적인 신약 설계, 상온 초전도 물질 발견, 고효율 태양전지 및 배터리 재료 개발, 에너지 효율이 높은 비료 합성 등 인류의 과제를 해결할 돌파구가 기대되고 있습니다.&lt;/p>
&lt;h4 id="3-조합-최적화-문제와-탐색그로버의-알고리즘">3. 조합 최적화 문제와 탐색(그로버의 알고리즘)
&lt;/h4>&lt;p>방대한 선택지 중에서 최적의 것을 찾아내는 문제(물류의 최적화 경로, 금융 포트폴리오 최적화 등)에 대해서도 양자 알고리즘은 힘을 발휘합니다. &amp;lsquo;그로버의 알고리즘&amp;rsquo;을 사용하면 데이터가 정리되지 않은 데이터베이스에서의 검색에서 고전 컴퓨터의 루트(제곱근) 횟수로 목적하는 데이터를 찾아낼 수 있습니다. 예를 들어 1억 건의 데이터가 있다면 고전에서 최대 1억 번 걸리는 탐색을 불과 1만 번 정도로 완료할 수 있게 됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="제5장-앞을-가로막는-하드웨어의-벽-결어어긋남과-양자-오류-정정">제5장: 앞을 가로막는 하드웨어의 벽 &amp;lsquo;결어어긋남&amp;rsquo;과 &amp;lsquo;양자 오류 정정&amp;rsquo;
&lt;/h2>&lt;p>이론적으로는 마법처럼 강력한 양자 컴퓨터이지만, 상용화로 가는 길에는 극도로 높고 험난한 물리적인 벽이 가로막고 있습니다. 최대의 적은 &lt;strong>&amp;lsquo;노이즈&amp;rsquo;&lt;/strong> 입니다.&lt;/p>
&lt;p>양자 비트의 &amp;lsquo;중첩&amp;rsquo;이나 &amp;lsquo;양자 얽힘&amp;rsquo;은 극도로 섬세하고 부서지기 쉬운 상태입니다. 주위의 아주 작은 열, 전자기파의 흔들림, 혹은 우주선 등에 닿기만 해도 그 마법의 상태는 순식간에 붕괴하고 그저 고전 비트가 되어 버립니다. 이 현상을 &lt;strong>&amp;lsquo;디코히어런스(결어어긋남, 양자 붕괴)&amp;rsquo;&lt;/strong> 라고 부릅니다.&lt;/p>
&lt;h3 id="물리적인-구현-방식의-치열한-경쟁">물리적인 구현 방식의 치열한 경쟁
&lt;/h3>&lt;p>현재 이 섬세 양자 비트를 물리적으로 어떻게 만들 것인지에 대해 전 세계에서 다양한 방식이 연구되고 있으며, 패권 다툼이 일어나고 있습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>초전도 방식(Superconducting)&lt;/strong> : Google, IBM, Amazon 등이 채택. 루프 형태의 초전도 회로를 사용하며, 절대영도(약 -273℃)에 가까운 극저온까지 거대한 냉동기로 냉각시켜 양자 상태를 제어합니다. 현재 가장 앞서 있고 양자 비트 수를 늘리기 쉬운 방식이지만, 냉각 장치가 거대하고 비쌉니다.&lt;/li>
&lt;li>&lt;strong>이온 트랩 방식(Trapped Ion)&lt;/strong> : IonQ, Quantinuum 등이 채택. 진공 중에 이온(원자)을 전자기장으로 가두고 정밀한 레이저를 쏘아 제어합니다. 모든 양자 비트가 균일하고 상태를 오래 유지할 수 있는(코히어런스 시간이 긴) 것이 강점이지만, 조작 속도가 초전도에 비해 느리다는 과제가 있습니다.&lt;/li>
&lt;li>&lt;strong>광양자 방식(Photonic)&lt;/strong> : PsiQuantum 등이 주력. 빛의 입자(광자)를 사용합니다. 극저온 환경을 필요로 하지 않고 실온에서 동작하는 부분이 많으며, 기존의 실리콘 칩 제조 기술이나 광섬유 통신 기술과 상성이 좋다는 큰 장점이 있습니다.&lt;/li>
&lt;li>&lt;strong>위상 방식(Topological)&lt;/strong> : Microsoft가 오랜 기간 연구. 애니온이라 불리는 특수한 입자의 위상기하학적(토폴로지) 성질을 이용하여, 환경 노이즈에 대해 근본적으로 강한(오류가 발생하기 어려운) 양자 비트를 만들려는 야심 찬 접근법입니다. 이론상으로는 최강이지만 물리적인 구현의 장애물이 가장 높다고 알려져 있습니다.&lt;/li>
&lt;/ul>
&lt;h3 id="궁극의-목표-결함-허용-양자-컴퓨터ftqc로-가는-길">궁극의 목표 &amp;lsquo;결함 허용 양자 컴퓨터(FTQC)&amp;lsquo;로 가는 길
&lt;/h3>&lt;p>현재 우리가 쓰는 고전 컴퓨터의 세계에도 계산 오류(우주선에 의한 비트 반전 등)는 존재하지만, &amp;lsquo;오류 정정 코드&amp;rsquo;를 통해 완벽하게 수정되고 있기 때문에 우리는 단 한 번도 오류를 의식하지 않고 스마트폰을 사용할 수 있습니다. 양자 컴퓨터에서도 실용적인 대규모 계산을 수행하려면 동일한 &lt;strong>&amp;lsquo;양자 오류 정정(Quantum Error Correction: QEC)&amp;rsquo;&lt;/strong> 이 필수적입니다.&lt;/p>
&lt;p>하지만 양자 상태는 &amp;lsquo;관측하면 깨진다&amp;rsquo;는 성질이 있기 때문에 오류를 확인하기 위해 내용을 직접 볼(관측할) 수 없다는 치명적인 딜레마가 있습니다.
이를 회피하기 위해 다수의 불안정한 &amp;lsquo;물리 양자 비트&amp;rsquo;를 교묘하게 조합하여 오류를 감지하고 수정할 수 있는 1개의 안정된 &amp;lsquo;논리 양자 비트&amp;rsquo;를 구축하는 이론이 확립되어 있습니다(표면 부호 등).
그러나 1개의 논리 양자 비트를 만들기 위해 1000～1만 개의 물리 양자 비트가 필요하다고 합니다. 수천 개의 논리 양자 비트를 사용하여 쇼어의 알고리즘 등을 실행하려면 전체적으로 수백만에서 수천만 개의 물리 양자 비트를 가진 거대한 시스템이 필요해집니다.&lt;/p>
&lt;p>현재 우리가 있는 시기는 &lt;strong>NISQ(Noisy Intermediate-Scale Quantum: 노이즈가 있는 중규모 양자)&lt;/strong> 디바이스의 시대라고 불립니다. 오류 정정을 갖추지 못하고 수십～수백 양자 비트로 작동하는 과도기적인 기계입니다.
궁극의 목표인 완전히 오류 정정이 가능한 &lt;strong>&amp;lsquo;결함 허용 양자 컴퓨터(Fault-Tolerant Quantum Computer: FTQC)&amp;rsquo;&lt;/strong> 의 실현에는 아직 10년～수십 년이라는 장기적인 연구 개발이 필요하다고 전문가들은 예측하고 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="제6장-양자-컴퓨터의-역사와-미래-전망">제6장: 양자 컴퓨터의 역사와 미래 전망
&lt;/h2>&lt;p>마지막으로 양자 컴퓨터가 어떻게 탄생했고 앞으로 어디를 향해 갈 것인지 조망해 보겠습니다.&lt;/p>
&lt;h3 id="이론의-탄생부터-양자-우월성-실증까지">이론의 탄생부터 &amp;lsquo;양자 우월성&amp;rsquo; 실증까지
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>1980년대&lt;/strong> : 물리학자 폴 베니오프와 리처드 파인만이 양자역학의 원리를 이용한 컴퓨터의 개념을 제창. &amp;ldquo;자연을 시뮬레이션하려면 양자역학을 사용해라&amp;quot;라는 말이 시발점이 되었습니다.&lt;/li>
&lt;li>&lt;strong>1994년&lt;/strong> : 피터 쇼어가 소인수분해의 양자 알고리즘(쇼어의 알고리즘)을 발표. 세계에 충격을 주고 막대한 연구 자금이 흘러 들어가는 계기가 됩니다.&lt;/li>
&lt;li>&lt;strong>1996년&lt;/strong> : 로브 그로버가 데이터 검색을 고속화하는 그로버의 알고리즘을 발표.&lt;/li>
&lt;li>**2019년 ** : 역사적인 이정표. Google이 53 양자 비트의 초전도 프로세서 &amp;lsquo;Sycamore&amp;rsquo;를 사용하여, 고전 슈퍼컴퓨터로 1만 년이 걸릴(것으로 여겨졌던) 난수 생성의 검증 계산을 약 200초 만에 완료했다고 발표. 세계 최초의 &lt;strong>&amp;lsquo;양자 우월성(Quantum Supremacy)&amp;rsquo;&lt;/strong> 실증 선언으로 큰 화제를 불렀습니다(이후 IBM 등이 고전 슈퍼컴퓨터 측의 알고리즘을 개선하여 며칠 만에 계산 가능하다고 반론하는 등 뜨거운 논쟁이 오갔습니다).&lt;/li>
&lt;li>&lt;strong>2023년 이후&lt;/strong> : IBM이 1000 양자 비트를 넘는 프로세서 &amp;lsquo;Condor&amp;rsquo;를 발표. 또한 하버드 대학 등이 &amp;lsquo;논리 양자 비트&amp;rsquo;의 생성과 조작에 성공하는 등 오류 정정 기술의 초기 실증이 속속 보고되기 시작하고 있습니다.&lt;/li>
&lt;/ul>
&lt;h3 id="차세대-테크놀로지를-향하여">차세대 테크놀로지를 향하여
&lt;/h3>&lt;p>양자 컴퓨터는 단순한 &amp;lsquo;클럭 수가 빠른 차세대 CPU&amp;rsquo;가 아닙니다. 계산이라는 행위 자체의 개념을 미시 세계를 지배하는 양자역학의 규칙으로 근본부터 다시 쓰는, 그야말로 정보 과학에서의 패러다임 시프트입니다.&lt;/p>
&lt;p>우리가 살아가는 동안 주머니에 들어가는 &amp;lsquo;퍼스널 양자 스마트폰&amp;rsquo;을 가지게 될 일은 없을 것입니다(그럴 필요도 없습니다). 하지만 AWS나 Azure 같은 클라우드 네트워크 너머에 있는 거대한 양자 데이터 센터가 어느 날 갑자기 불치병의 특효약을 발견하거나, 지구 온난화를 해결할 꿈의 클린 에너지 재료(예를 들어 상온에서 대기 중의 질소로부터 암모니아를 합성하는 촉매 등)를 도출해내는 미래는 확실히 다가오고 있습니다.&lt;/p>
&lt;p>지금은 아직 거대한 진공관의 열로 방 안이 더워지면서 천공 카드로 움직이던 1940년대의 에니악(ENIAC)과 같은 여명기에 해당합니다. 하지만 전 세계 최고 수준의 연구자들과 엔지니어들이 지혜를 짜내며 매일같이 기술적인 돌파구가 보고되고 있습니다.
이 새로운 &amp;lsquo;계산의 여명&amp;rsquo;이 진화하는 과정을 실시간으로 목격할 수 있는 우리는 역사상 매우 흥미진진한 시대를 살고 있다고 할 수 있겠습니다.&lt;/p>
&lt;p>양자의 세계로 향하는 문은 이제 막 열렸을 뿐입니다. 앞으로의 동향에서 눈을 뗄 수 없습니다.&lt;/p>
&lt;hr>
&lt;p>&lt;em>이 기사는 양자 컴퓨팅의 기본 개념을 비즈니스맨이나 기술에 관심이 있는 일반인을 위해 알기 쉽게 해설하는 것을 목적으로 하고 있습니다. 엄밀한 수학적·물리학적 정의(브라-켓 표기법이나 복소 확률 진폭의 세부 사항 등)에서는 일부 간략화된 부분이 있음을 양해 바랍니다.&lt;/em>&lt;/p></description></item><item><title>[PQC] 양자 컴퓨터 시대의 차세대 암호 ''양자 내성 암호''의 전모</title><link>http://kenji.blog/ko/p/post-quantum-cryptography/</link><pubDate>Sat, 05 Sep 2026 22:09:22 +0900</pubDate><guid>http://kenji.blog/ko/p/post-quantum-cryptography/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-cryptography/post_quantum_cryptography_1788613735417.jpg" alt="Featured image of post [PQC] 양자 컴퓨터 시대의 차세대 암호 ''양자 내성 암호''의 전모" />&lt;h2 id="들어가며-양자-컴퓨터가-가져올-암호-기술에-대한-위협">들어가며: 양자 컴퓨터가 가져올 암호 기술에 대한 &amp;lsquo;위협&amp;rsquo;
&lt;/h2>&lt;p>현재 우리가 인터넷상에서 일상적으로 수행하는 통신——온라인 뱅킹 결제, 웹사이트 탐색(HTTPS), 메시지 앱에서의 주고받기, 그리고 블록체인이나 암호화폐 거래에 이르기까지——그 중 많은 것들이 &amp;lsquo;공개키 암호&amp;rsquo;라고 불리는 기술에 의해 보호받고 있습니다. 구체적으로는 RSA 암호나 타원곡선 암호(ECC)와 같은 알고리즘이 현대 디지털 사회의 신뢰성을 지탱하는 근간이 되고 있습니다.&lt;/p>
&lt;p>이러한 암호 방식은 &amp;lsquo;거대한 수의 소인수 분해&amp;rsquo;나 &amp;lsquo;이산 대수 문제&amp;rsquo;와 같이, 현재의 고전적 컴퓨터(슈퍼컴퓨터를 포함한)로는 푸는 데 천문학적인 시간이 걸리는 수학적 난제를 안전성의 근거로 삼고 있습니다. 하지만 최근 눈부신 발전을 거듭하고 있는 &lt;strong>&amp;lsquo;양자 컴퓨터&amp;rsquo;&lt;/strong> 가 실용화되면 이러한 전제가 근본부터 뒤집히게 됩니다.&lt;/p>
&lt;p>1994년 피터 쇼어(Peter Shor)가 발표한 &amp;lsquo;쇼어의 알고리즘&amp;rsquo;은 충분한 성능을 가진 양자 컴퓨터를 이용하면 소인수 분해나 이산 대수 문제를 극히 짧은 시간에 풀 수 있음을 수학적으로 증명했습니다. 이는 곧 현재의 인터넷을 보호하고 있는 암호 통신이 장래에는 모두 해독되어 버릴 위험(Y2Q: Years to Quantum, 또는 Q-Day라고 불리는 문제)을 의미합니다.&lt;/p>
&lt;p>더욱 심각한 것은 &amp;lsquo;Harvest Now, Decrypt Later(지금 데이터를 훔쳐서 축적하고, 장래에 암호를 풀 수 있게 되었을 때 해독한다)&amp;lsquo;라는 공격 수법의 존재입니다. 국가 기밀정보나 기업의 지적 재산, 개인 생체정보 등 수십 년에 걸쳐 기밀성을 유지해야 하는 데이터는 이미 현재, 미래의 해독을 전제로 한 탈취의 대상이 되고 있을 가능성이 있습니다.&lt;/p>
&lt;p>이 미증유의 위기에 대응하기 위해 전 세계의 암호 학자나 연구 기관이 총력을 기울여 개발을 진행하고 있는 것이, 양자 컴퓨터의 공격에 대해서도 안전성을 유지할 수 있는 차세대 암호 기술, &lt;strong>양자 내성 암호(PQC: Post-Quantum Cryptography)&lt;/strong> 입니다. 본 기사에서는 PQC의 기초부터 주요 알고리즘의 구조, 그리고 미국 국립표준기술연구소(NIST)가 추진하는 세계적인 표준화의 최신 동향까지 자세히 해설합니다.&lt;/p>
&lt;hr>
&lt;h2 id="양자-내성-암호pqc란-무엇인가">양자 내성 암호(PQC)란 무엇인가?
&lt;/h2>&lt;p>양자 내성 암호(Post-Quantum Cryptography, PQC)란, 기존의 고전적 컴퓨터상에서도 동작하며 장래에 등장할 대규모 양자 컴퓨터에 의한 공격(쇼어의 알고리즘 등)에 대해서도 내성을 갖도록 설계된 암호 알고리즘의 총칭입니다.&lt;/p>
&lt;p>자주 혼동하기 쉬운 기술로 &amp;lsquo;양자 암호(Quantum Cryptography)&amp;lsquo;나 &amp;lsquo;양자 키 분배(QKD)&amp;lsquo;가 있습니다만, 이들은 전혀 다른 접근 방식입니다. 양자 암호(QKD)는 양자 역학의 물리 법칙(관측하면 상태가 변화하는 성질 등)을 이용하여 통신 경로상의 도청을 물리적으로 불가능하게 만드는 하드웨어 기반 기술입니다. 전용 광케이블이나 특수 기기가 필요하며, 도입 비용이나 거리 제한이라는 과제가 있습니다.&lt;/p>
&lt;p>반면, &lt;strong>PQC는 어디까지나 &amp;lsquo;수학&amp;rsquo;을 기반으로 한 소프트웨어 기반의 암호 기술&lt;/strong> 입니다. 따라서 기존의 인터넷 인프라, 서버, 스마트폰, 브라우저 등에 소프트웨어 업데이트로 통합하는 것이 가능하여, 현실 사회로의 적용성이 매우 높은 것이 특징입니다. 전 세계의 IT 기업이나 정부 기관은 현재 사용하고 있는 RSA나 ECC를 이 PQC로 교체(마이그레이션)하는 것을 급선무로 삼고 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="pqc를-지탱하는-4가지-주요-수학적-접근">PQC를 지탱하는 4가지 주요 수학적 접근
&lt;/h2>&lt;p>양자 컴퓨터를 사용해도 효율적으로 풀 수 없는 수학적 난제(NP 난해 문제 등)를 기반으로 다양한 PQC 알고리즘이 제안되고 있습니다. 여기에서는 현재 주류가 되고 있는 주요 4가지 카테고리를 소개합니다.&lt;/p>
&lt;h3 id="양자-내성-암호pqc의-주요-접근-방식">양자 내성 암호(PQC)의 주요 접근 방식
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">graph&lt;/span> &lt;span class="n">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">양자&lt;/span> &lt;span class="err">내성&lt;/span> &lt;span class="err">암호&lt;/span> &lt;span class="n">PQC&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">격자&lt;/span> &lt;span class="err">기반&lt;/span> &lt;span class="err">암호&lt;/span> &lt;span class="n">Lattice&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">H&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">해시&lt;/span> &lt;span class="err">기반&lt;/span> &lt;span class="err">암호&lt;/span> &lt;span class="n">Hash&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">M&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">다변수&lt;/span> &lt;span class="err">다항식&lt;/span> &lt;span class="err">암호&lt;/span> &lt;span class="n">Multivariate&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">C&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="err">부호&lt;/span> &lt;span class="err">기반&lt;/span> &lt;span class="err">암호&lt;/span> &lt;span class="n">Code&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">L&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">203&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ML&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">KEM&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">L&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L2&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">204&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ML&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">DSA&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">H&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">H1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">205&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">SLH&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">DSA&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">style&lt;/span> &lt;span class="n">PQC&lt;/span> &lt;span class="n">fill&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="c1">#f9f,stroke:#333,stroke-width:2px&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="1-격자-기반-암호lattice-based-cryptography">1. 격자 기반 암호(Lattice-based Cryptography)
&lt;/h3>&lt;p>현재 PQC 분야에서 가장 유망하게 여겨지며 주류가 되고 있는 것이 이 &amp;lsquo;격자 암호&amp;rsquo;입니다. 격자 암호는 다차원 공간에 규칙적으로 배열된 점(격자점)에 관한 문제를 안전성의 근거로 삼고 있습니다. 유명한 문제로는 &amp;lsquo;최단 벡터 문제(SVP: Shortest Vector Problem)&amp;lsquo;나 &amp;lsquo;LWE 문제(Learning With Errors)&amp;rsquo; 등이 있습니다.&lt;/p>
&lt;p>&lt;strong>구조 개요:&lt;/strong>
매우 차원이 높은(수백～수천 차원) 공간 내에 무수히 많은 점이 격자 모양으로 배열되어 있다고 상상해 보십시오. 어느 특정 격자점을 찾는 것은 2차원이나 3차원이라면 간단하지만, 수백 차원이 되면 고전 컴퓨터든 양자 컴퓨터든 효율적으로 찾아내는 알고리즘은 발견되지 않았습니다. 특히 LWE 문제는 &amp;lsquo;연립 일차 방정식에 의도적으로 작은 노이즈(오차)를 더하면, 원래 변수를 추측하는 것이 극적으로 어려워진다&amp;rsquo;는 성질을 이용하고 있습니다.&lt;/p>
&lt;p>&lt;strong>장점:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>키 캡슐화(KEM)와 디지털 서명 모두에 적용 가능.&lt;/li>
&lt;li>처리 속도가 매우 빠름(RSA나 ECC보다 빠를 수도 있음).&lt;/li>
&lt;li>키 크기나 암호문 크기가 비교적 작고 균형이 좋음.&lt;/li>
&lt;/ul>
&lt;p>현재 NIST가 표준화하고 있는 알고리즘의 상당수(ML-KEM이나 ML-DSA 등)가 이 격자 기반 암호를 채택하고 있습니다.&lt;/p>
&lt;h3 id="2-해시-기반-암호hash-based-cryptography">2. 해시 기반 암호(Hash-based Cryptography)
&lt;/h3>&lt;p>해시 기반 암호는 디지털 서명에 특화된 PQC 알고리즘입니다. 안전성의 근거는 SHA-2나 SHA-3과 같은 안전한 &amp;lsquo;암호학적 해시 함수&amp;rsquo;가 가진 충돌 내성이나 일방향성에만 의존합니다.&lt;/p>
&lt;p>&lt;strong>구조 개요:&lt;/strong>
&amp;lsquo;램포트 서명(Lamport Signature)&amp;lsquo;이라고 불리는, 한 번밖에 쓸 수 없는 일회용 서명 방식(원타임 서명)을 출발점으로 삼습니다. 이를 &amp;lsquo;머클 트리(Merkle Tree)&amp;lsquo;라고 불리는 트리 구조의 데이터 형식으로 묶음으로써, 1개의 키 쌍으로 여러 번의 서명을 가능하게 합니다.&lt;/p>
&lt;p>&lt;strong>장점:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>보안의 근거가 지극히 견고하며, &amp;lsquo;해시 함수가 안전한 한 안전하다&amp;rsquo;는 강력한 증명이 있음.&lt;/li>
&lt;li>수학적 구조에 대한 의존이 적어, 예기치 않은 해독법이 발견될 위험이 낮음.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>단점:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>키 캡슐화(KEM)에는 사용할 수 없으며 디지털 서명에만 가능.&lt;/li>
&lt;li>서명 크기가 커지는 경향이 있음.&lt;/li>
&lt;li>&amp;lsquo;상태 저장(Stateful)&amp;lsquo;과 &amp;lsquo;상태 비저장(Stateless)&amp;lsquo;이 있으며, 상태 저장(XMSS 등)은 키 사용 횟수를 엄격히 관리해야 하므로 구현 난이도가 높음.&lt;/li>
&lt;/ul>
&lt;p>NIST는 상태 비저장 해시 기반 서명으로 &amp;lsquo;SLH-DSA(구 SPHINCS+)&amp;lsquo;를 표준화하고 있습니다.&lt;/p>
&lt;h3 id="3-다변수-다항식-기반-암호multivariate-cryptography">3. 다변수 다항식 기반 암호(Multivariate Cryptography)
&lt;/h3>&lt;p>다변수 다항식 암호는 다수의 변수를 가진 연립 이차 다항식 시스템을 푸는 것의 어려움(MQ 문제: Multivariate Quadratic problem)을 안전성의 근거로 삼는 방식입니다. 이 문제는 NP 난해인 것으로 알려져 있습니다.&lt;/p>
&lt;p>&lt;strong>구조 개요:&lt;/strong>
송신자는 공개키로 전달된 다수의 변수를 가진 복잡한 방정식에 평문(또는 해시값)을 대입하여 암호문(서명)을 작성합니다. 정당한 수신자는 비밀키로서 &amp;lsquo;방정식의 구조를 쉽게 풀 수 있는 형태로 변환하는 숨겨진 정보(트랩도어)&amp;lsquo;를 가지고 있으며, 이를 사용하여 복호화(또는 서명 검증)를 수행합니다.&lt;/p>
&lt;p>&lt;strong>장점:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>서명 크기가 매우 작음.&lt;/li>
&lt;li>서명 검증 속도가 지극히 빠름. 리소스가 제한된 IoT 디바이스 등에 적합.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>단점:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>공개키 크기가 매우 큼(수십 킬로바이트～수백 킬로바이트가 될 수도 있음).&lt;/li>
&lt;li>과거에 유력한 알고리즘(Rainbow 등)이 고전적인 공격에 의해 파훼된 사례가 있어, 안전성에 대한 신뢰를 확립하는 것이 다른 방식에 비해 어려운 측면이 있음.&lt;/li>
&lt;/ul>
&lt;h3 id="4-부호-기반-암호code-based-cryptography">4. 부호 기반 암호(Code-based Cryptography)
&lt;/h3>&lt;p>부호 기반 암호는 통신 경로상의 오류를 정정하기 위해 사용되는 &amp;lsquo;오류 정정 부호&amp;rsquo; 이론을 암호에 응용한 것입니다. 1978년에 제안된 &amp;lsquo;매켈리스(McEliece) 암호&amp;rsquo;가 가장 유명하며, PQC 중에서도 가장 역사가 깊은 것 중 하나입니다.&lt;/p>
&lt;p>&lt;strong>구조 개요:&lt;/strong>
송신자는 수신자의 공개키(특정 구조를 은폐한 오류 정정 부호의 생성 행렬)를 이용하여 평문을 인코딩하고, 의도적인 오류(노이즈)를 추가하여 전송합니다. 수신자는 비밀키를 사용하여 오류를 제거하고 평문을 꺼냅니다. 암호 해독자는 구조를 모르는 단순한 무작위 부호에서 오류 정정을 해야 하며, 이는 &amp;lsquo;일반적 신드롬 복호 문제&amp;rsquo;로 불리며 NP 난해임이 증명되어 있습니다.&lt;/p>
&lt;p>&lt;strong>장점:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>40년 이상의 긴 세월 동안 철저하게 연구되어, 지금까지 유효한 공격이 발견되지 않았으므로 안전성의 신뢰성이 극히 높음.&lt;/li>
&lt;li>암호화·복호화 처리가 빠름.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>단점:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>공개키 크기가 매우 거대함(수 메가바이트가 될 수도 있음). 따라서 통신 대역이나 메모리에 제한이 있는 환경(TLS 핸드셰이크 등)에서의 이용이 어려움.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="nist에-의한-pqc-표준화의-최신-동향">NIST에 의한 PQC 표준화의 최신 동향
&lt;/h2>&lt;p>미국 국립표준기술연구소(NIST)는 2016년부터 전 세계를 대상으로 차세대 양자 내성 암호 알고리즘의 공모를 개시하여, 수년간에 걸친 엄격한 평가와 라운드를 거듭해 왔습니다.&lt;/p>
&lt;p>2024년, NIST는 마침내 정식 연방 정보 처리 표준(FIPS)으로서 다음의 3가지 알고리즘을 발표했습니다. 이로써 전 세계의 조직이 프로덕션 환경에서 구현을 시작하기 위한 견고한 토대가 완성된 셈입니다.&lt;/p>
&lt;h3 id="제정된-fips-표준-2024년">제정된 FIPS 표준 (2024년)
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>FIPS 203: ML-KEM (구 명칭: CRYSTALS-Kyber)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>용도:&lt;/strong> 키 캡슐화 메커니즘(KEM) / 암호화·키 공유&lt;/li>
&lt;li>&lt;strong>기반 기술:&lt;/strong> 격자 암호(Module-LWE)&lt;/li>
&lt;li>&lt;strong>특징:&lt;/strong> 키 크기나 속도의 밸런스가 매우 좋아, 웹 통신(TLS)이나 안전한 메시징 앱 등 일반적인 인터넷 용도의 기본 PQC 키 공유로 기능합니다.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>FIPS 204: ML-DSA (구 명칭: CRYSTALS-Dilithium)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>용도:&lt;/strong> 디지털 서명&lt;/li>
&lt;li>&lt;strong>기반 기술:&lt;/strong> 격자 암호(Module-LWE)&lt;/li>
&lt;li>&lt;strong>특징:&lt;/strong> 디지털 서명의 주요 표준. 효율적인 처리가 가능하여, 소프트웨어 서명이나 문서 인증 등 모든 전자 서명 용도의 새로운 표준이 됩니다.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>FIPS 205: SLH-DSA (구 명칭: SPHINCS+)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>용도:&lt;/strong> 디지털 서명&lt;/li>
&lt;li>&lt;strong>기반 기술:&lt;/strong> 해시 기반 암호(상태 비저장)&lt;/li>
&lt;li>&lt;strong>특징:&lt;/strong> 만약 장래에 격자 암호에서 취약성이 발견될 경우의 백업으로 기능하기 때문에 극히 중요한 역할을 담당합니다. 서명 크기는 커지지만, 장기적인 신뢰성이 요구되는 용도에 적합합니다.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h3 id="더욱-다양한-방식의-추구">더욱 다양한 방식의 추구
&lt;/h3>&lt;p>NIST는 최초의 표준화 프로세스를 완료한 한편, 더 많은 알고리즘의 탐색을 계속하고 있습니다. 특히 &amp;lsquo;격자 암호&amp;rsquo;에 표준이 편중되어 있기 때문에, &lt;strong>알고리즘의 다양성(Crypto Diversity)&lt;/strong> 을 확보하는 것이 중요하게 여겨지고 있습니다. 키 공유의 백업 표준으로서 부호 기반 암호 등의 평가가 진행되고 있으며, PQC의 기반은 향후 더욱 견고해질 예정입니다.&lt;/p>
&lt;hr>
&lt;h2 id="pqc로의-이행-시나리오와-과제-암호-민첩성의-중요성">PQC로의 이행 시나리오와 과제: &amp;lsquo;암호 민첩성&amp;rsquo;의 중요성
&lt;/h2>&lt;p>NIST로부터 정식 표준 규격이 릴리스됨에 따라, 전 세계의 정부 기관, 금융 기관, 테크 기업은 기존의 RSA/ECC에서 PQC로의 이행(마이그레이션)을 본격화할 것입니다. NSA(미국 국가안보국) 등의 가이드라인에서도 조기 이행 완료가 권장되고 있습니다.&lt;/p>
&lt;h3 id="하이브리드-접근법의-채택">하이브리드 접근법의 채택
&lt;/h3>&lt;p>PQC 알고리즘은 새롭기 때문에, 고전적인 암호와 비교하면 &amp;lsquo;시간의 시련&amp;rsquo;을 거치지 않았습니다. 구현에 숨어있는 버그나 새로운 공격 수법이 발견될 위험을 고려하여, 과도기에는 &lt;strong>&amp;lsquo;하이브리드 방식&amp;rsquo;&lt;/strong> 이 권장되고 있습니다. 이는 실적이 있는 기존 암호(예: ECDHE)와 새로운 PQC(예: ML-KEM)를 조합하여 키 교환을 수행하는 방법입니다. 현재 주요 브라우저나 클라우드 서비스에서는 이 방식의 시험 도입이 급속히 진행되고 있습니다.&lt;/p>
&lt;h3 id="암호-민첩성crypto-agility의-실현">암호 민첩성(Crypto-Agility)의 실현
&lt;/h3>&lt;p>기업이나 시스템 개발자가 향후 가장 의식해야 할 것은 &lt;strong>&amp;lsquo;암호 민첩성(Crypto-Agility)&amp;rsquo;&lt;/strong> 의 확보입니다. 장래 알고리즘에 결함이 발견되거나 새로운 표준이 등장했을 때, 시스템을 멈추지 않고 신속하게 암호 알고리즘을 교체·업데이트할 수 있는 유연한 아키텍처 설계가 필수적입니다.&lt;/p>
&lt;p>자사 시스템 내의 &amp;lsquo;어디에서&amp;rsquo; &amp;lsquo;어떤 암호가&amp;rsquo; &amp;lsquo;무슨 목적으로&amp;rsquo; 사용되고 있는지를 정확히 파악하는 암호 인벤토리(CBOM: Cryptography Bill of Materials)의 작성이 PQC 이행을 향한 중요한 첫걸음이 됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="마무리-다가올-q-day에-대비하여">마무리: 다가올 &amp;lsquo;Q-Day&amp;rsquo;에 대비하여
&lt;/h2>&lt;p>양자 컴퓨터의 진화는 인류에게 막대한 혜택을 가져다주는 한편, 현재 디지털 사회의 근간인 암호 보안에 대한 최대의 위협이기도 합니다. 양자 내성 암호(PQC)는 더 이상 &amp;lsquo;먼 미래의 연구 주제&amp;rsquo;가 아닙니다. NIST에 의한 FIPS 표준 발행이라는 이정표를 거쳐, PQC는 본격적인 &amp;lsquo;구현과 이행&amp;rsquo; 단계로 돌입했습니다.&lt;/p>
&lt;p>&amp;lsquo;Harvest Now, Decrypt Later&amp;rsquo;의 위협을 고려한다면, 기밀성이 높은 데이터를 다루는 모든 조직에게 있어 PQC로의 이행은 &amp;lsquo;지금 당장&amp;rsquo; 착수해야 할 최우선 과제입니다. 차세대 암호 기술을 깊이 이해하고, 시스템의 암호 민첩성을 높임으로써, 다가올 양자 컴퓨터 시대를 안전하게 극복해 나갑시다.&lt;/p></description></item><item><title>양자 컴퓨터는 정말 RSA 암호를 파괴할 것인가? ~쇼어의 알고리즘과 현재의 도달점~</title><link>http://kenji.blog/ko/p/shors-algorithm-and-rsa-breaking/</link><pubDate>Sat, 05 Sep 2026 22:09:21 +0900</pubDate><guid>http://kenji.blog/ko/p/shors-algorithm-and-rsa-breaking/</guid><description>&lt;img src="http://kenji.blog/p/shors-algorithm-and-rsa-breaking/quantum_breaking_rsa_1788613722990.jpg" alt="Featured image of post 양자 컴퓨터는 정말 RSA 암호를 파괴할 것인가? ~쇼어의 알고리즘과 현재의 도달점~" />&lt;h2 id="시작하며-암호-기술과-양자-컴퓨터의-교차점">시작하며: 암호 기술과 양자 컴퓨터의 교차점
&lt;/h2>&lt;p>현대 인터넷 사회에서 통신의 비밀을 지키기 위한 기반이 되고 있는 것이 &amp;lsquo;공개키 암호&amp;rsquo;입니다. 그 중에서도 대표적인 것이 1977년 Ron Rivest, Adi Shamir, Leonard Adleman 세 사람에 의해 개발된 &amp;lsquo;RSA 암호&amp;rsquo;입니다. 우리가 매일 이용하는 온라인 쇼핑 결제, 웹사이트 열람(HTTPS), 이메일 송수신에 이르기까지 RSA 암호는 인터넷 인프라의 심장부로서 기능하고 있습니다.&lt;/p>
&lt;p>그러나 &amp;lsquo;양자 컴퓨터&amp;rsquo;의 등장으로 인해 이러한 안전성이 근본부터 뒤집힐 가능성이 지적되고 있습니다. 미디어에서는 &amp;ldquo;양자 컴퓨터가 완성되면 전 세계의 비밀번호나 암호가 몇 초 만에 해독되어 버린다&amp;quot;는 등 선정적인 헤드라인이 장식되기도 합니다. 과연 그것은 사실일까요?&lt;/p>
&lt;p>이 글에서는 고전적인 암호 해독 기법인 GNFS(일반 수체 체)와 양자 컴퓨터를 이용한 암호 해독 알고리즘의 결정판인 &amp;lsquo;쇼어의 알고리즘(Shor&amp;rsquo;&amp;rsquo;s Algorithm)&amp;lsquo;의 구조를 깊이 파헤쳐 봅니다. 양자 푸리에 변환이나 주기 발견과 같은 고도의 개념을 알기 쉽게 해설하고, 현재의 NISQ(Noisy Intermediate-Scale Quantum) 시대에 있어서 양자 하드웨어의 현황과, 실제로 RSA-2048을 깨기 위해 필요한 난관들에 대해 상세히 검증해 보겠습니다.&lt;/p>
&lt;hr>
&lt;h2 id="rsa-암호의-근간-소인수-분해의-어려움">RSA 암호의 근간: 소인수 분해의 어려움
&lt;/h2>&lt;p>RSA 암호의 안전성은 수학에서의 매우 단순한 비대칭성에 의존하고 있습니다. 그것은 &amp;ldquo;두 개의 거대한 소수를 곱하는 것은 간단하지만, 그 곱한 결과(합성수)로부터 원래의 두 소수를 찾아내는(소인수 분해하는) 것은 극히 어렵다&amp;quot;는 사실입니다.&lt;/p>
&lt;p>예를 들어, $ p = 61 $, $ q = 53 $ 이라는 두 개의 소수가 있다고 가정해 봅시다. 이 곱셈 $ N = p \times q = 3233 $ 을 계산하는 것은 순식간입니다. 하지만 &amp;lsquo;3233&amp;rsquo;이라는 숫자만 주어지고 &amp;ldquo;이것은 어느 소수와 어느 소수의 곱셈인가?&amp;ldquo;를 푸는 것은 숫자가 커질수록 계산량이 폭발적으로 증가합니다.&lt;/p>
&lt;p>현재 주류가 되고 있는 RSA-2048에서는 키 길이가 2048비트, 즉 10진수로 약 617자리에 달하는 거대한 합성수 $ N $ 이 사용되고 있습니다. 이 $ N $ 을 소인수 분해할 수 있다면, 암호는 해독된 거나 다름없게 됩니다.&lt;/p>
&lt;h3 id="고전-컴퓨터의-도전-gnfs-일반-수체-체">고전 컴퓨터의 도전: GNFS (일반 수체 체)
&lt;/h3>&lt;p>소인수 분해 문제를 풀기 위해 수학자나 암호학자들은 오랜 세월에 걸쳐 다양한 알고리즘을 개발해 왔습니다. 그 중에서도 고전 컴퓨터에서 현재 가장 빠르다고 여겨지는 것이 &lt;strong>일반 수체 체(GNFS: General Number Field Sieve)&lt;/strong> 입니다.&lt;/p>
&lt;p>GNFS는 거대한 수 $ N $ 을 소인수 분해하기 위해, 정수환에서의 계산을 더 추상적인 대수체(Number Field)로 확장하여 해석하는 기법입니다. 대략적인 흐름은 다음과 같습니다.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>다항식의 선택&lt;/strong> : $ N $ 을 근으로 가지는, 적절한 차수와 계수를 가진 다항식 $ f(x) $ 를 찾습니다.&lt;/li>
&lt;li>&lt;strong>데이터 수집(체질)&lt;/strong> : 유리수체 및 대수체 위에서, 작은 소수(매끄러운 수, Smooth numbers)로 분해될 수 있는 수의 쌍을 대량으로 탐색합니다. 이 과정이 &amp;lsquo;체질(Sieving)&amp;lsquo;이라 불리며 가장 많은 시간을 필요로 하는 부분입니다.&lt;/li>
&lt;li>&lt;strong>행렬의 생성과 축약&lt;/strong> : 수집한 관계식을 바탕으로 거대한 희소 행렬(성분의 대부분이 0인 행렬)을 생성하고, 선형대수학적 기법(블록 란초스 방법 등)을 사용하여 해를 구합니다.&lt;/li>
&lt;li>&lt;strong>제곱근의 계산&lt;/strong> : 마지막으로 대수체 위에서 제곱근을 계산하여, $ N $ 의 인수(소인수)를 도출해 냅니다.&lt;/li>
&lt;/ol>
&lt;p>GNFS의 계산량은 점근적으로 $ O(\exp((\sqrt[3]{\frac{64}{9}} + o(1)) (\log N)^{\frac{1}{3}} (\log \log N)^{\frac{2}{3}})) $ 로 평가됩니다. 이는 &amp;lsquo;준지수함수적(Sub-exponential)&amp;rsquo; 시간 계산량이라 불립니다. 지수 시간보다는 빠르지만, 다항 시간(Polynomial time)보다는 훨씬 느린 계산량입니다.&lt;/p>
&lt;p>실제로 2020년에는 국제적인 연구팀이 GNFS를 사용하여 RSA-250(829비트, 250자리 합성수)의 소인수 분해에 성공했습니다. 이 계산에는 전 세계의 컴퓨터 자원을 끌어모아 약 2700 CPU 코어 연도라는 방대한 계산 시간을 소모했습니다. 그러나 이것이 2048비트가 되면, 필요한 계산량은 우주의 수명의 수조 배로 부풀어 오른다고 언급되고 있어, 현재의 슈퍼컴퓨터를 아무리 병렬로 가동시킨다 해도 고전적인 기법으로는 현실적인 시간 내에 해독하는 것이 불가능합니다.&lt;/p>
&lt;hr>
&lt;h2 id="양자-컴퓨터의-비장의-카드-쇼어의-알고리즘">양자 컴퓨터의 비장의 카드: 쇼어의 알고리즘
&lt;/h2>&lt;p>여기서 등장하는 것이 1994년 피터 쇼어(Peter Shor)에 의해 발표된 &amp;lsquo;쇼어의 알고리즘&amp;rsquo;입니다. 이 알고리즘은 소인수 분해 문제를 양자 컴퓨터 상에서 &lt;strong>다항 시간&lt;/strong> ( $ O((\log N)^3) $ ) 안에 풀 수 있다는 획기적인 것이었습니다. 준지수함수적 시간과 다항 시간의 차이는 결정적인 것이며, 이론상 양자 컴퓨터를 사용하면 RSA 암호는 완전히 파괴됨을 의미합니다.&lt;/p>
&lt;h3 id="쇼어의-알고리즘의-전체-흐름">쇼어의 알고리즘의 전체 흐름
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">graph TD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A[소인수 분해하고 싶은 수 N을 입력] --&amp;gt; B[랜덤한 정수 a를 선택]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt; C{a와 N의&amp;lt;br&amp;gt;최대공약수}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|1보다 크다| D[운 좋게 소인수를 발견!]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|1 즉, 서로소| E[양자 컴퓨터의 차례]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> E --&amp;gt; F[함수 f_x = a^x mod N 의&amp;lt;br&amp;gt;주기 r을 양자 푸리에 변환으로 구함]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F --&amp;gt; G{주기 r이 짝수 이고&amp;lt;br&amp;gt;a^r/2 ≢ -1 mod N}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt;|Yes| H[최대공약수 gcd_a^r/2 ± 1, N 을 계산]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> H --&amp;gt; I((소인수 분해 성공!))
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt;|No| B
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>쇼어의 알고리즘은 소인수 분해라는 문제를 직접 푸는 것이 아니라, 정수론의 정리를 이용하여 &amp;lsquo;주기 발견 문제(Period Finding Problem)&amp;lsquo;라는 별개의 문제로 변환하고, 그것을 양자 컴퓨터의 특성을 살려 고속으로 푸는 접근법을 취합니다.&lt;/p>
&lt;h3 id="단계-1-소인수-분해에서-주기-발견-문제로의-환원-고전적-처리">단계 1: 소인수 분해에서 주기 발견 문제로의 환원 (고전적 처리)
&lt;/h3>&lt;p>알고리즘의 첫 단계는 고전 컴퓨터에서 이루어집니다.
소인수 분해하고자 하는 수 $ N $ 에 대해, $ N $ 과 서로소인(최대공약수가 1인) 랜덤한 정수 $ a $ ( $ 1 &lt; a &lt; N $ )를 선택합니다. 만약 우연히도 최대공약수가 1이 아니라면, 그 시점에서 찾은 공약수가 $ N $ 의 소인수이므로 해독 완료이지만 확률은 극히 낮습니다.&lt;/p>
&lt;p>다음으로 이하의 모듈로 방정식 수열을 생각합니다.
$ f(x) = a^x \pmod N $&lt;/p>
&lt;p>이 함수 $ f(x) $ 에 $ x = 1, 2, 3, \dots $ 를 대입해 가면 값은 무작위인 것처럼 보이지만, 유한한 범위 내에서 계산하고 있기 때문에 반드시 어딘가에서 원래 값으로 돌아오고 같은 수열을 반복합니다. 이 반복의 주기를 $ r $ 이라고 부릅니다. 즉,
$ a^r \equiv 1 \pmod N $
이 되는 최소의 양의 정수 $ r $ 을 찾는 문제, 이것이 &amp;lsquo;주기 발견 문제&amp;rsquo;입니다.&lt;/p>
&lt;p>만약 이 주기 $ r $ 이 발견되고 $ r $ 이 짝수라면, $ a^r - 1 \equiv 0 \pmod N $ 이 되어 인수 분해 공식을 사용하여
$ (a^{r/2} - 1)(a^{r/2} + 1) \equiv 0 \pmod N $
와 같이 변형할 수 있습니다. 여기서 유클리드 호제법을 사용하여 $ N $ 과 $ a^{r/2} \pm 1 $ 의 최대공약수를 계산함으로써, $ N $ 의 소인수를 극히 높은 확률로 얻을 수 있습니다.&lt;/p>
&lt;p>고전 컴퓨터로 주기 $ r $ 을 찾기 위해서는 결국 지수 시간적인 단계가 필요해져 고속화할 수 없습니다. 하지만 양자 컴퓨터라면 이 주기 $ r $ 을 순식간에(다항 시간 안에) 찾을 수 있는 것입니다.&lt;/p>
&lt;h3 id="단계-2-양자-상태의-준비와-중첩">단계 2: 양자 상태의 준비와 중첩
&lt;/h3>&lt;p>여기서부터 양자 컴퓨터가 나설 차례입니다.
양자 컴퓨터는 &amp;lsquo;0&amp;rsquo;과 &amp;lsquo;1&amp;rsquo;의 상태를 동시에 가질 수 있는 &amp;lsquo;양자 비트(Qubit)&amp;lsquo;를 사용합니다. 쇼어의 알고리즘에서는 입력을 저장하는 레지스터(제1 레지스터)와 계산 결과를 저장하는 레지스터(제2 레지스터) 두 가지를 준비합니다.&lt;/p>
&lt;p>먼저 아다마르 게이트(Hadamard gate)라 불리는 양자 게이트 조작을 제1 레지스터의 모든 양자 비트에 적용합니다. 이로써 제1 레지스터는 생각할 수 있는 모든 $ x $ 의 값( $ 0 $ 부터 $ 2^n-1 $ 까지. $ n $ 은 충분히 큰 비트 수)의 &lt;strong>균등한 중첩 상태&lt;/strong> 가 됩니다.&lt;/p>
&lt;p>즉, 양자 컴퓨터의 내부에는 $ x=0, 1, 2, 3, \dots $ 이라는 무수한 입력값이 동시에 병행하여 존재하고 있는 상태가 만들어집니다.&lt;/p>
&lt;h3 id="단계-3-양자-모듈로-거듭제곱-quantum-modular-exponentiation">단계 3: 양자 모듈로 거듭제곱 (Quantum Modular Exponentiation)
&lt;/h3>&lt;p>다음으로 제1 레지스터의 중첩 상태를 입력으로 하여 $ f(x) = a^x \pmod N $ 을 계산하고, 그 결과를 제2 레지스터에 저장합니다.
이 계산은 양자 회로 상의 유니터리 변환으로서 실행되기 때문에, 중첩이 유지된 채 모든 $ x $ 에 대한 $ f(x) $ 의 계산이 &amp;lsquo;동시 병행적으로(양자 병렬성)&amp;rsquo; 이루어집니다.&lt;/p>
&lt;p>이 시점에서의 양자 시스템 전체의 공간은,
$ |x, a^x \bmod N\rangle $
이라는 상태의 방대한 중첩으로 되어 있습니다.&lt;/p>
&lt;p>그러나 여기서 단순히 제2 레지스터를 측정(관측)해 버리면, 랜덤한 $ a^x \bmod N $ 의 값이 단 하나만 확률적으로 선택되고, 그에 연동되어 제1 레지스터의 $ x $ 도 하나로 확정되어 버립니다. 이래서는 고전 컴퓨터로 한 번 계산한 것과 다를 바 없어, 주기 $ r $ 을 찾을 수 없습니다.&lt;/p>
&lt;p>양자역학의 규칙에서는 중첩 상태의 내용을 직접 들여다보는 것은 불가능합니다. 그렇다면 어떻게 전체의 &amp;lsquo;주기&amp;rsquo;라는 전역적인(global) 정보를 추출하는 것일까요?&lt;/p>
&lt;h3 id="단계-4-양자-푸리에-변환-qft-quantum-fourier-transform">단계 4: 양자 푸리에 변환 (QFT: Quantum Fourier Transform)
&lt;/h3>&lt;p>이 벽을 돌파하는 쇼어 알고리즘의 진면목이 바로 제1 레지스터에 대한 &lt;strong>양자 푸리에 변환(QFT)&lt;/strong> 의 적용입니다.&lt;/p>
&lt;p>측정을 실시하기 전에, 함수 $ f(x) $ 의 파동적 성질을 해석합니다. 제2 레지스터를 관측했다고 가정해 봅시다. 어떤 값 $ y $ 를 얻었다고 합시다. 그러면 제1 레지스터의 상태는 &amp;ldquo;$ a^x \pmod N = y $ 가 되는 모든 $ x $ 의 중첩&amp;quot;으로 수축됩니다.
이 $ x $ 의 값은 $ x_0, x_0 + r, x_0 + 2r, x_0 + 3r, \dots $ 와 같이 주기 $ r $ 의 간격으로 이산적으로 나열된 상태(일종의 빗 모양의 확률 진폭 분포)가 됩니다.&lt;/p>
&lt;p>이 상태에 대해 양자 푸리에 변환(QFT)을 적용합니다. 고전적인 이산 푸리에 변환이 시간 영역의 신호를 주파수 영역으로 변환하듯이, QFT는 양자 상태의 확률 진폭에 간섭을 일으킵니다.&lt;/p>
&lt;p>QFT를 걸면 양자 간섭 효과에 의해 주기 $ r $ 과 공명하지 않는(위상이 맞지 않는) 잘못된 답의 확률은 서로 상쇄되어 0에 가까워지고(상쇄 간섭), 주기 $ r $ 의 정보를 가진 올바른 답의 확률만이 증폭됩니다(보강 간섭).&lt;/p>
&lt;h3 id="단계-5-측정과-연분수-전개-고전적-후처리">단계 5: 측정과 연분수 전개 (고전적 후처리)
&lt;/h3>&lt;p>QFT 적용 후에 제1 레지스터를 측정하면, 매우 높은 확률로 $ c \approx \frac{j \cdot 2^n}{r} $ 이라는 형태에 가까운 정수 $ c $ 를 얻게 됩니다( $ j $ 는 미지의 정수, $ 2^n $ 은 레지스터의 크기).&lt;/p>
&lt;p>이 측정 결과 $ c $ 를 고전 컴퓨터로 가져와서 $ \frac{c}{2^n} \approx \frac{j}{r} $ 이라는 분수를 만듭니다. 그리고 수학적 기법인 &amp;lsquo;연분수 전개(Continued fraction expansion)&amp;lsquo;를 사용하여 근사치를 계산함으로써 분모인 주기 $ r $ 을 멋지게 찾아낼 수 있습니다.&lt;/p>
&lt;p>$ r $ 을 알게 되면, 남은 것은 단계 1의 공식을 사용하여 $ N $ 의 소인수를 계산하기만 하면 되며 RSA 암호는 완전히 해독됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="현재의-양자-컴퓨터nisq의-실력과-과제">현재의 양자 컴퓨터(NISQ)의 실력과 과제
&lt;/h2>&lt;p>이론적으로는 완벽한 쇼어의 알고리즘이지만, &amp;ldquo;내일이라도 당장 RSA 암호가 깨지는가?&amp;ldquo;라고 묻는다면 답은 명확히 &amp;ldquo;아니오&amp;quot;입니다. 그 이유는 현재의 양자 컴퓨터의 하드웨어 기술의 한계에 있습니다.&lt;/p>
&lt;h3 id="nisq-noisy-intermediate-scale-quantum-시대">NISQ (Noisy Intermediate-Scale Quantum) 시대
&lt;/h3>&lt;p>현재 우리가 살고 있는 것은 &amp;lsquo;NISQ&amp;rsquo;라 불리는 시대입니다. NISQ 디바이스는 수십에서 수백 개의 물리 양자 비트를 가지지만, 노이즈에 대해 극히 취약합니다.&lt;/p>
&lt;p>양자 비트는 열이나 전자파 등의 외부 환경의 영향을 받기 쉬워, 양자 상태가 깨져 버리는 &amp;lsquo;결어긋남(Decoherence, 양자 얽힘 상실)&amp;lsquo;이나 게이트 조작 시의 &amp;lsquo;게이트 에러&amp;rsquo;가 빈번하게 발생합니다. 쇼어의 알고리즘과 같이 매우 깊은(연산 단계 수가 방대한) 양자 회로를 실행하려고 하면, 계산 도중에 에러가 축적되어 최종적인 출력은 의미를 가지지 않는 완전한 노이즈가 되어 버립니다.&lt;/p>
&lt;h3 id="물리-양자-비트와-논리-양자-비트">물리 양자 비트와 논리 양자 비트
&lt;/h3>&lt;p>이 에러 문제를 해결하기 위해 필수불가결한 것이 &amp;lsquo;양자 오류 정정(Quantum Error Correction)&amp;lsquo;입니다.
고전 컴퓨터에서도 오류 정정 코드가 사용되고 있지만, 양자 상태의 복제를 금지하는 &amp;lsquo;복제 불가능성 정리(No-cloning theorem)&amp;lsquo;가 있기 때문에 양자 오류 정정은 매우 복잡합니다.&lt;/p>
&lt;p>양자 오류 정정에서는 &amp;lsquo;표면 부호(Surface Code)&amp;rsquo; 등의 기술을 이용하여, 다수의 노이즈투성이인 &amp;lsquo;물리 양자 비트&amp;rsquo;를 조합함으로써 에러가 없는 이상적인 하나의 &amp;lsquo;논리 양자 비트&amp;rsquo;를 만들어 냅니다.&lt;/p>
&lt;p>현재의 에러율을 전제로 하면, 하나의 논리 양자 비트를 만들기 위해서는 약 1,000～10,000개의 물리 양자 비트가 필요해진다고 추산되고 있습니다. 이를 &amp;lsquo;오류 정정의 오버헤드&amp;rsquo;라고 부릅니다.&lt;/p>
&lt;h3 id="rsa-2048을-파괴하기-위해-필요한-자원이란">RSA-2048을 파괴하기 위해 필요한 자원이란?
&lt;/h3>&lt;p>그렇다면 실제로 RSA-2048을 해독하기 위해, 쇼어의 알고리즘을 구동시키려면 어느 정도의 자원이 필요할까요?&lt;/p>
&lt;p>Craig Gidney (Google) 와 Martin Ekerå 의 2021년 논문에 따른 획기적인 자원 추정에 의하면, 최적화된 쇼어의 알고리즘을 사용하고 표면 부호에 의한 오류 정정을 수행할 경우 다음과 같은 자원이 필요하다고 합니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>논리 양자 비트 수&lt;/strong> : 약 4,096 개&lt;/li>
&lt;li>&lt;strong>물리 양자 비트 수 ** : ** 약 2000만 개&lt;/strong> (에러율 $10^{-3}$ 정도를 가정)&lt;/li>
&lt;li>&lt;strong>계산 시간&lt;/strong> : 약 8시간 (물리 게이트 조작이 수백만～수십억 회 필요)&lt;/li>
&lt;/ul>
&lt;p>이에 반해, 현재의 양자 하드웨어의 도달점은 어떨까요?
2023년 말에 IBM이 발표한 초전도 양자 프로세서 &amp;lsquo;Condor(콘도르)&amp;lsquo;는 1,121 양자 비트입니다. 또한 논리 양자 비트의 생성과 관련된 획기적인 연구(하버드 대학이나 QuEra사 등에 의한 중성 원자 양자 컴퓨터를 이용한 48개의 논리 양자 비트 생성 등)도 등장하고 있지만, 아직 &amp;ldquo;노이즈 없는 완벽한 연산&amp;quot;을 장시간 연속으로 실행할 수 있는 단계에는 이르지 못했습니다.&lt;/p>
&lt;p>수천 개의 물리 양자 비트에서 &lt;strong>2000만 개&lt;/strong> 의 실용적인 물리 양자 비트(게다가 상호 결선되어 극저온에서 안정적으로 동작하고 초고속으로 제어 신호를 처리할 수 있는 시스템)로의 스케일업은 공학적으로 엄청난 장벽(배선 문제, 냉각 능력의 한계, 제어 전자장치의 비대화)이 존재합니다. 많은 전문가들은 RSA-2048을 해독할 수 있는 &amp;lsquo;결함 허용(Fault-Tolerant) 양자 컴퓨터(FTQC)&amp;lsquo;가 실현되려면 적어도 10년에서 30년, 혹은 그 이상의 세월이 필요하다고 예측하고 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="다가오는-store-now-decrypt-later의-위협과-pqc의-여명">다가오는 &amp;lsquo;Store Now, Decrypt Later&amp;rsquo;의 위협과 PQC의 여명
&lt;/h2>&lt;p>&amp;ldquo;아직 10년 이상 걸린다면 안심이다&amp;quot;라고 생각하는 것은 시기상조입니다. 현재 국가 기밀정보나 의료 데이터, 장기적인 인프라 설계 등 수십 년 후까지 비밀을 보장해야만 하는 데이터가 존재합니다.&lt;/p>
&lt;p>여기서 우려되고 있는 것이 바로 &lt;strong>&amp;lsquo;Store Now, Decrypt Later (지금 저장하고, 나중에 해독한다)&amp;rsquo;&lt;/strong> 는 공격 기법입니다. 악의가 있는 국가나 조직이 현재의 RSA나 ECC(타원곡선암호)로 암호화된 통신 데이터를 모두 도청하여 스토리지에 저장해 두는 것입니다. 그리고 10년 후, 20년 후에 강력한 양자 컴퓨터가 완성되는 순간에 쇼어의 알고리즘을 사용하여 과거의 데이터를 모두 해독해내어 비밀을 폭로한다는 기법입니다.&lt;/p>
&lt;p>이러한 타임 래그의 위협에 대항하기 위해 NIST(미국 국립표준기술연구소)를 중심으로 &lt;strong>&amp;lsquo;양자 내성 암호 (PQC: Post-Quantum Cryptography)&amp;rsquo;&lt;/strong> 의 표준화 프로세스가 급피치로 진행되어 왔습니다.&lt;/p>
&lt;p>PQC는 양자 컴퓨터를 이용하더라도 해독이 곤란한(즉, 쇼어의 알고리즘을 적용할 수 없는) 수학적 문제를 기반으로 한 새로운 암호 알고리즘입니다. 주요 접근법으로는 다음과 같은 것들이 있습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>격자 암호 (Lattice-based cryptography)&lt;/strong> : LWE(Learning with Errors) 문제 등을 기초로 합니다. NIST의 표준화에서 주류 (Kyber, Dilithium 등).&lt;/li>
&lt;li>&lt;strong>부호 기반 암호 (Code-based cryptography)&lt;/strong> : 오류 정정 부호의 복호 문제의 어려움에 의존합니다.&lt;/li>
&lt;li>&lt;strong>다변수 다항식 암호 (Multivariate cryptography)&lt;/strong> : 다변수의 연립 이차방정식을 푸는 어려움에 의존합니다.&lt;/li>
&lt;li>&lt;strong>해시 기반 서명 (Hash-based signatures)&lt;/strong> : 해시 함수의 안전성에만 의존하는 디지털 서명입니다.&lt;/li>
&lt;/ul>
&lt;p>이미 Google Chrome이나 Apple의 iMessage 등 주요 소프트웨어나 플랫폼에서는 PQC의 도입 테스트나 하이브리드 구현이 시작되었습니다.&lt;/p>
&lt;h2 id="마치며">마치며
&lt;/h2>&lt;p>양자 컴퓨터는 SF 세계의 꿈 같은 이야기에서 현실적인 공학적 도전으로 넘어가고 있습니다. 쇼어의 알고리즘은 수학과 양자역학이 융합된 인류의 위대한 지적 성과이지만, 동시에 우리 디지털 사회의 기반을 뒤흔드는 &amp;lsquo;파괴적인 힘&amp;rsquo;을 간직하고 있습니다.&lt;/p>
&lt;p>RSA 암호가 내일 당장 쓰지 못하게 되는 것은 아닙니다. 하지만 양자 기술의 진화와 &amp;lsquo;Store Now, Decrypt Later&amp;rsquo;의 리스크를 감안한다면, PQC로의 이행이라는 암호 역사에 남을 대규모의 마이그레이션은 이미 시작되었습니다. 우리는 지금 정보 보안의 패러다임 시프트의 최전선을 목격하고 있는 것입니다.&lt;/p></description></item><item><title>[완전 해부] 최강의 암호 해독 알고리즘 'GNFS'를 C++로 구현하고 이해하기</title><link>http://kenji.blog/ko/p/gnfs-cpp-implementation/</link><pubDate>Sat, 05 Sep 2026 13:04:59 +0900</pubDate><guid>http://kenji.blog/ko/p/gnfs-cpp-implementation/</guid><description>&lt;img src="http://kenji.blog/p/gnfs-cpp-implementation/gnfs_cpp_blog_eyecatch_1788580949217.jpg" alt="Featured image of post [완전 해부] 최강의 암호 해독 알고리즘 'GNFS'를 C++로 구현하고 이해하기" />&lt;h1 id="완전-해부-최강의-암호-해독-알고리즘-gnfs를-c로-구현하여-이해하기">【완전 해부】 최강의 암호 해독 알고리즘 「GNFS」를 C++로 구현하여 이해하기
&lt;/h1>&lt;p>현대 인터넷의 근간을 지탱하는 「RSA 암호」. 그 견고함은 「거대한 합성수를 소인수분해하는 것은 현재의 컴퓨터로는 사실상 불가능하다」는 수학적 신념에 의존하고 있습니다.&lt;/p>
&lt;p>하지만 인류는 결코 포기하지 않았습니다. 현재 고전 컴퓨터(양자 컴퓨터가 아닌 일반 컴퓨터)에서 거대한 소인수분해를 수행하기 위한 **인류 최강·최첨단 알고리즘 ** 이 존재합니다. 그것이 바로 &lt;strong>「일반 수체 체(GNFS: General Number Field Sieve)」&lt;/strong> 입니다.&lt;/p>
&lt;p>본 기사에서는 이 GNFS의 최첨단 계산 로직을 C++(Boost 라이브러리의 다정밀도 정수 &lt;code>boost::multiprecision&lt;/code>을 사용)로 엄밀하게 모델화한 구현 코드를 전면 공개하고, 그 이면에 있는 「대수적 정수론」의 심연을 철저히 해설합니다.&lt;/p>
&lt;p>수학의 신비와 그것을 굴복시키는 컴퓨터 사이언스의 힘을 꼭 소스 코드와 함께 만끽하시기 바랍니다.&lt;/p>
&lt;hr>
&lt;h2 id="1-gnfs-최첨단-로직-프레임워크-전체-소스-코드">1. GNFS 최첨단 로직 프레임워크 (전체 소스 코드)
&lt;/h2>&lt;p>먼저, 이번에 해설할 GNFS의 C++ 구현의 전모를 싣습니다. 실제 수체 체(CADO-NFS 등)는 수십만 줄에 달하는 초대형 분산 시스템이지만, 본 코드는 GNFS를 구성하는 &lt;strong>「5가지 필수 파이프라인(단계)」&lt;/strong> 을 추출하여 클래스로 설계하고, 수학적인 의미를 잃지 않으면서 최소 구성으로 모델화한 것입니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt"> 10
&lt;/span>&lt;span class="lnt"> 11
&lt;/span>&lt;span class="lnt"> 12
&lt;/span>&lt;span class="lnt"> 13
&lt;/span>&lt;span class="lnt"> 14
&lt;/span>&lt;span class="lnt"> 15
&lt;/span>&lt;span class="lnt"> 16
&lt;/span>&lt;span class="lnt"> 17
&lt;/span>&lt;span class="lnt"> 18
&lt;/span>&lt;span class="lnt"> 19
&lt;/span>&lt;span class="lnt"> 20
&lt;/span>&lt;span class="lnt"> 21
&lt;/span>&lt;span class="lnt"> 22
&lt;/span>&lt;span class="lnt"> 23
&lt;/span>&lt;span class="lnt"> 24
&lt;/span>&lt;span class="lnt"> 25
&lt;/span>&lt;span class="lnt"> 26
&lt;/span>&lt;span class="lnt"> 27
&lt;/span>&lt;span class="lnt"> 28
&lt;/span>&lt;span class="lnt"> 29
&lt;/span>&lt;span class="lnt"> 30
&lt;/span>&lt;span class="lnt"> 31
&lt;/span>&lt;span class="lnt"> 32
&lt;/span>&lt;span class="lnt"> 33
&lt;/span>&lt;span class="lnt"> 34
&lt;/span>&lt;span class="lnt"> 35
&lt;/span>&lt;span class="lnt"> 36
&lt;/span>&lt;span class="lnt"> 37
&lt;/span>&lt;span class="lnt"> 38
&lt;/span>&lt;span class="lnt"> 39
&lt;/span>&lt;span class="lnt"> 40
&lt;/span>&lt;span class="lnt"> 41
&lt;/span>&lt;span class="lnt"> 42
&lt;/span>&lt;span class="lnt"> 43
&lt;/span>&lt;span class="lnt"> 44
&lt;/span>&lt;span class="lnt"> 45
&lt;/span>&lt;span class="lnt"> 46
&lt;/span>&lt;span class="lnt"> 47
&lt;/span>&lt;span class="lnt"> 48
&lt;/span>&lt;span class="lnt"> 49
&lt;/span>&lt;span class="lnt"> 50
&lt;/span>&lt;span class="lnt"> 51
&lt;/span>&lt;span class="lnt"> 52
&lt;/span>&lt;span class="lnt"> 53
&lt;/span>&lt;span class="lnt"> 54
&lt;/span>&lt;span class="lnt"> 55
&lt;/span>&lt;span class="lnt"> 56
&lt;/span>&lt;span class="lnt"> 57
&lt;/span>&lt;span class="lnt"> 58
&lt;/span>&lt;span class="lnt"> 59
&lt;/span>&lt;span class="lnt"> 60
&lt;/span>&lt;span class="lnt"> 61
&lt;/span>&lt;span class="lnt"> 62
&lt;/span>&lt;span class="lnt"> 63
&lt;/span>&lt;span class="lnt"> 64
&lt;/span>&lt;span class="lnt"> 65
&lt;/span>&lt;span class="lnt"> 66
&lt;/span>&lt;span class="lnt"> 67
&lt;/span>&lt;span class="lnt"> 68
&lt;/span>&lt;span class="lnt"> 69
&lt;/span>&lt;span class="lnt"> 70
&lt;/span>&lt;span class="lnt"> 71
&lt;/span>&lt;span class="lnt"> 72
&lt;/span>&lt;span class="lnt"> 73
&lt;/span>&lt;span class="lnt"> 74
&lt;/span>&lt;span class="lnt"> 75
&lt;/span>&lt;span class="lnt"> 76
&lt;/span>&lt;span class="lnt"> 77
&lt;/span>&lt;span class="lnt"> 78
&lt;/span>&lt;span class="lnt"> 79
&lt;/span>&lt;span class="lnt"> 80
&lt;/span>&lt;span class="lnt"> 81
&lt;/span>&lt;span class="lnt"> 82
&lt;/span>&lt;span class="lnt"> 83
&lt;/span>&lt;span class="lnt"> 84
&lt;/span>&lt;span class="lnt"> 85
&lt;/span>&lt;span class="lnt"> 86
&lt;/span>&lt;span class="lnt"> 87
&lt;/span>&lt;span class="lnt"> 88
&lt;/span>&lt;span class="lnt"> 89
&lt;/span>&lt;span class="lnt"> 90
&lt;/span>&lt;span class="lnt"> 91
&lt;/span>&lt;span class="lnt"> 92
&lt;/span>&lt;span class="lnt"> 93
&lt;/span>&lt;span class="lnt"> 94
&lt;/span>&lt;span class="lnt"> 95
&lt;/span>&lt;span class="lnt"> 96
&lt;/span>&lt;span class="lnt"> 97
&lt;/span>&lt;span class="lnt"> 98
&lt;/span>&lt;span class="lnt"> 99
&lt;/span>&lt;span class="lnt">100
&lt;/span>&lt;span class="lnt">101
&lt;/span>&lt;span class="lnt">102
&lt;/span>&lt;span class="lnt">103
&lt;/span>&lt;span class="lnt">104
&lt;/span>&lt;span class="lnt">105
&lt;/span>&lt;span class="lnt">106
&lt;/span>&lt;span class="lnt">107
&lt;/span>&lt;span class="lnt">108
&lt;/span>&lt;span class="lnt">109
&lt;/span>&lt;span class="lnt">110
&lt;/span>&lt;span class="lnt">111
&lt;/span>&lt;span class="lnt">112
&lt;/span>&lt;span class="lnt">113
&lt;/span>&lt;span class="lnt">114
&lt;/span>&lt;span class="lnt">115
&lt;/span>&lt;span class="lnt">116
&lt;/span>&lt;span class="lnt">117
&lt;/span>&lt;span class="lnt">118
&lt;/span>&lt;span class="lnt">119
&lt;/span>&lt;span class="lnt">120
&lt;/span>&lt;span class="lnt">121
&lt;/span>&lt;span class="lnt">122
&lt;/span>&lt;span class="lnt">123
&lt;/span>&lt;span class="lnt">124
&lt;/span>&lt;span class="lnt">125
&lt;/span>&lt;span class="lnt">126
&lt;/span>&lt;span class="lnt">127
&lt;/span>&lt;span class="lnt">128
&lt;/span>&lt;span class="lnt">129
&lt;/span>&lt;span class="lnt">130
&lt;/span>&lt;span class="lnt">131
&lt;/span>&lt;span class="lnt">132
&lt;/span>&lt;span class="lnt">133
&lt;/span>&lt;span class="lnt">134
&lt;/span>&lt;span class="lnt">135
&lt;/span>&lt;span class="lnt">136
&lt;/span>&lt;span class="lnt">137
&lt;/span>&lt;span class="lnt">138
&lt;/span>&lt;span class="lnt">139
&lt;/span>&lt;span class="lnt">140
&lt;/span>&lt;span class="lnt">141
&lt;/span>&lt;span class="lnt">142
&lt;/span>&lt;span class="lnt">143
&lt;/span>&lt;span class="lnt">144
&lt;/span>&lt;span class="lnt">145
&lt;/span>&lt;span class="lnt">146
&lt;/span>&lt;span class="lnt">147
&lt;/span>&lt;span class="lnt">148
&lt;/span>&lt;span class="lnt">149
&lt;/span>&lt;span class="lnt">150
&lt;/span>&lt;span class="lnt">151
&lt;/span>&lt;span class="lnt">152
&lt;/span>&lt;span class="lnt">153
&lt;/span>&lt;span class="lnt">154
&lt;/span>&lt;span class="lnt">155
&lt;/span>&lt;span class="lnt">156
&lt;/span>&lt;span class="lnt">157
&lt;/span>&lt;span class="lnt">158
&lt;/span>&lt;span class="lnt">159
&lt;/span>&lt;span class="lnt">160
&lt;/span>&lt;span class="lnt">161
&lt;/span>&lt;span class="lnt">162
&lt;/span>&lt;span class="lnt">163
&lt;/span>&lt;span class="lnt">164
&lt;/span>&lt;span class="lnt">165
&lt;/span>&lt;span class="lnt">166
&lt;/span>&lt;span class="lnt">167
&lt;/span>&lt;span class="lnt">168
&lt;/span>&lt;span class="lnt">169
&lt;/span>&lt;span class="lnt">170
&lt;/span>&lt;span class="lnt">171
&lt;/span>&lt;span class="lnt">172
&lt;/span>&lt;span class="lnt">173
&lt;/span>&lt;span class="lnt">174
&lt;/span>&lt;span class="lnt">175
&lt;/span>&lt;span class="lnt">176
&lt;/span>&lt;span class="lnt">177
&lt;/span>&lt;span class="lnt">178
&lt;/span>&lt;span class="lnt">179
&lt;/span>&lt;span class="lnt">180
&lt;/span>&lt;span class="lnt">181
&lt;/span>&lt;span class="lnt">182
&lt;/span>&lt;span class="lnt">183
&lt;/span>&lt;span class="lnt">184
&lt;/span>&lt;span class="lnt">185
&lt;/span>&lt;span class="lnt">186
&lt;/span>&lt;span class="lnt">187
&lt;/span>&lt;span class="lnt">188
&lt;/span>&lt;span class="lnt">189
&lt;/span>&lt;span class="lnt">190
&lt;/span>&lt;span class="lnt">191
&lt;/span>&lt;span class="lnt">192
&lt;/span>&lt;span class="lnt">193
&lt;/span>&lt;span class="lnt">194
&lt;/span>&lt;span class="lnt">195
&lt;/span>&lt;span class="lnt">196
&lt;/span>&lt;span class="lnt">197
&lt;/span>&lt;span class="lnt">198
&lt;/span>&lt;span class="lnt">199
&lt;/span>&lt;span class="lnt">200
&lt;/span>&lt;span class="lnt">201
&lt;/span>&lt;span class="lnt">202
&lt;/span>&lt;span class="lnt">203
&lt;/span>&lt;span class="lnt">204
&lt;/span>&lt;span class="lnt">205
&lt;/span>&lt;span class="lnt">206
&lt;/span>&lt;span class="lnt">207
&lt;/span>&lt;span class="lnt">208
&lt;/span>&lt;span class="lnt">209
&lt;/span>&lt;span class="lnt">210
&lt;/span>&lt;span class="lnt">211
&lt;/span>&lt;span class="lnt">212
&lt;/span>&lt;span class="lnt">213
&lt;/span>&lt;span class="lnt">214
&lt;/span>&lt;span class="lnt">215
&lt;/span>&lt;span class="lnt">216
&lt;/span>&lt;span class="lnt">217
&lt;/span>&lt;span class="lnt">218
&lt;/span>&lt;span class="lnt">219
&lt;/span>&lt;span class="lnt">220
&lt;/span>&lt;span class="lnt">221
&lt;/span>&lt;span class="lnt">222
&lt;/span>&lt;span class="lnt">223
&lt;/span>&lt;span class="lnt">224
&lt;/span>&lt;span class="lnt">225
&lt;/span>&lt;span class="lnt">226
&lt;/span>&lt;span class="lnt">227
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;vector&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;cmath&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;map&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;set&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;chrono&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;boost/multiprecision/cpp_int.hpp&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Boost.Multiprecision의 다정밀도 정수를 사용
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">boost&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">multiprecision&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// [SOTA GNFS] General Number Field Sieve (일반 수체 체) 최첨단 로직 프레임워크
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">//
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 본 코드는 CADO-NFS 등에서 사용되는 최첨단 GNFS의 5가지 파이프라인을
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// C++ (Boost)의 클래스 설계로서 엄밀하게 모델화한 것입니다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">struct&lt;/span> &lt;span class="nc">Relation&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int64_t&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int64_t&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint32_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">rational_primes&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint32_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">algebraic_primes&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Phase 1: Polynomial Selection (KleinJung의 알고리즘)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">class&lt;/span> &lt;span class="nc">PolynomialSelector&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">degree&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 대수 측 다항식 f(x)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">g&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 유리 측 다항식 g(x) = x - m
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PolynomialSelector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">degree&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// base-m 전개를 기반으로 한 초기 다항식 생성 (실제로는 더 고도화된 격자 기저 축소 LLL을 사용)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="nf">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 1] Polynomial Selection (Degree &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">degree&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;) starting...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 간단한 base-m 전개 (d차)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// m = N^(1/d)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">N_copy&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 간단한 m의 근사 (Boost 함수를 사용하지 않는 근사)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">low&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">high&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">low&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">high&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">mid&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">low&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">high&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">low&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">degree&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*=&lt;/span> &lt;span class="n">mid&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mid&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">low&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mid&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">high&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mid&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">resize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">degree&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">temp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">degree&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">temp&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">temp&lt;/span> &lt;span class="o">/=&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">};&lt;/span> &lt;span class="c1">// g(x) = x - m
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; -&amp;gt; m = &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">m&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; -&amp;gt; f(x) = &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">degree&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;x^&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="s">&amp;#34; + &amp;#34;&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="s">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">[Phase 1] Complete.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Phase 2: Lattice Sieving (격자 체)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 최근의 GNFS는 Line Sieve(직선 체)가 아닌 Franke-Kleinjung 등이 제안한
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 특수 q 격자 체 (Special-q Lattice Sieving)를 사용하는 것이 사실상 표준(de facto standard)입니다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">class&lt;/span> &lt;span class="nc">LatticeSieve&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">uint32_t&lt;/span> &lt;span class="n">rational_bound&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">uint32_t&lt;/span> &lt;span class="n">algebraic_bound&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint32_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">rational_fb&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">uint32_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">algebraic_fb&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LatticeSieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">uint32_t&lt;/span> &lt;span class="n">rb&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">uint32_t&lt;/span> &lt;span class="n">ab&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="n">rational_bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rb&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">algebraic_bound&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ab&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="nf">generate_factor_bases&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 2] Generating Factor Bases (Rational Bound: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">rational_bound&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;, Algebraic Bound: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">algebraic_bound&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;)&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// (생략) 실제로는 소수 생성 및 르장드르 기호 등으로 필터링을 수행
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">PolynomialSelector&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">poly&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 2] Special-q Lattice Sieving active...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 모의 구현: 실제 격자 체는 수백 GB의 메모리 공간을 블록 단위로 스캔한다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// (a, b)의 쌍을 특수 소수 q마다의 격자 (a = i*q + j*...) 에 매핑하고,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 캐시 효율을 극한까지 높인 체(Sieve)를 실행한다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 데모용으로 더미 관계식(relation)을 1개 추가
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">Relation&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">17&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">rational_primes&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">algebraic_primes&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">relations&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push_back&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 2] Found &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; relations.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Phase 3: Filtering (특이점 제거 및 클리크 병합)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">class&lt;/span> &lt;span class="nc">Filter&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="n">reduce_matrix&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 3] Filtering Relations...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 1. Singleton removal (1번밖에 출현하지 않는 소수를 가진 관계식 삭제)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 2. Clique merging (희소 행렬을 조밀하게 만들기 위한 관계식 결합)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 실제로는 Union-Find 알고리즘 등으로 수억 행의 행렬을 수백만 행까지 압축한다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 3] Matrix size reduced optimally.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Phase 4: Linear Algebra over GF(2) (Block Wiedemann 법)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">class&lt;/span> &lt;span class="nc">LinearAlgebraGF2&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 최근의 슈퍼컴퓨터 환경에서는 Block Lanczos 법보다 분산 컴퓨팅에
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 적합한 Block Wiedemann 법(Coppersmith 구현)이 최첨단 기술로 사용된다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">solve_nullspace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 4] Block Wiedemann algorithm over GF(2) starting...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 스파스(희소) 행렬과 벡터의 곱셈 연산을 반복하여,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// M * x = 0 mod 2 가 되는 해 벡터(커널)를 여러 개 찾는다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">dependencies&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 의존 관계 리스트
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 더미 데이터
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">dependencies&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push_back&lt;/span>&lt;span class="p">({&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 4] Found &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">dependencies&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; linear dependencies (perfect squares).&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">dependencies&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Phase 5: Algebraic Square Root (대수적 제곱근)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">class&lt;/span> &lt;span class="nc">AlgebraicSquareRoot&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="n">compute_and_factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">dep&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 5] Algebraic Square Root computation...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 1. 유리 측 제곱근 V의 계산 (단순 정수 연산)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">V&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// V = sqrt( prod(a - bm) ) mod N
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 2. 대수 측 제곱근 gamma의 계산 (Montgomery&amp;#39;s method 등)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 거대한 대수체 O_K의 원소 gamma를 구하고, 준동형 사상 phi로 현실 세계에 매핑한다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// Y = phi(gamma) mod N
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">Y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 아이디얼 군과 단수 군의 장애물(Obstruction)을 회피하기 위해,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// Phase 2와 4에서 이차 잉여 기호(Quadratic Characters) 열이 추가되어 있다는 전제.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; -&amp;gt; Homomorphism map phi applied.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[Phase 5] Calculating GCD(V - Y, N)...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">V&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">Y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// GCD(X-Y, N)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">factor&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">================================================================&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[SUCCESS] Non-trivial factor found: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; Other factor: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">N&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;================================================================&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;[FAILURE] Trivial solution. Trying next dependency...&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Main Execution Pipeline
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// ============================================================================
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;================================================================&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; [SOTA GNFS] General Number Field Sieve Engine (Boost C++) &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;================================================================&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// RSA-270 등, 소인수분해하고 싶은 거대한 합성수 N
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;233108530344407544527637656910680524145619812480305449042948611968495918245135782867888369318577116418213919268572658314913060672626911354027609793166341626693946596196427744273886601876896313468704059066746903123910748277606548649151920812699309766587514735456594993207&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 다항식의 차수 (130자리가 넘는 경우는 통상 5~6차를 선택)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">degree&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 파이프라인 초기화
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">PolynomialSelector&lt;/span> &lt;span class="n">poly_select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">degree&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LatticeSieve&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10000000&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">20000000&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 실제 바운드는 수천만~수억
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">Filter&lt;/span> &lt;span class="n">filter&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LinearAlgebraGF2&lt;/span> &lt;span class="n">linalg&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">AlgebraicSquareRoot&lt;/span> &lt;span class="n">sqrt_step&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">auto&lt;/span> &lt;span class="n">start_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">chrono&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">high_resolution_clock&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">now&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 1. 다항식 선택
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">poly_select&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 2. 체(Sieve) 처리
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">generate_factor_bases&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">relations&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">sieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">poly_select&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 3. 필터링 (행렬 압축)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">filter&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">reduce_matrix&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">relations&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 4. 선형 대수 (GF(2)에서의 널 스페이스 탐색)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">dependencies&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">linalg&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">solve_nullspace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">relations&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 5. 대수적 제곱근 계산 및 GCD
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="k">auto&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="nl">dep&lt;/span> &lt;span class="p">:&lt;/span> &lt;span class="n">dependencies&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sqrt_step&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">compute_and_factor&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">relations&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dep&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">auto&lt;/span> &lt;span class="n">end_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">chrono&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">high_resolution_clock&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">now&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">chrono&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">duration&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">double&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">elapsed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">end_time&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">start_time&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">[System] SOTA GNFS Pipeline completed in &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">elapsed&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; seconds.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>그렇다면 이 코드가 어떻게 암호의 장벽을 부숴나가는 것일까요. 5개의 단계별로 그 치밀한 알고리즘과 고도의 수학을 알기 쉽게 해설해 보겠습니다.&lt;/p>
&lt;hr>
&lt;h2 id="2-gnfs의-최종-목적-x2-equiv-y2-pmod-n">2. GNFS의 최종 목적: $X^2 \equiv Y^2 \pmod N$
&lt;/h2>&lt;p>GNFS뿐만 아니라 현대의 거대 소인수분해 알고리즘 대부분이 목표로 하는 것은 다음 합동식을 만족하는 자명하지 않은 쌍 $(X, Y)$를 찾는 것입니다.&lt;/p>
$$X^2 \equiv Y^2 \pmod N$$
&lt;p>이 식은 「$X^2$과 $Y^2$을 $N$으로 나눈 나머지가 같다」는 것을 의미합니다. 이를 변형하면,
$X^2 - Y^2 \equiv 0 \pmod N$
즉, $(X-Y)(X+Y)$가 $N$의 배수가 됩니다.&lt;/p>
&lt;p>만약 $X \not\equiv \pm Y \pmod N$ (비자명한 해)라면, $(X-Y)$와 $N$ 사이에는 「1보다 크고 $N$보다 작은 공약수」가 존재하게 됩니다.
여기서 유클리드 호제법을 사용하여 &lt;strong>$\gcd(X-Y, N)$&lt;/strong> 을 계산하면, $N$의 소인수를 아주 쉽게 구할 수 있습니다.&lt;/p>
&lt;p>하지만 이 $X$와 $Y$를 찾는 것은 사막에서 바늘을 찾는 것과 같습니다. 그래서 GNFS는 「현실의 정수 세계」와 「다항식의 대수체 세계」라는 &lt;strong>두 세계&lt;/strong> 를 만들어내고, 계산을 분산시키는 천재적인 접근법을 취합니다.&lt;/p>
&lt;hr>
&lt;h2 id="3-phase-1-다항식-선택-polynomial-selection">3. Phase 1: 다항식 선택 (Polynomial Selection)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">PolynomialSelector&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">void&lt;/span> &lt;span class="nf">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">cpp_int&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// m = N^(1/d) 의 계산 및 base-m 전개
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">degree&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">temp&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">temp&lt;/span> &lt;span class="o">/=&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">};&lt;/span> &lt;span class="c1">// g(x) = x - m
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>GNFS의 첫 번째 단계는 두 세계를 이어주는 「마법의 다항식」을 만드는 것입니다.
거대한 수 $N$에 대해, 정수 $m$을 선택합니다. 보통 $m \approx N^{1/d}$이 되도록 선택합니다(코드에서는 $d=6$차 다항식을 가정).&lt;/p>
&lt;p>그리고 $N$을 $m$진수로 전개하고, 그 계수를 사용하여 다항식 $f(x)$를 구성합니다.
&lt;/p>
$$N = c_d m^d + c_{d-1} m^{d-1} + \dots + c_1 m + c_0$$
$$f(x) = c_d x^d + c_{d-1} x^{d-1} + \dots + c_1 x + c_0$$
&lt;p>이 다항식 $f(x)$에는 &lt;strong>「변수 $x$에 $m$을 대입하면 정확히 $N$이 된다 ($f(m) = N$)」&lt;/strong> 는 매우 중요한 성질이 있습니다. 다시 말해, $f(m) \equiv 0 \pmod N$입니다.
유리 측 다항식은 $g(x) = x - m$으로 정의됩니다.&lt;/p>
&lt;p>이로 인해, $f(x)=0$의 근 $\alpha$가 지배하는 &lt;strong>「대수체의 세계 $\mathbb{Z}[\alpha]$」&lt;/strong> 와 일반적인 &lt;strong>「유리수(정수)의 세계 $\mathbb{Z}$」&lt;/strong> 가 $x \to m$이라는 「환 준동형 사상(Homomorphism)」에 의해 강력하게 연결됩니다.&lt;/p>
&lt;p>최첨단 CADO-NFS 등에서는 KleinJung의 알고리즘이나 LLL 격자 기저 축소 알고리즘을 사용하여, 다항식의 계수가 극단적으로 커지지 않으면서 후속 단계에서 소수가 쉽게 나타날 수 있는 (매끄러워지기 쉬운) 「가장 적합한 다항식 $f(x)$」를 수개월에 걸쳐 탐색합니다.&lt;/p>
&lt;hr>
&lt;h2 id="4-phase-2-특수-q-격자-체-special-q-lattice-sieving">4. Phase 2: 특수 $q$ 격자 체 (Special-q Lattice Sieving)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">LatticeSieve&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">sieve&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">PolynomialSelector&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">poly&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// (a, b)의 쌍을 특수 소수 q마다의 격자에 매핑하고,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 캐시 효율을 극한까지 높인 체(Sieve)를 실행한다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>두 세계를 준비했다면, 다음은 양쪽 세계 모두에서 「매끄러운 수(작은 소수들로만 이루어진 수)」를 찾는 단계로 들어갑니다.
정수 쌍 $(a, b)$를 무수히 생성하고, 다음 두 값을 계산합니다.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>유리 측의 값&lt;/strong>: $a - bm$&lt;/li>
&lt;li>&lt;strong>대수 측의 노름(Norm)&lt;/strong>: $b^d f(a/b)$&lt;/li>
&lt;/ol>
&lt;p>GNFS의 목적은 이 &lt;strong>「유리 측과 대수 측의 값이 모두 작은 소인수로만 완전히 분해되는 쌍(Relation: 관계식)」&lt;/strong> 을 수천만에서 수억 개 모으는 것입니다.&lt;/p>
&lt;p>초기 GNFS에서는 $(a, b)$를 $xy$ 평면에 나열하고 가장자리부터 차례로 소수로 나누어가는 「직선 체(Line Sieve)」가 사용되었습니다. 하지만 이 방식은 메모리의 여기저기를 접근하기 때문에 캐시 미스가 다발하여, 매우 느리다는 약점이 있었습니다.&lt;/p>
&lt;p>그래서 현재의 최첨단 코드에서는 &lt;strong>「특수 $q$ 격자 체 (Special-q Lattice Sieve)」&lt;/strong> 라는 기법이 사용됩니다.
어떤 적당히 큰 소수 $q$를 고정하고, 「대수 측의 값이 반드시 $q$로 나누어떨어지는 $(a, b)$ 쌍」만을 계산 대상으로 삼습니다. 이 조건을 만족하는 $(a, b)$는 평면상에서 「격자(Lattice)」를 형성하므로, 계산할 주소의 점프 폭이 일정해져 CPU의 L1/L2 캐시에 완벽하게 들어맞습니다.
이 격자 체의 도입으로 GNFS의 계산 속도는 비약적으로 향상되었습니다.&lt;/p>
&lt;hr>
&lt;h2 id="5-phase-3-필터링-filtering">5. Phase 3: 필터링 (Filtering)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">Filter&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="n">reduce_matrix&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 1. Singleton removal (1번밖에 출현하지 않는 소수를 가진 관계식 삭제)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 2. Clique merging (희소 행렬을 조밀하게 만들기 위한 관계식 결합)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Phase 2에서 전 세계의 컴퓨터가 수개월에 걸쳐 모은 수억 개의 관계식. 하지만 이를 그대로 다음의 「연립방정식을 푸는 단계(행렬 계산)」에 밀어 넣으면, 슈퍼컴퓨터의 메모리가 펑크나게 됩니다.&lt;/p>
&lt;p>그래서 &lt;strong>필터링(Filtering)&lt;/strong> 이라 불리는, 행렬의 초압축 프로세스가 수행됩니다.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Singleton removal (특이점 제거)&lt;/strong>
어떤 거대한 소수 $p$가 수억 개의 관계식 중에서 「단 1번」만 등장했다고 가정해봅시다. 우리가 목표로 하는 것은 「모든 소수의 지수를 짝수(2의 배수)로 만드는 것」이므로, 1번만 등장하는 소수는 절대 짝수로 만들 수 없습니다.
따라서 그 소수를 포함하는 관계식은 「쓸모없는 쓰레기」로 간주되어 즉시 삭제(제거)됩니다. 이것이 연쇄적으로 일어나면서 수억 행이었던 데이터가 점점 줄어듭니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Clique merging (클리크 병합)&lt;/strong>
게다가 특정 소수를 공유하는 관계식끼리 곱하여(더하여) 행의 수를 줄이면서, 스파스한(듬성듬성한) 행렬을 보다 밀집된 상태로 압축합니다(그래프 이론의 클리크 탐색과 유사한 기법 사용).&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>이 최적화를 통해 거대한 스파스 행렬은 계산 가능한 크기로 극적으로 압축됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="6-phase-4-gf2-상의-선형-대수-block-wiedemann-법">6. Phase 4: GF(2) 상의 선형 대수 (Block Wiedemann 법)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">LinearAlgebraGF2&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">solve_nullspace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">Relation&lt;/span>&lt;span class="o">&amp;gt;&amp;amp;&lt;/span> &lt;span class="n">relations&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 스파스(희소) 행렬과 벡터의 곱셈 연산을 반복하여,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// M * x = 0 mod 2 가 되는 해 벡터(커널)를 여러 개 찾는다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>드디어 퍼즐의 핵심입니다.
수집한 관계식을 곱하여 &lt;strong>「소인수의 지수가 모두 짝수승이 되는 조합」&lt;/strong> 을 찾습니다.&lt;/p>
&lt;p>이는 수학적으로 각 소수 지수의 「짝수·홀수(즉, 0 또는 1)」를 원소로 하는 거대한 행렬 $M$과, 어떤 관계식을 사용할지를 나타내는 벡터 $x$를 사용하여,
&lt;strong>$M \cdot x \equiv 0 \pmod 2$&lt;/strong>
가 되는 해 벡터 $x$(널 스페이스·커널)를 구하는 것과 다름없습니다.&lt;/p>
&lt;p>수백만 행 × 수백만 열이라는 엄청난 크기의 행렬 연립방정식을 풀어야 합니다. 일반적인 가우스 소거법으로는 계산량이 $O(N^3)$이 되어 우주가 끝날 때까지 계산이 끝나지 않습니다.&lt;/p>
&lt;p>그래서 최첨단 구현에서는 &lt;strong>「Block Wiedemann (블록 비데만) 법」&lt;/strong> 이 채택되어 있습니다.
이는 행렬 $M$이 「매우 스파스함(대부분이 0)」을 이용하여, 행렬과 벡터의 곱셈을 반복적으로 수행하여 해를 도출해내는 크릴로프 부분공간법의 일종입니다.
기존의 Block Lanczos 법과 달리 Block Wiedemann 법은 계산 프로세스를 여러 클러스터로 완전히 분할할 수 있기 때문에, 현대의 분산 클라우드 컴퓨팅이나 슈퍼컴퓨터에서의 병렬 계산에서 압도적인 위력을 발휘합니다.&lt;/p>
&lt;hr>
&lt;h2 id="7-phase-5-대수적-제곱근-algebraic-square-root과-암호-붕괴">7. Phase 5: 대수적 제곱근 (Algebraic Square Root)과 암호 붕괴
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">AlgebraicSquareRoot&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="n">compute_and_factor&lt;/span>&lt;span class="p">(...)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 1. 유리 측 제곱근 V의 계산
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">V&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 2. 대수 측 제곱근 gamma의 계산
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">Y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cpp_int&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">V&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">Y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// GCD(X-Y, N)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Phase 4의 행렬 계산으로 인해 우리는 「곱하면 모든 소인수가 짝수승이 되는 관계식의 집합 $S$」를 손에 넣었습니다.
이로써 유리 측과 대수 측, 각각의 세계에서 「제곱」을 구성할 수 있습니다.&lt;/p>
&lt;p>유리 측은 단순한 정수의 곱셈이므로 제곱근 $V$를 계산하는 것은 쉽습니다.
&lt;/p>
$$V^2 = \prod_{S} (a - bm)$$
&lt;p>&lt;strong>하지만 진짜 지옥은 「대수 측」에 있습니다.&lt;/strong>
대수체의 세계 $\mathbb{Z}[\alpha]$에서는 소인수분해의 유일성이 성립하지 않기 때문에, 아이디얼을 사용하여 계산을 수행해 왔습니다. 행렬 계산으로 보장된 것은 &lt;strong>「아이디얼의 제곱」이 되는 것뿐이며, 「원소의 제곱($\gamma^2$)」이 되는 것은 보장되지 않은&lt;/strong> 것입니다.&lt;/p>
&lt;p>여기에는 「아이디얼 군의 장애물」과 「단수 군의 장애물」이라는 대수적 정수론의 거대한 벽이 가로막고 있습니다.
GNFS에서는 이 벽을 깨뜨리기 위해 &lt;strong>「이차 잉여 기호 (Quadratic Characters)」&lt;/strong> 라는 마법을 사용합니다.
Phase 4의 행렬에 미리 수십 개의 특별한 소아이디얼에 대한 이차 잉여(르장드르 기호)의 열을 몰래 추가해 두는 것입니다. 이로 인해 찾아낸 집합 $S$는 압도적인 확률로 장애물을 통과하여 무사히 「진정한 원소의 제곱 $\gamma^2$」을 형성해 줍니다.&lt;/p>
&lt;p>$\gamma$를 구하는 작업(대수적 제곱근)은 Montgomery 법 등의 매우 복잡한 알고리즘을 사용하여 계산됩니다.&lt;/p>
&lt;p>그리고 마침내 대수 측의 제곱근 $\gamma$를, 환 준동형 사상 $\phi$를 통해 현실 세계로 워프($x$에 $m$ 대입)시켜 $Y$를 얻습니다.
유리 측의 $V$를 그대로 $X$로 두면, 마침내 쫓고 쫓던 절대 등식이 완성됩니다.&lt;/p>
&lt;p>&lt;strong>$$X^2 \equiv Y^2 \pmod N$$&lt;/strong>&lt;/p>
&lt;p>남은 것은 $\gcd(X-Y, N)$을 계산하는 것뿐입니다. 0.001초의 처리가 순식간에 지나가고 비자명한 인수가 화면에 인쇄되는 순간, 난공불락을 자랑하던 RSA 암호는 완전히 붕괴됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="맺음말">맺음말
&lt;/h2>&lt;p>GNFS는 단순한 프로그래밍 테크닉이 아닙니다.
추상대수학, 환론, 아이디얼 군과 같은 「순수 수학의 심연」을 슈퍼컴퓨터의 분산 아키텍처나 캐시 최적화와 같은 「극한의 엔지니어링」으로 굴복시킨 인류 지성의 결정체입니다.&lt;/p>
&lt;p>우리가 무심코 전송하고 있는 채팅이나 신용카드 정보는 이러한 천문학적인 수학의 공방 위에서 지켜지고 있는 것입니다.&lt;/p>
&lt;p>이 C++ 프레임워크를 통해 최첨단 암호 해독 알고리즘의 이면에 있는 「수학과 컴퓨터의 로망」을 느껴보시기 바랍니다.&lt;/p></description></item><item><title>일반 수체 체(GNFS)의 진정한 수학적 구조</title><link>http://kenji.blog/ko/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/</link><pubDate>Sat, 05 Sep 2026 02:26:13 +0900</pubDate><guid>http://kenji.blog/ko/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/</guid><description>&lt;img src="http://kenji.blog/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/rsa_encryption_break_1788542156523.jpg" alt="Featured image of post 일반 수체 체(GNFS)의 진정한 수학적 구조" />&lt;h1 id="일반-수체-체법gnfs의-진정한-수학적-구조">일반 수체 체법(GNFS)의 진정한 수학적 구조
&lt;/h1>&lt;p>GNFS의 궁극적인 목적은 $X^2 \equiv Y^2 \pmod N$이 되는 $X, Y$를 찾는 것입니다.
이를 달성하기 위해 수학자들은 &lt;strong>「현실의 정수 세계」&lt;/strong> 와 &lt;strong>「대수체의 세계」&lt;/strong> 사이에 다리를 놓았습니다. 그 다리가 바로 「준동형 사상」입니다.&lt;/p>
&lt;h2 id="제1단계-세계를-연결하는-준동형-사상homomorphism">제1단계: 세계를 연결하는 「준동형 사상(Homomorphism)」
&lt;/h2>&lt;h3 id="1-다항식의-선정과-근의-정의">1. 다항식의 선정과 근의 정의
&lt;/h3>&lt;p>거대한 합성수 $N$에 대해, 어떤 정수 $m$과 다항식 $f(x)$를 선택하여, $f(m) \equiv 0 \pmod N$이 되도록 합니다.
(예: $N$을 $m$진수로 전개하고, 그 계수로부터 $f(x)$를 만듭니다. 이때 $f(x)$는 유리수체 $\mathbb{Q}$ 위에서 기약(더 이상 인수분해할 수 없음)이라고 가정합니다).&lt;/p>
&lt;p>다음으로, 방정식 $f(x) = 0$의 「복소수에서의 근」 중 하나를 $\alpha$로 둡니다.
당연히 $f(\alpha) = 0$입니다. $\alpha$는 정수가 아니라, 루트나 허수를 포함하는 복잡한 수(대수적 수)입니다.&lt;/p>
&lt;h3 id="2-환ring과-준동형-사상의-구축">2. 환(Ring)과 준동형 사상의 구축
&lt;/h3>&lt;p>여기서 두 개의 수학적인 「환(덧셈과 곱셈이 정의된 세계)」을 준비합니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>세계A: $\mathbb{Z}[\alpha]$&lt;/strong> ($\alpha$를 포함하는 대수적 정수환)
$a + b\alpha + c\alpha^2 + \dots$ 형태로 표현되는 수의 세계입니다.&lt;/li>
&lt;li>&lt;strong>세계B: $\mathbb{Z}/N\mathbb{Z}$&lt;/strong> ($N$으로 나눈 나머지의 환)
$0$부터 $N-1$까지의 정수로만 구성된, 합동식(모듈로)의 세계입니다.&lt;/li>
&lt;/ul>
&lt;p>여기서 세계A에서 세계B로, 다음과 같은 매핑(사상) $\phi$를 정의합니다.
&lt;strong>$$\phi : \mathbb{Z}[\alpha] \to \mathbb{Z}/N\mathbb{Z}$$&lt;/strong>
&lt;strong>$$\phi(\alpha) = m \pmod N$$&lt;/strong>&lt;/p>
&lt;p>이 사상 $\phi$는 세계A의 변수 $\alpha$를 그대로 세계B의 정수 $m$으로 바꿔치기하는 마법의 조작입니다.
이 $\phi$는 &lt;strong>「환 준동형 사상(Ring Homomorphism)」&lt;/strong> 이라는 극히 강력한 성질을 가지고 있습니다.
준동형이란 &lt;strong>「덧셈이나 곱셈의 구조를 깨뜨리지 않고 다른 세계로 워프시키는」&lt;/strong> 성질을 의미합니다. 즉, 다음 식이 성립합니다.&lt;/p>
&lt;ul>
&lt;li>$\phi(X \times Y) = \phi(X) \times \phi(Y)$&lt;/li>
&lt;li>$\phi(X^2) = \phi(X)^2$&lt;/li>
&lt;/ul>
&lt;p>이것이 무엇을 의미할까요? 만약 우리가 「세계A($\alpha$의 세계)」에서 어떤 복잡한 요소 $\gamma$의 &lt;strong>「제곱($\gamma^2$)」&lt;/strong> 을 만들 수 있다면, 그것을 $\phi$로 「세계B(나머지의 세계)」로 워프시켜도 ** 훌륭하게 제곱의 형태 $\phi(\gamma)^2$가 유지된다** 는 것입니다.&lt;/p>
&lt;hr>
&lt;h2 id="제2단계-소인수분해의-붕괴와-아이디얼ideal의-탄생">제2단계: 소인수분해의 붕괴와 「아이디얼(Ideal)」의 탄생
&lt;/h2>&lt;p>우리는 세계A($\mathbb{Z}[\alpha]$) 안에서 적당한 요소 $(a - b\alpha)$를 많이 모아, 그것들을 곱해서 「완전한 제곱(평방원)」을 만들고자 합니다.
보통이라면 모은 $(a - b\alpha)$를 각각 「소인수분해」해서, 소수의 지수가 모두 짝수가 되도록 조합(행렬로 풂)하면 제곱을 만들 수 있습니다.&lt;/p>
&lt;p>&lt;strong>하지만, 여기서 대수학의 절망적인 장벽이 앞을 가로막습니다.&lt;/strong>
$\mathbb{Z}[\alpha]$와 같은 대수체의 세계에서는, 중학교 때 배우는 &lt;strong>「소인수분해의 유일성(어떤 수도 소수의 곱셈으로 단 한 가지로만 표현할 수 있다)」이 붕괴되어 버리는&lt;/strong> 것입니다.&lt;/p>
&lt;p>(예: 어떤 대수체의 세계에서는 $6 = 2 \times 3$ 이며, 동시에 $6 = (1+\sqrt{-5}) \times (1-\sqrt{-5})$ 가 되어버려, 어느 쪽이 진짜 소수인지 알 수 없게 됩니다)&lt;/p>
&lt;p>소인수분해가 한 가지로 정해지지 않으면, 「소수의 개수를 세어 짝수 개로 만든다」는 퍼즐(체법)을 원리적으로 실행할 수 없습니다.&lt;/p>
&lt;h3 id="쿠머와-데데킨트의-구원-아이디얼">쿠머와 데데킨트의 구원: 「아이디얼」
&lt;/h3>&lt;p>이 붕괴를 구원한 것이, 19세기의 수학자들이 만들어낸 &lt;strong>「아이디얼(Ideal: 이상수)」&lt;/strong> 이라는 개념입니다.
요소 자체가 아니라, 그 요소가 생성하는 「배수의 집합(아이디얼)」을 생각함으로써 다시 소인수분해를 가능하게 한 것입니다.&lt;/p>
&lt;p>대수체의 정수환 $\mathcal{O}_K$($\mathbb{Z}[\alpha]$를 포함하는 더 완전한 환)에서, 요소는 유일하게 소인수분해할 수 없어도, &lt;strong>「아이디얼은 반드시 『소 아이디얼($\mathfrak{p}$)』의 곱으로 단 한 가지로 소인수분해할 수 있다」&lt;/strong> 는 것이 증명되어 있습니다.&lt;/p>
&lt;p>따라서 GNFS에서는 요소 $(a - b\alpha)$ 자체를 분해하는 것이 아니라, 그것이 생성하는 &lt;strong>단항 아이디얼 $\langle a - b\alpha \rangle$을 소 아이디얼 분해&lt;/strong> 합니다.&lt;/p>
&lt;hr>
&lt;h2 id="제3단계-노름norm과-두-개의-체sieve">제3단계: 노름(Norm)과 두 개의 체(Sieve)
&lt;/h2>&lt;p>그렇다면, 아이디얼 $\langle a - b\alpha \rangle$이 어떤 소 아이디얼로 분해되는지 어떻게 알 수 있을까요?
여기서 &lt;strong>「노름(Norm)」&lt;/strong> 이라는 함수를 사용합니다. 노름이란, 대수체의 복잡한 요소를 「평범한 현실의 정수 $\mathbb{Z}$」로 변환하는 함수입니다.&lt;/p>
&lt;p>요소 $(a - b\alpha)$의 노름은 $b^d f(a/b)$라는 간단한 다항식 계산으로 구할 수 있습니다($d$는 $f(x)$의 차수).&lt;/p>
&lt;p>대수학의 정리에 의해, &lt;strong>「어떤 아이디얼의 노름이 작은 소수로 완전히 분해될 수 있다면(매끄럽다면), 그 원래의 아이디얼도 작은 소 아이디얼로 완전히 분해될 수 있다」&lt;/strong> 는 것이 알려져 있습니다.&lt;/p>
&lt;p>그래서 GNFS는 대량의 정수 쌍 $(a, b)$에 대해 다음 두 가지를 동시에 계산하고, 양쪽 모두가 「매끄러운 수」가 되는 쌍만을 수집합니다.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>유리 체(Rational Sieve)&lt;/strong>: $a - bm$ (현실 세계의 값)&lt;/li>
&lt;li>&lt;strong>대수 체(Algebraic Sieve)&lt;/strong>: $b^d f(a/b)$ (대수체의 세계에서의 노름)&lt;/li>
&lt;/ol>
&lt;p>양쪽 모두 매끄러운 쌍 $(a, b)$를 수천만 개 모아, 아이디얼의 소인수분해 데이터(소 아이디얼이 몇 개 포함되어 있는지)를 거대한 행렬(GF(2) 위에서의 선형대수)로 풀어, 「곱하면 모든 소 아이디얼의 지수가 짝수가 되는」 쌍의 집합 $S$를 찾습니다.&lt;/p>
&lt;hr>
&lt;h2 id="제4단계-앞을-가로막는-두-개의-장애물과-아이디얼-류군">제4단계: 앞을 가로막는 두 개의 「장애물」과 아이디얼 류군
&lt;/h2>&lt;p>행렬 계산을 통해 집합 $S$에 속하는 $(a - b\alpha)$의 아이디얼을 모두 곱하면, 어떤 아이디얼 $I$의 제곱이 된다는 것을 알았습니다.
&lt;/p>
$$\prod_{S} \langle a - b\alpha \rangle = I^2$$
&lt;p>&lt;strong>하지만 아직 끝나지 않았습니다. GNFS에서 가장 깊고, 가장 어려운 수학의 벽이 여기에 있습니다.&lt;/strong>&lt;/p>
&lt;p>우리가 마지막으로 원하는 것은 「아이디얼의 제곱」이 아니라, 사상 $\phi$에 대입하기 위한 &lt;strong>「요소의 제곱($\gamma^2$)」&lt;/strong> 입니다.
아이디얼의 제곱이 되었다고 해서, 요소 자체가 제곱이 되어 있다는 보장은 없습니다. 여기에는 &lt;strong>두 가지 강력한 수학적 장애물(Obstruction)&lt;/strong> 이 존재합니다.&lt;/p>
&lt;h3 id="장애물-아이디얼-류군ideal-class-group의-벽">장애물①: 아이디얼 류군(Ideal Class Group)의 벽
&lt;/h3>&lt;p>아이디얼 $I$는 반드시 「하나의 요소로 생성되는 아이디얼(단항 아이디얼)」이라고는 할 수 없습니다.
단항 아이디얼이 아닌 아이디얼에서 구체적인 요소 $\gamma$를 꺼내는 것은 불가능합니다.&lt;/p>
&lt;p>여기서 &lt;strong>「아이디얼 류군(Class Group, $Cl_K$)」&lt;/strong> 이라는 개념이 등장합니다. 아이디얼 류군이란, 「그 대수체의 세계에 단항 아이디얼이 아닌 아이디얼이 얼마나 존재하는가(소인수분해의 유일성이 얼마나 깨져 있는가)」를 측정하는 군입니다.
$\prod \langle a - b\alpha \rangle$이 $I^2$이 되었다고 해도, $I$가 아이디얼 류군에서 단위원(단항 아이디얼)이 아니라면, 요소의 제곱으로 되돌릴 수 없습니다.&lt;/p>
&lt;h3 id="장애물-단수군unit-group의-벽">장애물②: 단수군(Unit Group)의 벽
&lt;/h3>&lt;p>만약 운 좋게 $I$가 단항 아이디얼 $\langle \gamma \rangle$이었다고 해봅시다.
그러면 $\prod \langle a - b\alpha \rangle = \langle \gamma^2 \rangle$이 됩니다.
「좋아, 요소도 제곱이다!」라고 생각할지 모르지만, 큰 착각입니다.&lt;/p>
&lt;p>아이디얼(배수의 집합)이 같다는 것이 요소가 완전히 같다는 것을 의미하지는 않습니다. 반드시 &lt;strong>「단수(Unit: 역수도 정수가 되는 수. 1이나 -1 등)」&lt;/strong> 의 차이가 발생합니다.
즉, 실제 요소의 등식은 다음과 같이 됩니다.
&lt;/p>
$$\prod_{S} (a - b\alpha) = u \cdot \gamma^2$$
&lt;p>
($u$는 단수군 $U_K$의 요소)&lt;/p>
&lt;p>이 단수 $u$ 자체가 무언가의 제곱(평방원)이 아니라면, 좌변은 절대로 「완전한 요소의 제곱」이 될 수 없습니다.&lt;/p>
&lt;hr>
&lt;h2 id="제5단계-애들먼의-마법-이차-잉여-지표quadratic-characters">제5단계: 애들먼의 마법 「이차 잉여 지표(Quadratic Characters)」
&lt;/h2>&lt;p>아이디얼 류군의 장애물과 단수군의 장애물. 이 두 가지를 어떻게 뛰어넘을 것인가?
여기서 암호학자 레너드 애들먼(RSA의 &amp;ldquo;A&amp;rdquo;) 등이 도입한 천재적인 수법 &lt;strong>「이차 잉여 지표(Quadratic Characters)」&lt;/strong> 가 등장합니다.&lt;/p>
&lt;p>「어떤 요소가 대수체 안에서 완전히 제곱이 되어 있는가?」를 판정하기 위해, 르장드르 기호(이차 잉여)의 대수체 버전을 사용합니다.
아까의 거대한 행렬(소 아이디얼의 개수를 짝수로 만들기 위한 퍼즐)에 &lt;strong>「몇 가지 특별한 소 아이디얼 $\mathfrak{q}$에 대한 이차 잉여 지표도 모두 $1$(짝수)이 된다」는 추가 조건(열)을 수십 개 정도 몰래 덧붙이는&lt;/strong> 것입니다.&lt;/p>
&lt;p>행렬 계산에 의해 이 추가 조건조차도 만족하는 집합 $S$를 찾았을 때, 대수적 정수론의 깊은 정리에 의해 &lt;strong>「아이디얼 류군의 장애물도, 단수군의 장애물도, 압도적인 확률로 자연스럽게 소멸한다」&lt;/strong> 는 것이 보장됩니다.&lt;/p>
&lt;p>이를 통해 마침내 우리는 진정한 등식을 손에 넣게 됩니다.
&lt;/p>
$$\prod_{S} (a - b\alpha) = \gamma^2$$
&lt;hr>
&lt;h2 id="최종-단계-세계의-융합과-암호-붕괴">최종 단계: 세계의 융합과 암호 붕괴
&lt;/h2>&lt;p>드디어 퍼즐의 모든 조각이 맞춰졌습니다.&lt;/p>
&lt;p>&lt;strong>【대수체의 세계(세계A)의 요소】&lt;/strong>
$\gamma^2 = \prod (a - b\alpha)$
(이것을 제곱근 알고리즘을 사용하여 $\gamma$를 구합니다)&lt;/p>
&lt;p>&lt;strong>【현실의 세계(유리수의 세계)의 요소】&lt;/strong>
$V^2 = \prod (a - bm)$
(이쪽은 단순한 정수의 곱셈이므로, 평범하게 제곱근 $V$가 구해집니다)&lt;/p>
&lt;p>자, 맨 처음에 만든 마법의 다리, &lt;strong>준동형 사상 $\phi$&lt;/strong> 가 나설 차례입니다.
세계A의 요소 $\gamma$를, $\phi$($\alpha$에 $m$을 대입하는 사상)를 사용하여 세계B($N$의 나머지 세계)로 워프시킵니다.
&lt;/p>
$$Y = \phi(\gamma) \pmod N$$
&lt;p>한편, 현실 세계에서 만든 $V$를 그대로 나머지 세계로 가져가 $X$로 둡니다.
&lt;/p>
$$X = V \pmod N$$
&lt;p>준동형 사상의 「구조를 보존하는」 성질에 의해, 세계A에서 성립하던 제곱의 관계는 세계B(모듈로 $N$의 세계)에서도 완전히 보존되어 있습니다.
게다가 원래의 쌍 $(a, b)$는 $a - b\alpha$와 $a - bm$이라는 형태로 대응되어 만들어졌기 때문에, 이 $X$와 $Y$는 모듈로 $N$의 세계에서 격돌하며 다음의 절대적인 등식을 낳습니다.&lt;/p>
&lt;p>&lt;strong>$$X^2 \equiv Y^2 \pmod N$$&lt;/strong>&lt;/p>
&lt;p>이제 이 $X$와 $Y$가 자명한 해($X \equiv \pm Y$)가 아니기를 기도하며,
&lt;strong>$\gcd(X - Y, N)$&lt;/strong> 을 계산합니다.&lt;/p>
&lt;p>비자명한 해라면, 유클리드 호제법이 0.001초 만에 실행되며 RSA 암호의 심장부인 비밀 소수 $p$와 $q$가 출력 화면에 인쇄됩니다.&lt;/p>
&lt;hr>
&lt;p>이것이 현대 수학의 정수를 모은 &lt;strong>「일반 수체 체법(GNFS)」의 완전한 모습&lt;/strong> 입니다.&lt;/p></description></item><item><title>인터넷 암호를 깨는 인류 최강의 수학 '일반 수체 체(GNFS)'란?</title><link>http://kenji.blog/ko/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/</link><pubDate>Sat, 05 Sep 2026 02:09:08 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/gnfs_two_worlds_1788542142485.jpg" alt="Featured image of post 인터넷 암호를 깨는 인류 최강의 수학 '일반 수체 체(GNFS)'란?" />&lt;h1 id="인터넷의-암호를-깨는-인류-최강의-수학-일반-수체-체gnfs란">인터넷의 암호를 깨는 인류 최강의 수학 「일반 수체 체(GNFS)」란?
&lt;/h1>&lt;p>우리가 매일 사용하는 인터넷. LINE 메시지나 YouTube, Amazon에서의 쇼핑 등 모든 통신은 &amp;ldquo;암호&amp;quot;에 의해 보호받고 있습니다.
현재 전 세계에서 가장 많이 사용되는 암호의 대표가 &amp;ldquo;RSA 암호&amp;quot;입니다.&lt;/p>
&lt;p>RSA 암호 방어의 핵심은 매우 간단합니다. 그것은 &lt;strong>&amp;ldquo;거대한 수의 소인수분해는 컴퓨터로도 풀 수 없다&amp;rdquo;&lt;/strong> 는 수학적 성질을 이용하고 있다는 것입니다.
예를 들어 &amp;ldquo;15&amp;quot;라면 &amp;ldquo;3 × 5&amp;quot;라고 바로 알 수 있지만, 이것이 &amp;ldquo;270자리 숫자&amp;quot;가 되는 순간 전 세계의 슈퍼컴퓨터를 모두 모아도 푸는 데 수억 년이 걸리고 맙니다.&lt;/p>
&lt;p>하지만 수학자들도 가만히 있지는 않습니다. 이 철벽같은 암호를 깨기 위해 인류는 &lt;strong>&amp;ldquo;일반 수체 체(GNFS: General Number Field Sieve)&amp;rdquo;&lt;/strong> 라는 마법 같은 알고리즘(계산 절차)을 만들어 냈습니다.&lt;/p>
&lt;p>이 글에서는 전문 용어를 전혀 사용하지 않고, &lt;strong>중학교에서 배우는 수학(소인수분해, 문자식, 최대공약수)&lt;/strong> 지식만으로 이 &amp;ldquo;인류 최강의 알고리즘&amp;quot;이 암호를 깨는 원리를 단계별로 완전 해설합니다!&lt;/p>
&lt;hr>
&lt;h2 id="제1장-암호-해독의-목표는-중학교-3학년-공식">제1장: 암호 해독의 목표는 &amp;ldquo;중학교 3학년 공식&amp;rdquo;
&lt;/h2>&lt;p>거대한 소인수분해에 맞서기 위한 최대의 필살기. 그것은 중학교 3학년 때 배우는 이 공식입니다.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>$X^2 - Y^2 = (X + Y)(X - Y)$&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>&amp;ldquo;어, 이런 기초적인 공식으로 암호를 깰 수 있다고?&amp;ldquo;라고 생각할지 모릅니다. 하지만 이것이야말로 모든 것을 밝혀낼 마스터키입니다.&lt;/p>
&lt;p>암호를 깨기 위한 최대의 목표는 거대한 수 $N$에 대해,
&lt;strong>&amp;quot;$X^2$과 $Y^2$을 $N$으로 나눈 나머지가 같아지는 수($X$와 $Y$)&amp;rdquo;&lt;/strong> 를 찾는 것입니다.&lt;/p>
&lt;h3 id="왜-나머지가-같으면-암호가-풀리는-걸까">왜 &amp;ldquo;나머지가 같으면&amp;rdquo; 암호가 풀리는 걸까?
&lt;/h3>&lt;p>어떤 두 수 $X^2$과 $Y^2$의 &amp;ldquo;$N$으로 나눈 나머지가 같다&amp;quot;고 가정해 봅시다.
나머지가 같다는 것은 &lt;strong>뺄셈을 한 &amp;ldquo;$X^2 - Y^2$&amp;ldquo;는 반드시 $N$으로 딱 나누어떨어진다($N$의 배수가 된다)&lt;/strong> 는 법칙이 있습니다.&lt;/p>
&lt;p>여기서 암호에 사용되는 거대한 수 $N$은 두 개의 비밀 소수($p$와 $q$)의 곱셈으로 이루어져 있다고 합시다($N = p \times q$).&lt;/p>
&lt;p>$X^2 - Y^2$를 인수분해하면 &lt;strong>$(X - Y)(X + Y)$&lt;/strong> 가 됩니다.
이것이 $N$의 배수라는 것은 이 곱셈의 어딘가에 비밀 소수 $p$와 $q$가 숨어 있다는 의미입니다.&lt;/p>
&lt;p>여기서 기적이 일어납니다.
두 소수 $p$와 $q$가 &lt;strong>&amp;quot;$p$는 $(X - Y)$의 방으로&amp;rdquo;, &amp;ldquo;$q$는 $(X + Y)$의 방으로&amp;rdquo;&lt;/strong> 서로 다른 방으로 나뉘어 들어갈 확률이 수학적으로 ** 50%(2분의 1)** 나 되는 것입니다.&lt;/p>
&lt;p>소수 $p$만이 $(X - Y)$의 방에 들어간 상태에서 $(X - Y)$와 $N$의 &lt;strong>&amp;ldquo;최대공약수(공통되는 가장 큰 부품)&amp;rdquo;&lt;/strong> 를 계산해 봅시다.&lt;/p>
&lt;ul>
&lt;li>$(X - Y)$의 내용물 = $p \times$ 어떤 수&lt;/li>
&lt;li>$N$의 내용물 = $p \times q$
공통된 부품은 &lt;strong>&amp;quot;$p$&amp;rdquo;&lt;/strong> 밖에 없죠!&lt;/li>
&lt;/ul>
&lt;p>즉, 최대공약수를 계산하는 순간 숨어 있던 소수 $p$가 툭 떨어져 나와 암호가 완전히 해독되어 버리는 것입니다. (※최대공약수는 &amp;ldquo;유클리드 호제법&amp;quot;을 사용하면 스마트폰으로도 순식간에 계산할 수 있습니다)&lt;/p>
&lt;p>&lt;strong>【잠깐 칼럼: 왜 제곱일까? 세제곱이나 2배는 안 될까?】&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;$2X - 2Y$&amp;ldquo;라면 $2(X - Y)$가 되어 방이 하나밖에 없으므로 소수를 떼어놓을 수 없습니다. &amp;ldquo;$X^3 - Y^3$&amp;ldquo;라면 방의 크기가 불균형해져서 계산이 쓸데없이 무거워집니다. 소수를 두 개로 떼어놓기 위해서는 아름답게 두 개의 방으로 나뉘는 &amp;ldquo;제곱&amp;quot;이 가성비가 가장 좋습니다.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="제2장-x와-y를-어떻게-찾을까-소수-카드-모으기-퍼즐">제2장: X와 Y를 어떻게 찾을까? &amp;ldquo;소수 카드 모으기 퍼즐&amp;rdquo;
&lt;/h2>&lt;p>목표는 알았습니다. 하지만 &amp;ldquo;나머지가 같아지는 $X^2$과 $Y^2$&amp;ldquo;를 무턱대고 찾아봤자 우주의 수명이 다할 때까지 찾을 수 없습니다.
그래서 수학자들은 &lt;strong>&amp;ldquo;소수 카드 모으기 퍼즐&amp;rdquo;&lt;/strong> 이라는 천재적인 방법을 떠올렸습니다.&lt;/p>
&lt;h3 id="step-1-사금매끄러운-수만을-체로-걸러-모으기">Step 1: 사금(매끄러운 수)만을 체로 걸러 모으기
&lt;/h3>&lt;p>먼저 적당한 수 $Z$를 준비하고, 제곱해서 $N$으로 나눈 나머지 $W$를 계산합니다.
($Z^2 = W$인 나머지의 세계)&lt;/p>
&lt;p>나온 나머지 $W$를 소인수분해합니다. 여기서 &lt;strong>&amp;ldquo;2, 3, 5, 7 등의 작은 소수로만 이루어진 $W$&amp;rdquo;&lt;/strong> 가 나왔을 때만 그 식을 &amp;ldquo;당첨 카드&amp;quot;로 남기고, 큰 소수가 섞여 있으면 버립니다.
강에서 큰 돌을 체로 걸러 버리고 사금만을 모으는 것과 같은 작업입니다.&lt;/p>
&lt;h3 id="step-2-모두-짝수-개로-만드는-퍼즐">Step 2: 모두 &amp;ldquo;짝수 개&amp;quot;로 만드는 퍼즐
&lt;/h3>&lt;p>예를 들어, 다음과 같은 3장의 사금 카드가 모였다고 합시다.&lt;/p>
&lt;ul>
&lt;li>카드 A: $Z_1^2 = 2^3 \times 3^1$&lt;/li>
&lt;li>카드 B: $Z_2^2 = 2^1 \times 5^1$&lt;/li>
&lt;li>카드 C: $Z_3^2 = 3^1 \times 5^1$&lt;/li>
&lt;/ul>
&lt;p>이것을 모두 곱해 봅시다.
오른쪽은 $(2^3 \times 3^1) \times (2^1 \times 5^1) \times (3^1 \times 5^1)$이 되고,
한데 묶어 정리하면 &lt;strong>&amp;quot;$2^4 \times 3^2 \times 5^2$&amp;rdquo;&lt;/strong> 가 됩니다.&lt;/p>
&lt;p>놀랍게도 소수의 개수가 &amp;ldquo;4개, 2개, 2개&amp;quot;로 &lt;strong>모두 짝수 개&lt;/strong> 가 되었습니다!
모두 짝수 개라는 것은 전체를 절반의 개수로 만들면 &amp;ldquo;어떤 수의 제곱&amp;quot;이 된다는 것입니다.
즉, $(2^2 \times 3^1 \times 5^1)^2 = (60)^2$입니다.&lt;/p>
&lt;p>왼쪽은 $(Z_1 \times Z_2 \times Z_3)^2$이므로, 이것으로 마침내
&lt;strong>$X = (Z_1 \times Z_2 \times Z_3)$&lt;/strong>
&lt;strong>$Y = 60$&lt;/strong>
이라는 기다리고 기다리던 &amp;ldquo;$X^2 = Y^2$&amp;ldquo;의 쌍이 완성된 것입니다!&lt;/p>
&lt;p>컴퓨터에 있어 소수의 개수를 &amp;ldquo;짝수인가 홀수인가(0인가 1인가)&amp;ldquo;로 계산하는 퍼즐은 매우 능숙하므로, 이 방법이라면 빠르게 $X$와 $Y$를 찾을 수 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="제3장-앞을-가로막는-절망의-벽">제3장: 앞을 가로막는 절망의 벽
&lt;/h2>&lt;p>이제 어떤 암호라도 깰 수 있다!&amp;hellip; 라고 생각했지만, 큰 문제가 발생합니다.
암호 숫자 $N$이 &amp;ldquo;100자리&amp;rdquo; 정도까지라면 이 방법(이차 체라고 합니다)으로 풀 수 있지만, $N$이 &amp;ldquo;200자리, 300자리&amp;quot;가 되면 계산 도중에 나오는 $W$가 너무 커집니다.&lt;/p>
&lt;p>숫자가 너무 커지면 &amp;ldquo;작은 소수로만 이루어진 수(사금)&amp;ldquo;가 뚝 끊기고 맙니다. 사막에서 콘택트렌즈를 찾는 것보다 어려워져서, 퍼즐을 풀기 위한 카드가 전혀 모이지 않게 되는 것입니다.&lt;/p>
&lt;p>여기서 마침내 인류의 최종 병기 &lt;strong>&amp;ldquo;일반 수체 체(GNFS)&amp;rdquo;&lt;/strong> 가 등장합니다.&lt;/p>
&lt;hr>
&lt;h2 id="제4장-인류-최강의-아이디어-두-개의-세계-만들기">제4장: 인류 최강의 아이디어 &amp;ldquo;두 개의 세계&amp;rdquo; 만들기
&lt;/h2>&lt;p>GNFS의 천재적인 발상은 &lt;strong>&amp;ldquo;현실 세계에서만 계산하니까 숫자가 커진다. 그렇다면 다항식(문자식)을 사용한 &amp;lsquo;이면의 세계&amp;rsquo;를 만들어서 계산의 무게를 둘로 분산시키자&amp;rdquo;&lt;/strong> 라는 것입니다.&lt;/p>
&lt;h3 id="문자식의-마법">문자식의 마법
&lt;/h3>&lt;p>GNFS는 거대한 수 $N$을 베이스가 되는 수 $m$을 사용하여 문자식으로 변환합니다.
예를 들어 $N=100$이라면, $m=4$로 하여 $100 = 4^3 + 2(4^2) + 4$.
이것을 문자 $x$를 사용하여 &lt;strong>$f(x) = x^3 + 2x^2 + x$&lt;/strong> 라는 식(이면의 세계)으로 만듭니다.&lt;/p>
&lt;p>이 식의 재미있는 점은 &lt;strong>&amp;ldquo;문자 $x$에 $m$(위의 예라면 4)을 대입하면 언제든지 현실의 수 $N$으로 워프해서 돌아올 수 있다&amp;rdquo;&lt;/strong> 는 성질을 가지고 있다는 것입니다.&lt;/p>
&lt;h3 id="두-세계에서-동시에-사금-찾기">두 세계에서 동시에 사금 찾기
&lt;/h3>&lt;p>GNFS는 적당한 정수 쌍 $(a, b)$를 많이 만들고, 다음 두 가지 계산을 동시에 수행합니다.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>현실 세계&lt;/strong>: $a - b \times m$&lt;/li>
&lt;li>&lt;strong>문자식 세계&lt;/strong>: $a - b \times x$를 문자식의 규칙으로 계산한 값&lt;/li>
&lt;/ol>
&lt;p>문제를 두 개의 세계로 나눔으로써 다루는 숫자의 크기가 극적으로 작아집니다(가벼워집니다). 거대한 바위를 둘로 쪼개어 다루기 쉬운 돌멩이로 만든 이미지입니다.&lt;/p>
&lt;p>그리고 &lt;strong>&amp;ldquo;현실 세계에서도, 문자식 세계에서도 양쪽 모두 &amp;lsquo;작은 소수로만 이루어져 있는(사금)&amp;rsquo;&amp;rdquo;&lt;/strong> 기적의 쌍 $(a, b)$만을 체로 걸러내어 모읍니다. 이것이 &amp;ldquo;수체 체&amp;quot;라는 이름의 유래입니다.&lt;/p>
&lt;h3 id="마침내-암호가-깨지는-순간">마침내 암호가 깨지는 순간
&lt;/h3>&lt;p>양쪽 세계에서 수천만 장의 &amp;ldquo;사금 카드&amp;quot;가 모이면 슈퍼컴퓨터의 거대한 행렬 계산을 사용하여, 제2장에서 했던 &amp;ldquo;소수의 개수가 모두 짝수가 되는 조합&amp;quot;을 찾아냅니다.&lt;/p>
&lt;p>조합을 찾으면,&lt;/p>
&lt;ul>
&lt;li>현실 세계에서 만들어진 제곱 수를 &lt;strong>$X^2$&lt;/strong>&lt;/li>
&lt;li>문자식 세계에서 만들어진 제곱 식을 &lt;strong>$Y(x)^2$&lt;/strong> 로 둡니다.&lt;/li>
&lt;/ul>
&lt;p>마지막으로 문자식의 $Y(x)$의 $x$에 $m$을 대입하여 현실 세계로 워프시켜 합류시킵니다.
그러면 수학의 마법처럼 &lt;strong>&amp;quot;$X^2$과 $Y^2$의 나머지가 같아진다&amp;rdquo;&lt;/strong> 는 상태가 엄밀하게 완성되는 것입니다!&lt;/p>
&lt;p>이제 제1장에서와 같이 $X - Y$와 $N$의 최대공약수를 계산하면, 난공불락의 RSA 암호는 소리를 내며 무너져 내리고 비밀 소수가 모습을 드러냅니다.&lt;/p>
&lt;hr>
&lt;h2 id="맺음말-수학은-끝나지-않는다">맺음말: 수학은 끝나지 않는다
&lt;/h2>&lt;p>&amp;ldquo;좋아, GNFS를 사용하면 어떤 암호라도 깰 수 있겠구나!&amp;ldquo;라고 생각했을지도 모릅니다.
하지만 RSA 암호도 만만치 않습니다. 현재 인터넷에서 사용되는 것은 &amp;ldquo;RSA-2048(약 617자리)&amp;ldquo;이라는 괴물 같은 거대 수입니다.&lt;/p>
&lt;p>GNFS가 아무리 인류 최강의 알고리즘이라 하더라도, 270자리(RSA-270)를 푸는 데만도 전 세계의 컴퓨터를 연결해도 수천 년, 수만 년이 걸린다고 합니다. 지금으로서는 우리의 LINE이나 은행 데이터는 안전합니다.&lt;/p>
&lt;p>하지만 만약 &lt;strong>&amp;ldquo;어떤 거대한 수라도 순식간에 $X$와 $Y$를 찾는 마법&amp;rdquo;&lt;/strong> 이 나타난다면 어떻게 될까요?
사실 거기에 가장 가까운 존재가 현재 개발 중인 &lt;strong>&amp;ldquo;양자 컴퓨터(쇼어의 알고리즘)&amp;rdquo;&lt;/strong> 입니다. 양자 역학의 파동 성질을 사용하면 귀찮은 카드 모으기 퍼즐을 무시하고 단번에 답을 뽑아낼 수 있다고 수학적으로 증명되어 있습니다.&lt;/p>
&lt;p>암호를 만드는 사람(방어)과 암호를 깨는 알고리즘을 만드는 사람(공격)의 끝없는 지혜 겨루기.
중학교에서 배우는 &amp;ldquo;소인수분해&amp;quot;나 &amp;ldquo;문자식&amp;quot;이 사실은 세계 보안의 최전선에서 치열하게 싸우고 있는 무기라는 것을 알면 수학 수업이 조금은 더 재미있어 보이지 않나요?&lt;/p>
&lt;p>미래의 최강 알고리즘을 발견하는 것은 이 글을 읽고 있는 당신일지도 모릅니다!&lt;/p>
&lt;hr>
&lt;p>&lt;em>(※본 기사는 암호 해독의 수학적 매력을 중학생용으로 개념화한 것입니다. 실제 GNFS는 대수체의 이데알 류군이나 준동형 사상 등의 고도화된 대학 수학을 이용하여 엄밀하게 계산됩니다)&lt;/em>&lt;/p></description></item><item><title>'반백신의 공과'</title><link>http://kenji.blog/ko/p/%E5%8F%8D%E3%83%AF%E3%82%AF%E3%83%81%E3%83%B3%E3%81%AE%E5%8A%9F%E7%BD%AA/</link><pubDate>Sat, 24 Jan 2026 15:41:23 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%8F%8D%E3%83%AF%E3%82%AF%E3%83%81%E3%83%B3%E3%81%AE%E5%8A%9F%E7%BD%AA/</guid><description>&lt;img src="http://kenji.blog/p/%E5%8F%8D%E3%83%AF%E3%82%AF%E3%83%81%E3%83%B3%E3%81%AE%E5%8A%9F%E7%BD%AA/img.png" alt="Featured image of post '반백신의 공과'" />&lt;h1 id="반백신의-공과선의의-불안이-죽인-5000명의-미래와-우리가-배워야-할-역학의-교훈">반백신의 공과――&amp;lsquo;선의의 불안&amp;rsquo;이 죽인 5000명의 미래와 우리가 배워야 할 역학의 교훈
&lt;/h1>&lt;h2 id="코로나-사태가-부각시킨-인과의-착각">코로나 사태가 부각시킨 &amp;lsquo;인과의 착각&amp;rsquo;
&lt;/h2>&lt;p>2021년 이후, 일본 국내에서 코로나19 백신 접종이 급속히 추진되었습니다. 단기간에 국민의 80% 가까이가 접종한다는, 인류 역사상 보기 드문 공중보건 프로젝트였습니다.
이 과정에서 우리는 SNS나 언론을 통해 수많은 &amp;lsquo;비명&amp;rsquo;을 목격했습니다. &amp;ldquo;백신을 맞은 며칠 뒤에 가족이 세상을 떠났다&amp;rdquo;, &amp;ldquo;접종 후 원인 모를 컨디션 난조가 계속되고 있다&amp;rdquo;――. 이러한 호소는 절실하며, 당사자에게 그 고통은 틀림없는 진실입니다.&lt;/p>
&lt;p>그러나 여기에 역학에 있어서 냉철하지만 극히 중요한 &amp;lsquo;함정&amp;rsquo;이 존재합니다.
일본의 인구 규모로 생각하면, 백신을 맞든 안 맞든 매일 약 3,000명에서 4,000명의 사람들이 어떤 원인(질병, 사고, 수명)으로 사망하고 있습니다. 국민 대다수가 일제히 백신을 접종하면, 확률론적으로 &amp;lsquo;접종한 다음 날에 (백신과는 무관한 원인으로) 사망하는 사람&amp;rsquo;은 반드시 일정 수 발생합니다. 이를 전문용어로 &lt;strong>&amp;lsquo;우연의 일치(Coincidence)&amp;rsquo;&lt;/strong> 라고 부릅니다.&lt;/p>
&lt;p>인간에게는 &amp;lsquo;전후 즉 인과의 오류(Post hoc ergo propter hoc)&amp;lsquo;라는 인지 편향이 갖추어져 있습니다. &amp;lsquo;A(접종) 이후에 B(사망)가 일어났다&amp;rsquo;면 &amp;lsquo;A가 B의 원인이다&amp;rsquo;라고 직관적으로 연결 지어버리는 것입니다. 코로나 사태에서는 이 인지 편향이 SNS라는 증폭 장치에 의해 확산되어, 과학적인 검증을 기다리지 않고 &amp;lsquo;백신=위험&amp;rsquo;이라는 이미지가 정착하는 층을 만들어냈습니다.&lt;/p>
&lt;p>이 광경을 기시감과 함께 바라보던 공중보건 전문가는 적지 않습니다. 왜냐하면 일본은 불과 몇 년 전에 이 &amp;lsquo;과학 없는 불안&amp;rsquo;으로 인해 막을 수 있었던 질병을 예방할 수단을 스스로 포기한 유일한 선진국이기 때문입니다.
그것이 바로 &lt;strong>&amp;lsquo;자궁경부암 백신(HPV 백신)&amp;rsquo;&lt;/strong> 문제입니다.&lt;/p>
&lt;hr>
&lt;h2 id="2013년-일본에서-무슨-일이-일어났는가">2013년, 일본에서 무슨 일이 일어났는가
&lt;/h2>&lt;p>시곗바늘을 조금 되돌려보겠습니다.
자궁경부암은 연간 약 1만 1000명의 여성이 이환되고, 약 2,900명이 사망하는 질병입니다. 특히 20대에서 40대라는, 육아와 일의 한창때인 세대를 덮치기 때문에 &amp;lsquo;마더 킬러&amp;rsquo;라고도 불립니다. 원인은 인유두종바이러스(HPV) 감염이며, 성관계 경험이 있는 여성의 80%가 일생에 한 번은 감염된다고 여겨지는 흔한 바이러스입니다.
이 바이러스 감염을 막는 HPV 백신은 전 세계적으로 &amp;lsquo;암을 예방할 수 있는 획기적인 백신&amp;rsquo;으로 도입이 진행되어, 일본에서도 2013년 4월에 정기접종화(국가가 강력히 권장하며, 무료로 받을 수 있는 상태)되었습니다.&lt;/p>
&lt;p>그러나 직후에 사태는 암전됩니다.
접종을 받은 소녀들 일부에서 전신 통증, 운동장애, 기억장애 등의 증상이 보고되었고, 언론은 이를 &amp;lsquo;백신의 부작용 의심&amp;rsquo;으로 연일 대서특필했습니다. 경련하는 소녀의 영상은 시청자에게 강렬한 임팩트를 주었고, 여론은 단숨에 &amp;lsquo;백신 위험론&amp;rsquo;으로 기울었습니다.&lt;/p>
&lt;p>이에 따라 후생노동성은 2013년 6월, 정기접종 개시 불과 2개월 만에 &amp;lsquo;적극적인 권장 중단&amp;rsquo;을 결정했습니다. 이는 &amp;lsquo;금지&amp;rsquo;도 &amp;lsquo;중지&amp;rsquo;도 아닌, &amp;lsquo;정기접종의 틀은 남기지만, 국가에서 개별적인 안내 통지를 보내는 것을 그만둔다&amp;rsquo;는 지극히 모호한 정치적 판단이었습니다.
하지만 국민에게는 &amp;lsquo;국가가 위험하다고 인정하고 멈췄다&amp;rsquo;는 메시지로 전달되었습니다. 그 결과 70%를 넘던 접종률은 순식간에 1% 미만으로 폭락했습니다.&lt;/p>
&lt;p>여기서부터 일본에서의 &lt;strong>&amp;lsquo;잃어버린 8년(백신 갭)&amp;rsquo;&lt;/strong> 이 시작됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="나고야-스터디가-파헤친-진실">나고야 스터디가 파헤친 &amp;lsquo;진실&amp;rsquo;
&lt;/h2>&lt;p>언론이 보도한 증상은 정말 백신 때문이었을까요?
이 질문에 과학적으로 답하고자 했던 대규모 조사가 있습니다. 통칭 &lt;strong>&amp;lsquo;나고야 스터디&amp;rsquo;&lt;/strong> 입니다.&lt;/p>
&lt;p>나고야시는 2015년, 약 7만 명의 젊은 여성을 대상으로 대규모 앙케이트 조사를 실시했습니다. 이는 백신을 &amp;lsquo;맞은 사람&amp;rsquo;과 &amp;lsquo;맞지 않은 사람&amp;rsquo; 모두를 포함하여, 각각에게 &amp;lsquo;생리불순&amp;rsquo;, &amp;lsquo;관절 통증&amp;rsquo;, &amp;lsquo;집중력 저하&amp;rsquo; 등 24개 항목에 걸친 증상 유무를 묻는 것이었습니다.
만약 백신이 원인이라면, &amp;lsquo;맞은 사람&amp;rsquo; 그룹에서 이러한 증상이 명백하게 더 많이 나와야 합니다.&lt;/p>
&lt;p>결과는 충격적이었습니다.
&lt;strong>&amp;lsquo;접종한 군&amp;rsquo;과 &amp;lsquo;접종하지 않은 군&amp;rsquo; 사이에서 증상 발생률에 유의미한 차이는 인정되지 않았던 것입니다.&lt;/strong>&lt;/p>
&lt;p>이것은 무엇을 의미할까요?
사춘기 소녀는 백신 유무에 관계없이 호르몬 밸런스의 변화나 성장기 특유의 사정으로 인해, 기립성 조절장애나 만성 통증 등의 컨디션 난조를 일으키기 쉬운 시기에 있습니다.
즉, 언론이 보도한 &amp;lsquo;백신을 맞은 후 증상이 나타난 아이&amp;rsquo;와 같은 비율로, &amp;lsquo;백신을 맞지 않았는데도 같은 증상이 나타나는 아이&amp;rsquo;가 존재했던 것입니다.
하지만 맞지 않은 아이의 컨디션 난조는 &amp;lsquo;사춘기의 부조화&amp;rsquo;로 처리되었고, 맞은 아이의 부조화만이 &amp;lsquo;백신의 피해&amp;rsquo;로 클로즈업되었습니다. 이것이 &amp;lsquo;약해(藥害)&amp;lsquo;라고 떠들썩했던 현상의 정체였을 가능성이 극히 높다는 것이 데이터를 통해 나타난 것입니다.&lt;/p>
&lt;p>게다가 &amp;lsquo;노세보 효과(Nocebo effect)&amp;lsquo;의 관여도 지적되고 있습니다. &amp;lsquo;플라세보(위약) 효과&amp;rsquo;의 반대로, &amp;lsquo;이것은 몸에 나쁜 것이다&amp;rsquo;라고 믿고 섭취하면 불안이나 공포심 때문에 정말로 통증이나 부조화가 생겨버리는 현상입니다. 연일 이어지는 부정적인 보도가 소녀들의 섬세한 심신에 영향을 미쳤을 가능성을 부정할 수 없습니다.&lt;/p>
&lt;hr>
&lt;h2 id="숫자로-보는-부작위의-죄">숫자로 보는 &amp;lsquo;부작위의 죄&amp;rsquo;
&lt;/h2>&lt;p>&amp;lsquo;만약을 위해 권장을 멈춘다&amp;rsquo;.
이 판단은 언뜻 보면 &amp;lsquo;신중하고 안전한 선택&amp;rsquo;으로 보입니다. 무슨 일이 생기고 나면 늦는 것이니까, 의심스러운 것은 멈춰야 한다고. 그러나 공중보건에 있어서 &amp;lsquo;아무것도 하지 않는 것(부작위)&amp;lsquo;은 때로는 &amp;lsquo;무언가를 하는 리스크&amp;rsquo;를 훨씬 웃도는 피해를 가져옵니다.&lt;/p>
&lt;p>오사카대학 연구팀은 이 권장 중단이 가져온 영향에 대해 잔혹한 추계를 발표했습니다.
2013년부터 2019년 사이에 접종률이 격감함으로써, 장래에 막을 수 있었던 &lt;strong>자궁경부암 환자가 약 2만 5000명 증가하고, 사망자 수가 약 5,000명～5,700명 증가한다&lt;/strong> 는 것입니다.&lt;/p>
&lt;p>5,000명 이상의 사망자. 이것은 대규모 자연재해에 필적하는 숫자입니다.
&amp;lsquo;부작용에 대한 불안&amp;rsquo;이라는, 과학적으로 인과관계가 확실하지 않은 리스크를 회피하려 한 결과, 우리는 &amp;lsquo;암에 의한 사망&amp;rsquo;이라는 확실하고 중대한 리스크를 미래의 여성들에게 짊어지게 한 것입니다.&lt;/p>
&lt;p>세계로 눈을 돌리면 그 차이는 역력합니다.
호주에서는 남녀에 대한 접종 보급으로 2028년경에는 자궁경부암이 &amp;lsquo;근절(희귀암화)&amp;lsquo;될 것으로 예측되고 있습니다. 영국에서도 백신 접종 세대의 자궁경부암 발병이 거의 제로가 되었다는 보고가 있습니다.
세계가 &amp;lsquo;암을 극복하는&amp;rsquo; 미래로 나아가는 가운데, 일본만이 &amp;lsquo;암이 계속 늘어나는&amp;rsquo; 과거에 남겨졌습니다. 2015년, WHO(세계보건기구)의 백신 안전성 자문위원회는 일본의 상황을 지목하여 비판했습니다. &amp;ldquo;과학적 근거에 기반하지 않은 정책 결정이 진정한 해(암에 의한 사망)를 가져오고 있다&amp;quot;고.&lt;/p>
&lt;hr>
&lt;h2 id="바다를-건너-연쇄하는-백신-기피">바다를 건너 연쇄하는 &amp;lsquo;백신 기피&amp;rsquo;
&lt;/h2>&lt;p>일본에서 일어난 HPV 백신의 비극은 결코 &amp;lsquo;일본만의 특수 사정&amp;rsquo;이 아닙니다. 과학보다 &amp;lsquo;직관적인 불안&amp;rsquo;이나 &amp;lsquo;이데올로기&amp;rsquo;가 우선되었을 때, 감염증은 언제 어디서나 이빨을 드러낸다는 것을 보여주는 사례가 지금도 전 세계에서 보고되고 있습니다.&lt;/p>
&lt;p>그 현저한 예가 미국에서의 &lt;strong>&amp;lsquo;홍역(마진)&amp;rsquo; 유행&lt;/strong> 입니다.&lt;/p>
&lt;p>홍역은 매우 감염력이 강한 바이러스이지만, 백신에 의해 거의 완전히 예방 가능한 질병입니다. 미국에서는 과거 철저한 백신 접종 프로그램을 통해 2000년에 &amp;lsquo;퇴치(elimination)&amp;lsquo;가 선언되었습니다. 즉, 국내에서 토착 바이러스는 없어졌다고 여겨졌던 것입니다.
그러나 최근 그 홍역이 다시 유행하기 시작하고 있습니다.&lt;/p>
&lt;p>BBC의 보도(2024년)에 따르면, 미국 보건 당국은 일부 커뮤니티에 뿌리 깊게 남아있는 &amp;lsquo;백신 기피(Vaccine Hesitancy)&amp;lsquo;가 감염 확대의 온상이 되고 있다고 지적하고 있습니다.
종교적인 이유나, &amp;lsquo;자연주의&amp;rsquo;를 표방하는 일부 집단, 혹은 잘못된 정보에 기반한 반백신 사상이 침투한 지역에서 백신 접종률이 저하되었습니다. 거기에 해외에서 바이러스가 유입되면서, 면역을 갖지 않은 사람들 사이에서 폭발적인 감염이 일어나고 있는 것입니다.&lt;/p>
&lt;p>홍역은 단순한 발열이나 발진으로 끝나는 병이 아닙니다. 폐렴이나 뇌염 등의 중증 합병증을 일으켜 선진국이라도 죽음에 이를 가능성이 있습니다. 일찍이 인류가 영지를 결집하여 &amp;lsquo;봉쇄&amp;rsquo;했던 질병이, 사람들의 &amp;lsquo;의심&amp;rsquo;이라는 틈을 찔러 다시 아이들의 생명을 위협하고 있는 것입니다.
미국의 사례는 우리에게 이렇게 경고하고 있습니다. &amp;ldquo;높은 접종률이라는 방파제는 사람들의 신뢰가 흔들리면 순식간에 붕괴한다&amp;quot;고.&lt;/p>
&lt;hr>
&lt;h2 id="언론과-전문가-그리고-우리의-패배">언론과 전문가, 그리고 우리의 패배
&lt;/h2>&lt;p>왜 이러한 사태가 반복되는 것일까요.
그곳에는 현대 사회 특유의 정보 비대칭성과 우리의 인지 편향이 있습니다.&lt;/p>
&lt;p>일본의 HPV 백신 문제에서 언론은 &amp;lsquo;백신의 부작용 의심&amp;rsquo;을 선정적으로 보도했습니다. &amp;lsquo;불쌍한 피해자&amp;rsquo; 대 &amp;lsquo;냉철한 국가·제약회사&amp;rsquo;라는 구도는 이야기로서 매우 강력했고, 시청자의 감정을 강하게 뒤흔들었습니다.
한편, &amp;ldquo;통계적으로 유의미한 차이가 없다&amp;rdquo;, &amp;ldquo;이익이 위험을 상회한다&amp;quot;와 같은 전문가의 과학적인 설명은 건조하고 차갑게 울렸고, 감정의 격류 앞에서는 너무나도 무력했습니다.&lt;/p>
&lt;p>과학의 세계에서는 99%의 과학자가 지지하는 정설과 1%의 이론이 있을 때, 그것을 &amp;lsquo;동등한 의견&amp;rsquo;으로 취급하지 않습니다. 그러나 언론은 &amp;lsquo;공정성&amp;rsquo;을 중시한 나머지, 혹은 이목을 끌기 위해 수만 명의 목숨을 구하는 데이터와 1명의 감정적인 피해 호소를 &amp;lsquo;대등한 것&amp;rsquo;으로 병렬 보도했습니다.
정치인 또한 여론의 반발을 두려워하여, 과학적 근거보다 &amp;lsquo;그 자리의 분위기&amp;rsquo;를 읽는 것을 우선했습니다. 그 결과 일본에서는 HPV 백신의 적극적 권장이 약 9년간이나 중지되었고, 그 사이에 막을 수 있었던 수많은 암 피해를 낳아버린 것입니다.&lt;/p>
&lt;hr>
&lt;h2 id="역사는-반복된다분위기에-저항하는-지성을">역사는 반복된다――&amp;lsquo;분위기&amp;rsquo;에 저항하는 지성을
&lt;/h2>&lt;p>2022년, 일본에서 마침내 HPV 백신의 적극적 권장이 재개되었습니다. 그러나 잃어버린 시간과 생명은 돌아오지 않습니다. 그리고 지금 미국에서 홍역이 재유행하고 있듯이, 방심하면 역사는 몇 번이고 반복됩니다.&lt;/p>
&lt;p>반백신 운동이나 의료에 대한 우려를 품는 것 자체를 전면 부정할 수는 없습니다. 자신의 몸에 들어가는 것에 대해 신중해지는 것은 인간의 방어 본능이며, 과거에는 실제로 약해도 일어났습니다. 권력을 감시하고 의심하는 것은 민주주의에 있어 중요합니다.&lt;/p>
&lt;p>그러나 코로나 백신, HPV 백신, 그리고 미국 홍역 유행이라는 일련의 사건이 들이대고 있는 것은, &lt;strong>&amp;lsquo;과학을 무시한 선의의 불안&amp;rsquo;이 바이러스 자체보다 더 많은 생명을 앗아갈 수 있다&lt;/strong> 는 냉엄한 사실입니다.&lt;/p>
&lt;p>&amp;ldquo;위험할지도 모르니, 상황을 지켜보자&amp;rdquo;
그 판단을 했을 때, 우리는 &amp;lsquo;상황을 지켜보는 동안 병으로 죽을 확률&amp;rsquo;을 계산에 넣고 있을까요.
&amp;ldquo;자연적인 것이 가장 좋다&amp;rdquo;
그렇게 말할 때, 우리는 &amp;lsquo;자연계에 있는 바이러스야말로 가장 가차 없이 목숨을 앗아왔다&amp;rsquo;는 역사를 잊고 있지는 않습니까.&lt;/p>
&lt;p>앞으로도 새로운 감염증이 나타나고, 새로운 백신이 개발될 것입니다. 그때 우리는 다시 &amp;lsquo;우연의 일치&amp;rsquo; 현상에 현혹되어 감정적인 선동에 휩쓸릴 것입니까. 아니면 냉정하게 데이터를 해독하고, 리스크와 베네핏을 저울질할 수 있을 것입니까.&lt;/p>
&lt;p>역사는 반복된다고 합니다. 그러나 그것을 멈출 수 있는 것은 우리의 이성뿐입니다.
우리는 통계적으로 올바른 데이터를 보고, &lt;strong>&amp;lsquo;분위기&amp;rsquo;가 아닌 &amp;lsquo;사실&amp;rsquo;을 선택하는 지성을 가져야 합니다. 그것이 현대를 살아가는 우리의 책임입니다.&lt;/strong>&lt;/p>
&lt;hr>
&lt;h3 id="참고문헌데이터-출처">참고문헌·데이터 출처
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>후생노동성&lt;/strong>: &amp;ldquo;인유두종바이러스 감염증～자궁경부암과 HPV 백신～&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>국립암연구센터&lt;/strong>: 암 정보 서비스 &amp;lsquo;자궁경부암&amp;rsquo; 통계 데이터&lt;/li>
&lt;li>&lt;strong>BBC News (Japanese)&lt;/strong>: &amp;ldquo;미 CDC, 홍역 유행으로 백신 접종 촉구 세계적으로 감염 증가&amp;rdquo;(2024년) 및 관련 원문 기사&lt;/li>
&lt;li>&lt;strong>오사카대학 연구팀(Yagi A, et al. Lancet Public Health. 2020)&lt;/strong>: HPV 백신 정기접종의 적극적 권장 중단에 따른 초과 이환 수·사망 수의 추계에 관한 연구&lt;/li>
&lt;li>&lt;strong>Nagoya Study (Suzuki S, et al. Papillomavirus Res. 2018)&lt;/strong>&lt;/li>
&lt;/ul></description></item><item><title>'「일본인 퍼스트」의 허상과 실상: 2026년 일본이 직면한 「공존」이라는 이름의 방어책'</title><link>http://kenji.blog/ko/p/%E6%97%A5%E6%9C%AC%E4%BA%BA%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D%E3%81%86%E3%81%93%E3%81%A8/</link><pubDate>Fri, 23 Jan 2026 13:43:41 +0900</pubDate><guid>http://kenji.blog/ko/p/%E6%97%A5%E6%9C%AC%E4%BA%BA%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D%E3%81%86%E3%81%93%E3%81%A8/</guid><description>&lt;img src="http://kenji.blog/p/%E6%97%A5%E6%9C%AC%E4%BA%BA%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D%E3%81%86%E3%81%93%E3%81%A8/img.png" alt="Featured image of post '「일본인 퍼스트」의 허상과 실상: 2026년 일본이 직면한 「공존」이라는 이름의 방어책'" />&lt;h1 id="일본인-퍼스트의-허상과-실상-2026년의-일본이-직면한-공존이라는-이름의-방어책">「일본인 퍼스트」의 허상과 실상: 2026년의 일본이 직면한 「공존」이라는 이름의 방어책
&lt;/h1>&lt;h2 id="시작하며-왜-지금-이-말이-가슴을-울리는가">시작하며: 왜 지금, 이 말이 가슴을 울리는가
&lt;/h2>&lt;p>2026년. 우리는 지금 전례 없는 시대의 전환점에 서 있습니다. 장기화되는 물가 상승, 실질 임금의 정체, 그리고 눈에 띄게 진행되는 저출산 고령화. 슈퍼마켓 진열대에 놓인 상품의 가격표가 바뀔 때마다 미래에 대한 불안이 우리 마음에 그림자를 드리웁니다.&lt;/p>
&lt;p>이러한 폐색감 속에서 급속히 지지를 넓히고 있는 말이 있습니다. 바로 &lt;strong>「일본인 퍼스트」&lt;/strong> 입니다.&lt;/p>
&lt;p>&amp;ldquo;우선 자국민의 삶을 풍요롭게 해달라&amp;rdquo;, &amp;ldquo;일본의 문화와 치안을 최우선으로 지켜달라&amp;quot;는 바람은 한 명의 주권자로서, 그리고 이 나라에서 살아가는 한 명의 인간으로서 지극히 자연스럽고 절실한 욕구입니다. 하지만 이 말이 내세우는 &amp;lsquo;이상&amp;rsquo;과 통계 데이터가 보여주는 &amp;lsquo;현실&amp;rsquo; 사이에는 우리가 직시해야 할 큰 괴리가 존재합니다.&lt;/p>
&lt;p>이 글에서는 감정론이나 낙인찍기를 배제하고, 객관적인 데이터와 시계열적 변화, 그리고 사회의 각 현장에서 일어나고 있는 사실을 바탕으로 이 문제의 실체에 다가갑니다.&lt;/p>
&lt;hr>
&lt;h2 id="제1장-일본인-퍼스트의-시계열과-사회적-배경">제1장: 「일본인 퍼스트」의 시계열과 사회적 배경
&lt;/h2>&lt;p>이 말은 갑자기 나타난 것이 아닙니다. 세계적인 조류와 일본 특유의 사정이 복잡하게 얽혀 형성되었습니다.&lt;/p>
&lt;h3 id="1-2016년2017년-단어의-수입과-정착">1. 2016년～2017년: 단어의 수입과 정착
&lt;/h3>&lt;p>2016년, 도널드 트럼프가 내세운 &amp;lsquo;아메리카 퍼스트&amp;rsquo;는 전 세계에 충격을 주었습니다. 국내에서는 2017년 고이케 유리코 도쿄도지사가 이끄는 &amp;lsquo;도민 퍼스트회&amp;rsquo;가 주목을 받았습니다. 이 시점에서는 정책의 우선순위를 명확히 하기 위한 수사적 측면이 강했고, 배외적인 뉘앙스는 아직 제한적이었습니다.&lt;/p>
&lt;h3 id="2-2023년2024년-불안의-가시화">2. 2023년～2024년: 불안의 가시화
&lt;/h3>&lt;p>팬데믹 이후의 경제 회복 지연과 급격한 엔저에 따른 인플레이션이 일반 가정을 직격했습니다. 이와 같은 시기에 SNS상에서 &amp;ldquo;외국인에 대한 지원이 너무 후하다&amp;rdquo;, &amp;ldquo;일본인의 혈세가 외국인에게 흘러가고 있다&amp;quot;는 등 단편적인 정보에 기반한 불만이 터져 나오기 시작합니다.&lt;/p>
&lt;h3 id="3-2025년2026년-정치-세력과-sns의-융합">3. 2025년～2026년: 정치 세력과 SNS의 융합
&lt;/h3>&lt;p>2025년 국정 선거에서 「일본인 퍼스트」를 공식 슬로건으로 내건 세력이 일정 의석을 확보했습니다. SNS의 알고리즘은 사람들의 불안에 반응하여 과격한 게시물을 우선적으로 표시하고, 특정 가치관만이 강화되는 &amp;lsquo;에코체임버 현상&amp;rsquo;을 가속화했습니다.&lt;/p>
&lt;p>신문사들이 실시한 최신 여론조사(2025년 말)에서는 이 슬로건에 대해 &lt;strong>&amp;ldquo;찬성・어느 쪽이든 찬성&amp;quot;이 42%, &amp;ldquo;반대・어느 쪽이든 반대&amp;quot;가 38%&lt;/strong> 로, 여론이 두 동강 나 있는 현실이 여실히 드러나고 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="제2장-경제와-사회보장의-진실빼앗는-존재인가-지탱하는-기둥인가">제2장: 경제와 사회보장의 진실——&amp;lsquo;빼앗는 존재&amp;rsquo;인가 &amp;lsquo;지탱하는 기둥&amp;rsquo;인가
&lt;/h2>&lt;p>「일본인 퍼스트」를 지지하는 논리의 기둥 중 하나는 &amp;ldquo;외국인에게 일본인의 자원을 빼앗기고 있다&amp;quot;는 이미지입니다. 하지만 관공서의 1차 데이터는 이러한 직관과는 정반대의 현실을 보여줍니다.&lt;/p>
&lt;h3 id="1-노동력-일본-경제를-유지하는-필수적인-혈액">1. 노동력: 일본 경제를 유지하는 &amp;lsquo;필수적인 혈액&amp;rsquo;
&lt;/h3>&lt;p>후생노동성의 &amp;lsquo;외국인 고용 상황(2024년 10월 말 기준)&amp;lsquo;에 따르면, 외국인 노동자 수는 &lt;strong>204만 8,675명 ** 입니다. 2026년 현재 추계로는 이미 ** 230만 명&lt;/strong> 을 돌파했습니다.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>산업 분야&lt;/th>
&lt;th>외국인 노동자 비율・증가율&lt;/th>
&lt;th>실태와 역할&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>건설업&lt;/strong>&lt;/td>
&lt;td>전년 대비 약 22.7% 증가&lt;/td>
&lt;td>인프라 유지 및 노후화된 교량・도로 수선에 필수적.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>의료・복지&lt;/strong>&lt;/td>
&lt;td>전년 대비 약 28.1% 증가&lt;/td>
&lt;td>간병 현장의 최전선을 담당하며 일본인 고령자를 지탱하고 있음.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>제조업&lt;/strong>&lt;/td>
&lt;td>전체의 약 26%를 차지&lt;/td>
&lt;td>일본 수출 산업의 현장을 지탱하는 대들보.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>현재, 일본인이 하고 싶어도 할 수 없는 일이 아니라, &lt;strong>&amp;ldquo;일본인을 확보할 수 없게 된 공백&amp;rdquo;&lt;/strong> 을 그들이 메우고 있습니다. 만약 「일본인 퍼스트」라는 이름 아래 그들을 배제한다면, 우리의 간병 시스템은 즉시 붕괴하고, 주택과 식료품 물가는 다시 몇 할에서 몇 배로 치솟게 될 것입니다.&lt;/p>
&lt;h3 id="2-사회보장-생활보호를-둘러싼-유언비어와-실태">2. 사회보장: 생활보호를 둘러싼 유언비어와 실태
&lt;/h3>&lt;p>SNS에서 가장 확산되기 쉬운 것이 &amp;ldquo;외국인이 생활보호를 우선적으로 받고 있다&amp;quot;는 설입니다. 하지만 후생노동성의 통계를 확인해 보면, 전체 수급 세대 중 외국인이 세대주인 비율은 &lt;strong>약 2.8～2.9%&lt;/strong> 입니다. 과거 10년 이상 이 수치는 거의 제자리걸음입니다.&lt;/p>
&lt;p>반대로 체류 외국인의 연령 구성을 보면 그 대부분이 **20대에서 40대의 현역 세대 ** 입니다. 이들은 후생연금이나 건강보험료를 납부하며, &lt;strong>&amp;ldquo;고령의 일본인&amp;quot;이 받는 연금이나 의료비를 지탱하는 &amp;lsquo;제공자&amp;rsquo;&lt;/strong> 로서의 역할을 담당하고 있습니다. 일본인이 떠난 후의 현역 세대의 공백을 메우고, 일본의 사회보장 시스템을 연명시키고 있는 것은 다름 아닌 그들인 것입니다.&lt;/p>
&lt;hr>
&lt;h2 id="제3장-치안과-sns의-편향외국인-범죄의-논리적-해체">제3장: 치안과 SNS의 편향——&amp;lsquo;외국인 범죄&amp;rsquo;의 논리적 해체
&lt;/h2>&lt;p>치안에 대한 불안은 「일본인 퍼스트」의 감정을 가장 강하게 자극합니다. 하지만 경찰청 통계나 법무성의 『범죄백서』를 자세히 분석해 보면, 인터넷상의 &amp;lsquo;흉악한 외국인&amp;rsquo;이라는 이미지가 얼마나 인지 왜곡에 의해 만들어진 것인지 알 수 있습니다.&lt;/p>
&lt;h3 id="1-총수와-범죄율의-냉정한-비교">1. &amp;lsquo;총수&amp;rsquo;와 &amp;lsquo;범죄율&amp;rsquo;의 냉정한 비교
&lt;/h3>&lt;p>2024년 발표 통계에 따르면 전체 검거 인원 중 외국인이 차지하는 비율은 &lt;strong>약 5.5%&lt;/strong> 입니다. 나머지 약 95%는 일본인에 의한 범죄입니다.&lt;/p>
&lt;p>인구 10만 명당 검거 인원(범죄율)으로 비교하면 더욱 본질이 보입니다.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>구분&lt;/th>
&lt;th>인구 10만 명당 검거 인원(추계)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>일본인(전 연령)&lt;/strong>&lt;/td>
&lt;td>약 142.7명&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>체류 외국인(정주자・거주자)&lt;/strong>&lt;/td>
&lt;td>** 약 120.0명**&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>중장기적으로 일본에 거주하는 외국인의 범죄율은 일본인 전체 평균보다 낮다&lt;/strong> 는 것이 통계적인 사실입니다.&lt;/p>
&lt;h3 id="2-세대에-따른-편향의-마술">2. &amp;lsquo;세대&amp;rsquo;에 따른 편향의 마술
&lt;/h3>&lt;p>왜 &amp;ldquo;외국인은 무섭다&amp;quot;는 이미지가 앞서는 것일까요? 그 가장 큰 요인은 범죄학에서의 &lt;strong>&amp;lsquo;연령 구성&amp;rsquo;&lt;/strong> 의 차이입니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>일본인:&lt;/strong> 약 30%가 범죄율이 극히 낮은 고령자입니다. 이 층이 &amp;lsquo;분모&amp;rsquo;를 끌어내리기 때문에 일본 전체의 수치가 낮아 보입니다.&lt;/li>
&lt;li>&lt;strong>외국인:&lt;/strong> 노동력으로 일본에 왔기 때문에 80% 이상이 ** 통계적으로 범죄가 발생하기 쉬운 &amp;lsquo;청년～중년층&amp;rsquo;** 입니다.&lt;/li>
&lt;/ul>
&lt;p>같은 &amp;lsquo;20대&amp;rsquo;라는 조건으로 일본인과 외국인의 범죄율을 비교하면, 양자 간에 유의미한 차이는 보이지 않습니다. 즉, &amp;ldquo;외국인이 늘어서 치안이 악화되었다&amp;quot;가 아니라, &lt;strong>&amp;ldquo;범죄를 저지르기 쉬운 연령대(젊은 층)가 외국인이라는 형태로 일본에 존재하고 있을 뿐&amp;rdquo;&lt;/strong> 인 것입니다.&lt;/p>
&lt;h3 id="3-sns가-만들어내는-확증-편향">3. SNS가 만들어내는 &amp;lsquo;확증 편향&amp;rsquo;
&lt;/h3>&lt;p>SNS의 알고리즘은 우리의 &amp;lsquo;불안&amp;rsquo;을 연료로 삼습니다. 1건의 외국인 범죄가 발생하면, 그것이 &amp;lsquo;속성(국적)&amp;lsquo;과 결합되어 격렬하게 확산됩니다. 그러면 우리의 뇌리에는 &amp;ldquo;또 외국인이 사건을 일으켰다&amp;quot;는 기억만이 강화됩니다.&lt;/p>
&lt;p>이것을 &lt;strong>&amp;lsquo;확증 편향&amp;rsquo;&lt;/strong> 이라고 부릅니다. 전체의 95%를 차지하는 일본인의 범죄는 &amp;lsquo;일상&amp;rsquo;으로 간과되고, 5%의 외국인 범죄가 &amp;lsquo;모든 외국인&amp;rsquo;의 이미지로 둔갑하는 것입니다.&lt;/p>
&lt;hr>
&lt;h2 id="제4장-문화의-계승파괴자인가-구세주인가">제4장: 문화의 계승——&amp;lsquo;파괴자&amp;rsquo;인가 &amp;lsquo;구세주&amp;rsquo;인가
&lt;/h2>&lt;p>&amp;ldquo;일본의 전통과 문화가 파괴된다&amp;quot;는 우려 또한 현장의 실태와는 다릅니다.&lt;/p>
&lt;h3 id="1-전통-공예의-마지막-계승자">1. 전통 공예의 &amp;lsquo;마지막 계승자&amp;rsquo;
&lt;/h3>&lt;p>일본 전통 공예품 제조 종사자는 1970년대 약 30만 명에서 현재는 약 5만 명 정도로 급감했습니다. 이 소멸 위기를 구하고 있는 것은 일본 문화에 깊은 경의를 표하며 일본에 온 외국인들입니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>양조장이나 대장간:&lt;/strong> 일본인이 계승을 포기하려던 공방에 외국인이 제자로 들어가, 해외로의 발신력이나 새로운 감성을 도입함으로써 폐업 직전의 문화를 &amp;lsquo;지속 가능한 산업&amp;rsquo;으로 재생시키고 있습니다.&lt;/li>
&lt;/ul>
&lt;h3 id="2-지역-커뮤니티의-유지">2. 지역 커뮤니티의 유지
&lt;/h3>&lt;p>젊은 층이 사라지고 &amp;lsquo;소멸 가능 도시&amp;rsquo;가 된 지방 자치단체에서는 기능실습생이나 특정기능 외국인이 지역 축제의 주역이 되고 농업 기반을 지탱하고 있습니다.
일본인이 떠나고 방치된 휴경지를 일구며 수백 년 이어져 온 행사를 지키고 있는 것은 누구인가. 그 현실에 눈을 돌리면, 그들은 문화의 &amp;lsquo;파괴자&amp;rsquo;가 아니라 &lt;strong>&amp;lsquo;최후의 방어선&amp;rsquo;&lt;/strong> 임을 알 수 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="제5장-교육-현장의-우려와-괴롭힘의-연쇄">제5장: 교육 현장의 우려와 &amp;lsquo;괴롭힘&amp;rsquo;의 연쇄
&lt;/h2>&lt;p>「일본인 퍼스트」라는 말이 교육 현장에 도입될 때의 부작용은 심각합니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&amp;lsquo;안과 밖&amp;rsquo;을 나누는 이분법적 대립:&lt;/strong> 아이들이 &amp;ldquo;일본인은 우선시되어야 할 특권 계급이다&amp;quot;라는 잘못된 선민의식을 내면화하면, 그것은 쉽게 &amp;ldquo;자신들과 다른 자&amp;quot;를 배제하는 괴롭힘으로 이어집니다.&lt;/li>
&lt;li>&lt;strong>뿌리에 따른 서열화:&lt;/strong> 일본 국적을 가지고 있어도 외모나 이름이 다른 아이들이 &amp;ldquo;일본인이 아니다&amp;quot;라며 공격받는다. 이것은 교육의 붕괴이며, 미래의 일본을 짊어질 인재를 스스로 상처 입히는 행위입니다.&lt;/li>
&lt;/ul>
&lt;p>교육 현장의 전문가들은 &amp;lsquo;퍼스트&amp;rsquo;라는 말이 갖는 배타성이 아이들의 다문화 공생 능력을 약화시키고, 결과적으로 일본을 세계로부터 고립시킬 위험이 있다고 우려하고 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="제6장-세계적인-조류와-포퓰리즘의-물결">제6장: 세계적인 조류와 포퓰리즘의 물결
&lt;/h2>&lt;p>이러한 현상은 일본 고유의 것이 아닙니다. 구미 국가들에서도 글로벌화의 혜택을 받지 못한 계층이 &amp;lsquo;자국 제일주의&amp;rsquo;를 내세우는 포퓰리즘으로 흘러가는 현상이 계속되고 있습니다.&lt;/p>
&lt;p>하지만 일본이 구미와 결정적으로 다른 점은 &lt;strong>&amp;ldquo;세계에서 가장 빠른 속도로 인구가 감소하고 있다&amp;rdquo;&lt;/strong> 는 점입니다. 다른 나라에는 &amp;lsquo;제한&amp;rsquo;이라는 선택지가 있더라도, 일본에는 &amp;lsquo;협력&amp;rsquo; 없이는 유지할 수 없는 사회 인프라가 이미 무수히 존재합니다. 감정적인 &amp;lsquo;퍼스트&amp;rsquo;를 고수하는 것은 논리적인 &amp;lsquo;완만한 자살&amp;rsquo;을 의미합니다.&lt;/p>
&lt;hr>
&lt;h2 id="맺음말을-대신하여-진정한-일본인-퍼스트란-무엇인가">맺음말을 대신하여: 진정한 「일본인 퍼스트」란 무엇인가
&lt;/h2>&lt;p>「일본인 퍼스트」라는 말에 담긴, &amp;ldquo;국민의 생활을 최우선으로 생각해 달라&amp;quot;는 바람 그 자체는 한 국가의 정부가 가져야 할 가장 기본적인 책무입니다.&lt;/p>
&lt;p>하지만 그 바람을 이루기 위한 수단이 &amp;lsquo;이웃의 배제&amp;rsquo;여서는 안 됩니다. 객관적인 데이터가 보여주듯, 우리가 지금 누리고 있는 생활의 편리성, 치안, 전통문화, 그리고 사회보장제도 그 자체가 이미 외국인의 존재 없이는 성립하지 않는 &amp;lsquo;의존과 공생&amp;rsquo;의 단계에 있기 때문입니다.&lt;/p>
&lt;p>&lt;strong>진정한 「일본인 퍼스트」란, 다음 3가지를 냉정하게 실천하는 것이 아닐까요?&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>&lt;strong>사실에 기반한 논의:&lt;/strong> 유언비어나 과장된 정보에 휩쓸리지 않고, 관공서의 1차 통계를 바탕으로 현실을 파악한다.&lt;/li>
&lt;li>&lt;strong>공정한 룰의 확립:&lt;/strong> 외국인에게는 일본의 룰을 준수하게 하고, 한편으로 일본 사회는 그들을 공정한 파트너로서 대우한다.&lt;/li>
&lt;li>&lt;strong>내면의 업데이트:&lt;/strong> 외국인을 수용하는 것을 &amp;lsquo;일본을 잃는 것&amp;rsquo;으로 여기는 것이 아니라, 그들의 힘을 빌려 &amp;lsquo;일본을 재건하고 유지하는 것&amp;rsquo;이라는 인식의 전환.&lt;/li>
&lt;/ol>
&lt;p>2026년, 우리는 큰 기로에 서 있습니다. 분단의 언어를 계속 외치며 스스로 목을 조를 것인가. 아니면 현실을 직시하고 다양한 사람들이 함께 지탱하는 &amp;lsquo;지속 가능한 일본&amp;rsquo;으로의 한 걸음을 내디딜 것인가.&lt;/p>
&lt;p>해답은 한 사람 한 사람의 마음속 &amp;lsquo;지성&amp;rsquo;과 &amp;lsquo;용기&amp;rsquo; 안에 있습니다.&lt;/p></description></item><item><title>Google One (Gemini) 해지가 안 될 때의 대처 방법</title><link>http://kenji.blog/ko/p/google-one-gemini%E3%81%8C%E8%A7%A3%E7%B4%84%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 27 Sep 2025 10:02:59 +0900</pubDate><guid>http://kenji.blog/ko/p/google-one-gemini%E3%81%8C%E8%A7%A3%E7%B4%84%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/google-one-gemini%E3%81%8C%E8%A7%A3%E7%B4%84%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Google One (Gemini) 해지가 안 될 때의 대처 방법" />&lt;h1 id="주의gemini의-무료-체험이-끝나면-청구된다-해지-방법-정리">【주의】Gemini의 무료 체험이 끝나면 청구된다? 해지 방법 정리
&lt;/h1>&lt;p>Google의 AI 서비스 「Gemini」를 사용해 보려 하면, 가장 먼저 &lt;strong>1개월 무료 체험&lt;/strong> 이 준비되어 있습니다.
「무료라면 일단 시도해 볼까」하고 등록하는 사람도 많을 텐데, 여기서 주의할 점이 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="무료-체험이-끝나면-어떻게-되나">무료 체험이 끝나면 어떻게 되나?
&lt;/h2>&lt;p>체험 기간이 종료되면, 자동으로 &lt;strong>월 2,900엔&lt;/strong> 이 청구됩니다.
이것은 「Google One 멤버십」이라는 구독에 연결되어 있어서, 특별히 아무것도 하지 않으면 계속 과금으로 넘어가는 구조입니다.&lt;/p>
&lt;hr>
&lt;h2 id="해지하면-청구되지-않지만">해지하면 청구되지 않지만…
&lt;/h2>&lt;p>물론, 체험 중에 해지하면 요금은 발생하지 않습니다.
공식 해설 페이지에도 「Google One 멤버십을 해지하는 방법」이 나와 있습니다.&lt;/p>
&lt;p>👉 &lt;a class="link" href="https://support.google.com/googleone/answer/9056360" target="_blank" rel="noopener"
>Google One 멤버십을 해지하기(공식)&lt;/a>&lt;/p>
&lt;p>하지만, 실제로 접속해 보면 「어째선지 해지가 되지 않는」 상황에….
「어, 어디서 멈춰야 하지?」라고 혼란스러웠습니다.&lt;/p>
&lt;hr>
&lt;h2 id="올바른-해지-방법은-이쪽">올바른 해지 방법은 이쪽!
&lt;/h2>&lt;p>여러 가지로 조사한 결과, 실제로 해지할 수 있었던 것은 다음 페이지부터였습니다.&lt;/p>
&lt;p>👉 &lt;a class="link" href="https://myaccount.google.com/deleteservices" target="_blank" rel="noopener"
>Google 계정 – 서비스 삭제&lt;/a>&lt;/p>
&lt;p>여기서 「Google One」을 선택하고 삭제하면, 해지가 완료됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="정리">정리
&lt;/h2>&lt;ul>
&lt;li>Gemini의 무료 체험은 1개월&lt;/li>
&lt;li>종료 후에는 자동으로 &lt;strong>월 2,900엔&lt;/strong> 이 과금된다&lt;/li>
&lt;li>해지는 공식 설명 페이지에서는 할 수 없는 경우가 있다&lt;/li>
&lt;li>실제로 해지할 수 있는 곳은 &lt;strong>「서비스의 삭제」 페이지&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>「무료 체험이니까 괜찮다」고 생각하고 있으면, 눈치채지 못하는 사이에 과금되어 버리므로 주의해 주세요!&lt;/p>
&lt;hr>
&lt;p>👉 이 기사를 읽고 있는 사람은, 어쩌면 지금 바로 「해지 어디서?」라며 곤란해하고 있을지도 모릅니다. 우선 위의 링크에서 체크해 보세요.&lt;/p>
&lt;hr></description></item><item><title>'연하장 작성 앱 개발 방송 VOL.1 (대본)'</title><link>http://kenji.blog/ko/p/%E5%B9%B4%E8%B3%80%E7%8A%B6%E4%BD%9C%E6%88%90%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E9%85%8D%E4%BF%A1-vol.1/</link><pubDate>Sun, 31 Aug 2025 20:24:49 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%B9%B4%E8%B3%80%E7%8A%B6%E4%BD%9C%E6%88%90%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E9%85%8D%E4%BF%A1-vol.1/</guid><description>&lt;img src="http://kenji.blog/p/%E5%B9%B4%E8%B3%80%E7%8A%B6%E4%BD%9C%E6%88%90%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E9%85%8D%E4%BF%A1-vol.1/img.png" alt="Featured image of post '연하장 작성 앱 개발 방송 VOL.1 (대본)'" />&lt;h1 id="-youtube-방송용-대본-연하장-작성-앱-개발제1회">🎬 YouTube 방송용 대본 (연하장 작성 앱 개발・제1회)
&lt;/h1>&lt;ol start="0">
&lt;li>방송 시작 (도입부 2～3분)&lt;/li>
&lt;/ol>
&lt;h3 id="가벼운-인사">가벼운 인사
&lt;/h3>&lt;p>&amp;ldquo;안녕하세요. 오늘부터 연하장 작성 앱을 C++로 꾸준히 만들어가는 방송을 시작하겠습니다.&amp;rdquo;
&amp;ldquo;완성까지 몇 번 방송하게 될지는 모르겠지만, 시리즈로 조금씩 진행해 나가겠습니다.&amp;rdquo;
&amp;ldquo;기본적으로는 말없이 작업할 예정이므로, 작업용 BGM으로 봐주시면 감사하겠습니다.&amp;rdquo;&lt;/p>
&lt;h3 id="목표로-하는-앱의-개요">목표로 하는 앱의 개요
&lt;/h3>&lt;p>&amp;ldquo;이 앱에서는 연하장의 뒷면을 디자인할 수 있도록 만들고자 합니다.&amp;rdquo;
&amp;ldquo;사진 삽입이나 폰트 어레인지, AI를 사용한 이미지 가공이나 일러스트 생성도 도입하여, 최종적으로는 Microsoft Store에 업로드할 예정입니다.&amp;rdquo;&lt;/p>
&lt;h3 id="오늘의-작업-목표">오늘의 작업 목표
&lt;/h3>&lt;p>&amp;ldquo;제1회인 오늘은 환경을 정비하고 기반을 만들어 가겠습니다.&amp;rdquo;
&amp;ldquo;구체적으로는,&lt;/p>
&lt;ul>
&lt;li>GIT 리포지토리 생성&lt;/li>
&lt;li>메인 윈도우 생성&lt;/li>
&lt;li>버전 정보 다이얼로그 표시&lt;/li>
&lt;li>메뉴 생성 및 종료 명령 구현&lt;/li>
&lt;li>Direct2D의 초기화・해제 처리와 HelloWorld 표시&lt;/li>
&lt;/ul>
&lt;p>를 진행하고자 합니다.&amp;rdquo;&lt;/p>
&lt;h3 id="소스-코드-공개에-대하여">소스 코드 공개에 대하여
&lt;/h3>&lt;p>&amp;ldquo;소스 코드는 GitHub에 공개하고 있습니다. 관심 있으신 분들은 꼭 한번 들여다봐 주세요.&amp;rdquo;
→ &lt;a class="link" href="https://github.com/kenjinote/NengaCardApp/" target="_blank" rel="noopener"
>https://github.com/kenjinote/NengaCardApp/&lt;/a>&lt;/p>
&lt;ol>
&lt;li>작업 파트 (무언)&lt;/li>
&lt;/ol>
&lt;p>GitHub 리포지토리 생성 → 초기 커밋&lt;/p>
&lt;p>메인 윈도우의 템플릿 생성&lt;/p>
&lt;p>버전 다이얼로그나 메뉴 생성과 종료 명령 구현&lt;/p>
&lt;p>Direct2D의 초기화와 해제 처리 → HelloWorld 표시 확인&lt;/p>
&lt;p>적절히 GitHub에 push&lt;/p>
&lt;p>※기본은 무언, 필요할 때만 짧게 해설을 넣음&lt;/p>
&lt;ol start="2">
&lt;li>방송 종료 전 (마지막 1～2분)&lt;/li>
&lt;/ol>
&lt;h3 id="오늘의-진척-요약">오늘의 진척 요약
&lt;/h3>&lt;p>&amp;ldquo;오늘은 GIT 리포지토리를 만들고, 윈도우나 종료 버튼, 버전 다이얼로그를 구현했습니다.&amp;rdquo;
&amp;ldquo;Direct2D로 HelloWorld를 표시하는 곳까지 할 수 있었습니다.&amp;rdquo;&lt;/p>
&lt;h3 id="다음-회-예고">다음 회 예고
&lt;/h3>&lt;p>&amp;ldquo;다음 회부터는 UI 부분을 다듬거나, 문자열의 객체화 등으로 진행해 나갔으면 합니다.&amp;rdquo;&lt;/p>
&lt;h3 id="github-링크-재안내">GitHub 링크 재안내
&lt;/h3>&lt;p>→ &lt;a class="link" href="https://github.com/kenjinote/NengaCardApp/" target="_blank" rel="noopener"
>https://github.com/kenjinote/NengaCardApp/&lt;/a>&lt;/p>
&lt;h3 id="마무리">마무리
&lt;/h3>&lt;p>&amp;ldquo;시청해 주셔서 감사합니다. 다음 회도 꾸준히 계속해 나갈 테니, 잘 부탁드립니다.&amp;rdquo;&lt;/p></description></item><item><title>'msix에 자체 서명 인증서를 추가하여 설치할 수 있게 만들기'</title><link>http://kenji.blog/ko/p/msix%E3%81%AB%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E3%81%A4%E3%81%91%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/</link><pubDate>Sat, 30 Aug 2025 04:18:04 +0900</pubDate><guid>http://kenji.blog/ko/p/msix%E3%81%AB%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E3%81%A4%E3%81%91%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/msix%E3%81%AB%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E3%81%A4%E3%81%91%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/img.png" alt="Featured image of post 'msix에 자체 서명 인증서를 추가하여 설치할 수 있게 만들기'" />&lt;h1 id="msix에-자체-서명-인증서를-추가하여-설치할-수-있게-만들기">msix에 자체 서명 인증서를 추가하여 설치할 수 있게 만들기
&lt;/h1>&lt;p>Windows에서 앱을 배포할 때, &lt;strong>MSIX 패키지&lt;/strong> 를 이용하면 설치나 업데이트 구조가 통일되어 편리합니다. 하지만 MSIX에는 &amp;lsquo;반드시 서명된 인증서&amp;rsquo;가 필요하다는 제약이 있습니다.
기업이나 개인이 개발한 앱을 테스트 배포하고 싶을 때, &amp;ldquo;상용 코드 서명 인증서를 구매하는 것은 너무 과하다&amp;quot;고 생각되는 상황도 있을 것입니다.&lt;/p>
&lt;p>이럴 때 유용한 것이 &lt;strong>자체 서명 인증서(Self-Signed Certificate)&lt;/strong> 입니다. 이 글에서는 MSIX에 자체 서명 인증서를 추가하여 로컬 환경에서 설치할 수 있도록 하는 절차를 정리합니다.&lt;/p>
&lt;hr>
&lt;h2 id="1-자체-서명-인증서-생성하기">1. 자체 서명 인증서 생성하기
&lt;/h2>&lt;p>먼저 PowerShell을 관리자 모드로 실행하고, 아래의 명령어를 실행합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="p">//&lt;/span> &lt;span class="n">자체&lt;/span> &lt;span class="n">서명&lt;/span> &lt;span class="n">인증서&lt;/span> &lt;span class="n">생성&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">New-SelfSignedCertificate&lt;/span> &lt;span class="n">-Type&lt;/span> &lt;span class="n">CodeSigningCert&lt;/span> &lt;span class="n">-Subject&lt;/span> &lt;span class="s2">&amp;#34;CN=035A9AAC-915B-4CE1-AE39-1A101BED42F5&amp;#34;&lt;/span> &lt;span class="n">-CertStoreLocation&lt;/span> &lt;span class="n">Cert&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">CurrentUser&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">My&lt;/span> &lt;span class="n">-NotAfter&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">Get-Date&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="py">AddYears&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">10&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">-KeyUsage&lt;/span> &lt;span class="n">DigitalSignature&lt;/span> &lt;span class="n">-FriendlyName&lt;/span> &lt;span class="s2">&amp;#34;kenjinote&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>여기서 생성되는 것은 &amp;lsquo;코드 서명용&amp;rsquo; 인증서입니다.&lt;/p>
&lt;ul>
&lt;li>&lt;code>-FriendlyName&lt;/code>으로 알기 쉬운 이름을 지정해 두면 나중에 찾기 쉽습니다.&lt;/li>
&lt;li>&lt;code>-NotAfter&lt;/code>로 유효기간을 조정할 수 있습니다. 이번에는 10년으로 설정했습니다.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="2-pfx-파일-내보내기">2. PFX 파일 내보내기
&lt;/h2>&lt;p>생성한 인증서를 PFX 형식으로 내보내어 &lt;code>signtool&lt;/code>에서 이용할 수 있게 합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="p">//&lt;/span> &lt;span class="n">pfx&lt;/span> &lt;span class="n">생성&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$cert&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-ChildItem&lt;/span> &lt;span class="n">Cert&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">CurrentUser&lt;/span>&lt;span class="p">\&lt;/span>&lt;span class="n">My&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Where-Object&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">FriendlyName&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="s2">&amp;#34;kenjinote&amp;#34;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$password&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">ConvertTo-SecureString&lt;/span> &lt;span class="n">-String&lt;/span> &lt;span class="s2">&amp;#34;password&amp;#34;&lt;/span> &lt;span class="n">-Force&lt;/span> &lt;span class="n">-AsPlainText&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Export-PfxCertificate&lt;/span> &lt;span class="n">-Cert&lt;/span> &lt;span class="nv">$cert&lt;/span> &lt;span class="n">-FilePath&lt;/span> &lt;span class="s2">&amp;#34;D:\pfx\cert.pfx&amp;#34;&lt;/span> &lt;span class="n">-Password&lt;/span> &lt;span class="nv">$password&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이때 설정한 비밀번호(예시에서는 &lt;code>password&lt;/code>)는 나중에 서명 작업 시 필요합니다.&lt;/p>
&lt;hr>
&lt;h2 id="3-자체-서명-인증서를-신뢰할-수-있는-루트-인증-기관에-설치하기">3. 자체 서명 인증서를 신뢰할 수 있는 루트 인증 기관에 설치하기
&lt;/h2>&lt;p>생성한 인증서는 그대로는 Windows에서 신뢰하지 않습니다. 설치하려면 &lt;code>certmgr.msc&lt;/code>에서 &lt;strong>[신뢰할 수 있는 루트 인증 기관] → [인증서]&lt;/strong> 로 가져와야 합니다.&lt;/p>
&lt;p>내보낸 인증서(&lt;code>.cer&lt;/code>나 &lt;code>.pfx&lt;/code>)를 가져오면, 대상 PC 상에서는 신뢰할 수 있는 인증서로 취급됩니다.
이를 통해 MSIX에 서명해도 &amp;lsquo;신뢰할 수 없는 인증서&amp;rsquo;라는 경고가 나타나지 않게 됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="4-인스톨러msix에-서명-추가하기">4. 인스톨러(MSIX)에 서명 추가하기
&lt;/h2>&lt;p>마지막으로, 생성한 PFX 인증서를 사용하여 MSIX에 서명합니다. &lt;code>signtool&lt;/code>은 Visual Studio나 Windows SDK에 포함되어 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="p">//&lt;/span> &lt;span class="n">인스톨러에&lt;/span> &lt;span class="n">서명&lt;/span> &lt;span class="n">추가하기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">signtool&lt;/span> &lt;span class="n">sign&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">fd&lt;/span> &lt;span class="n">SHA256&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">f&lt;/span> &lt;span class="s2">&amp;#34;D:\pfx\cert.pfx&amp;#34;&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="s2">&amp;#34;password&amp;#34;&lt;/span> &lt;span class="s2">&amp;#34;C:\installer\installer.msix&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>&lt;code>/fd SHA256&lt;/code>은 서명 알고리즘을 지정합니다.&lt;/li>
&lt;li>&lt;code>/f&lt;/code>로 PFX 파일을 지정하고, &lt;code>/p&lt;/code>로 비밀번호를 전달합니다.&lt;/li>
&lt;li>마지막으로 MSIX 파일의 경로를 지정해 주세요.&lt;/li>
&lt;li>signtool의 경로가 설정되어 있지 않은 경우에는 전체 경로로 지정해 주세요. 제 환경에서는 아래 위치에 있었습니다.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\microsoft.windows.sdk.buildtools&lt;/span>&lt;span class="se">\10&lt;/span>&lt;span class="s2">.0.26100.1742&lt;/span>&lt;span class="se">\b&lt;/span>&lt;span class="s2">in&lt;/span>&lt;span class="se">\10&lt;/span>&lt;span class="s2">.0.26100.0&lt;/span>&lt;span class="se">\x64&lt;/span>&lt;span class="s2">\signtool.exe&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이로써 서명이 완료되고, 대상 PC에서 설치 가능한 MSIX가 완성됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="요약">요약
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>New-SelfSignedCertificate&lt;/strong> 로 자체 서명 인증서를 생성한다&lt;/li>
&lt;li>&lt;strong>Export-PfxCertificate&lt;/strong> 로 PFX를 내보낸다&lt;/li>
&lt;li>&lt;strong>신뢰할 수 있는 루트 인증 기관&lt;/strong> 에 인증서를 설치한다&lt;/li>
&lt;li>&lt;strong>signtool&lt;/strong> 로 MSIX에 서명한다&lt;/li>
&lt;/ul>
&lt;p>이 흐름을 파악해두면, 상용 인증서를 구매하지 않고도 로컬 환경에서 동작 확인이나 테스트 배포가 가능해집니다.
물론 실제 상용 배포에서는 인증 기관에서 발급한 인증서가 필수적이지만, 개발 및 검증 단계에서는 이 방법이 매우 유용합니다.&lt;/p>
&lt;hr>
&lt;p>👉 이번에는 installer.msix를 예로 들었지만, 같은 절차를 자작 앱에도 적용할 수 있습니다.&lt;/p>
&lt;hr></description></item><item><title>'LogicPad 개발 비화'</title><link>http://kenji.blog/ko/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/</link><pubDate>Wed, 30 Jul 2025 23:51:35 +0900</pubDate><guid>http://kenji.blog/ko/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/</guid><description>&lt;img src="http://kenji.blog/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/img.png" alt="Featured image of post 'LogicPad 개발 비화'" />&lt;h1 id="코드-작성은-못하지만-논리는-있는-사람을-위한-도구-logicpad를-만든-이유">「코드 작성은 못하지만 논리는 있는 사람」을 위한 도구. LogicPad를 만든 이유
&lt;/h1>&lt;p>안녕하세요, kenji입니다. 로우코드 도구 &amp;lsquo;&lt;a class="link" href="https://logicpad.org" target="_blank" rel="noopener"
>LogicPad&lt;/a>&amp;lsquo;를 만든 개발자입니다.
이번에는 제품 소개가 아니라, &amp;ldquo;왜 이것을 만들려고 생각했는가?&amp;ldquo;라는 개발의 이면, 그리고 제 자신의 생각에 대해 조금 개인적인 관점에서 써보려고 합니다.&lt;/p>
&lt;p>솔직히, 이것은 단순한 도구 개발이 아니었습니다.
제 과거, 직장에서의 답답함, 스킬셋, 그리고 계속 가슴속에 품고 있던 &amp;ldquo;언젠가 내 제품을 만들고 싶다&amp;quot;는 마음――
그 모든 것이 겹쳐진 결과로 탄생한 것이 LogicPad입니다.&lt;/p>
&lt;p>즉, &lt;strong>이것은 저에게 &amp;ldquo;인생의 집대성 프로젝트&amp;rdquo;&lt;/strong> 이기도 합니다.
그런 배경을 가능한 한 솔직하게, 열정을 담아 써내려가 보겠습니다.&lt;/p>
&lt;hr>
&lt;h2 id="솔직하게-이것은-내가-만들었다라고-가슴을-펴고-말할-수-있는-제품이-갖고-싶었다">솔직하게 &amp;ldquo;이것은 내가 만들었다&amp;quot;라고 가슴을 펴고 말할 수 있는 제품이 갖고 싶었다
&lt;/h2>&lt;p>솔직히 말하자면, 이것이 가장 첫 번째 동기였습니다.&lt;/p>
&lt;p>예전부터 일로나 취미로나 코드 짜는 것을 좋아했습니다. 여러 개발에도 참여해왔습니다.
하지만 어느 날 문득 깨달았습니다.
&lt;strong>&amp;ldquo;내 이름으로, 내 책임으로 세상에 내놓은 제품이 없다&amp;rdquo;&lt;/strong> 는 것을요.&lt;/p>
&lt;p>물론 팀으로 만드는 것에는 가치가 있고, 자랑스러운 일도 많이 있었습니다.
하지만 어딘가에서 &amp;ldquo;이대로 누군가의 이름 아래서 커리어를 끝내는 걸까&amp;quot;라는 허무함도 있었습니다.&lt;/p>
&lt;p>한 번이라도 좋습니다.
&lt;strong>&amp;ldquo;이것은 내가 만들었다&amp;quot;라고 당당하게 말할 수 있는 것을 남기고 싶었습니다.&lt;/strong>
그렇게 생각해서 LogicPad의 구상을 다듬기 시작했습니다. 지금으로부터 약 6년 전(2019년경)의 일입니다.
(원래의 아이디어 자체는 언리얼 엔진의 비주얼 프로그래밍 언어인 블루프린트를 알게 된 2015년쯤 전의 일입니다.)&lt;/p>
&lt;h2 id="블루프린트img_1png">&lt;img src="http://kenji.blog/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/img_1.png"
width="637"
height="285"
srcset="http://kenji.blog/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/img_1_hu70d4fd9be2cc84fc55cb45a83c67cc8a_54446_480x0_resize_box_3.png 480w, http://kenji.blog/p/logicpad-%E9%96%8B%E7%99%BA%E7%A7%98%E8%A9%B1/img_1_hu70d4fd9be2cc84fc55cb45a83c67cc8a_54446_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="블루프린트"
class="gallery-image"
data-flex-grow="223"
data-flex-basis="536px"
>
&lt;/h2>&lt;h2 id="코드를-쓸-수-없어서-손을-댈-수-없다-그거-너무-아깝지-않나요">코드를 쓸 수 없어서 손을 댈 수 없다. 그거 너무 아깝지 않나요?
&lt;/h2>&lt;p>제 직장에는 우수한 사람이 많았습니다.&lt;/p>
&lt;p>논리는 짤 수 있습니다. Excel 함수도 자유자재로 다루고, 문제의 본질도 간파할 수 있습니다.
하지만―― &amp;lsquo;코드를 작성한다&amp;rsquo;는 단계에서 손이 멈춰버립니다.&lt;/p>
&lt;p>&amp;ldquo;이 작업, 매번 매뉴얼을 보면서 하고 있는데, 자동화할 수 없을까요?&amp;rdquo;
&amp;ldquo;응, 할 수 있어. 하지만&amp;hellip; 그러려면 코드를 써야 해&amp;hellip;&amp;rdquo;&lt;/p>
&lt;p>그런 대화가 여러 번 있었습니다.&lt;/p>
&lt;p>저는 그때마다 생각했습니다.
&lt;strong>&amp;ldquo;논리는 아는데, 코드라는 장벽에 막혀버리는 것은 정말로 아깝다&amp;quot;고.&lt;/strong>&lt;/p>
&lt;hr>
&lt;h2 id="로우코드-에디터라는-선택지">로우코드 에디터라는 선택지
&lt;/h2>&lt;p>사실 이전 직장에서는 GUI 조작으로 움직이는 2차원 CAD를 개발하고 있었습니다.
CAD란 마우스를 사용해 도형을 조립해 나가는 거잖아요.
즉, &lt;strong>&amp;ldquo;조작으로 논리를 조립해 나간다&amp;rdquo;&lt;/strong> 는 세계관입니다.&lt;/p>
&lt;p>&amp;ldquo;이거, 로우코드랑 엄청 궁합이 좋겠다&amp;quot;라고 생각했습니다.&lt;/p>
&lt;p>더 거슬러 올라가면, 학생 시절부터 계속 화상 처리나 수치 처리, Windows 도구, SNS 자동 게시 도구 등,
생각나면 바로 코드를 짜서 작은 프로그램을 양산하고 있었습니다.
600개 이상은 될 거라고 생각합니다. 지금도 GitHub에 남아있습니다.&lt;/p>
&lt;p>당시에는 의미 따위는 생각하지 않았습니다.
그저 &amp;ldquo;만들고 싶으니까 만든다&amp;rdquo;. 그것뿐이었습니다.&lt;/p>
&lt;p>하지만 지금, LogicPad를 만들고 있으니&amp;hellip;&lt;/p>
&lt;p>&lt;strong>마치, 점과 점이 선으로 연결된 것 같았습니다.&lt;/strong>&lt;/p>
&lt;hr>
&lt;h2 id="사용하기-쉽지만-강력하다-밸런스의-어려움">사용하기 쉽지만 강력하다. 밸런스의 어려움
&lt;/h2>&lt;p>개발을 진행하면서 계속 생각했던 것이
&lt;strong>&amp;ldquo;직관적으로 사용할 수 있으면서도 제대로 강력한 도구로 만든다&amp;rdquo;&lt;/strong> 는 것.&lt;/p>
&lt;p>기능을 추가하면 할 수 있는 것은 늘어납니다. 하지만 사용하기 어려워집니다.
단순하게 만들면 누구나 다룰 수 있습니다. 하지만 그러면 부족함을 느끼는 사람도 생깁니다.&lt;/p>
&lt;p>&amp;ldquo;로우코드 도구는 장난감이지?&amp;ldquo;라는 말을 듣지 않도록.
그렇지만 &amp;ldquo;결국 코드를 작성하지 않으면 안 되잖아&amp;quot;라는 말도 듣지 않도록.&lt;/p>
&lt;p>&lt;strong>직관과 표현력, 그 아슬아슬한 선에서 계속 싸우고 있었습니다.&lt;/strong>&lt;/p>
&lt;p>몇 번이나 UI를 다시 만들고, 몇 번이나 버리고,
그리고 마침내 &amp;ldquo;이거라면 괜찮겠다&amp;quot;라고 생각되는 형태에 가까워졌을 때는, 정말 기뻤습니다.&lt;/p>
&lt;hr>
&lt;h2 id="처음으로-사용자의-한마디에-구원받았다">처음으로 &amp;lsquo;사용자&amp;rsquo;의 한마디에 구원받았다
&lt;/h2>&lt;p>처음 LogicPad를 건네준 사람은 전 동료였습니다.
IT는 서툴고, 코드도 무서워합니다. 하지만 논리는 잘합니다.&lt;/p>
&lt;p>조금 설명하고 만져보게 하고&amp;hellip; 몇 분 뒤에 했던 한마디를 지금도 잊을 수 없습니다.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>&amp;ldquo;이거라면 나라도 할 수 있을 것 같아!&amp;rdquo;&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>정말로 눈물이 날 것 같았습니다.
제가 주고 싶었던 것은 바로 이거였다고.&lt;/p>
&lt;p>움직이는 도구가 아니라, &lt;strong>&amp;ldquo;스스로 만들 수 있었다!&amp;ldquo;는 감각&lt;/strong>.
그것이야말로 LogicPad의 진정한 가치라고 확신했습니다.&lt;/p>
&lt;hr>
&lt;h2 id="만들-수-있는-사람이-늘어나면-사회는-더욱-재미있어진다">만들 수 있는 사람이 늘어나면, 사회는 더욱 재미있어진다
&lt;/h2>&lt;p>저는 &amp;lsquo;기술의 민주화&amp;rsquo;가 정말로 중요하다고 생각합니다.&lt;/p>
&lt;p>기술에는 세상을 바꿀 힘이 있습니다.
하지만 그것을 다룰 수 있는 사람은 한정되어 있습니다.&lt;/p>
&lt;p>만약 &amp;lsquo;논리를 안다&amp;rsquo;는 것만으로 앱을 만들 수 있다면?&lt;/p>
&lt;p>&lt;strong>더 많은 사람이 &amp;lsquo;만드는 쪽&amp;rsquo;으로 넘어올 수 있게 됩니다.&lt;/strong>
그리고 그곳에서 탄생하는 것은 지금의 상상을 뛰어넘을 것이라고 생각합니다.&lt;/p>
&lt;p>LogicPad가 그 입구가 될 수 있다면.
&amp;ldquo;만들어보고 싶다&amp;quot;를 &amp;ldquo;만들 수 있다&amp;quot;로 바꾸는 도구이고 싶습니다.&lt;/p>
&lt;p>그것이 저의 바람입니다.&lt;/p>
&lt;hr>
&lt;h2 id="마치며">마치며
&lt;/h2>&lt;p>LogicPad는 아직 베타 버전으로 완성되지 않았습니다.
개선점도, 하고 싶은 일도 아직 산더미처럼 있습니다.&lt;/p>
&lt;p>하지만 저는 이 도구에 &lt;strong>제 인생의 &amp;ldquo;점&amp;quot;을 전부 쏟아붓고 있습니다.&lt;/strong>
지금이라면 가슴을 펴고 말할 수 있습니다.&lt;/p>
&lt;p>&lt;strong>&amp;ldquo;이것은 내가 만든 제품이다&amp;rdquo;&lt;/strong> 라고.&lt;/p>
&lt;hr>
&lt;h3 id="-덤-logicpad로-할-수-있는-일">👇 덤: LogicPad로 할 수 있는 일
&lt;/h3>&lt;ul>
&lt;li>드래그 앤 드롭으로 처리 구축&lt;/li>
&lt;li>조건 분기나 변수 등도 GUI로 다룰 수 있음&lt;/li>
&lt;li>다양한 AI 연동 노드 준비&lt;/li>
&lt;li>스크립트 삽입으로 상급자용 확장도 가능&lt;/li>
&lt;li>고정밀 수학 함수·데이터 처리 (무한 자릿수 정밀도의 수치 연산 등)&lt;/li>
&lt;li>상급자를 위한 단축키도 충실&lt;/li>
&lt;li>90개국 이상의 언어 지원&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="앞으로-하고-싶은-일">앞으로 하고 싶은 일
&lt;/h3>&lt;ul>
&lt;li>AI와 연동하여 자연어에서 논리를 생성&lt;/li>
&lt;li>사용자가 커스텀 노드를 생성할 수 있는 구조&lt;/li>
&lt;li>작성한 노드나 논리를 공유할 수 있는 플랫폼 구축&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-후기">✍️ 후기
&lt;/h2>&lt;p>여기까지 읽어주셔서 정말 감사합니다.
이것은 단순한 도구 개발이 아니라, 제 자신의 경험, 열정, 인생의 파편을 쏟아부은 하나의 도전이었습니다.&lt;/p>
&lt;p>&amp;ldquo;코드는 못 짜지만, 논리는 있다&amp;rdquo;
그런 사람들이 자신의 힘으로 &lt;strong>&amp;ldquo;만들 수 있게&amp;rdquo; 되는 미래&lt;/strong>.
그것을 앞으로도 LogicPad를 통해 지향해 나가고 싶습니다.&lt;/p>
&lt;p>만약 조금이라도 &amp;ldquo;사용해보고 싶다&amp;quot;고 생각해 주셨다면, 그것만으로도 매우 기쁩니다.
흥미가 생기신 분은 꼭 &lt;a class="link" href="https://logicpad.org" target="_blank" rel="noopener"
>LogicPad&lt;/a>를 시험해 보세요.&lt;/p>
&lt;p>그리고 사용해본 소감이나 깨달은 점이 있다면 어떤 사소한 것이라도 좋습니다.
당신의 목소리가 이 제품의 다음 한 걸음을 만드는 큰 힘이 됩니다.&lt;/p>
&lt;p>앞으로도 잘 부탁드립니다.&lt;/p></description></item><item><title>'PowerShell로 Excel이나 Word 등의 메타데이터(개인 정보)를 일괄 삭제하는 방법'</title><link>http://kenji.blog/ko/p/powershell-%E3%81%A7-excel-%E3%81%AE%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E5%80%8B%E4%BA%BA%E6%83%85%E5%A0%B1%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Wed, 30 Jul 2025 02:42:40 +0900</pubDate><guid>http://kenji.blog/ko/p/powershell-%E3%81%A7-excel-%E3%81%AE%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E5%80%8B%E4%BA%BA%E6%83%85%E5%A0%B1%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/powershell-%E3%81%A7-excel-%E3%81%AE%E3%83%A1%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E5%80%8B%E4%BA%BA%E6%83%85%E5%A0%B1%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/powershell_metadata_eyecatch_1788588033601.jpg" alt="Featured image of post 'PowerShell로 Excel이나 Word 등의 메타데이터(개인 정보)를 일괄 삭제하는 방법'" />&lt;h1 id="powershell로-excel이나-word-등의-메타데이터개인-정보를-일괄-삭제하는-방법">PowerShell로 Excel이나 Word 등의 메타데이터(개인 정보)를 일괄 삭제하는 방법
&lt;/h1>&lt;p>Excel 등의 Office 파일에는 작성자, 최종 수정자, 회사명 등의 &amp;lsquo;메타데이터(개인 정보)&amp;lsquo;가 자동으로 저장됩니다. 사외에 파일을 공유할 때 등, 이러한 정보를 삭제하고 싶은 경우가 많습니다.&lt;/p>
&lt;p>이 글에서는 PowerShell을 사용하여 Excel의 메타데이터를 삭제하는 방법을 중심으로, &lt;strong>폴더 내 일괄 처리 ** 나, ** Word・PowerPoint 등 다른 Office 파일에 대한 응용&lt;/strong> 까지 자세히 해설합니다.&lt;/p>
&lt;hr>
&lt;h2 id="1-하나의-excel-파일-메타데이터-삭제하기">1. 하나의 Excel 파일 메타데이터 삭제하기
&lt;/h2>&lt;p>가장 기본이 되는, 단일 Excel 파일의 개인 정보를 삭제하는 스크립트입니다. Excel의 COM 개체를 호출하여, &lt;code>RemovePersonalInformation&lt;/code> 속성을 &lt;code>$true&lt;/code>로 설정하고 덮어쓰기 저장합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Excel 애플리케이션을 숨김 상태로 시작&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$excel&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-Object&lt;/span> &lt;span class="n">-ComObject&lt;/span> &lt;span class="n">Excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Application&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Visible&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DisplayAlerts&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 파일 열기（※절대 경로 지정）&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$filePath&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;C:\Path\To\Your\File.xlsx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$wb&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Workbooks&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$filePath&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 메타데이터(개인 정보)를 삭제하는 설정 활성화&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$wb&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">RemovePersonalInformation&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 덮어쓰기 저장하고 닫기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$wb&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Save&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$wb&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Close&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="vm">$false&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Excel을 종료하고 메모리 해제&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Quit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="no">System.Runtime.Interopservices.Marshal&lt;/span>&lt;span class="p">]::&lt;/span>&lt;span class="n">ReleaseComObject&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$excel&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Out-Null&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>주의점:&lt;/strong> &lt;code>Workbooks.Open()&lt;/code>에 전달하는 경로는 반드시 ** 절대 경로(전체 경로)** 를 지정해 주세요. 상대 경로일 경우 오류가 발생할 수 있습니다.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="2-폴더-내의-모든-excel-파일을-일괄로-처리하기">2. 폴더 내의 모든 Excel 파일을 일괄로 처리하기
&lt;/h2>&lt;p>실무에서는 &amp;ldquo;특정 폴더에 들어 있는 수십 개의 Excel 파일 메타데이터를 한 번에 지우고 싶다&amp;quot;는 경우가 많을 것입니다. &lt;code>Get-ChildItem&lt;/code>을 조합하여 루프 처리를 수행함으로써 실현할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$targetFolder&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;C:\Path\To\Your\Folder&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 폴더 내의 .xlsx 및 .xls 파일을 모두 가져오기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$excelFiles&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">Get-ChildItem&lt;/span> &lt;span class="n">-Path&lt;/span> &lt;span class="nv">$targetFolder&lt;/span> &lt;span class="n">-Include&lt;/span> &lt;span class="s2">&amp;#34;*.xlsx&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;*.xls&amp;#34;&lt;/span> &lt;span class="n">-Recurse&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nv">$excelFiles&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Count&lt;/span> &lt;span class="o">-eq&lt;/span> &lt;span class="mf">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span> &lt;span class="s2">&amp;#34;Excel 파일을 찾을 수 없습니다.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">exit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$excel&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-Object&lt;/span> &lt;span class="n">-ComObject&lt;/span> &lt;span class="n">Excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Application&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Visible&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DisplayAlerts&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">foreach&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nv">$file&lt;/span> &lt;span class="k">in&lt;/span> &lt;span class="nv">$excelFiles&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">Write-Host&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$file&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2"> 의 메타데이터를 삭제 중...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c"># 파일 열기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">$wb&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Workbooks&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$file&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">FullName&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c"># 메타데이터를 삭제하고 덮어쓰기 저장&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">$wb&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">RemovePersonalInformation&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">$wb&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Save&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">$wb&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Close&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="vm">$false&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$excel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Quit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="no">System.Runtime.Interopservices.Marshal&lt;/span>&lt;span class="p">]::&lt;/span>&lt;span class="n">ReleaseComObject&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$excel&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Out-Null&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Write-Host&lt;/span> &lt;span class="s2">&amp;#34;모든 처리가 완료되었습니다!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="3-다른-office-파일-word--powerpoint-의-메타데이터-삭제하기">3. 다른 Office 파일 (Word / PowerPoint) 의 메타데이터 삭제하기
&lt;/h2>&lt;p>Excel 뿐만 아니라, Word나 PowerPoint에서도 완전히 같은 논리로 메타데이터를 삭제할 수 있습니다. 호출하는 COM 개체의 이름이 다를 뿐, &lt;code>RemovePersonalInformation&lt;/code> 속성이 준비되어 있는 것은 공통입니다.&lt;/p>
&lt;h3 id="word의-경우">Word의 경우
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$word&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-Object&lt;/span> &lt;span class="n">-ComObject&lt;/span> &lt;span class="n">Word&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Application&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$word&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Visible&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$word&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">DisplayAlerts&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="mf">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$doc&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$word&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Documents&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;C:\Path\To\Your\File.docx&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$doc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">RemovePersonalInformation&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$doc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Save&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$doc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Close&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$word&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Quit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="no">System.Runtime.Interopservices.Marshal&lt;/span>&lt;span class="p">]::&lt;/span>&lt;span class="n">ReleaseComObject&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$word&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Out-Null&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="powerpoint의-경우">PowerPoint의 경우
&lt;/h3>&lt;p>PowerPoint의 경우 &lt;code>RemovePersonalInformation&lt;/code> 속성 설정은 동일하지만, 숨김 시작 동작이 조금 다릅니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$ppt&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-Object&lt;/span> &lt;span class="n">-ComObject&lt;/span> &lt;span class="n">PowerPoint&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Application&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 제2인수〜제4인수에서 숨김 모드(msoFalse) 등을 지정하여 열기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$presentation&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nv">$ppt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Presentations&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;C:\Path\To\Your\File.pptx&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="vm">$false&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="vm">$false&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="vm">$false&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$presentation&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">RemovePersonalInformation&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="vm">$true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$presentation&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Save&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$presentation&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Close&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$ppt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Quit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="no">System.Runtime.Interopservices.Marshal&lt;/span>&lt;span class="p">]::&lt;/span>&lt;span class="n">ReleaseComObject&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nv">$ppt&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Out-Null&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="요약">요약
&lt;/h2>&lt;p>PowerShell과 COM 개체를 활용하면, Office 파일의 메타데이터 삭제를 완전히 자동화할 수 있습니다. 사외비 정보나 개인 이름이 의도치 않게 유출되는 것을 막기 위해서라도, 납품 전 폴더 일괄 처리 스크립트 등을 준비해 두면 매우 편리합니다.&lt;/p></description></item><item><title>'케플러 추측을 알기 쉽게 해설'</title><link>http://kenji.blog/ko/p/%E3%82%B1%E3%83%97%E3%83%A9%E3%83%BC%E4%BA%88%E6%83%B3%E3%82%92%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E8%A7%A3%E8%AA%AC/</link><pubDate>Mon, 21 Jul 2025 22:53:03 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B1%E3%83%97%E3%83%A9%E3%83%BC%E4%BA%88%E6%83%B3%E3%82%92%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E8%A7%A3%E8%AA%AC/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B1%E3%83%97%E3%83%A9%E3%83%BC%E4%BA%88%E6%83%B3%E3%82%92%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E8%A7%A3%E8%AA%AC/img.png" alt="Featured image of post '케플러 추측을 알기 쉽게 해설'" />&lt;h1 id="케플러-추측을-알기-쉽게-해설-수박을-가장-꽉-차게-담는-방법">케플러 추측을 알기 쉽게 해설! ～수박을 가장 꽉 차게 담는 방법～
&lt;/h1>&lt;p>안녕하세요, kenji입니다!&lt;/p>
&lt;p>오늘은 &amp;lsquo;케플러 추측&amp;rsquo;이라는 조금 어려워 보이는 이름의 수학 이야기를 가능한 한 알기 쉽게 설명해 보려고 합니다.&lt;/p>
&lt;p>언뜻 보면 엄청 매니악한 이야기지만, &amp;ldquo;수박을 상자에 꽉 차게 담으려면 어떻게 해야 할까?&amp;ldquo;라는 비교적 친숙한 문제이기도 합니다. 편의점 냉장고와도 관계가 있고, 짐을 쌓는 방법과도 관계가 있죠.&lt;/p>
&lt;p>그리고 수학의 세계에서는 이것이 무려 &lt;strong>400년 이상 증명되지 못했다&lt;/strong> 는, 엄청나게 낭만 있는 이야기이기도 합니다.&lt;/p>
&lt;p>그럼 시작해 볼까요!&lt;/p>
&lt;hr>
&lt;h2 id="애초에-케플러가-누구야">애초에 케플러가 누구야?
&lt;/h2>&lt;p>먼저, &amp;lsquo;케플러 추측&amp;rsquo;의 &amp;lsquo;케플러&amp;rsquo;가 누구야? 하는 이야기인데요.&lt;/p>
&lt;p>이것은 &lt;strong>요하네스 케플러(Johannes Kepler)&lt;/strong> 라는 독일의 천문학자 겸 수학자의 이름입니다.&lt;/p>
&lt;p>이 사람, 엄청나게 대단한 사람이에요.
예를 들어, 행성의 궤도가 타원형이라는 것을 발견한 것도 이 사람입니다. 지금은 당연한 지식이지만, 당시(1600년경)는 지동설조차 제대로 믿어지지 않던 시대였거든요.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>갈릴레오 = 관측의 천재&lt;/strong>&lt;/li>
&lt;li>&lt;strong>케플러 = 수식으로 우주를 설명한 천재&lt;/strong>&lt;/li>
&lt;li>&lt;strong>뉴턴 = 그 이론을 물리 법칙으로 정리한 초천재&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>이런 위치로, 케플러는 &amp;lsquo;수식으로 우주를 말하는&amp;rsquo; 선구자였습니다.&lt;/p>
&lt;p>그런 그가 어느 날 이렇게 말합니다.&lt;/p>
&lt;hr>
&lt;h2 id="케플러-추측이-뭐야">케플러 추측이 뭐야?
&lt;/h2>&lt;p>&amp;lsquo;케플러 추측&amp;rsquo;이란 간단히 말해 이런 이야기입니다.&lt;/p>
&lt;hr>
&lt;blockquote>
&lt;p>&lt;strong>같은 크기의 구(수박이나 오렌지)를 상자에 담을 때, 어떤 배열이 가장 꽉 차게 담을 수 있을까?&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>라는 문제.&lt;/p>
&lt;p>그래서 케플러가 1600년대에 추측한 것이&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>채소가게에서 오렌지를 진열하듯이 삼각형 모양으로 쌓는 게 가장 효율적이지 않을까?&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>라는 것.&lt;/p>
&lt;p>이것을 수학적으로 말하면 &amp;lsquo;&lt;strong>최조밀 충전 문제&lt;/strong>&amp;lsquo;라고 해서, 구를 공간에 가장 빽빽하게 깔아 채우는 방법을 찾는 문제인 거죠.&lt;/p>
&lt;p>케플러는 &amp;lsquo;&lt;strong>면심 입방 구조(FCC)&lt;/strong>&amp;lsquo;라는 배열(수박을 삼각형으로 쌓는 것 같은 느낌)이 가장 효율이 좋다고 추측했습니다.&lt;/p>
&lt;p>그래서 다들 &amp;ldquo;확실히 그럴싸하네～&amp;ldquo;라고는 생각했지만, 수학적으로 &amp;ldquo;절대적으로 이게 최고다!&amp;ldquo;라고 증명하는 것이 엄청나게 어려웠습니다.&lt;/p>
&lt;hr>
&lt;h2 id="증명까지-400년">증명까지 400년!?!
&lt;/h2>&lt;p>그럼 실제로 그것이 언제 증명되었냐 하면&amp;hellip;&lt;/p>
&lt;p>무려 &lt;strong>1998년～2005년경&lt;/strong> 입니다.
즉, &lt;strong>400년 가까이 아무도 증명하지 못했다&lt;/strong> 는 것이죠. 너무 대단합니다.&lt;/p>
&lt;p>게다가 증명한 것은 미국의 수학자 &lt;strong>토머스 헤일스(Thomas Hales)&lt;/strong> 라는 사람.&lt;/p>
&lt;p>이 사람은 손계산만으로는 무리라고 판단하여 &lt;strong>컴퓨터를 사용해 증명&lt;/strong> 했습니다.
하지만 그 증명이 너무 복잡해서 인간이 제대로 확인할 수 없다!는 문제가 발생.&lt;/p>
&lt;p>그래서 수학계에서도 &amp;ldquo;그럼 컴퓨터로 증명한 것을 정말 믿을 수 있는 거야?&amp;ldquo;라는 대논쟁이 일어났습니다.&lt;/p>
&lt;p>결국 &amp;ldquo;컴퓨터를 포함해서 엄밀하게 검증했어!&amp;ldquo;라는 증명(정식으로는 &amp;lsquo;정형 증명&amp;rsquo;이라고 합니다)이 완료된 것은 &lt;strong>2014년&lt;/strong>.&lt;/p>
&lt;p>즉, 케플러의 직감이 &lt;strong>옳았다고 증명되기까지 400년 이상&lt;/strong> 걸렸다는 것입니다. 대단한 낭만이죠.&lt;/p>
&lt;hr>
&lt;h2 id="실생활에서도-엄청-많이-쓰인다">실생활에서도 엄청 많이 쓰인다
&lt;/h2>&lt;p>&amp;lsquo;구를 어떻게 배열할까&amp;rsquo;라니, 수학 오타쿠들만의 이야기인가 싶지만, 사실은 엄청 실용적입니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>편의점 냉장고에 음료수를 효율적으로 채울 때&lt;/strong>&lt;/li>
&lt;li>&lt;strong>통조림을 수송용 팔레트에 쌓을 때&lt;/strong>&lt;/li>
&lt;li>&lt;strong>통신(디지털 신호 압축 등)에도 응용되고 있다&lt;/strong>&lt;/li>
&lt;li>&lt;strong>3D 프린터나 결정 구조 설계에도 사용된다&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>등등, 사실은 우리 생활의 이면에서 팍팍 사용되고 있는 이론입니다.&lt;/p>
&lt;hr>
&lt;h2 id="요약-인간의-직감은-대단해">요약: 인간의 직감은 대단해
&lt;/h2>&lt;p>그럼 요약하겠습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>케플러 추측&lt;/strong> = 구를 가장 꽉 차게 담으려면 어떻게 해?라는 문제&lt;/li>
&lt;li>&lt;strong>케플러 씨&lt;/strong> = 행성의 궤도를 발견한 수학·천문학자&lt;/li>
&lt;li>&lt;strong>추측된 것은 1600년대! 하지만 증명된 것은 2000년대!&lt;/strong>&lt;/li>
&lt;li>&lt;strong>실생활에도 엄청나게 응용되고 있다!&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>그리고 무엇보다 재미있는 것은,
&lt;strong>&amp;ldquo;채소가게 아저씨가 감각적으로 하던 쌓기 방식이 수학적으로도 최강이었다&amp;rdquo;&lt;/strong> 는 점.&lt;/p>
&lt;p>즉, &lt;strong>인간의 직감은 대단하다&lt;/strong>.
그리고 &lt;strong>그것을 증명하는 데 400년이 걸릴 수도 있다&lt;/strong> 는 것이, 참으로 낭만 있는 이야기죠.&lt;/p>
&lt;hr>
&lt;p>관심이 생기신 분들은 꼭 &amp;lsquo;토머스 헤일스&amp;rsquo;, &amp;lsquo;정형 증명&amp;rsquo;, &amp;lsquo;Sphere Packing&amp;rsquo; 등으로 검색해 보세요. 깊이 파고들면 엄청나게 재미있습니다.&lt;/p>
&lt;p>그럼 이만!&lt;/p>
&lt;hr>
&lt;p>[PR]&lt;/p>
&lt;div style="background:#fff;width:120px;height:215px;box-sizing:border-box;border:1px solid #ccc;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;">&lt;div style="line-height:0;">&lt;img src="https://static.jp.mercari.com/assets/img/common/jp/logo_horizontal.png" width="105">&lt;/div>&lt;a href="https://jp.mercari.com/item/m71496725612?afid=1916658352" style="width:100px;height:100px;background:#eee;" target="_blank">&lt;img src="https://ambassador-system.mercari.com/v1/i?id=m71496725612&amp;svc=m" style="line-height:0;width:100px;height:100px;object-fit:contain;"/>&lt;/a>&lt;div style="padding:12px 0;width:100%;text-align:center;">&lt;a href="https://jp.mercari.com/item/m71496725612?afid=1916658352" style="width:100px;height:32px;background-color:#E32B36;border-radius:4px;line-height:14px;text-align:center;color:#fff;font-weight:bold;border:0;font-size:12px;display:inline-flex;justify-content:center;align-items:center;" target="_blank">지금 바로 구매&lt;/a>&lt;/div>&lt;/div></description></item><item><title>'AI 개발의 벽'</title><link>http://kenji.blog/ko/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/</link><pubDate>Sun, 20 Jul 2025 21:52:42 +0900</pubDate><guid>http://kenji.blog/ko/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/</guid><description>&lt;img src="http://kenji.blog/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/img_1.png" alt="Featured image of post 'AI 개발의 벽'" />&lt;h1 id="ai-개발의-벽">AI 개발의 벽
&lt;/h1>&lt;p>&lt;strong>〜8부 능선까지 왔지만, 거기서부터가 지옥이었던 이야기〜&lt;/strong>&lt;/p>
&lt;p>안녕하세요, kenji입니다.&lt;/p>
&lt;p>최근 &amp;ldquo;AI에게 부탁했더니 앱을 만들어줬어!&amp;ldquo;라는 이야기를 엄청 자주 듣게 되었습니다.
노코드나 로우코드의 시대를 넘어, &amp;ldquo;바이브 코딩(분위기로 코드를 작성하는 것)&amp;rdquo; 같은 단계에 돌입하고 있습니다.&lt;/p>
&lt;p>예를 들어, &amp;ldquo;이미지를 가공해서 SNS에 게시할 수 있는 앱 만들어줘&amp;quot;라고 하면, AI가 코드와 UI까지 뱉어냅니다.
&lt;strong>대단해, 이제 사람은 필요 없는 거 아냐? 하고 생각하게 되잖아요.&lt;/strong>&lt;/p>
&lt;p>하지만 말이죠, 그건 &lt;strong>후지산의 8부 능선에 샌들을 신고 내리는 것과 같은 것&lt;/strong> 입니다.&lt;/p>
&lt;hr>
&lt;h2 id="8부-능선까지는-식은-죽-먹기로-보인다">8부 능선까지는 &amp;ldquo;식은 죽 먹기&amp;quot;로 보인다
&lt;/h2>&lt;p>AI를 통한 개발은 처음에는 정말 편합니다.
파일 IO? 일단 작동함.
네트워크? 뭐 연결됨.
데이터베이스? JSON이면 되겠지.
UI? ChatGPT가 React 코드를 뱉어줬고.
결제? Stripe API 정도 복붙하면 됨.&lt;/p>
&lt;p>여기서 &amp;ldquo;나, 이미 엔지니어 아닐까?&amp;ldquo;하고 착각하게 됩니다.
하지만 진짜 지옥은 여기서부터 시작됩니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/img.png"
width="1024"
height="1024"
srcset="http://kenji.blog/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/img_huf56c5201f3b1d8f8800773fd39442f1f_2016892_480x0_resize_box_3.png 480w, http://kenji.blog/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/img_huf56c5201f3b1d8f8800773fd39442f1f_2016892_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;hr>
&lt;h2 id="왜-막히는-걸까">왜 막히는 걸까?
&lt;/h2>&lt;p>이유는 간단한데, &amp;ldquo;AI는 그럴싸하게 만들지만, 최종 조정은 사람에게 통째로 맡기기&amp;rdquo; 때문입니다.&lt;/p>
&lt;ul>
&lt;li>파일 IO에서 데이터가 날아감&lt;/li>
&lt;li>DB 정규화가 어설퍼서 검색이 느림&lt;/li>
&lt;li>UI가 직관적이지 않음&lt;/li>
&lt;li>부하 테스트를 안 해서 접속이 몰리면 크래시&lt;/li>
&lt;li>Apple/Google 심사에서 리젝(거절) 당함&lt;/li>
&lt;li>법적 요건에 걸려서 염상(비난 쇄도)할 뻔함&lt;/li>
&lt;/ul>
&lt;p>즉, &lt;strong>AI는 &amp;ldquo;겉보기에는 완성된 것 같은 프로토타입&amp;quot;을 만드는 것은 잘하지만&lt;/strong>,
&lt;strong>&amp;ldquo;실제로 세상에 내놓고 통용되는 프로덕트&amp;quot;로 마무리하는 것은, 지금도 여전히 사람의 일&lt;/strong> 입니다.&lt;/p>
&lt;hr>
&lt;h2 id="하지만-역설이-있다">하지만, 역설이 있다
&lt;/h2>&lt;p>여기서 하나의 &lt;strong>역설&lt;/strong> 을 깨닫게 됩니다.&lt;/p>
&lt;blockquote>
&lt;p>장래에 AI가 정말로 전부 다 할 수 있게 된다면?
즉, &amp;ldquo;보안도, 결제도, 설계도 전부 AI가 완벽하게 처리해 주게&amp;rdquo; 된다면?&lt;/p>
&lt;/blockquote>
&lt;p>그때는, &lt;strong>인류가 앱을 만들 필요 자체가 없어질&lt;/strong> 지도 모릅니다.&lt;/p>
&lt;p>왜냐하면, 사용자가 AI에게 직접 &amp;ldquo;이런 걸 하고 싶어&amp;quot;라고 말하면,
앱 없이 즉시 작업이 실행될 것이기 때문입니다.&lt;/p>
&lt;hr>
&lt;h3 id="예를-들어">🌀예를 들어
&lt;/h3>&lt;p>옛날에는 &amp;ldquo;계산을 하기 위해 계산기 앱을 실행&amp;quot;했었지만,
지금은 &amp;ldquo;Hey Siri, 12×32는?&amp;ldquo;이라고 말하면 끝납니다.&lt;/p>
&lt;p>마찬가지로,
&amp;ldquo;AI야, 사진을 가공해서 공유해 줘&amp;quot;라고 말하면, 앱의 UI나 API를 거치지 않고 처리 작업이 끝나 있을지도 모릅니다.&lt;/p>
&lt;p>즉,
&lt;strong>&amp;ldquo;AI로 앱을 만든다&amp;quot;라는 목표가 실현되었을 때, 앱 자체가 필요 없는 세상이 올&lt;/strong> 지도 모른다는 것입니다.&lt;/p>
&lt;hr>
&lt;h2 id="결국-지금-우리가-할-수-있는-일">결국, 지금 우리가 할 수 있는 일
&lt;/h2>&lt;p>그럼, 어떻게 하면 될까요.&lt;/p>
&lt;ul>
&lt;li>지금은 아직 &amp;ldquo;8부 능선 위&amp;quot;가 사람의 영역이므로, 그곳을 갈고닦는다&lt;/li>
&lt;li>본질적인 사용자 이해나 서비스 설계에 집중한다&lt;/li>
&lt;li>&amp;ldquo;만들 수 있는 것&amp;quot;보다 &amp;ldquo;가치 있는 것&amp;quot;을 생각한다&lt;/li>
&lt;li>오히려, &amp;ldquo;앱이라는 형식에 얽매이지 않는&amp;rdquo; 가치 제공의 방식을 모색한다&lt;/li>
&lt;/ul>
&lt;p>AI는 도구이며, 리프트이고, 때로는 경쟁자입니다.
하지만, &lt;strong>&amp;ldquo;무엇을 만들 것인가&amp;quot;나 &amp;ldquo;왜 만드는가&amp;quot;는, 아직 우리 인간의 질문으로 남아 있습니다.&lt;/strong>&lt;/p>
&lt;hr>
&lt;h2 id="요약">요약：
&lt;/h2>&lt;p>&lt;strong>AI 개발의 벽이란, 기술이 아니라 구조의 역설이다&lt;/strong>&lt;/p>
&lt;p>후지산의 8부 능선까지 누구나 갈 수 있는 시대.
하지만 거기서부터가 진짜 실전.&lt;/p>
&lt;p>그리고, 산 정상에 다 올랐을 무렵에는,
&amp;ldquo;산, 오를 필요가 있었나?&amp;ldquo;라고 다시 묻게 되는 미래가 기다리고 있을지도 모릅니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/img_1.png"
width="1024"
height="1024"
srcset="http://kenji.blog/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/img_1_hu929f602c53dcc1c0d00e8a53b025b29e_1978511_480x0_resize_box_3.png 480w, http://kenji.blog/p/ai%E9%96%8B%E7%99%BA%E3%81%AE%E5%A3%81/img_1_hu929f602c53dcc1c0d00e8a53b025b29e_1978511_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p></description></item><item><title>'C++에서 Microsoft.Windows.AI를 호출하는 방법'</title><link>http://kenji.blog/ko/p/c-%E3%81%8B%E3%82%89microsoft.windows.ai%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 19 Jul 2025 10:03:51 +0900</pubDate><guid>http://kenji.blog/ko/p/c-%E3%81%8B%E3%82%89microsoft.windows.ai%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/c-%E3%81%8B%E3%82%89microsoft.windows.ai%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'C++에서 Microsoft.Windows.AI를 호출하는 방법'" />&lt;h1 id="-c에서-microsoftwindowsai를-호출하는-방법샘플-코드-포함">🎯 C++에서 &lt;code>Microsoft.Windows.AI&lt;/code>를 호출하는 방법【샘플 코드 포함】
&lt;/h1>&lt;p>Windows 10 이후, Windows에는 기본적으로 &lt;strong>ONNX 형식의 AI 모델을 실행할 수 있는 런타임 ** 이 탑재되어 있습니다. 그것이 바로 ** Windows ML (Windows.AI.MachineLearning)&lt;/strong> 입니다.&lt;/p>
&lt;p>이 글에서는 &lt;strong>C++(Win32 앱 기반)&lt;/strong> 에서 &lt;code>Microsoft.Windows.AI.MachineLearning&lt;/code>을 호출하는 방법을 ** 샘플 코드와 함께 구체적으로 설명** 합니다.&lt;/p>
&lt;hr>
&lt;h2 id="-준비편">✅ 준비편
&lt;/h2>&lt;h3 id="-필요-환경">◾ 필요 환경
&lt;/h3>&lt;ul>
&lt;li>Windows 10 (1809+) 또는 Windows 11&lt;/li>
&lt;li>Visual Studio 2019 이후 (Community 버전 가능)&lt;/li>
&lt;li>C++/WinRT 지원 (&lt;code>Microsoft.Windows.CppWinRT&lt;/code>)&lt;/li>
&lt;li>Windows SDK 10.0.17763.0 이상&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-프로젝트-구성">✅ 프로젝트 구성
&lt;/h2>&lt;p>Visual Studio에서 다음과 같은 구성의 프로젝트를 만듭니다.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>유형: C++ Windows 데스크톱 애플리케이션(빈 프로젝트)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>하위 시스템: Windows (&lt;code>WinMain&lt;/code>)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>NuGet에서 다음 패키지를 추가&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Microsoft.Windows.CppWinRT
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-샘플-코드">✅ 샘플 코드
&lt;/h2>&lt;p>다음은 &lt;code>WinMain&lt;/code>을 사용하여 Win32 API와 &lt;code>Windows.AI.MachineLearning&lt;/code>을 조합한 최소 구성의 샘플입니다.&lt;/p>
&lt;blockquote>
&lt;p>※ 사용할 ONNX 모델은 &lt;code>model.onnx&lt;/code>로 하고, 실행 파일과 같은 폴더에 배치해 주세요.&lt;/p>
&lt;/blockquote>
&lt;h3 id="maincpp">&lt;code>main.cpp&lt;/code>
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;windows.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;winrt/Windows.AI.MachineLearning.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;winrt/Windows.Storage.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#pragma comment(lib, &amp;#34;windowsapp&amp;#34;) &lt;/span>&lt;span class="c1">// WinRT 링크용
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">winrt&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">Windows&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">AI&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">MachineLearning&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">Windows&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Storage&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="n">WINAPI&lt;/span> &lt;span class="nf">WinMain&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">HINSTANCE&lt;/span> &lt;span class="n">hInstance&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">HINSTANCE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">LPSTR&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">nCmdShow&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// WinRT 초기화 (MTA든 STA든 상관없음)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">winrt&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">init_apartment&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 모델 파일을 읽어오기
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="n">modelFile&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">StorageFile&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">GetFileFromPathAsync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;model.onnx&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LearningModel&lt;/span> &lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">LearningModel&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">LoadFromStorageFileAsync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">modelFile&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 세션 생성
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">LearningModelSession&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LearningModelBinding&lt;/span> &lt;span class="n">binding&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">session&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 모델의 입출력 (여기서는 임시로 빈 입력)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 실제로는 TensorFloat 등으로 바인딩이 필요합니다.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 추론 실행
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">EvaluateAsync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">binding&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">MessageBox&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">nullptr&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;추론이 완료되었습니다&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Windows ML (C++)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">MB_OK&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">winrt&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">hresult_error&lt;/span> &lt;span class="k">const&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">ex&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">MessageBox&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">nullptr&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ex&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;에러&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">MB_ICONERROR&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-보충-입력-및-출력-tensor-지정-방법">✅ 보충: 입력 및 출력 Tensor 지정 방법
&lt;/h2>&lt;p>모델에 따라 추론 전에 &lt;strong>Tensor의 생성 및 바인딩&lt;/strong> 이 필요할 수 있습니다.&lt;/p>
&lt;p>예:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 1차원 float 배열을 Tensor로 변환
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">float&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">inputData&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mf">0.5f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.3f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.2f&lt;/span>&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int64_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">shape&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">};&lt;/span> &lt;span class="c1">// 형태: [1, 3]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">auto&lt;/span> &lt;span class="n">tensor&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TensorFloat&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">CreateFromArray&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">shape&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">inputData&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 입력 바인딩 (모델의 입력 이름에 맞춤)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">binding&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Bind&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;input_0&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tensor&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력도 마찬가지로 &lt;code>result.Outputs().Lookup(L&amp;quot;output_0&amp;quot;)&lt;/code>으로 얻을 수 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="-디버깅-시-주의사항">✅ 디버깅 시 주의사항
&lt;/h2>&lt;ul>
&lt;li>모델 파일이 실행 폴더에 존재하지 않으면 &lt;code>FileNotFoundException&lt;/code>이 발생합니다.&lt;/li>
&lt;li>입출력 이름이 일치하지 않으면 &lt;code>invalid_argument&lt;/code> 에러가 발생합니다.&lt;/li>
&lt;li>모델의 정확한 IO 사양은 &lt;a class="link" href="https://netron.app" target="_blank" rel="noopener"
>Netron&lt;/a> 등의 도구로 확인 가능합니다.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-요약">✅ 요약
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>항목&lt;/th>
&lt;th>내용&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>사용 API&lt;/td>
&lt;td>Windows.AI.MachineLearning (WinRT)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>언어&lt;/td>
&lt;td>C++ (Win32 기반)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>권장 방식&lt;/td>
&lt;td>C++/WinRT 헤더 경유&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>장점&lt;/td>
&lt;td>ONNX 모델이 네이티브로 동작, GPU 지원도 가능&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>주의&lt;/td>
&lt;td>모델의 입력 이름과 Tensor 형태에 주의&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="-대안-winrt를-사용하고-싶지-않은-분들을-위해">✅ 대안: WinRT를 사용하고 싶지 않은 분들을 위해
&lt;/h2>&lt;ul>
&lt;li>Microsoft의 &lt;code>ONNX Runtime&lt;/code>을 사용하면 &lt;strong>WinRT 없이 C++에서 완전히 ONNX 모델을 다룰 수 있습니다&lt;/strong>.&lt;/li>
&lt;li>크로스 플랫폼 지원으로 Windows/Linux에서도 공통 코드를 사용할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-마무리">📌 마무리
&lt;/h2>&lt;p>Windows ML (Microsoft.Windows.AI)은 C++에서도 확실하게 사용할 수 있는 강력한 AI 추론 엔진입니다. Windows 네이티브에서의 추론이 필요하신 분들은 꼭 시도해 보시길 바랍니다.&lt;/p>
&lt;p>ONNX 모델 생성이나 Tensor 바인딩의 구체적인 예시가 필요하신 분들을 위해 후속 기사에서 설명할 예정입니다!&lt;/p></description></item><item><title>'TinyLLaMA를 C++에서 호출할 수 있게 하는 절차(llama.cpp 사용)'</title><link>http://kenji.blog/ko/p/tinyllama-%E3%82%92-c-%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%9B%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86llama.cpp%E4%BD%BF%E7%94%A8/</link><pubDate>Sat, 19 Jul 2025 09:40:53 +0900</pubDate><guid>http://kenji.blog/ko/p/tinyllama-%E3%82%92-c-%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%9B%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86llama.cpp%E4%BD%BF%E7%94%A8/</guid><description>&lt;img src="http://kenji.blog/p/tinyllama-%E3%82%92-c-%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%9B%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86llama.cpp%E4%BD%BF%E7%94%A8/img.png" alt="Featured image of post 'TinyLLaMA를 C++에서 호출할 수 있게 하는 절차(llama.cpp 사용)'" />&lt;h1 id="-tinyllama--c-설정-절차llamacpp-사용">✅ TinyLLaMA × C++ 설정 절차(&lt;code>llama.cpp&lt;/code> 사용)
&lt;/h1>&lt;hr>
&lt;h2 id="-step-1-llamacpp-준비하기">🔧 Step 1: llama.cpp 준비하기
&lt;/h2>&lt;h3 id="1-1-필요한-환경-최소한">1-1. 필요한 환경 (최소한)
&lt;/h3>&lt;ul>
&lt;li>OS: Windows / Linux / macOS&lt;/li>
&lt;li>개발 환경: g++ / clang / MSVC&lt;/li>
&lt;li>Git / CMake&lt;/li>
&lt;/ul>
&lt;h3 id="1-2-llamacpp-가져오기-및-빌드">1-2. llama.cpp 가져오기 및 빌드
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git clone https://github.com/ggerganov/llama.cpp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> llama.cpp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir build
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> build
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cmake ..
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cmake --build . --config Release
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>Windows라면 &lt;code>Visual Studio Developer Command Prompt&lt;/code>에서 &lt;code>cmake --build . --config Release&lt;/code>를 사용하면 편합니다.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="-step-2-tinyllama-모델-다운로드-및-변환">📦 Step 2: TinyLLaMA 모델 다운로드 및 변환
&lt;/h2>&lt;h3 id="2-1-huggingface에서-원본-모델-가져오기">2-1. HuggingFace에서 원본 모델 가져오기
&lt;/h3>&lt;p>예: &lt;a class="link" href="https://huggingface.co/openaccess-ai-collective/TinyLlama-1.1B-Chat-v1.0" target="_blank" rel="noopener"
>TinyLLaMA-1.1B&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 필요에 따라 transformers를 사용하여 다운로드&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pip install transformers huggingface_hub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">python3 -m transformers.models.llama.convert_llama_weights_to_hf &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --input_dir ./TinyLlama-1.1B-Chat &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --model_size 1B &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> --output_dir ./hf_model
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>이는 Hugging Face 형식으로 변환하는 단계입니다.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h3 id="2-2-gguf-형식으로-변환llamacpp용">2-2. GGUF 형식으로 변환(&lt;code>llama.cpp&lt;/code>용)
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> llama.cpp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">python3 convert.py ./hf_model --outfile tinyllama.gguf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-3-모델-양자화크기-축소">2-3. 모델 양자화(크기 축소)
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">./quantize ./tinyllama.gguf ./tinyllama-q4.gguf q4_0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>&lt;code>q4_0&lt;/code>은 4bit 양자화입니다. 모델 크기가 약 &lt;strong>350MB 내외&lt;/strong> 로 작아집니다.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="-step-3-c에서-모델-호출하기코드-예시">🧪 Step 3: C++에서 모델 호출하기(코드 예시)
&lt;/h2>&lt;h3 id="3-1-간단한-c-코드추론">3-1. 간단한 C++ 코드(추론)
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;#34;llama.h&amp;#34;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_model_params&lt;/span> &lt;span class="n">model_params&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llama_model_default_params&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_context_params&lt;/span> &lt;span class="n">ctx_params&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llama_context_default_params&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_model&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llama_load_model_from_file&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;tinyllama-q4.gguf&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">model_params&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_context&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">ctx&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llama_new_context_with_model&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ctx_params&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">prompt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;사용자가 Excel 데이터를 읽어와 필터링한 후 저장하고 싶다고 합니다. 노드 구성은?&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_batch&lt;/span> &lt;span class="n">batch&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llama_batch_init&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">512&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_token&lt;/span> &lt;span class="n">BOS&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llama_token_bos&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">batch&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">token&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">BOS&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 토크나이즈
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">llama_token&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">tokens&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">prompt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llama_tokenize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">prompt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">tokens&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="n">tokens&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">tokens&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">resize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">size_t&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">tokens&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">batch&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">token&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tokens&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">batch&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">n_tokens&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tokens&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_decode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ctx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">batch&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 추론 결과 가져오기
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">50&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_token&lt;/span> &lt;span class="n">next&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llama_sample_token&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ctx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">nullptr&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">llama_token_to_str&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">next&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_batch&lt;/span> &lt;span class="n">next_batch&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">llama_batch_init&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">next_batch&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">token&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">next&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">next_batch&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">n_tokens&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_decode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ctx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">next_batch&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_free&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ctx&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llama_free_model&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-step-4-컴파일-방법예시">🧱 Step 4: 컴파일 방법(예시)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">g++ -I./llama.cpp main.cpp ./llama.cpp/build/libllama.a -o tiny_infer -pthread -std&lt;span class="o">=&lt;/span>c++11
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>&lt;code>libllama.a&lt;/code>는 빌드 후 &lt;code>build/&lt;/code> 디렉토리에 생성됩니다.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="-결과물-구성-예시정리">✅ 결과물 구성 예시(정리)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">my_app/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── tinyllama-q4.gguf # 양자화된 모델 (~350MB)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── main.cpp # 위의 C++ 코드
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── llama.cpp/ # llama.cpp 본체
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── build/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── libllama.a # 컴파일된 라이브러리
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-사용-사례-적용을-위한-보충">🧠 사용 사례 적용을 위한 보충
&lt;/h2>&lt;ul>
&lt;li>출력을 받아 &lt;code>노드 템플릿을 대조 및 선정&lt;/code>하는 코드를 C++ 내에 둠&lt;/li>
&lt;li>예: &amp;ldquo;Excel&amp;rdquo;, &amp;ldquo;필터&amp;rdquo;, &amp;ldquo;저장&amp;quot;이 포함됨 → 해당 노드 그룹 생성&lt;/li>
&lt;li>이 부분은 &lt;code>if 문 + JSON 템플릿 읽기&lt;/code>와 같은 간단한 구성으로 충분함&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-요약">📌 요약
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>항목&lt;/th>
&lt;th>내용&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>권장 모델&lt;/td>
&lt;td>TinyLLaMA-1.1B-Chat v1.0 (GGUF + 양자화)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>크기&lt;/td>
&lt;td>~350〜450MB (4bit 양자화)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>C++ 연동&lt;/td>
&lt;td>&lt;code>llama.cpp&lt;/code>를 사용하여 가능, 외부 의존성 거의 없음&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>처리 능력&lt;/td>
&lt;td>간단한 의도 파악 및 출력문 생성에 충분 (자연어→구성)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>확장성&lt;/td>
&lt;td>슬롯 채우기 및 템플릿 호출과 결합하여 노드 생성 AI로 활용 가능&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>'Slack App + OAuth2를 사용하여 Slack에 메시지를 게시하는 방법'</title><link>http://kenji.blog/ko/p/slack-app--oauth2-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-slack-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Wed, 16 Jul 2025 23:36:27 +0900</pubDate><guid>http://kenji.blog/ko/p/slack-app--oauth2-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-slack-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/slack-app--oauth2-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-slack-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'Slack App + OAuth2를 사용하여 Slack에 메시지를 게시하는 방법'" />&lt;h2 id="-액세스-토큰을-사용하는-게시-방법-slack-web-api">✅ 액세스 토큰을 사용하는 게시 방법 (Slack Web API)
&lt;/h2>&lt;p>Slack의 &amp;ldquo;OAuth Token(xoxb-～ 등)&amp;ldquo;은 Slack의 &lt;a class="link" href="https://api.slack.com/methods/chat.postMessage" target="_blank" rel="noopener"
>Web API&lt;/a>를 사용하여 게시하기 위한 키입니다.
이 경우 Webhook과는 달리 &lt;strong>Slack API 엔드포인트&lt;/strong> 에 &lt;code>Authorization: Bearer&lt;/code> 헤더와 함께 &lt;code>POST&lt;/code>합니다.&lt;/p>
&lt;hr>
&lt;h2 id="-필요한-전제-조건">🔑 필요한 전제 조건
&lt;/h2>&lt;p>Slack 앱에서 &lt;strong>OAuth 범위(scope)에 &lt;code>chat:write&lt;/code>&lt;/strong> 를 포함해야 합니다:&lt;/p>
&lt;h3 id="설정-절차">설정 절차
&lt;/h3>&lt;ol>
&lt;li>&lt;a class="link" href="https://api.slack.com/apps" target="_blank" rel="noopener"
>https://api.slack.com/apps&lt;/a>에 접속&lt;/li>
&lt;li>앱 생성 또는 기존 앱 선택&lt;/li>
&lt;li>&amp;ldquo;OAuth &amp;amp; Permissions&amp;rdquo; &amp;gt; &lt;code>Scopes&lt;/code>에서
→ &lt;code>chat:write&lt;/code> 추가&lt;/li>
&lt;li>&amp;ldquo;Install to Workspace&amp;rdquo; 또는 &amp;ldquo;Reinstall&amp;quot;하여 &lt;code>Access Token&lt;/code> 획득 (예: &lt;code>xoxb-xxxxxxxxxx&lt;/code>)&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="-c-코드-winhttp로-slack-api에-게시">💻 C++ 코드 (WinHTTP로 Slack API에 게시)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;span class="lnt">67
&lt;/span>&lt;span class="lnt">68
&lt;/span>&lt;span class="lnt">69
&lt;/span>&lt;span class="lnt">70
&lt;/span>&lt;span class="lnt">71
&lt;/span>&lt;span class="lnt">72
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;windows.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;winhttp.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#pragma comment(lib, &amp;#34;winhttp.lib&amp;#34;)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">bool&lt;/span> &lt;span class="nf">PostSlackMessage&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">accessToken&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">channel&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">const&lt;/span> &lt;span class="kt">wchar_t&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">host&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;slack.com&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">const&lt;/span> &lt;span class="kt">wchar_t&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;/api/chat.postMessage&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hSession&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpOpen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;SlackPoster/1.0&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_ACCESS_TYPE_DEFAULT_PROXY&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_NO_PROXY_NAME&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_NO_PROXY_BYPASS&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">hSession&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hConnect&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpConnect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hSession&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">host&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">INTERNET_DEFAULT_HTTPS_PORT&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">hConnect&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hRequest&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpOpenRequest&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hConnect&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;POST&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">path&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_NO_REFERER&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_DEFAULT_ACCEPT_TYPES&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_FLAG_SECURE&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Authorization 헤더 및 Content-Type
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Content-Type: application/json&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Authorization: Bearer &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">accessToken&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// JSON 본문
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">body&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">R&lt;/span>&lt;span class="s">&amp;#34;({&amp;#34;&lt;/span>&lt;span class="n">channel&lt;/span>&lt;span class="s">&amp;#34;:&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s">&amp;#34; + channel + R&amp;#34;&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;,&amp;#34;&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="s">&amp;#34;:&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s">&amp;#34; + text + R&amp;#34;&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;})&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">BOOL&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpSendRequest&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">DWORD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">LPVOID&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">result&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="n">WinHttpReceiveResponse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cerr&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;전송 오류&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 상태 코드 확인
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">DWORD&lt;/span> &lt;span class="n">statusCode&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DWORD&lt;/span> &lt;span class="n">size&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">statusCode&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpQueryHeaders&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_QUERY_STATUS_CODE&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">WINHTTP_QUERY_FLAG_NUMBER&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_HEADER_NAME_BY_INDEX&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">statusCode&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_NO_HEADER_INDEX&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hConnect&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hSession&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">statusCode&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">200&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">token&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;xoxb-당신의액세스토큰&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 액세스 토큰
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">channel&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;채널ID또는#general&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 예: &amp;#34;#general&amp;#34; 또는 &amp;#34;C0123456789&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;#34;C++에서 Slack으로 게시해 보았다!&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">PostSlackMessage&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">token&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">channel&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;게시 성공!&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cerr&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;게시 실패.&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-채널-id-확인-방법">📌 채널 ID 확인 방법
&lt;/h2>&lt;p>채널 이름(예: &lt;code>#general&lt;/code>)만으로는 오류가 발생할 수 있습니다.
확실한 방법은 Slack의 채널 페이지 URL에 있는 ID를 사용하는 것입니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">https://app.slack.com/client/Txxxxx/C0123456789
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↑ 이 부분이 채널 ID
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-토큰-종류에-대해-보충">✅ 토큰 종류에 대해 (보충)
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>토큰 형식&lt;/th>
&lt;th>용도&lt;/th>
&lt;th>예시&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>xoxb-...&lt;/code>&lt;/td>
&lt;td>Bot Token (권장)&lt;/td>
&lt;td>게시·수정·삭제&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>xoxp-...&lt;/code>&lt;/td>
&lt;td>User Token (비권장)&lt;/td>
&lt;td>비 Bot 계열 작업&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Refresh Token&lt;/td>
&lt;td>장기 토큰 갱신용&lt;/td>
&lt;td>보통은 사용 안함&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="-요약">📝 요약
&lt;/h2>&lt;ul>
&lt;li>C++에서 Slack에 게시하려면 Slack Web API + Bearer Token 방식이 확실함&lt;/li>
&lt;li>&lt;code>chat.postMessage&lt;/code> 엔드포인트를 HTTPS POST로 사용&lt;/li>
&lt;li>토큰은 Bearer 헤더로 전송할 것&lt;/li>
&lt;li>채널은 &lt;strong>ID 지정&lt;/strong> 이 확실함&lt;/li>
&lt;/ul></description></item><item><title>'C++(Win32 API + WinHTTP)로 Slack에 메시지를 전송하는 방법 【Webhook 지원】'</title><link>http://kenji.blog/ko/p/c-win32-api--winhttp%E3%81%A7slack%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95webhook%E5%AF%BE%E5%BF%9C/</link><pubDate>Wed, 16 Jul 2025 19:42:56 +0900</pubDate><guid>http://kenji.blog/ko/p/c-win32-api--winhttp%E3%81%A7slack%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95webhook%E5%AF%BE%E5%BF%9C/</guid><description>&lt;img src="http://kenji.blog/p/c-win32-api--winhttp%E3%81%A7slack%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95webhook%E5%AF%BE%E5%BF%9C/img.png" alt="Featured image of post 'C++(Win32 API + WinHTTP)로 Slack에 메시지를 전송하는 방법 【Webhook 지원】'" />&lt;h1 id="cwin32-api--winhttp로-slack에-메시지를-전송하는-방법-webhook-지원">C++(Win32 API + WinHTTP)로 Slack에 메시지를 전송하는 방법 【Webhook 지원】
&lt;/h1>&lt;p>Slack에 C++로 메시지를 전송하고 싶다.
Node.js나 Python에서는 자주 볼 수 있지만, 「C++ × Win32 API × WinHTTP」로 구현하는 케이스는 드물죠.&lt;/p>
&lt;p>이 글에서는 &lt;strong>Webhook URL을 사용하여 Slack에 C++로 메시지를 전송하는 방법&lt;/strong> 을 단계별로 알기 쉽게 설명합니다.&lt;/p>
&lt;hr>
&lt;h2 id="-전체-흐름">✅ 전체 흐름
&lt;/h2>&lt;p>Slack에 메시지를 전송하려면 다음 단계를 따릅니다.&lt;/p>
&lt;ol>
&lt;li>Slack의 Webhook URL(API 키) 얻기&lt;/li>
&lt;li>WinHTTP를 사용하여 &lt;code>POST&lt;/code> 요청 보내기&lt;/li>
&lt;li>JSON 형식으로 메시지 본문 작성하기&lt;/li>
&lt;li>결과 확인하고 완료!&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="-step1-slack-webhook-url-얻는-방법">🔑 Step1: Slack Webhook URL 얻는 방법
&lt;/h2>&lt;p>Slack에서는 Incoming Webhooks 기능을 사용하여 외부 서비스에서 간단히 메시지를 전송할 수 있습니다.&lt;/p>
&lt;h3 id="얻는-순서">얻는 순서
&lt;/h3>&lt;ol>
&lt;li>&lt;a class="link" href="https://api.slack.com/apps" target="_blank" rel="noopener"
>https://api.slack.com/apps&lt;/a> 에 접속&lt;/li>
&lt;li>&lt;code>Create New App&lt;/code> 클릭&lt;/li>
&lt;li>&lt;code>From scratch&lt;/code> 를 선택하고 앱 이름과 전송할 워크스페이스를 선택&lt;/li>
&lt;li>왼쪽 메뉴에서 &lt;strong>「Incoming Webhooks」&lt;/strong> 를 선택하고 활성화&lt;/li>
&lt;li>&lt;strong>「Add New Webhook to Workspace」&lt;/strong> 를 클릭하고 채널을 선택&lt;/li>
&lt;li>발행된 URL(예: &lt;code>https://hooks.slack.com/services/xxx/yyy/zzz&lt;/code>) 복사&lt;/li>
&lt;/ol>
&lt;p>이 URL이 API 키처럼 작동합니다.&lt;/p>
&lt;hr>
&lt;h2 id="-step2-c-코드로-slack에-메시지-전송">💻 Step2: C++ 코드로 Slack에 메시지 전송
&lt;/h2>&lt;h3 id="사용하는-기술">사용하는 기술
&lt;/h3>&lt;ul>
&lt;li>Win32 API&lt;/li>
&lt;li>WinHTTP(표준 라이브러리)&lt;/li>
&lt;li>JSON 형식의 메시지&lt;/li>
&lt;/ul>
&lt;h3 id="샘플-코드slack-전송">샘플 코드(Slack 전송)
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;span class="lnt">67
&lt;/span>&lt;span class="lnt">68
&lt;/span>&lt;span class="lnt">69
&lt;/span>&lt;span class="lnt">70
&lt;/span>&lt;span class="lnt">71
&lt;/span>&lt;span class="lnt">72
&lt;/span>&lt;span class="lnt">73
&lt;/span>&lt;span class="lnt">74
&lt;/span>&lt;span class="lnt">75
&lt;/span>&lt;span class="lnt">76
&lt;/span>&lt;span class="lnt">77
&lt;/span>&lt;span class="lnt">78
&lt;/span>&lt;span class="lnt">79
&lt;/span>&lt;span class="lnt">80
&lt;/span>&lt;span class="lnt">81
&lt;/span>&lt;span class="lnt">82
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;windows.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;winhttp.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#pragma comment(lib, &amp;#34;winhttp.lib&amp;#34;)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">bool&lt;/span> &lt;span class="nf">PostToSlack&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">webhookUrl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">messageJson&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// URL 분해
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">URL_COMPONENTS&lt;/span> &lt;span class="n">urlComp&lt;/span>&lt;span class="p">{};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">wchar_t&lt;/span> &lt;span class="n">hostName&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">wchar_t&lt;/span> &lt;span class="n">urlPath&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1024&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">urlComp&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">dwStructSize&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">urlComp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">urlComp&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">lpszHostName&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">hostName&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">urlComp&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">dwHostNameLength&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">_countof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hostName&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">urlComp&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">lpszUrlPath&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">urlPath&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">urlComp&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">dwUrlPathLength&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">_countof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">urlPath&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">WinHttpCrackUrl&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">webhookUrl&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">urlComp&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcerr&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;URL 분해에 실패했습니다&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// HTTP 세션 및 연결
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hSession&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpOpen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;SlackPoster/1.0&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_ACCESS_TYPE_DEFAULT_PROXY&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_NO_PROXY_NAME&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_NO_PROXY_BYPASS&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hConnect&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpConnect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hSession&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">hostName&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">urlComp&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">nPort&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hRequest&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpOpenRequest&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hConnect&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;POST&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">urlPath&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_NO_REFERER&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_DEFAULT_ACCEPT_TYPES&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_FLAG_SECURE&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Content-Type: application/json&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">BOOL&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpSendRequest&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">LPVOID&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">messageJson&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messageJson&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">messageJson&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cerr&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;전송 요청에 실패했습니다&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpReceiveResponse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DWORD&lt;/span> &lt;span class="n">statusCode&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DWORD&lt;/span> &lt;span class="n">size&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">statusCode&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpQueryHeaders&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_QUERY_STATUS_CODE&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">WINHTTP_QUERY_FLAG_NUMBER&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_HEADER_NAME_BY_INDEX&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">statusCode&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_NO_HEADER_INDEX&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 리소스 해제
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hConnect&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hSession&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">statusCode&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">200&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">webhookUrl&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;https://hooks.slack.com/services/xxx/yyy/zzz&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 자신의 Webhook으로 교체해 주세요
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">R&lt;/span>&lt;span class="s">&amp;#34;({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s">&amp;#34;Hello from C++ :rocket:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;username&amp;#34;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s">&amp;#34;C++ Bot&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;icon_emoji&amp;#34;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s">&amp;#34;:robot_face:&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span>&lt;span class="s">&amp;#34;;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">PostToSlack&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">webhookUrl&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;전송에 성공했습니다!&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">cerr&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;전송에 실패했습니다.&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-json-메시지-커스터마이즈">🧪 JSON 메시지 커스터마이즈
&lt;/h2>&lt;p>Slack의 Webhook에서는 다음과 같은 파라미터를 포함할 수 있습니다:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;알림 내용&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;username&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Bot 이름&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;icon_emoji&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;:rocket:&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;channel&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;#원하는 채널명&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-보충-사항">📌 보충 사항
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Content-Type&lt;/code>은 반드시 &lt;code>&amp;quot;application/json&amp;quot;&lt;/code>을 지정&lt;/li>
&lt;li>Webhook URL은 그대로 &lt;code>wstring&lt;/code>으로 전달(URL 인코딩 불필요)&lt;/li>
&lt;li>HTTPS 통신이므로 &lt;code>WINHTTP_FLAG_SECURE&lt;/code>를 잊지 마세요&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-부록-slack에서의-전송-확인-예시">🎉 부록: Slack에서의 전송 확인 예시
&lt;/h2>&lt;p>Slack에 이처럼 표시됩니다:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[C++ Bot]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Hello from C++ :rocket:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-요약">✍️ 요약
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>항목&lt;/th>
&lt;th>내용&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>전송 방식&lt;/td>
&lt;td>Webhook (Incoming Webhooks)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>통신 라이브러리&lt;/td>
&lt;td>WinHTTP&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>데이터 형식&lt;/td>
&lt;td>JSON&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>사용 가능 파라미터&lt;/td>
&lt;td>text, username, icon_emoji, channel 등&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>C++로 Slack 연동이라니&amp;hellip; 라고 생각했던 당신도 오늘부터 알림 Bot을 연동할 수 있습니다!&lt;/p>
&lt;hr>
&lt;h2 id="-다음-예고">🚀 다음 예고?
&lt;/h2>&lt;p>만약 관심이 있다면 다음에는:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>파일 첨부&lt;/strong>&lt;/li>
&lt;li>&lt;strong>버튼이 포함된 UI&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Slack App + OAuth2에 의한 유연한 API 조작&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>등 한 걸음 더 나아간 Slack 연동도 소개할 수 있습니다!&lt;/p></description></item><item><title>'마켓 인과 프로덕트 아웃'</title><link>http://kenji.blog/ko/p/%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E3%82%A4%E3%83%B3%E3%81%A8%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88/</link><pubDate>Tue, 15 Jul 2025 20:18:22 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E3%82%A4%E3%83%B3%E3%81%A8%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E3%82%A4%E3%83%B3%E3%81%A8%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88/img.png" alt="Featured image of post '마켓 인과 프로덕트 아웃'" />&lt;h1 id="마켓-인과-프로덕트-아웃">마켓 인과 프로덕트 아웃
&lt;/h1>&lt;p>안녕하세요, kenji입니다.&lt;/p>
&lt;p>가끔 비즈니스 서적이나 기획서 등에서,&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;저희는 마켓 인 전략입니다&amp;rdquo;
&amp;ldquo;이것은 프로덕트 아웃 형이네요&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>같은 말을 하는 것을 보게 되는데요&amp;hellip;&amp;hellip;.&lt;/p>
&lt;p>&lt;strong>아니, 마켓 인? 프로덕트 아웃? 어느 쪽이 더 대단한 건데???&lt;/strong>&lt;/p>
&lt;p>라고 생각하게 되지 않나요?&lt;/p>
&lt;p>그래서 이번에는 이 &amp;lsquo;마켓 인&amp;rsquo;과 &amp;lsquo;프로덕트 아웃&amp;rsquo;이라는 것에 대해,
최대한 알기 쉽게 풀어서, 조금은 신랄하게 살펴보려고 합니다.&lt;/p>
&lt;hr>
&lt;h2 id="간단히-말하자면">간단히 말하자면…
&lt;/h2>&lt;ul>
&lt;li>&lt;strong>마켓 인&lt;/strong>: 시장(마켓)의 소리를 듣고, 그에 맞춰 상품을 만든다&lt;/li>
&lt;li>&lt;strong>프로덕트 아웃&lt;/strong>: 자신들이 좋다고 생각하는 것(프로덕트)을 만들어, 세상에 내놓는다&lt;/li>
&lt;/ul>
&lt;p>이게 전부입니다. 심플하죠.&lt;/p>
&lt;hr>
&lt;h2 id="예를-들어-라면-가게로-치면">예를 들어 라면 가게로 치면…
&lt;/h2>&lt;p>마켓 인 방식의 라면 가게는,
&amp;ldquo;요즘은 이에케 라면이 유행이네. 좋아, 지방과 마늘 듬뿍 가자!&amp;ldquo;라는 느낌.&lt;/p>
&lt;p>프로덕트 아웃 방식의 라면 가게는,
&amp;ldquo;내가 만든 이 두유 바질 소금 라면, 진짜 최고니까 먹어봐&amp;quot;라는 느낌입니다.&lt;/p>
&lt;hr>
&lt;h2 id="어느-쪽이-정답이냐면-둘-다-정답입니다">어느 쪽이 정답이냐면… 둘 다 정답입니다
&lt;/h2>&lt;p>마켓 인은 고객의 니즈에 맞추기 때문에 &amp;lsquo;팔릴 확률이 높지만&amp;rsquo;,
특출난 아이디어나 브레이크스루(돌파구)는 태어나기 어렵습니다.&lt;/p>
&lt;p>프로덕트 아웃은 &amp;lsquo;자신들이 믿는 정의를 형태화&amp;rsquo;하기 때문에 뾰족하고 매력적이지만,
어긋나면 아무에게도 울림을 주지 못합니다.&lt;/p>
&lt;hr>
&lt;h2 id="iphone은-프로덕트-아웃-느낌">iPhone은 프로덕트 아웃 느낌
&lt;/h2>&lt;p>&amp;ldquo;스마트폰 따윈 필요 없어&amp;quot;라고 말하던 시대에, iPhone을 출시한 Apple.&lt;/p>
&lt;p>이것은 그야말로, &lt;strong>완전한 프로덕트 아웃&lt;/strong> 의 성공 사례입니다.&lt;/p>
&lt;p>사용자의 목소리를 들었다면, &amp;ldquo;키보드 없는 휴대폰? 무리무리&amp;quot;라는 말을 듣고 끝났을 겁니다.&lt;/p>
&lt;hr>
&lt;h2 id="하지만-프로덕트-아웃은-자기만족이-되기-쉽다">하지만 프로덕트 아웃은 &amp;lsquo;자기만족&amp;rsquo;이 되기 쉽다
&lt;/h2>&lt;p>가끔, &amp;ldquo;우리는 프로덕트 아웃 형이니까&amp;quot;라고 말하는 기업이나 사람이 있는데,&lt;/p>
&lt;blockquote>
&lt;p>아니, 그건 그냥 사용자 무시 아닌가?&lt;/p>
&lt;/blockquote>
&lt;p>라고 생각할 때도 있습니다.&lt;/p>
&lt;p>&amp;ldquo;만들고 싶어서 만들었다. 하지만 팔리지 않았다&amp;quot;는,
프로덕트 아웃이 아니라 &amp;lsquo;독단적 아웃&amp;rsquo;인 거죠.&lt;/p>
&lt;hr>
&lt;h2 id="마켓-인에도-함정은-있다">마켓 인에도 함정은 있다
&lt;/h2>&lt;p>한편으로, 마켓 인 역시 만능은 아니어서.&lt;/p>
&lt;p>&amp;ldquo;사용자가 원하니까 다 할게요!&amp;ldquo;라고 말하다 보면,
프로덕트의 중심이 흔들려, 결국 아무에게도 꽂히지 않는 경우도 있습니다.&lt;/p>
&lt;p>점점 기능을 추가하다가, 정신 차려보니 카오스 같은 툴이 되어 있는, 그런 거 말이죠.&lt;/p>
&lt;hr>
&lt;h2 id="정말-대단한-것은-둘-다-하는-사람">정말 대단한 것은, &amp;lsquo;둘 다 하는 사람&amp;rsquo;
&lt;/h2>&lt;p>대단한 프로덕트는, &amp;lsquo;사용자가 정말로 원했지만, 언어화하지 못했던 것&amp;rsquo;을,
딱 짚어서 제시해 주거든요.&lt;/p>
&lt;p>즉, &amp;lsquo;프로덕트 아웃의 발상으로, 마켓 인적인 공감을 얻는다&amp;rsquo;는 것.&lt;/p>
&lt;p>이거, 쉽게 말하지만 엄청나게 어렵습니다.
하지만, 이것이 가능해지면 단숨에 &amp;lsquo;신급 프로덕트&amp;rsquo;가 됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="결론-말보다-사용자의-반응이-전부">결론: 말보다, 사용자의 반응이 전부
&lt;/h2>&lt;p>마켓 인인가, 프로덕트 아웃인가.
어느 쪽이 옳은지 같은 건, 별로 의미 없는 질문이라.&lt;/p>
&lt;p>&lt;strong>&amp;ldquo;사용자의 마음에 제대로 닿고 있는가?&amp;ldquo;가 전부&lt;/strong> 라고 생각합니다.&lt;/p>
&lt;p>&amp;ldquo;어느 쪽에 가까운 전략으로 하고 있습니다&amp;rdquo; 같은 건,
나중에 마케팅 자료에 쓸 수 있으면 그걸로 족하지 않나, 정도로 생각하고 있습니다.&lt;/p>
&lt;hr>
&lt;p>그래서, 마켓 인과 프로덕트 아웃 이야기였습니다!&lt;/p>
&lt;p>이상한 가로쓰기 말(외래어)에 현혹되지 않고, &amp;ldquo;결국 어떻게 하면 사람들이 기뻐할까?&amp;ldquo;를 생각해 나가는 것이,
가장 건전하지 않나 싶습니다.&lt;/p>
&lt;p>그럼 이만～.&lt;/p></description></item><item><title>'콜라츠 추측'</title><link>http://kenji.blog/ko/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/</link><pubDate>Tue, 15 Jul 2025 18:03:03 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/img.png" alt="Featured image of post '콜라츠 추측'" />&lt;h1 id="어떤-숫자든-마지막엔-1이-된다는-게-진짜야--콜라츠-추측을-즐겨보자">&amp;ldquo;어떤 숫자든 마지막엔 1이 된다&amp;quot;는 게 진짜야? ── 콜라츠 추측을 즐겨보자
&lt;/h1>&lt;p>안녕하세요! kenji입니다.&lt;/p>
&lt;p>갑작스럽지만, &amp;ldquo;어떤 숫자든 최종적으로 1이 되는 규칙&amp;quot;이라고 들으면,
조금 신기하지 않나요?&lt;/p>
&lt;blockquote>
&lt;p>예를 들어, 19나, 87이나, 1000000이라도.
적당한 규칙에 따라 숫자를 다루다 보면, 왠지 마지막은 &amp;ldquo;1&amp;quot;로 수렴합니다.&lt;/p>
&lt;/blockquote>
&lt;p>그런 꿈 같은 이야기가, &lt;strong>콜라츠 추측(Collatz Conjecture)&lt;/strong> 입니다.&lt;/p>
&lt;hr>
&lt;h2 id="애초에-콜라츠-추측이란-게-뭐야">애초에, 콜라츠 추측이란 게 뭐야?
&lt;/h2>&lt;p>먼저 규칙을 소개할게요.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>시작: 임의의 &lt;strong>양의 정수&lt;/strong> 를 선택합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>조작:&lt;/p>
&lt;ul>
&lt;li>짝수라면 → 반으로 나눈다 (n → n / 2)&lt;/li>
&lt;li>홀수라면 → 3을 곱하고 1을 더한다 (n → 3n + 1)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>이것을 계～속 반복하면, &lt;strong>어떤 숫자도 최종적으로는 1에 도달한다&lt;/strong> 는 추측인 거죠.&lt;/p>
&lt;p>예를 들어, &lt;code>6&lt;/code>부터 시작하면:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>제대로 &amp;ldquo;1&amp;quot;이 되었습니다. 어서 오세요!&lt;/p>
&lt;hr>
&lt;h2 id="코드로-해보자-python으로-콜라츠">코드로 해보자: Python으로 콜라츠
&lt;/h2>&lt;p>자, 이럴 때는 코드로 시험해보는 게 빠릅니다!
Python으로 &amp;ldquo;콜라츠 수열&amp;quot;을 출력해봅시다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">collatz&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">steps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">steps&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">steps&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 예: 19부터 시작해보기&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">collatz&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">19&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>실행하면:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>멋지게 1에 도달합니다.
꽤 우회하는데도, 마지막은 확실하게 골인!&lt;/p>
&lt;p>참고로 29부터 시작해도, 마찬가지로 1에 도달합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">pythonprint(collatz(29))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>실행하면&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>무려, 111스텝이나 걸립니다!&lt;/p>
&lt;p>게다가, 중간에 9000 이상까지 부풀어 오르는 장면도.
엄청나게 우회하고 나서 골인하는 패턴이네요.&lt;/p>
&lt;hr>
&lt;h2 id="그래서-결국-뭐가-대단한-거야">그래서, 결국 뭐가 대단한 거야?
&lt;/h2>&lt;p>이 추측의 무엇이 대단하냐면,&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>증명되지 않았는데, 어떤 수로 해도 1이 되는 것 같다&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>라는 점입니다.&lt;/p>
&lt;p>어? 그럼, 1조나, 1경(경)은&amp;hellip;?&lt;/p>
&lt;p>라고 생각하신 분, 예리합니다.
실제로 컴퓨터를 사용해서 &amp;ldquo;2의 68승&amp;rdquo; 정도까지는 확인되었고,
&lt;strong>모두 1에 도달&lt;/strong> 하고 있습니다. 믿을 수 없어&amp;hellip;&lt;/p>
&lt;p>하지만, &lt;strong>&amp;ldquo;전부 그렇게 된다&amp;quot;고 이론적으로 증명된 것은 아닙니다&lt;/strong>.
이것이 수학 세계에서 말하는 &amp;ldquo;미해결 문제&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="콜라츠-씨가-누구야">콜라츠 씨가 누구야?
&lt;/h2>&lt;p>자, 여기까지 읽고 &amp;ldquo;애초에 콜라츠가 누구야?&amp;ldquo;라고 생각하시죠.
제대로 소개할게요!&lt;/p>
&lt;ul>
&lt;li>이름: &lt;strong>로타르 콜라츠 (Lothar Collatz)&lt;/strong>&lt;/li>
&lt;li>국적: 독일&lt;/li>
&lt;li>생년: 1910년 ～ 1990년&lt;/li>
&lt;li>직함: 수학자 (함수 해석이나 정수론 분야에서 활약)&lt;/li>
&lt;/ul>
&lt;p>1937년에 이 추측을 제안했고,
그 후, 80년 이상에 걸쳐 &lt;strong>아무도 증명도 반증도 하지 못하고 있습니다&lt;/strong>.&lt;/p>
&lt;p>참고로, 이 문제는 너무 심플한데 심오해서,
그 폴 에어디시(초유명 수학자)조차 이렇게 말했다고 하죠.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;수학은 아직 콜라츠를 다루기에 미숙하다&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>즉, 인류의 수학이 이 수수께끼를 아직 따라잡지 못했다는 설&amp;hellip;&lt;/p>
&lt;hr>
&lt;h2 id="어려운-수식은-필요-없다">&amp;ldquo;어려운 수식&amp;quot;은 필요 없다
&lt;/h2>&lt;p>콜라츠 추측의 좋은 점은, &lt;strong>누구나 즐길 수 있다&lt;/strong> 는 것입니다.&lt;/p>
&lt;p>종이와 펜이 있으면 할 수 있습니다.
Python으로 코드를 작성하면, 자동으로 시험할 수 있습니다.
그러면서도, &lt;strong>최첨단의 수학자들이 진심으로 도전하고 있다&lt;/strong>.&lt;/p>
&lt;p>왠지, 두근두근하지 않나요?&lt;/p>
&lt;hr>
&lt;h2 id="덤-한-번에-시험하는-코드">덤: 한 번에 시험하는 코드
&lt;/h2>&lt;p>여러 숫자를 모아서 시험하는 코드도 실어둘게요.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">21&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">steps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">collatz&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">steps&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">(스텝 수: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">steps&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이것은 &amp;ldquo;1～20&amp;quot;의 콜라츠 수열을 한 번에 출력해 줍니다.&lt;/p>
&lt;hr>
&lt;h2 id="결론-이-세계-역시-신기하다">결론: 이 세계, 역시 신기하다
&lt;/h2>&lt;p>이런 이유로, 콜라츠 추측.&lt;/p>
&lt;ul>
&lt;li>엄청 심플한데&lt;/li>
&lt;li>아무도 증명하지 못해서&lt;/li>
&lt;li>수학계에서는 큰 문제&lt;/li>
&lt;/ul>
&lt;p>라는, 불가사의 덩어리 같은 존재였습니다.&lt;/p>
&lt;p>프로그래밍 초보자라도 시도해볼 수 있으니, 꼭 즐겨보세요～!&lt;/p>
&lt;hr>
&lt;h2 id="추천-링크-관심-있는-분용">추천 링크 (관심 있는 분용)
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://ko.wikipedia.org/wiki/%ec%bd%9c%eb%9d%bc%ec%b8%a0_%ec%b6%94%ec%b8%a1" target="_blank" rel="noopener"
>Wikipedia: 콜라츠 추측&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://arxiv.org/abs/1909.03562" target="_blank" rel="noopener"
>Terence Tao 논문 (영문)&lt;/a>&lt;/li>
&lt;li>Python의 시각화 버전을 만들어 보는 것도 재밌어요! (요청이 있으면 만들겠습니다)&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>더 이런 &amp;ldquo;신기한 수학 × 프로그래밍&amp;rdquo; 소재를 알고 싶은 분은,
편하게 &amp;ldquo;더 알려줘&amp;quot;라고 요청해 보세요.
조만간, 리만 가설이나 소수 이야기 등, 여러 가지 소개할게요!&lt;/p>
&lt;hr>
&lt;p>📮끝!&lt;/p>
&lt;hr></description></item><item><title>'C++에서 Microsoft Teams로 메시지를 게시하는 방법(WinHTTP + Graph API)'</title><link>http://kenji.blog/ko/p/c-%E3%81%8B%E3%82%89-microsoft-teams-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95winhttp--graph-api/</link><pubDate>Mon, 14 Jul 2025 23:40:15 +0900</pubDate><guid>http://kenji.blog/ko/p/c-%E3%81%8B%E3%82%89-microsoft-teams-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95winhttp--graph-api/</guid><description>&lt;img src="http://kenji.blog/p/c-%E3%81%8B%E3%82%89-microsoft-teams-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95winhttp--graph-api/img.png" alt="Featured image of post 'C++에서 Microsoft Teams로 메시지를 게시하는 방법(WinHTTP + Graph API)'" />&lt;h1 id="c에서-microsoft-teams로-메시지를-게시하는-방법winhttp--graph-api">C++에서 Microsoft Teams로 메시지를 게시하는 방법(WinHTTP + Graph API)
&lt;/h1>&lt;p>Microsoft Teams 채팅에 자동으로 게시하고 싶을 때――&lt;br>
그럴 때 사용할 수 있는 것이 &lt;strong>Microsoft Graph API&lt;/strong> 입니다.&lt;br>
이 문서에서는 &lt;strong>WinHTTP를 사용한 C++ 코드 예제 ** 와 ** 필요한 API 인증 절차&lt;/strong> 를 단계별로 소개합니다.&lt;/p>
&lt;hr>
&lt;h2 id="-필요한-준비-microsoft-graph-api-인증-설정">🔧 필요한 준비 (Microsoft Graph API 인증 설정)
&lt;/h2>&lt;h3 id="1-azure-포털에서-앱-등록">1. Azure 포털에서 앱 등록
&lt;/h3>&lt;p>먼저, Microsoft Graph API를 사용하려면 Azure에 앱을 등록해야 합니다.&lt;/p>
&lt;ol>
&lt;li>&lt;a class="link" href="https://portal.azure.com" target="_blank" rel="noopener"
>Azure Portal&lt;/a>에 접속&lt;/li>
&lt;li>&lt;strong>「Microsoft Entra ID」&lt;/strong> &amp;gt; &lt;strong>「＋추가」&lt;/strong> &amp;gt; &lt;strong>「앱 등록」&lt;/strong> &amp;gt; &lt;strong>「새 등록」&lt;/strong>&lt;/li>
&lt;li>원하는 앱 이름을 입력하고 「등록」&lt;/li>
&lt;/ol>
&lt;h3 id="2-api-권한-추가">2. API 권한 추가
&lt;/h3>&lt;ol>
&lt;li>왼쪽 메뉴의 「API 권한」으로 이동&lt;/li>
&lt;li>&lt;strong>「Microsoft Graph」&lt;/strong> &amp;gt; &lt;strong>「권한 추가」&lt;/strong> 에서 아래 스코프를 검색하여 &lt;strong>「권한 업데이트」&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>Chat.ReadWrite&lt;/li>
&lt;li>User.Read&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>※ 채널에 게시하고 싶은 경우 &lt;code>ChannelMessage.Send&lt;/code>도 필요&lt;/p>
&lt;/blockquote>
&lt;h3 id="3-클라이언트-id와-테넌트-id-메모">3. 클라이언트 ID와 테넌트 ID 메모
&lt;/h3>&lt;p>「개요」 탭에 표시되는 다음 두 가지를 기록해 둡니다:&lt;/p>
&lt;ul>
&lt;li>애플리케이션(클라이언트) ID&lt;/li>
&lt;li>디렉터리(테넌트) ID&lt;/li>
&lt;/ul>
&lt;h3 id="4-클라이언트-시크릿-생성">4. 클라이언트 시크릿 생성
&lt;/h3>&lt;ol>
&lt;li>「인증서 및 암호」 탭으로 이동&lt;/li>
&lt;li>「새 클라이언트 암호」 &amp;gt; 만료 기한을 설정하고 「추가」&lt;/li>
&lt;li>표시된 값(시크릿)을 &lt;strong>그 자리에서 반드시 기록&lt;/strong>&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="-액세스-토큰-획득-oauth2">🔐 액세스 토큰 획득 (OAuth2)
&lt;/h2>&lt;p>획득에는 &lt;code>client_credentials&lt;/code> 플로우를 사용합니다.&lt;br>
curl로 아래 명령어를 실행하여 액세스 토큰을 획득합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -X POST ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> https://login.microsoftonline.com/&lt;span class="o">{&lt;/span>테넌트ID&lt;span class="o">}&lt;/span>/oauth2/v2.0/token ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -H &lt;span class="s2">&amp;#34;Content-Type: application/x-www-form-urlencoded&amp;#34;&lt;/span> ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -d &lt;span class="s2">&amp;#34;client_id={클라이언트ID}&amp;#34;&lt;/span> ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -d &lt;span class="s2">&amp;#34;scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&amp;#34;&lt;/span> ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -d &lt;span class="s2">&amp;#34;client_secret={클라이언트시크릿}&amp;#34;&lt;/span> ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -d &lt;span class="s2">&amp;#34;grant_type=client_credentials&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="응답-예시">응답 예시
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;token_type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;Bearer&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;expires_in&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">3599&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ext_expires_in&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">3599&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;access_token&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;eyJ0eXAiOiJKV1QiLCJub...（생략）&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이 access_token을 사용하여 Microsoft Graph API를 호출합니다.&lt;/p>
&lt;h2 id="-teams-채팅에-게시하는-c-샘플">💬 Teams 채팅에 게시하는 C++ 샘플
&lt;/h2>&lt;p>여기서는 WinHTTP를 사용하여 채팅에 게시하는 C++ 예제를 보여줍니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;windows.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;winhttp.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;string&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#pragma comment(lib, &amp;#34;winhttp.lib&amp;#34;)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">PostToTeamsChat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">accessToken&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">chatId&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hSession&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpOpen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;TeamsPoster/1.0&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_ACCESS_TYPE_DEFAULT_PROXY&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_NO_PROXY_NAME&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_NO_PROXY_BYPASS&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hConnect&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpConnect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hSession&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;graph.microsoft.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">INTERNET_DEFAULT_HTTPS_PORT&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">endpoint&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;/v1.0/chats/&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">chatId&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;/messages&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hRequest&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpOpenRequest&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hConnect&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;POST&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">endpoint&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_NO_REFERER&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_DEFAULT_ACCEPT_TYPES&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_FLAG_SECURE&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">jsonBody&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;{&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">body&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">: {&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">content&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">: &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">message&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">}}&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Authorization: Bearer &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">accessToken&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s">Content-Type: application/json&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">BOOL&lt;/span> &lt;span class="n">bResult&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpSendRequest&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">DWORD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1L&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">LPVOID&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">jsonBody&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">DWORD&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">jsonBody&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">wchar_t&lt;/span>&lt;span class="p">)),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">DWORD&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">jsonBody&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">wchar_t&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">bResult&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpReceiveResponse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DWORD&lt;/span> &lt;span class="n">dwSize&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpQueryDataAvailable&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">dwSize&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">dwSize&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">dwSize&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">wchar_t&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DWORD&lt;/span> &lt;span class="n">dwDownloaded&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpReadData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">dwSize&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">dwDownloaded&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Response: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">response&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hConnect&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hSession&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">access&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">chatId&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;19:&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Hello from C++!&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Enter your access token: &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">getline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcin&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">access&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Enter chat ID: &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">getline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcin&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">chatId&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PostToTeamsChat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">access&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">chatId&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="-채팅-id-획득-방법">🔍 채팅 ID 획득 방법
&lt;/h2>&lt;p>채팅 ID는 GET /v1.0/me/chats 에서 확인할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">curl -X GET ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> https://graph.microsoft.com/v1.0/me/chats ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -H &amp;#34;Authorization: Bearer {access_token}&amp;#34; ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -H &amp;#34;Content-Type: application/json&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="응답-예시-1">응답 예시
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;id&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;19:abc123xyz@thread.v2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;topic&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;chatType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;oneOnOne&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="-주의사항">📌 주의사항
&lt;/h2>&lt;ul>
&lt;li>이 샘플은 최소한의 구현입니다. 실제 환경에서는 다음을 고려하세요:
&lt;ul>
&lt;li>토큰 만료 처리&lt;/li>
&lt;li>HTTPS 인증서 검증&lt;/li>
&lt;li>오류 처리 강화&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>채널에 게시할 때는 teams/{team-id}/channels/{channel-id}/messages 를 사용합니다.&lt;/li>
&lt;li>첨부 파일 전송에는 멀티파트 처리나 Graph 드라이브 API가 필요합니다.&lt;/li>
&lt;/ul>
&lt;h2 id="요약">요약
&lt;/h2>&lt;h2 id="-요약">📎 요약
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>기능&lt;/th>
&lt;th>개요&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Graph API&lt;/td>
&lt;td>Teams와 통신하는 공식 API&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>앱 등록&lt;/td>
&lt;td>Azure에서 필요한 인증 절차&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>액세스 토큰&lt;/td>
&lt;td>OAuth2로 획득하여 요청에 사용&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>C++ 구현&lt;/td>
&lt;td>WinHTTP를 사용하여 Graph API 호출&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="-다음-단계">🚀 다음 단계
&lt;/h2>&lt;p>더 발전된 샘플로 다음 사항도 가능합니다:&lt;/p>
&lt;ul>
&lt;li>팀 채널 게시 (&lt;code>/teams/{team-id}/channels/...&lt;/code>)&lt;/li>
&lt;li>첨부 파일이 포함된 게시물&lt;/li>
&lt;li>봇 계정 및 사용자 계정 전환&lt;/li>
&lt;li>토큰 획득을 포함한 완전한 C++ 구현&lt;/li>
&lt;/ul>
&lt;p>원하시는 내용이 있다면 언제든지 댓글로 남겨주세요!&lt;/p></description></item><item><title>'입력 폼의 필수 마크에 대하여'</title><link>http://kenji.blog/ko/p/%E5%85%A5%E5%8A%9B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E5%BF%85%E9%A0%88%E3%83%9E%E3%83%BC%E3%82%AF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</link><pubDate>Mon, 14 Jul 2025 13:47:51 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%85%A5%E5%8A%9B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E5%BF%85%E9%A0%88%E3%83%9E%E3%83%BC%E3%82%AF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</guid><description>&lt;img src="http://kenji.blog/p/%E5%85%A5%E5%8A%9B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E5%BF%85%E9%A0%88%E3%83%9E%E3%83%BC%E3%82%AF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img.png" alt="Featured image of post '입력 폼의 필수 마크에 대하여'" />&lt;p>해외의 화면 UI(폼)에서의 「필수」 마크에 대해, UI 가이드라인 자료와 함께 정리했습니다.&lt;/p>
&lt;hr>
&lt;h2 id="-주요-필수-마크와-베스트-프랙티스">📌 주요 필수 마크와 베스트 프랙티스
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>애스터리스크 (*) 사용&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>일반적으로 가장 널리 보급되어 있으며, 필수 필드에 「*」를 붙입니다.&lt;/li>
&lt;li>단, *&lt;em>폼 앞부분에 「&lt;/em> 는 필수 항목입니다」 등의 설명이 필수**입니다 (&lt;a class="link" href="https://www.nngroup.com/articles/required-fields/?utm_source=chatgpt.com" title="Marking Required Fields in Forms - NN/g"
target="_blank" rel="noopener"
>Nielsen Norman Group&lt;/a>, &lt;a class="link" href="https://www.csun.edu/universal-design-center/web-accessibility-criteria-required-fields?utm_source=chatgpt.com" title="Web Accessibility Criteria - Required Fields - CSUN"
target="_blank" rel="noopener"
>캘리포니아 주립 대학교 노스리지&lt;/a>).&lt;/li>
&lt;li>색상을 사용하여 강조하는 예도 있습니다(빨간 글씨 등).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>레이블에 “Required” 나 “(required)” 명시&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>레이블 내에 문자로 「Required」를 붙임으로써 스크린 리더에도 명시할 수 있어, 접근성이 향상됩니다 (&lt;a class="link" href="https://www.deque.com/blog/anatomy-of-accessible-forms-required-form-fields/?utm_source=chatgpt.com" title="The Anatomy of Accessible Forms: Required Form Fields"
target="_blank" rel="noopener"
>Deque&lt;/a>).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>ARIA 속성이나 HTML5의 &lt;code>required&lt;/code> 속성 병용&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>시각적 표시와 더불어, &lt;code>aria-required=&amp;quot;true&amp;quot;&lt;/code>나 &lt;code>&amp;lt;input required&amp;gt;&lt;/code>를 사용하여 프로그래밍적으로도 필수임을 전달할 수 있습니다 (&lt;a class="link" href="https://www.deque.com/blog/anatomy-of-accessible-forms-required-form-fields/?utm_source=chatgpt.com" title="The Anatomy of Accessible Forms: Required Form Fields"
target="_blank" rel="noopener"
>Deque&lt;/a>).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>“(optional)”을 사용하여 선택 필드 명시&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>필수 필드 대신 선택 필드를 「(optional)」로 명시하는 방법도 있으며, 혼재하는 경우에 유효합니다.&lt;/li>
&lt;li>단, Nielsen-Norman은 「필수도 명시하는 편이 판단하기 쉽다」고 지적하고 있습니다 (&lt;a class="link" href="https://www.tpgi.com/doing-whats-required-indicating-mandatory-fields-in-an-accessible-way/?utm_source=chatgpt.com" title="Doing what&amp;#39;s required: Indicating mandatory fields in an accessible ..."
target="_blank" rel="noopener"
>TPGi&lt;/a>).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="-ui-가이드라인-자료-요약">✅ UI 가이드라인 자료 요약
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>제공처&lt;/th>
&lt;th>내용&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>NN/g: Marking Required Fields in Forms&lt;/strong>&lt;/td>
&lt;td>애스터리스크 + 설명문 조합이 권장되며, 선택 사항만 표시하는 것은 불친절하다는 평가 (&lt;a class="link" href="https://www.nngroup.com/articles/required-fields/?utm_source=chatgpt.com" title="Marking Required Fields in Forms - NN/g"
target="_blank" rel="noopener"
>Nielsen Norman Group&lt;/a>).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Deque (Anatomy of Accessible Forms)&lt;/strong>&lt;/td>
&lt;td>・레이블 내에 「Required」 문자열 또는 이미지를 병용.&lt;br>・색상만으로 나타내는 것은 불충분하다고 명언.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>W3C Techniques (H90)&lt;/strong>&lt;/td>
&lt;td>애스터리스크나 「(required)」를 레이블에 포함시키고, 폼 앞부분에 의미를 정의하는 예가 있음.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>TPGi (Doing what&amp;rsquo;s required)&lt;/strong>&lt;/td>
&lt;td>접근성을 고려하여 애스터리스크 + ARIA 속성 + 레이블 문자 삽입이 최적이라고 평가.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Contensis 폼 UX 가이드&lt;/strong>&lt;/td>
&lt;td>일관된 마크 지정(* 또는 (optional))이 중요하다고 간결하게 정리.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="-구현-시-추천-어프로치">✅ 구현 시 추천 어프로치
&lt;/h2>&lt;ul>
&lt;li>
&lt;p>&lt;strong>폼 앞부분&lt;/strong> 에 설명문 추가：&lt;/p>
&lt;blockquote>
&lt;p>Fields marked with * are required.
(또는 일괄적으로 &amp;ldquo;All fields are required&amp;rdquo;, 선택 항목이 있는 경우는 &amp;ldquo;unless marked optional&amp;rdquo;)&lt;/p>
&lt;/blockquote>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>레이블 부여&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>&lt;code>First Name *&lt;/code> 또는 &lt;code>Email (required)&lt;/code>와 같이 기술.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>ARIA 속성・HTML5 속성&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">label&lt;/span> &lt;span class="na">for&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;email&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>Email &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">abbr&lt;/span> &lt;span class="na">title&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;required&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>*&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">abbr&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">label&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">input&lt;/span> &lt;span class="na">id&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;email&amp;#34;&lt;/span> &lt;span class="na">required&lt;/span> &lt;span class="na">aria-required&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;true&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>색상에만 의존하지 않기&lt;/strong>：시각적 및 프로그래밍적 양쪽 모두에 대응.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-참고-링크-ui-가이드라인-자료">🔗 참고 링크 (UI 가이드라인 자료)
&lt;/h2>&lt;ul>
&lt;li>NN/g: &lt;em>Marking Required Fields in Forms&lt;/em> (&lt;a class="link" href="https://www.csun.edu/universal-design-center/web-accessibility-criteria-required-fields?utm_source=chatgpt.com" title="Web Accessibility Criteria - Required Fields - CSUN"
target="_blank" rel="noopener"
>캘리포니아 주립 대학교 노스리지&lt;/a>, &lt;a class="link" href="https://www.nngroup.com/articles/required-fields/?utm_source=chatgpt.com" title="Marking Required Fields in Forms - NN/g"
target="_blank" rel="noopener"
>Nielsen Norman Group&lt;/a>, &lt;a class="link" href="https://www.deque.com/blog/anatomy-of-accessible-forms-required-form-fields/?utm_source=chatgpt.com" title="The Anatomy of Accessible Forms: Required Form Fields"
target="_blank" rel="noopener"
>Deque&lt;/a>)&lt;/li>
&lt;li>Deque: &lt;em>Anatomy of Accessible Forms&lt;/em> (&lt;a class="link" href="https://www.deque.com/blog/anatomy-of-accessible-forms-required-form-fields/?utm_source=chatgpt.com" title="The Anatomy of Accessible Forms: Required Form Fields"
target="_blank" rel="noopener"
>Deque&lt;/a>)&lt;/li>
&lt;li>W3C Techniques: &lt;em>H90 Indicating required form controls&lt;/em> (&lt;a class="link" href="https://www.w3.org/TR/WCAG20-TECHS/H90.html?utm_source=chatgpt.com" title="H90: Indicating required form controls using label or legend - W3C"
target="_blank" rel="noopener"
>W3C&lt;/a>)&lt;/li>
&lt;li>TPGi: &lt;em>Indicating mandatory fields accessibly&lt;/em> (&lt;a class="link" href="https://www.tpgi.com/doing-whats-required-indicating-mandatory-fields-in-an-accessible-way/?utm_source=chatgpt.com" title="Doing what&amp;#39;s required: Indicating mandatory fields in an accessible ..."
target="_blank" rel="noopener"
>TPGi&lt;/a>)&lt;/li>
&lt;li>Contensis: &lt;em>UX Forms Guidelines&lt;/em> (&lt;a class="link" href="https://www.contensis.com/community/blog/ux-forms-guidelines?utm_source=chatgpt.com" title="Build better web forms: 15 UX guidelines that work - Contensis"
target="_blank" rel="noopener"
>Contensis&lt;/a>)&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>필요하시다면, 구체적인 HTML/CSS 코드 예시나 Sketch/Figma용 UI 컴포넌트 디자인 템플릿 등도 전달해 드릴 수 있습니다. 부담 없이 상담해 주세요!&lt;/p></description></item><item><title>'Gemini CLI를 Windows 환경에 설치하는 방법'</title><link>http://kenji.blog/ko/p/gemini-cli-%E3%82%92-windows-%E7%92%B0%E5%A2%83%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 13 Jul 2025 23:49:56 +0900</pubDate><guid>http://kenji.blog/ko/p/gemini-cli-%E3%82%92-windows-%E7%92%B0%E5%A2%83%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/gemini-cli-%E3%82%92-windows-%E7%92%B0%E5%A2%83%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'Gemini CLI를 Windows 환경에 설치하는 방법'" />&lt;h1 id="초보자용-windows에-gemini-cli를-설치하는-방법">【초보자용】 Windows에 Gemini CLI를 설치하는 방법
&lt;/h1>&lt;p>Google의 생성형 AI &amp;lsquo;Gemini&amp;rsquo;를 커맨드라인에서 사용할 수 있게 해주는 &amp;lsquo;Gemini CLI&amp;rsquo;.
이 글에서는 Windows 환경에 Gemini CLI를 설치하는 과정을 최대한 알기 쉽게 설명합니다.&lt;/p>
&lt;hr>
&lt;h2 id="1-사전-준비-nodejs-및-npm-설치">1. 사전 준비: Node.js 및 npm 설치
&lt;/h2>&lt;p>먼저, Gemini CLI는 &amp;lsquo;Node.js&amp;rsquo;라는 환경에서 작동하므로 다음 항목들을 설치해야 합니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Node.js&lt;/strong>&lt;/li>
&lt;li>&lt;strong>npm (Node.js에 포함된 패키지 관리 도구)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>npx (npm에 포함된 명령어 실행 도구)&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>아래의 공식 웹사이트에서 Windows용 Node.js를 다운로드하세요 (LTS 버전을 권장합니다):&lt;/p>
&lt;p>👉 &lt;a class="link" href="https://nodejs.org/" target="_blank" rel="noopener"
>Node.js 공식 웹사이트&lt;/a>&lt;/p>
&lt;p>설치가 완료되면 다음 명령어로 제대로 설치되었는지 확인해 봅시다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">node&lt;/span> &lt;span class="n">-v&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">npm&lt;/span> &lt;span class="n">-v&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="2-powershell-실행하기">2. PowerShell 실행하기
&lt;/h2>&lt;p>Windows에서 Gemini CLI를 사용하려면 PowerShell을 이용해 조작하는 것이 일반적입니다.
시작 메뉴에서 &amp;lsquo;PowerShell&amp;rsquo;을 입력하여 실행하세요.&lt;/p>
&lt;hr>
&lt;h2 id="3-gemini-cli-설치하기">3. Gemini CLI 설치하기
&lt;/h2>&lt;p>아래 명령어를 PowerShell에 복사하여 붙여넣고 실행합니다:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">npx @google/gemini-cli
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이 명령어는 Google이 공개한 Gemini CLI 패키지를 임시로 실행하기 위한 것입니다.
필요에 따라 초기 설정이나 로그인이 요구될 수도 있습니다.&lt;/p>
&lt;p>※ 처음에는 몇 분 정도 걸릴 수 있습니다. 오류가 발생할 경우 Node.js나 네트워크 환경을 다시 확인해 보세요.&lt;/p>
&lt;hr>
&lt;h2 id="4-설치-완료-다음으로-할-일">4. 설치 완료! 다음으로 할 일
&lt;/h2>&lt;p>이것으로 Windows에 Gemini CLI가 설치되었습니다.
앞으로는 커맨드라인에서 Gemini를 사용하여 텍스트 생성이나 코드 완성 등 다양한 작업이 가능해집니다.&lt;/p>
&lt;p>공식 문서나 도움말을 확인하고 싶다면 아래와 같은 명령어도 활용할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">npx @google/gemini-cli --help
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="마무리">마무리
&lt;/h2>&lt;p>Windows에 Gemini CLI를 도입하는 과정을 복습해 보겠습니다.&lt;/p>
&lt;ol>
&lt;li>Node.js 및 npm 설치&lt;/li>
&lt;li>PowerShell 실행&lt;/li>
&lt;li>&lt;code>npx @google/gemini-cli&lt;/code> 실행&lt;/li>
&lt;/ol>
&lt;p>이것으로 준비 완료입니다!
생성형 AI를 로컬에서 사용하고 싶은 분은 이 과정을 참고하여 도전해 보세요.&lt;/p></description></item><item><title>Microsoft MVP（2025-2026）를 재수상했습니다</title><link>http://kenji.blog/ko/p/microsoft-mvp2025-2026%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</link><pubDate>Sun, 13 Jul 2025 22:01:15 +0900</pubDate><guid>http://kenji.blog/ko/p/microsoft-mvp2025-2026%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</guid><description>&lt;img src="http://kenji.blog/p/microsoft-mvp2025-2026%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img.png" alt="Featured image of post Microsoft MVP（2025-2026）를 재수상했습니다" />&lt;h1 id="microsoft-mvp2025-2026를-재수상했습니다">Microsoft MVP（2025-2026）를 재수상했습니다!
&lt;/h1>&lt;p>안녕하세요, kenji입니다.&lt;/p>
&lt;p>보고드립니다. 올해도 &lt;strong>Microsoft MVP（Most Valuable Professional）&lt;/strong> 를 수상하게 되었습니다. 이번으로 ** 9번째** 수상이 됩니다.&lt;/p>
&lt;p>항상 응원해주시는 여러분, 진심으로 감사합니다.&lt;/p>
&lt;hr>
&lt;h2 id="microsoft-mvp란-무엇인가요">Microsoft MVP란 무엇인가요?
&lt;/h2>&lt;p>「MVP」라고 들으면 스포츠의 최우수 선수를 떠올리는 분들도 많을지 모르겠지만, 여기서 말하는 MVP는 &lt;strong>Microsoft의 기술 커뮤니티에 기여한 사람에게 주어지는 칭호&lt;/strong> 입니다.&lt;/p>
&lt;p>구체적으로는,&lt;/p>
&lt;ul>
&lt;li>기술 블로그나 SNS를 통한 정보 발신&lt;/li>
&lt;li>GitHub에 샘플 코드 공개&lt;/li>
&lt;li>스터디나 컨퍼런스에서의 발표&lt;/li>
&lt;li>Q&amp;amp;A 사이트에서의 답변&lt;/li>
&lt;li>해외 개발자와의 기술 교류 및 콜라보레이션&lt;/li>
&lt;li>기술자들이 연결되는 커뮤니티 참여 및 게시&lt;/li>
&lt;/ul>
&lt;p>등, 「자신의 지식과 경험을 누군가를 위해 공유하는」 활동이 평가되는 제도입니다.&lt;/p>
&lt;p>수상자는 전 세계에 있지만, 매년 선정되는 인원은 한정되어 있고, 재수상 역시 결코 쉽지 않습니다. 그렇기 때문에 이렇게 인정받을 수 있었던 것은 정말 영광스러운 일입니다.&lt;/p>
&lt;hr>
&lt;h2 id="지난-1년간-집중했던-일">지난 1년간 집중했던 일
&lt;/h2>&lt;p>올해는 &lt;strong>기술의 「이해하기 쉬움」과 「접근성」&lt;/strong> 을 의식한 발신에 힘을 쏟았습니다.&lt;/p>
&lt;ul>
&lt;li>GitHub를 통한 실용적인 샘플 코드 공개&lt;/li>
&lt;li>스터디·컨퍼런스 발표 (국내외 불문)&lt;/li>
&lt;li>기술 블로그나 SNS를 통한 정기적인 정보 발신&lt;/li>
&lt;li>Q&amp;amp;A 사이트에서의 지속적인 답변 활동&lt;/li>
&lt;li>기술자 커뮤니티 사이트에서의 지식 공유&lt;/li>
&lt;li>해외 엔지니어와의 교류 및 공동 검증&lt;/li>
&lt;/ul>
&lt;p>그중에서도 GitHub에 코드를 공개한 것은 &amp;ldquo;같은 문제로 고민했는데 도움이 되었습니다!&amp;ldquo;라는 피드백을 받기도 해서, 제 노력이 다른 분들의 개발에 도움이 되고 있다는 것을 실감할 수 있어서 인상 깊었습니다.&lt;/p>
&lt;p>또한, 이벤트 발표에서는 &amp;ldquo;초보자도 이해하기 쉬웠다&amp;quot;는 피드백을 받기도 해서, &amp;ldquo;전달되는 기술 해설이란 무엇인가?&amp;ldquo;를 생각해보는 좋은 계기가 되었습니다.&lt;/p>
&lt;hr>
&lt;h2 id="내년을-향해">내년을 향해
&lt;/h2>&lt;p>기술의 발전은 정말 빠르고, 쫓아가는 것만으로도 벅찹니다. 그럼에도 제가 직접 시도해보고 얻은 실질적인 경험이나 헤맸던 부분 등, &lt;strong>&amp;ldquo;1차 정보&amp;quot;로서의 리얼한 지식&lt;/strong> 을 전달하는 것에는 큰 가치가 있다고 생각합니다.&lt;/p>
&lt;p>내년에는 &lt;strong>동영상이나 도해 등을 도입한 「시각적으로 이해하기 쉬운 기술 콘텐츠」&lt;/strong> 발신에도 도전해보고 싶습니다. 누군가의 &amp;ldquo;막혔다!&amp;ldquo;를 조금이라도 해소할 수 있는 아웃풋을 늘려가고 싶습니다.&lt;/p>
&lt;hr>
&lt;h2 id="마지막으로">마지막으로
&lt;/h2>&lt;p>MVP라는 타이틀은 어디까지나 통과점 중 하나입니다.&lt;/p>
&lt;p>앞으로도 무리하지 않고, 제 페이스대로.
하지만 분명 누군가에게 도움이 될 수 있도록.&lt;/p>
&lt;p>&amp;ldquo;검색하다가 도움을 받았어요&amp;rdquo;
&amp;ldquo;이 샘플 작동했어요!&amp;rdquo;
&amp;ldquo;이 이야기, 이해하기 쉬웠어요&amp;rdquo;&lt;/p>
&lt;p>그런 말을 들을 수 있는 기술자로 계속 남고 싶습니다.&lt;/p>
&lt;p>앞으로도 잘 부탁드립니다.&lt;/p>
&lt;ul>
&lt;li>GitHub: &lt;a class="link" href="https://github.com/kenjinote" target="_blank" rel="noopener"
>https://github.com/kenjinote&lt;/a>&lt;/li>
&lt;li>기술 블로그: &lt;a class="link" href="https://hack.jp" target="_blank" rel="noopener"
>https://hack.jp&lt;/a>&lt;/li>
&lt;li>X: &lt;a class="link" href="https://twitter.com/kenjinote" target="_blank" rel="noopener"
>https://twitter.com/kenjinote&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Win32API + C++로 프로그램을 만드는 장점과 단점</title><link>http://kenji.blog/ko/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/</link><pubDate>Sat, 12 Jul 2025 12:30:35 +0900</pubDate><guid>http://kenji.blog/ko/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/</guid><description>&lt;img src="http://kenji.blog/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/img_1.png" alt="Featured image of post Win32API + C++로 프로그램을 만드는 장점과 단점" />&lt;h1 id="win32api--c로-개발하는-매력과-과제">Win32API + C++로 개발하는 매력과 과제
&lt;/h1>&lt;p>Windows 앱 개발을 끝까지 파고들고 싶은 사람에게, &lt;strong>Win32API + C++&lt;/strong> 은 여전히 강력한 선택지입니다.
OS와 가장 가까운 거리에서 상호 작용할 수 있는 이 조합은 고속성과 유연성을 겸비하고 있습니다.&lt;/p>
&lt;p>반면에 현대의 개발 스타일과는 크게 다르기 때문에 습득에는 각오도 필요합니다.&lt;/p>
&lt;p>이 페이지에서는 &lt;strong>현직 Windows 앱 개발자의 관점&lt;/strong> 에서 그 장점과 단점을 알기 쉽게 해설합니다.&lt;/p>
&lt;hr>
&lt;h2 id="장점">장점
&lt;/h2>&lt;h3 id="초고속-네이티브-실행">초고속 네이티브 실행
&lt;/h3>&lt;p>C++와 Win32API는 OS에 가장 가까운 레이어에서 동작하기 때문에 불필요한 오버헤드가 거의 없습니다.
CPU나 메모리 사용 효율이 매우 높아 &lt;strong>압도적인 실행 속도&lt;/strong> 를 자랑합니다.&lt;/p>
&lt;h3 id="높은-유연성과-자유도">높은 유연성과 자유도
&lt;/h3>&lt;p>창 제어, 비동기 처리, COM 연동, 프로세스 관리 등 앱의 모든 동작을 &lt;strong>스스로 세밀하게 제어&lt;/strong> 할 수 있습니다.
목적에 특화된 도구나 자작 독자 프레임워크 등도 구축 가능합니다.&lt;/p>
&lt;h3 id="런타임이-필요-없어-배포하기-쉬움">런타임이 필요 없어 배포하기 쉬움
&lt;/h3>&lt;p>.NET이나 Java와 같은 외부 런타임이 필요하지 않으므로 &lt;strong>실행 파일 1개만으로 배포 가능&lt;/strong> 합니다.
재배포 시 트러블이 잘 일어나지 않아 인스톨러 없이도 동작시키기 쉬운 것이 매력입니다.&lt;/p>
&lt;h3 id="가벼운-앱을-만들-수-있음">가벼운 앱을 만들 수 있음
&lt;/h3>&lt;p>필요 최소한의 구성으로 끝나기 때문에 &lt;strong>메모리 풋프린트가 매우 작다&lt;/strong> 는 것이 특징입니다.
사양이 낮은 PC나 가상 머신 환경에서도 쾌적하게 동작합니다.&lt;/p>
&lt;h3 id="os-수준의-고도화된-제어가-가능">OS 수준의 고도화된 제어가 가능
&lt;/h3>&lt;p>마우스 및 키보드의 글로벌 후킹, 윈도우 스타일 미세 조정, 시스템 메뉴 조작 등
&lt;strong>일반적인 언어나 라이브러리로는 어려운 제어&lt;/strong> 도 실현할 수 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="단점">단점
&lt;/h2>&lt;h3 id="개발-효율이-낮음">개발 효율이 낮음
&lt;/h3>&lt;p>GUI 구축도 완전히 코드로 수행해야 하며, &lt;strong>버튼 하나 만드는 데 수십 줄의 코드&lt;/strong> 가 필요한 경우도 있습니다.
설계 변경 시 수정도 번거로워 UI 프레임워크를 사용한 개발에 비해 생산성은 낮은 편입니다.&lt;/p>
&lt;h3 id="유지-보수성이-떨어지기-쉬움">유지 보수성이 떨어지기 쉬움
&lt;/h3>&lt;p>메시지 루프나 윈도우 프로시저 등 &lt;strong>특수한 구조의 코드&lt;/strong> 가 많아 가독성이나 재사용성에 어려움이 있습니다.
팀 개발이나 장기 유지 보수에는 적합하지 않은 측면도 있습니다.&lt;/p>
&lt;h3 id="모던-ui-대응이-번거로움">모던 UI 대응이 번거로움
&lt;/h3>&lt;p>고DPI 대응, 터치 인터페이스, 접근성, 다크 모드 등 &lt;strong>최근 요구되는 UX 대응이 어렵습니다&lt;/strong>.
하나하나 수작업으로 대응해야 하므로 수고가 듭니다.&lt;/p>
&lt;h3 id="크로스-플랫폼-미지원">크로스 플랫폼 미지원
&lt;/h3>&lt;p>완전히 Windows 전용 API이기 때문에 &lt;strong>macOS나 Linux로는 이식 불가&lt;/strong> 합니다.
멀티 플랫폼 전개를 가정할 경우 다른 기술을 선택해야 합니다.&lt;/p>
&lt;h3 id="학습-비용이-매우-높음">학습 비용이 매우 높음
&lt;/h3>&lt;p>핸들, GDI, COM, OLE 등 &lt;strong>현대에는 잘 사용되지 않는 개념이나 구조&lt;/strong> 를 이해해야 합니다.
문서도 오래된 것이 많아 학습에는 시간과 끈기가 요구됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="적합한-용도">적합한 용도
&lt;/h2>&lt;ul>
&lt;li>파일 런처나 단축키 지원 등의 &lt;strong>가벼운 도구&lt;/strong>&lt;/li>
&lt;li>클립보드 조작이나 IME 제어 등의 &lt;strong>시스템 유틸리티&lt;/strong>&lt;/li>
&lt;li>글로벌 훅이나 창 캡처 등의 &lt;strong>네이티브 제어계 앱&lt;/strong>&lt;/li>
&lt;li>하드웨어와 밀접하게 연동되는 &lt;strong>드라이버 보조 도구&lt;/strong>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="부적합한-용도">부적합한 용도
&lt;/h2>&lt;ul>
&lt;li>모던 UI·UX가 중시되는 &lt;strong>일반 소비자용 앱&lt;/strong>&lt;/li>
&lt;li>속도 우선으로 만드는 &lt;strong>프로토타이핑이나 MVP 개발&lt;/strong>&lt;/li>
&lt;li>장기 운용 및 팀 개발을 전제로 한 &lt;strong>대규모 프로젝트&lt;/strong>&lt;/li>
&lt;li>여러 OS에 대응할 필요가 있는 &lt;strong>크로스 플랫폼 제품&lt;/strong>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="평가-요약">평가 요약
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>관점&lt;/th>
&lt;th>평가&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>실행 속도&lt;/td>
&lt;td>◎ 매우 빠름&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>메모리 효율&lt;/td>
&lt;td>◎ 뛰어남&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>개발 속도&lt;/td>
&lt;td>× 느림&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>유지 보수성&lt;/td>
&lt;td>× 낮음&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>크로스 플랫폼 대응&lt;/td>
&lt;td>× 미지원&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>모던 UI 대응&lt;/td>
&lt;td>× 약함&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OS 제어 자유도&lt;/td>
&lt;td>◎ 압도적으로 높음&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="결론">결론
&lt;/h2>&lt;p>&lt;strong>Win32API + C++는 &amp;lsquo;OS의 모든 것을 스스로 다루고 싶은&amp;rsquo; 개발자에게 적합한 도구입니다.&lt;/strong>
그 파워는 매우 크지만 학습과 운용에는 그에 상응하는 각오가 필요합니다.&lt;/p>
&lt;blockquote>
&lt;p>&amp;lsquo;굳이 선택할&amp;rsquo; 가치가 있는지는 당신이 목표로 하는 앱의 성격에 달려 있습니다.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>GUI 프레임워크나 최신 언어에 의존하지 않고 &lt;code>#include &amp;lt;windows.h&amp;gt;&lt;/code>의 세계로 뛰어드는 것――
그 선택은 지금도 변함없이 의미가 있습니다.&lt;/p></description></item><item><title>'【초보자용】vcpkg로 libcurl(OpenSSL 지원)을 Visual Studio에 도입하는 절차'</title><link>http://kenji.blog/ko/p/vcpkg-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-visual-studio-%E3%81%AB-curl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</link><pubDate>Mon, 07 Jul 2025 21:46:08 +0900</pubDate><guid>http://kenji.blog/ko/p/vcpkg-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-visual-studio-%E3%81%AB-curl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</guid><description>&lt;img src="http://kenji.blog/p/vcpkg-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-visual-studio-%E3%81%AB-curl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/img.png" alt="Featured image of post '【초보자용】vcpkg로 libcurl(OpenSSL 지원)을 Visual Studio에 도입하는 절차'" />&lt;h2 id="visual-studio에서-libcurlopenssl-지원을-사용한다면-vcpkg-도입이-쉽고-추천합니다">Visual Studio에서 libcurl(OpenSSL 지원)을 사용한다면, vcpkg 도입이 쉽고 추천합니다
&lt;/h2>&lt;p>C++에서 HTTP 통신을 다룰 때 자주 사용되는 것이 &lt;code>libcurl&lt;/code>입니다. 하지만 빌드나 의존성 조정은 의외로 번거롭죠.&lt;/p>
&lt;p>그럴 때 유용한 것이 Microsoft에서 만든 C++ 라이브러리 관리 도구인 &amp;lsquo;&lt;strong>vcpkg&lt;/strong>&amp;lsquo;입니다.
이번에는 &lt;code>vcpkg&lt;/code>를 사용하여 &lt;code>libcurl&lt;/code>(OpenSSL 지원)을 도입하고, Visual Studio에서 원활하게 사용할 수 있도록 하는 절차를 소개합니다.&lt;/p>
&lt;hr>
&lt;h3 id="vcpkg-설치-미도입자만">vcpkg 설치 (미도입자만)
&lt;/h3>&lt;p>먼저 &lt;code>vcpkg&lt;/code>를 설치합시다. 다음 절차를 PowerShell에서 실행해 주세요.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">git&lt;/span> &lt;span class="n">clone&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="p">//&lt;/span>&lt;span class="n">github&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">microsoft&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">vcpkg&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd &lt;/span>&lt;span class="n">vcpkg&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.\&lt;/span>&lt;span class="nb">bootstrap-vcpkg&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">bat&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>※Git이 아직 설치되어 있지 않은 경우, &lt;a class="link" href="https://git-scm.com/" target="_blank" rel="noopener"
>Git 공식 사이트&lt;/a>에서 설치해 주세요.&lt;/p>
&lt;hr>
&lt;h3 id="libcurlopenssl-지원-설치">libcurl(OpenSSL 지원) 설치
&lt;/h3>&lt;p>이어서 vcpkg를 사용하여 &lt;code>libcurl&lt;/code>을 설치합니다. OpenSSL을 지원하는 64bit 버전을 지정하려면 다음 명령을 실행합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">vcpkg&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">curl&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="no">ssl&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-triplet&lt;/span> &lt;span class="nb">x64-windows&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이 명령을 실행하면 필요한 의존성(OpenSSL 등)도 자동으로 설정됩니다.&lt;/p>
&lt;hr>
&lt;h3 id="visual-studio와의-연동-설정">Visual Studio와의 연동 설정
&lt;/h3>&lt;p>vcpkg로 도입한 라이브러리를 Visual Studio 프로젝트에서 쉽게 사용할 수 있도록 하려면 다음 명령으로 통합 설정을 수행합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">vcpkg&lt;/span> &lt;span class="n">integrate&lt;/span> &lt;span class="n">install&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이 설정을 해두면 Visual Studio 프로젝트에서 자동으로 &lt;code>#include &amp;lt;curl/curl.h&amp;gt;&lt;/code>를 사용할 수 있게 되며, 라이브러리 경로 및 링커 설정을 수동으로 할 필요가 없어집니다.&lt;/p>
&lt;hr>
&lt;h2 id="마치며">마치며
&lt;/h2>&lt;p>이것으로 Visual Studio에 &lt;code>libcurl&lt;/code>(OpenSSL 지원)을 도입할 준비가 완료되었습니다.&lt;/p>
&lt;ul>
&lt;li>vcpkg를 사용하면 번거로운 의존성도 일괄적으로 관리할 수 있다&lt;/li>
&lt;li>&lt;code>vcpkg install curl[ssl] --triplet x64-windows&lt;/code>로 libcurl을 쉽게 도입&lt;/li>
&lt;li>&lt;code>vcpkg integrate install&lt;/code>로 Visual Studio와 자동 연동 가능&lt;/li>
&lt;/ul>
&lt;p>이제 프로젝트 내에서 헤더를 인클루드하고 libcurl의 API를 사용하여 개발을 시작해 봅시다.
편리한 vcpkg를 활용하여 개발 효율을 단번에 높여보세요.&lt;/p></description></item><item><title>'음모론에 빠지지 않기 위해 무엇이 필요한가'</title><link>http://kenji.blog/ko/p/%E9%99%B0%E8%AC%80%E8%AB%96%E3%81%AB%E3%81%AF%E3%81%BE%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%95%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%8B/</link><pubDate>Mon, 26 May 2025 22:23:34 +0900</pubDate><guid>http://kenji.blog/ko/p/%E9%99%B0%E8%AC%80%E8%AB%96%E3%81%AB%E3%81%AF%E3%81%BE%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%95%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%8B/</guid><description>&lt;img src="http://kenji.blog/p/%E9%99%B0%E8%AC%80%E8%AB%96%E3%81%AB%E3%81%AF%E3%81%BE%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%95%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%8B/img.png" alt="Featured image of post '음모론에 빠지지 않기 위해 무엇이 필요한가'" />&lt;h2 id="음모론에-휩쓸리지-않기-위해-필요한-마음의-보안">음모론에 휩쓸리지 않기 위해 필요한 &amp;lsquo;마음의 보안&amp;rsquo;
&lt;/h2>&lt;p>인터넷을 보다 보면 가끔 &amp;lsquo;음모론&amp;rsquo;적인 이야기를 접하게 됩니다.&lt;/p>
&lt;p>&amp;ldquo;이 사건, 뒤에서 조종하는 누군가가 있는 것 아닐까?&amp;rdquo;
&amp;ldquo;진짜 진실은 숨겨져 있는 것이 아닐까?&amp;rdquo;
그런 언설이 그럴듯한 형태로 확산되어 가는 것을 본 적이 있는 사람도 많을 것입니다.&lt;/p>
&lt;p>이러한 정보에 지나치게 휩쓸리지 않으려면 &amp;lsquo;지식&amp;rsquo;이나 &amp;lsquo;사고력&amp;rsquo;뿐만 아니라 &lt;strong>마음가짐&lt;/strong>, 즉 &amp;lsquo;마음의 보안&amp;rsquo;을 갖추는 것이 매우 중요합니다.&lt;/p>
&lt;p>아래에 이를 위해 유효한 6가지 생각의 틀을 소개합니다.&lt;/p>
&lt;hr>
&lt;h3 id="불안과-해답을-즉시-연결하지-않기">불안과 &amp;lsquo;해답&amp;rsquo;을 즉시 연결하지 않기
&lt;/h3>&lt;p>음모론의 큰 특징은 불안이나 의문에 대해 명확하고 이해하기 쉬운 &amp;ldquo;해답&amp;quot;을 제시한다는 점입니다.&lt;/p>
&lt;p>예를 들어,&lt;/p>
&lt;ul>
&lt;li>&amp;ldquo;왜 이런 사건이 일어나는 걸까?&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;누가 이득을 보고 있는 걸까?&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;p>이러한 질문에 &amp;ldquo;사실은 ○○가 뒤에서 조종하고 있다&amp;quot;라는 시나리오가 제시되면 무심코 납득해 버리기 쉽습니다.&lt;/p>
&lt;p>하지만 불안한 마음이 들 때일수록 &lt;strong>성급하게 결론을 내리지 않고 보류해 두는 것&lt;/strong> 이 중요합니다.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;모르는 채로 머물러 있을 수 있는 힘&amp;quot;은 지적 성숙의 증거이기도 합니다.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h3 id="정보의-수용구를-의도적으로-넓히기">정보의 수용구를 의도적으로 넓히기
&lt;/h3>&lt;p>음모론에 빠져드는 사람들의 대부분은 &amp;lsquo;비슷한 생각의 정보&amp;rsquo;만을 집중적으로 보는 경향이 있습니다.&lt;/p>
&lt;p>이는 &amp;lsquo;확증 편향&amp;rsquo;이라고 불리며, 이미 가지고 있는 생각을 보강하는 정보만 접하게 되는 심리적 편향입니다.&lt;/p>
&lt;p>특히 SNS나 동영상 사이트의 알고리즘은 취향에 맞을 만한 게시물을 계속해서 보여주기 때문에 시야가 자연스럽게 좁아질 수도 있습니다.&lt;/p>
&lt;p>의식적으로,&lt;/p>
&lt;ul>
&lt;li>다양한 관점의 미디어를 접하기&lt;/li>
&lt;li>해외 뉴스나 학술적인 출처를 찾아보기&lt;/li>
&lt;li>자신의 생각과 다른 의견에도 귀 기울이기&lt;/li>
&lt;/ul>
&lt;p>등 &lt;strong>정보원의 다각화&lt;/strong> 를 도모하는 것이 위험을 피하는 길입니다.&lt;/p>
&lt;hr>
&lt;h3 id="나는-속지-않는다고-생각하지-않기">&amp;ldquo;나는 속지 않는다&amp;quot;고 생각하지 않기
&lt;/h3>&lt;p>지식이 있는 사람이나 논리적인 사람일수록 사실 음모론에 빠져들기 쉬울 때가 있습니다.&lt;/p>
&lt;p>&amp;ldquo;다른 사람들이 알아채지 못하는 진실을 나는 깨달을 수 있다&amp;quot;고 착각해 버리면, 그것이 판단을 흐리게 하는 요인이 되기 때문입니다.&lt;/p>
&lt;p>아무리 주의하더라도 인간은 실수할 수 있습니다. 그렇기 때문에 &lt;strong>나도 속을 수 있다는 전제에 서는 것&lt;/strong> 이 오히려 이성적인 태도라고 할 수 있습니다.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;의심하면서도 단정 짓지 않는&amp;rdquo; 것이 방어력이 됩니다.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h3 id="스토리에-끌려가지-않고-구조를-보기">스토리에 끌려가지 않고 구조를 보기
&lt;/h3>&lt;p>음모론에는 &amp;lsquo;드라마틱한 이야기&amp;rsquo;가 뒤따르기 마련입니다.&lt;/p>
&lt;ul>
&lt;li>정의와 악의 대립 구조&lt;/li>
&lt;li>지배자와 피지배자&lt;/li>
&lt;li>각성한 나 vs 세뇌된 타인&lt;/li>
&lt;/ul>
&lt;p>이러한 단순한 이분법적 대립은 이야기로서는 매력적일지 몰라도, 현실을 올바르게 반영하고 있다고는 할 수 없습니다.&lt;/p>
&lt;p>현실의 사건이나 사회의 움직임에는 복잡한 인과관계나 역사적 배경, 제도적인 구조 등 수많은 요소가 얽혀 있습니다.&lt;/p>
&lt;p>스토리에 감정이 지나치게 휩쓸리지 않고, &amp;ldquo;왜 이렇게 되어 있는가?&amp;ldquo;를 &lt;strong>구조적으로 이해하는 시각&lt;/strong> 을 가지는 것이 중요합니다.&lt;/p>
&lt;hr>
&lt;h3 id="고독을-방치하지-않기">고독을 방치하지 않기
&lt;/h3>&lt;p>음모론에 강하게 이끌리는 배경에는 &amp;lsquo;고립&amp;rsquo;이나 &amp;lsquo;설 자리 없음&amp;rsquo;이 숨어 있는 경우가 있습니다.&lt;/p>
&lt;p>사람은 고독을 느낄 때 자신을 이해해 주는 사람들이나 집단에 깊이 의존하기 쉽습니다. 음모론 커뮤니티는 그러한 &amp;ldquo;설 자리&amp;quot;로서의 기능을 다해 버리기도 합니다.&lt;/p>
&lt;p>그렇기 때문에 고독해지지 않으려는 노력 또한 마음의 보안으로 이어집니다.&lt;/p>
&lt;p>예를 들어,&lt;/p>
&lt;ul>
&lt;li>정기적으로 사람들과 대화하기&lt;/li>
&lt;li>취미나 관심사를 공유하는 커뮤니티에 참여하기&lt;/li>
&lt;li>온라인뿐만 아니라 오프라인에서도 관계를 맺기&lt;/li>
&lt;/ul>
&lt;p>와 같은 행동이 정신적인 안정으로 이어집니다.&lt;/p>
&lt;hr>
&lt;h3 id="부정하기보다-대화를-의식하기">부정하기보다 대화를 의식하기
&lt;/h3>&lt;p>만약 가까운 사람이 음모론에 경도되어 있다 하더라도, &lt;strong>무턱대고 부정하는 것은 역효과&lt;/strong> 가 날 수 있습니다.&lt;/p>
&lt;p>사람은 자신의 신념을 부정당하면 심리적으로 그것을 지키려는 경향이 강해집니다(이를 &amp;lsquo;방어적 인지&amp;rsquo;라고 부릅니다).&lt;/p>
&lt;p>그 대신에,&lt;/p>
&lt;ul>
&lt;li>&amp;ldquo;왜 그렇게 생각했어?&amp;ldquo;라고 정중하게 물어보기&lt;/li>
&lt;li>&amp;ldquo;이런 생각도 있을 수 있지 않을까?&amp;ldquo;라며 자신의 시각을 온화하게 제시하기&lt;/li>
&lt;/ul>
&lt;p>와 같은 &lt;strong>대화적인 접근&lt;/strong> 을 취함으로써 상대방의 시야가 자연스럽게 넓어질 가능성이 생깁니다.&lt;/p>
&lt;hr>
&lt;h2 id="요약-음모론과-거리를-두기-위해-할-수-있는-일">요약: 음모론과 거리를 두기 위해 할 수 있는 일
&lt;/h2>&lt;ul>
&lt;li>불안과 해답을 즉시 연결하지 않고 보류할 수 있는 힘 기르기&lt;/li>
&lt;li>정보원을 다각화하여 편향을 알아채기&lt;/li>
&lt;li>자신의 판단이 절대적이지 않음을 인식하기&lt;/li>
&lt;li>스토리가 아닌 구조와 인과관계로 사물을 보기&lt;/li>
&lt;li>고독을 피하고 관계를 유지하기&lt;/li>
&lt;li>타인의 음모론에는 부정보다 대화로 마주하기&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>음모론에 끌리는지 여부는 지식의 양보다 심리적인 상태나 환경의 영향이 더 크다고 알려져 있습니다.&lt;/p>
&lt;p>그렇기 때문에 &amp;lsquo;나는 괜찮다&amp;rsquo;고 단정 짓지 않고, 일상 속에서 조금씩 &lt;strong>마음의 보안을 높이는 노력&lt;/strong> 을 해나가는 것이 앞으로의 정보 사회를 유연하게 살아가는 데 큰 버팀목이 될 것입니다.&lt;/p></description></item><item><title>'로컬 환경에서의 노코드의 역사'</title><link>http://kenji.blog/ko/p/%E3%83%AD%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8A%E3%82%88%E3%81%B3%E3%83%8E%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%AD%B4%E5%8F%B2/</link><pubDate>Sat, 26 Apr 2025 16:46:11 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%AD%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8A%E3%82%88%E3%81%B3%E3%83%8E%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%AD%B4%E5%8F%B2/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%AD%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8A%E3%82%88%E3%81%B3%E3%83%8E%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%AD%B4%E5%8F%B2/img.png" alt="Featured image of post '로컬 환경에서의 노코드의 역사'" />&lt;h1 id="로우코드노코드-개발의-역사-1980년대현재">로우코드/노코드 개발의 역사 (1980년대～현재)
&lt;/h1>&lt;p>로우코드/노코드 개발이란, 프로그래밍에 대한 전문 지식이 없어도 앱이나 웹사이트, 데이터베이스 등을 만들 수 있는 개발 방식입니다. 이 개념은 1980년대부터 시작되어, PC의 보급, 인터넷의 진화, 클라우드 기술의 확대와 함께 다양한 플랫폼으로 발전해 왔습니다. 본 기사에서는 연대별로 대표적인 도구나 서비스를 살펴보고, 그 특징과 가격에 대해 소개합니다.&lt;/p>
&lt;hr>
&lt;h2 id="1980년대-초창기">1980년대: 초창기
&lt;/h2>&lt;ul>
&lt;li>
&lt;p>&lt;strong>HyperCard (Apple, 1987)&lt;/strong>
Macintosh용 앱 제작 도구. 카드 형태로 화면을 구성하고 GUI를 드래그 앤 드롭으로 제작. 독자적인 스크립트 언어인 &amp;lsquo;HyperTalk&amp;rsquo;를 통해 간단한 동작 제어도 가능. 프로토타이핑 용도로 선호되었습니다. 출시 당시 가격은 49.95달러였으며, 이후 신규 Mac 구매자에게 무료로 제공되었습니다. 최종 버전은 1998년이며, Mac OS X 이후로는 지원되지 않습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>FileMaker (Claris/Apple, 1985)&lt;/strong>
그래픽 기반의 데이터베이스 소프트웨어. 표 형태의 데이터 표시뿐만 아니라, 자유로운 레이아웃 편집과 스크립트 기능을 갖춘 관계형 DB 도구입니다. 현재는 &amp;lsquo;Claris FileMaker Pro&amp;rsquo;로 제공되며, 풀 라이선스 버전은 594달러(2024년 기준).&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="1990년대-gui-앱과-업무용-개발의-대두">1990년대: GUI 앱과 업무용 개발의 대두
&lt;/h2>&lt;ul>
&lt;li>
&lt;p>&lt;strong>Visual Basic (Microsoft, 1991)&lt;/strong>
Windows 앱 개발에 특화된 IDE. 버튼이나 레이블 등의 GUI 부품을 드래그 앤 드롭으로 배치하여, 이벤트 기반 앱을 쉽게 구축할 수 있었습니다. 1998년 VB6.0을 마지막으로 .NET 시대로 전환되었습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Microsoft Access (1992)&lt;/strong>
Windows용 데이터베이스 개발 도구. 관계형 DB 설계와 GUI를 통한 폼 작성이 가능하여, 일반인을 위한 업무용 앱 개발에 널리 사용되었습니다. 현재는 Microsoft 365의 일부로 제공 중입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>PowerBuilder (PowerSoft/Sybase, 1991)&lt;/strong>
업무용 앱을 위한 4GL 개발 도구. 클라이언트/서버 아키텍처를 지원하며, 데이터베이스 연동에 강점이 있었습니다. 현재는 SAP 산하에서 계속 제공되고 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Dreamweaver (Macromedia, 1997)&lt;/strong>
웹 페이지 제작을 시각적으로 할 수 있는 WYSIWYG 도구. HTML 편집과 디자인 뷰 전환이 가능하며, ASP나 PHP 지원도 갖추고 있었습니다. 현재는 Adobe에서 제공하며, 구독형(월 약 34.49달러)으로 이용 가능합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Flash (Macromedia, 1996)&lt;/strong>
원래는 FutureSplash Animator로 개발된 벡터 애니메이션 제작 도구. 이후 웹용 인터랙티브 콘텐츠 제작에 활용되었으나, 보안 우려로 2020년에 지원이 종료되었습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>GameMaker (1999)&lt;/strong>
초보자를 위한 2D 게임 제작 도구. 오브젝트 배치나 이벤트 제어를 드래그 앤 드롭으로 할 수 있습니다. 이후 스크립트(GML)도 지원하게 되었으며, 현재는 상업용으로 여러 플랜이 제공되고 있습니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="2000년대-웹-기반과-오픈-소스의-확산">2000년대: 웹 기반과 오픈 소스의 확산
&lt;/h2>&lt;ul>
&lt;li>
&lt;p>&lt;strong>WordPress (2003)&lt;/strong>
PHP와 MySQL을 사용한 오픈 소스 CMS. 프로그래밍 지식이 없어도 테마나 플러그인을 사용하여 블로그나 기업 사이트를 구축할 수 있습니다. 무료로 배포되며, 전 세계에서 가장 많이 사용되는 CMS 중 하나입니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Wix (2006)&lt;/strong>
브라우저 상에서 웹사이트를 구축할 수 있는 노코드 서비스. 템플릿을 선택하고 드래그 앤 드롭으로 편집할 수 있습니다. 무료 플랜 외에도 유료 플랜에서는 커스텀 도메인이나 이커머스 기능도 사용할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>OutSystems (2001)&lt;/strong>
엔터프라이즈용 로우코드 플랫폼. 업무 시스템을 빠르게 개발할 수 있어, 대기업이나 행정 기관에서의 도입이 진행되고 있습니다. 클라우드와 온프레미스 모두 지원합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Scratch (MIT, 2007)&lt;/strong>
어린이를 위해 개발된 프로그래밍 학습 도구. 색깔이 있는 블록을 조합하여 게임이나 애니메이션을 만들 수 있어, 교육 현장에서 널리 이용되고 있습니다. 무료로 제공됩니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Airtable (2013)&lt;/strong>
스프레드시트와 데이터베이스를 결합한 클라우드형 서비스. 외형은 Excel에 가깝지만, 관계나 칸반 보기, API 연동 등이 가능합니다. 개인부터 법인까지 폭넓게 사용되고 있습니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="2010년대2020년대-클라우드와-자동화의-시대">2010년대～2020년대: 클라우드와 자동화의 시대
&lt;/h2>&lt;p>최근, 클라우드 기반의 로우코드/노코드 도구가 급속도로 진화하고 있습니다.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Power Platform (Microsoft)&lt;/strong>
&amp;lsquo;Power Apps&amp;rsquo;, &amp;lsquo;Power Automate&amp;rsquo; 등을 포함한 통합형 업무 앱 개발 및 자동화 플랫폼. 기업의 업무 프로세스를 드래그 앤 드롭으로 시각적으로 구축할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Salesforce Lightning Platform&lt;/strong>
CRM인 Salesforce에서 제공하는 앱 개발 기반. GUI로 업무 앱을 제작할 수 있으며, 다른 Salesforce 서비스와의 통합도 용이합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Zapier / IFTTT&lt;/strong>
여러 클라우드 서비스 간의 연동을 코딩 없이 구축할 수 있는 자동화 도구. 예를 들어 &amp;ldquo;Google 설문지에 입력되면 Slack으로 알림&amp;quot;과 같은 워크플로우를 쉽게 구현할 수 있습니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Notion (2010년대)&lt;/strong>
문서 관리, 작업 관리, 위키 등을 통합한 올인원 워크스페이스. 사용자 지정 데이터베이스 기능도 갖추고 있어 노코드를 통한 업무 개선에 유용합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Construct 3 / GameSalad&lt;/strong>
드래그 앤 드롭으로 게임을 만들 수 있는 도구. Construct 3는 HTML5를 지원하여 브라우저 상에서도 동작하며, 교육 현장이나 인디 개발자에게 인기가 있습니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="정보-출처-및-보충-설명">정보 출처 및 보충 설명
&lt;/h2>&lt;p>이 기사는 각 제품의 공식 사이트, Wikipedia, 신뢰할 수 있는 자료 및 기사(Apple, Microsoft, Adobe 등)를 바탕으로 구성했습니다. 가격 정보는 가능한 한 당시 또는 최신 공식 정보를 참고했습니다(기재된 금액은 주로 미국 달러 기준). 2000년대 이후의 도구 대부분은 구독형이며, 플랜에 따라 요금이 달라집니다.&lt;/p></description></item><item><title>'FizzBuzz'</title><link>http://kenji.blog/ko/p/fizzbuzz/</link><pubDate>Fri, 18 Apr 2025 00:58:11 +0900</pubDate><guid>http://kenji.blog/ko/p/fizzbuzz/</guid><description>&lt;img src="http://kenji.blog/p/fizzbuzz/img.png" alt="Featured image of post 'FizzBuzz'" />&lt;h2 id="fizzbuzz란-결국-무엇인가">FizzBuzz란 결국 무엇인가?
&lt;/h2>&lt;p>안녕하세요!&lt;/p>
&lt;p>오늘은 &amp;ldquo;FizzBuzz&amp;quot;에 대해 써보려고 합니다.&lt;/p>
&lt;p>&amp;ldquo;아, 그거 알아!&amp;rdquo; 하시는 분들도, &amp;ldquo;뭔가 들어본 적은 있는데 잘 모르겠다&amp;rdquo; 하시는 분들도 조금만 어울려 주세요. 몇 분이면 읽을 수 있고, 어쩌면 &amp;ldquo;그렇구나&amp;rdquo; 하고 고개를 끄덕이게 되실지도 모릅니다.&lt;/p>
&lt;hr>
&lt;h3 id="fizzbuzz를-작성하지-못하면-프로그래머-실격이라는-말은-사실일까">&amp;ldquo;FizzBuzz를 작성하지 못하면 프로그래머 실격&amp;quot;이라는 말은 사실일까?
&lt;/h3>&lt;p>FizzBuzz를 대략적으로 설명하자면 이런 식입니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">101&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">15&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;FizzBuzz&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Fizz&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">5&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Buzz&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>네, 이것이 바로 유명한 &amp;ldquo;FizzBuzz 문제&amp;quot;입니다.&lt;/p>
&lt;p>1부터 100까지의 숫자를 순서대로 확인하면서,&lt;br>
3의 배수라면 &amp;ldquo;Fizz&amp;rdquo;, 5의 배수라면 &amp;ldquo;Buzz&amp;rdquo;,&lt;br>
두 수의 공배수라면 &amp;ldquo;FizzBuzz&amp;quot;를 출력하는 아주 간단한 문제입니다.&lt;/p>
&lt;p>그런데 왜인지 &amp;ldquo;프로그래머로서의 최소한의 시험&amp;rdquo; 같은 취급을 받는 경우가 많습니다. 면접에서도 출제되고, SNS에서는 &amp;ldquo;FizzBuzz도 못 짜는 녀석이&amp;hellip;&amp;rdquo; 같은 우월감 섞인 발언도 심심치 않게 보입니다.&lt;/p>
&lt;p>하지만, 잠깐만 기다려 보세요.&lt;/p>
&lt;p>정말로 &amp;ldquo;FizzBuzz를 작성하지 못했다 = 프로그래밍을 할 수 없다&amp;quot;라고 단언할 수 있을까요?&lt;/p>
&lt;hr>
&lt;h3 id="할-수-있느냐가-아니라-할-수-있는-상태인가">할 수 있느냐가 아니라, 할 수 있는 &amp;ldquo;상태&amp;quot;인가
&lt;/h3>&lt;p>확실히 FizzBuzz는 구문에 대한 이해와 기본적인 논리적 사고를 요구합니다. 그렇기 때문에 &amp;ldquo;기초 확인&amp;rdquo; 용도로 쓰인다는 점은 납득이 갑니다.&lt;/p>
&lt;p>하지만 말입니다.&lt;/p>
&lt;p>환경이 다르면 결과도 달라집니다.&lt;/p>
&lt;p>예를 들어,&lt;/p>
&lt;ul>
&lt;li>초면인 면접관 앞에서 긴장했을 때&lt;/li>
&lt;li>갑자기 화이트보드를 건네받고, 수중에 에디터가 없을 때&lt;/li>
&lt;li>&amp;ldquo;어라, modulo가 뭐였지?&amp;rdquo; 하고 갑자기 떠오르지 않을 때&lt;/li>
&lt;/ul>
&lt;p>&amp;hellip;그런 적 없으신가요? 사람이니까요. 있을 수 있다고 생각합니다.&lt;/p>
&lt;p>그래서 &amp;ldquo;FizzBuzz를 작성할 수 있는가&amp;quot;보다 &amp;ldquo;FizzBuzz를 작성할 수 있는 상태로 자신을 이끌 수 있는가&amp;quot;가 사실 더 중요하지 않을까 생각합니다.&lt;/p>
&lt;hr>
&lt;h3 id="흔한-훈련하면-ok라는-조언의-함정">흔한 &amp;ldquo;훈련하면 OK&amp;quot;라는 조언의 함정
&lt;/h3>&lt;p>이런 이야기를 하면 &amp;ldquo;그러니까 매일 연습해라!&amp;ldquo;라는 조언이 나오기 마련입니다.&lt;/p>
&lt;p>물론, 반복 연습을 통해 술술 작성할 수 있게 되는 것은 사실이고, 그 자체는 좋은 일입니다. 하지만 &amp;ldquo;FizzBuzz를 작성하지 못하면 실격&amp;quot;이라는 전제에 서게 되면, 단지 공포로 변해버릴 수도 있습니다.&lt;/p>
&lt;p>즉, &amp;ldquo;실수했다 = 나는 안 되나 보다&amp;quot;라고 느끼게 되는 구조가 되기 쉬운 것이죠.&lt;/p>
&lt;p>예를 들어, 늦잠을 잔 날 &amp;ldquo;나는 게으름뱅이야&amp;hellip;&amp;ldquo;라고 생각하기 쉽지 않나요? 하지만 그건 어쩌다 몸이 피곤했을 뿐일지도 모릅니다.&lt;/p>
&lt;p>FizzBuzz도 마찬가지입니다.&lt;/p>
&lt;hr>
&lt;h3 id="그렇다-해도-fizzbuzz는-역시-좋은-질문이기도-하다">그렇다 해도, FizzBuzz는 역시 좋은 질문이기도 하다
&lt;/h3>&lt;p>그렇다 해도, FizzBuzz가 나쁘다는 것은 아닙니다.&lt;/p>
&lt;p>오히려 아주 잘 만들어진 질문이라고 생각합니다. 규칙이 간단하고 확장하기도 쉽습니다. 예를 들어 이렇게 바꿔보면 좀 더 사고가 깊어집니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">101&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;Fizz&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">5&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;Buzz&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">output&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이것은 &amp;ldquo;if-elif-else가 아니더라도 작성할 수 있다&amp;quot;는 예시입니다. 꽤 스마트하죠.&lt;/p>
&lt;p>즉, FizzBuzz는 &amp;ldquo;해냈는가&amp;quot;뿐만 아니라, &amp;ldquo;어떻게 작성하는가&amp;quot;나 &amp;ldquo;어디까지 이해하고 있는가&amp;quot;를 파악하기 위한 진입점도 될 수 있습니다.&lt;/p>
&lt;hr>
&lt;h3 id="그렇기-때문에">그렇기 때문에
&lt;/h3>&lt;p>FizzBuzz를 할 수 있는지 여부에 너무 과도한 의미를 부여하지 않아도 된다고 생각합니다.&lt;/p>
&lt;p>작성하지 못했다 하더라도, 그것은 단지 &amp;ldquo;지금 좀 컨디션이 안 좋았다&amp;quot;일 뿐일지도 모르고, 나중에 차분히 생각하면 할 수 있는 경우도 많습니다.&lt;/p>
&lt;p>조급해하지 말고, 천천히 나아가 봅시다.&lt;/p>
&lt;p>코드는 사람이 작성하는 것입니다. 사람이니까 잊어버릴 수도 있고, 긴장할 수도 있습니다. 그런 점을 받아들이면서, 조금씩 나아갈 수 있다면 충분하다고 생각합니다.&lt;/p>
&lt;p>그럼, 오늘도 편안한 마음으로 코드를 작성해 봅시다.&lt;/p></description></item><item><title>'하노이의 탑'</title><link>http://kenji.blog/ko/p/%E3%83%8F%E3%83%8E%E3%82%A4%E3%81%AE%E5%A1%94/</link><pubDate>Thu, 17 Apr 2025 22:23:14 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%8F%E3%83%8E%E3%82%A4%E3%81%AE%E5%A1%94/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%8F%E3%83%8E%E3%82%A4%E3%81%AE%E5%A1%94/img.png" alt="Featured image of post '하노이의 탑'" />&lt;h1 id="하노이의-탑">하노이의 탑
&lt;/h1>&lt;p>안녕하세요!&lt;/p>
&lt;p>오늘은 &amp;ldquo;하노이의 탑&amp;quot;에 대해 Python 샘플 프로그램을 곁들여 설명해보고자 합니다.&lt;/p>
&lt;hr>
&lt;h2 id="하노이의-탑이란">하노이의 탑이란?
&lt;/h2>&lt;p>하노이의 탑은 3개의 기둥과 여러 개의 원판을 사용하는 퍼즐입니다. 원판은 크기가 다르며, 처음에는 하나의 기둥에 크기 순서대로 쌓여 있습니다. 규칙은 다음과 같습니다:&lt;/p>
&lt;ol>
&lt;li>한 번에 옮길 수 있는 원판은 1개뿐입니다.&lt;/li>
&lt;li>작은 원판 위에 큰 원판을 놓을 수 없습니다.&lt;/li>
&lt;/ol>
&lt;p>이 퍼즐은 재귀적 사고를 배우는 데 최적의 교재로 알려져 있습니다. 재귀란 어떤 문제를 같은 종류의 더 작은 문제로 분해하여 해결하는 방법입니다. 하노이의 탑에서는 n개의 원판을 이동하기 위해 n-1개의 원판을 이동하는 조작을 반복합니다.&lt;/p>
&lt;hr>
&lt;h2 id="python으로-하노이의-탑을-풀어보자">Python으로 하노이의 탑을 풀어보자
&lt;/h2>&lt;p>아래는 Python으로 하노이의 탑을 풀기 위한 샘플 코드입니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">hanoi&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">source&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">target&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">auxiliary&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Move disk 1 from &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">source&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">target&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hanoi&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">source&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">auxiliary&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">target&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Move disk &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> from &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">source&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> to &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">target&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">hanoi&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">auxiliary&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">target&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">source&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 예: 3개의 원판을 A에서 C로 이동&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">hanoi&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;C&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;B&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이 코드에서는 &lt;code>hanoi&lt;/code> 함수가 재귀적으로 호출되어 원판을 이동하는 순서가 출력됩니다. 예를 들어, 3개의 원판의 경우 다음과 같은 출력을 얻을 수 있습니다:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Move disk 1 from A to C
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Move disk 2 from A to B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Move disk 1 from C to B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Move disk 3 from A to C
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Move disk 1 from B to A
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Move disk 2 from B to C
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Move disk 1 from A to C
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이렇게 재귀적인 접근 방식을 사용하면 복잡한 문제도 간단하게 해결할 수 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="64개의-원판을-옮기는-데-시간이-얼마나-걸릴까">64개의 원판을 옮기는 데 시간이 얼마나 걸릴까?
&lt;/h2>&lt;p>하노이의 탑의 이동 횟수는 최소한 2^n - 1번 필요합니다. 즉, 64개의 원판을 이동하려면 2^64 - 1번, 약 1.84×10^19번의 이동이 필요합니다. 만약 1초에 1번 이동할 수 있다고 하더라도 약 5849억 년이 걸립니다. 이것은 우주 나이(약 137억 년)의 약 42배입니다.&lt;/p>
&lt;p>이렇게 원판의 수가 늘어나면 필요한 이동 횟수가 지수함수적으로 증가합니다. 따라서 실제로 64개의 원판을 이동하는 것은 현실적이지 않습니다.&lt;/p>
&lt;hr>
&lt;h2 id="정리">정리
&lt;/h2>&lt;p>하노이의 탑은 재귀적 사고를 배우기에 가장 좋은 퍼즐입니다. Python을 사용하면 그 해법을 간단하게 구현할 수 있습니다. 하지만 원판의 수가 늘어나면 필요한 이동 횟수가 급격히 증가하므로 주의가 필요합니다.&lt;/p>
&lt;p>재귀적 접근 방식을 이해하고 실제로 코드를 작성해 보는 것으로 프로그래밍 스킬을 향상시킬 수 있습니다. 꼭 하노이의 탑에 도전해 보세요.&lt;/p>
&lt;hr></description></item><item><title>'소스 코드의 줄 수'</title><link>http://kenji.blog/ko/p/%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A1%8C%E6%95%B0/</link><pubDate>Thu, 17 Apr 2025 10:33:02 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A1%8C%E6%95%B0/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A1%8C%E6%95%B0/img_1.png" alt="Featured image of post '소스 코드의 줄 수'" />&lt;h1 id="소스-코드의-줄-수">소스 코드의 줄 수
&lt;/h1>&lt;p>안녕하세요!&lt;/p>
&lt;p>오늘은 조금 색다른 주제로 이야기해 볼까 합니다.&lt;/p>
&lt;p>&amp;ldquo;소스 코드의 줄 수, 예전과 비교하면 얼마나 늘어났을까?&amp;ldquo;라는 이야기입니다.&lt;/p>
&lt;p>예를 들어, 우주왕복선의 소프트웨어는 약 42만 줄의 코드로 구성되어 있었습니다. 이 코드는 NASA의 높은 품질 기준을 충족하기 위해 매우 엄격한 프로세스로 개발되었습니다. 반면, 현대의 대규모 소프트웨어 프로젝트에서는 코드의 줄 수가 수천만 줄을 넘는 일도 드물지 않습니다. 예를 들어, Google의 코드베이스는 약 20억 줄에 달한다고 알려져 있습니다.&lt;/p>
&lt;p>이처럼 소프트웨어의 규모는 시대와 함께 커지고 있습니다.&lt;/p>
&lt;p>하지만 잠시만요.&lt;/p>
&lt;p>코드의 줄 수가 늘어나는 것이 반드시 나쁜 것만은 아닙니다. 새로운 기능을 추가하거나 사용자의 요구에 부응하기 위해 코드가 늘어나는 것은 자연스러운 일입니다. 단, 코드가 늘어나면 버그의 위험도 높아집니다. 실제로 한 조사에서는 오픈 소스 프로젝트가 100만 줄을 넘으면 버그 발생률이 증가하는 경향이 있다는 것이 밝혀졌습니다.&lt;/p>
&lt;p>그렇다고 해서 모든 프로젝트가 똑같이 코드를 늘리고 있는 것은 아닙니다.&lt;/p>
&lt;p>예를 들어, Linux 커널은 1994년 버전 1.0에서는 약 20만 줄이었지만, 2015년 버전 4.2에서는 약 2,000만 줄로 증가했습니다. 이러한 증가는 하드웨어의 발전이나 새로운 기능의 추가에 대응하기 위함입니다.&lt;/p>
&lt;p>이렇듯 소스 코드의 줄 수는 프로젝트의 규모나 목적, 시대적 배경에 따라 크게 다릅니다.&lt;/p>
&lt;p>코드의 줄 수가 늘어나는 것 자체는 문제가 되지 않지만, 품질이나 유지보수성을 유지하기 위해서는 적절한 관리가 필요합니다. 코드 증가에 따른 위험을 이해하고 적절한 대책을 마련하는 것이 중요합니다.&lt;/p>
&lt;p>마지막으로, 코드의 줄 수에 너무 얽매이지 않고 프로젝트의 목적이나 품질을 중시하는 것이 중요하다고 생각합니다.&lt;/p>
&lt;p>그럼, 다음 번에 또 만나요!&lt;/p></description></item><item><title>'케르크호프스의 원리'</title><link>http://kenji.blog/ko/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/</link><pubDate>Wed, 16 Apr 2025 23:53:08 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_2.png" alt="Featured image of post '케르크호프스의 원리'" />&lt;h1 id="케르크호프스의-원리">케르크호프스의 원리
&lt;/h1>&lt;hr>
&lt;p>안녕하세요!&lt;/p>
&lt;p>오늘은 좀 재밌으면서도 사실 엄청나게 중요한 &amp;lsquo;케르크호프스의 원리&amp;rsquo;라는 이야기를 해보려고 합니다.&lt;/p>
&lt;p>아, 잠깐만요.&lt;br>
&amp;lsquo;케르크호프스의 원리&amp;rsquo;라니 들어본 적도 없고, 왠지 어렵게 느껴진다고 생각하신 분도 계실지 모르겠습니다. 안심하세요. 이 글은 바로 그런 분들이 읽어주셨으면 하는 내용이거든요.&lt;/p>
&lt;hr>
&lt;h2 id="안전한-암호란-무슨-뜻일까요">&amp;lsquo;안전한 암호&amp;rsquo;란 무슨 뜻일까요?
&lt;/h2>&lt;p>예를 들어 누군가가 &amp;ldquo;이 금고, 비밀 여는 법을 아는 사람만 열 수 있습니다&amp;quot;라고 말했다고 해보죠.&lt;/p>
&lt;p>그거 얼핏 보면 엄청 안심되는 것 같죠.&lt;br>
하지만 가만히 생각해보면 조금 불안하지 않나요?&lt;/p>
&lt;p>&amp;ldquo;그 비밀, 들키면 끝나는 거 아냐?&amp;rdquo; 같은 생각이 들잖아요.&lt;/p>
&lt;p>사실 이것이 케르크호프스의 원리가 등장하게 된 계기입니다.&lt;/p>
&lt;hr>
&lt;h2 id="애초에-케르크호프스의-원리가-뭔가요">애초에 &amp;lsquo;케르크호프스의 원리&amp;rsquo;가 뭔가요?
&lt;/h2>&lt;p>이거, 엄청 간단하게 말하자면,&lt;/p>
&lt;p>&lt;strong>&amp;ldquo;암호는 그 구조가 들통나도 안전해야 한다&amp;rdquo;&lt;/strong> 는 생각입니다.&lt;/p>
&lt;p>더 나아가 &amp;ldquo;안전성은 오직 &amp;lsquo;비밀 키&amp;rsquo;에만 의존해야 하며, 암호화 방식 자체는 공개되어 있어도 OK!&amp;ldquo;라는 뜻이죠.&lt;/p>
&lt;p>반대로 말하면, &amp;ldquo;암호 알고리즘(구조)을 비밀로 하고 있을 뿐인 상태는 신뢰성이 낮다&amp;quot;고 간주되는 겁니다.&lt;/p>
&lt;hr>
&lt;h2 id="구조가-비밀이니까-안심이라는-생각은-좀-위험할-수-있습니다">&amp;ldquo;구조가 비밀이니까 안심&amp;quot;이라는 생각은 좀 위험할 수 있습니다
&lt;/h2>&lt;p>흔히 이런 생각을 하죠.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;이 앱의 내부는 아무에게도 보여주지 않았으니까 보안은 괜찮아&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>그 마음 이해합니다.&lt;br>
하지만 그건 &amp;ldquo;아무도 보지 않으니까 나쁜 점도 발견되지 않을 테고, 괜찮겠지&amp;quot;라고 말하는 것과 같습니다.&lt;/p>
&lt;p>실제로는 그 &amp;ldquo;아무도 보지 않는다&amp;quot;는 것 자체가 리스크가 될 수도 있거든요.&lt;/p>
&lt;hr>
&lt;h2 id="그런데-왜-그런-원리가-중요한-걸까요">그런데 왜 그런 원리가 중요한 걸까요?
&lt;/h2>&lt;p>왜냐하면, 만약 누군가가 구조를 알아내서 간단히 해독해버린다면 그 암호는 끝이기 때문입니다.&lt;/p>
&lt;p>비유하자면, 문 열쇠가 엄청 복잡한 구조로 되어 있는데 사실 100엔샵에서 만든 열쇠로도 열려버리는 것과 같습니다.&lt;/p>
&lt;p>&amp;ldquo;열쇠가 비밀이라서 괜찮아&amp;quot;가 아니라, &amp;ldquo;구조를 전부 보여줘도, 제대로 된 열쇠가 없으면 열 수 없다&amp;quot;가 중요한 거겠죠.&lt;/p>
&lt;hr>
&lt;h2 id="그래도-왠지-무섭지-않아라는-마음">&amp;ldquo;그래도 왠지 무섭지 않아?&amp;ldquo;라는 마음
&lt;/h2>&lt;p>여기서 많은 사람들이 느끼는 것이,&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;구조를 전부 드러낸다니, 왠지 무섭지 않아?&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>라는 불안입니다.&lt;/p>
&lt;p>이해합니다.&lt;br>
왜냐하면 &amp;ldquo;내부를 전부 보여주면 따라 하거나 악용되지 않을까?&amp;ldquo;라고 생각하게 되니까요.&lt;/p>
&lt;p>하지만 그 점이 바로 케르크호프스 원리의 핵심입니다.&lt;br>
&amp;ldquo;내부를 보여줘도 무너지지 않는 견고함&amp;quot;이야말로 진짜 보안이라는 것이죠.&lt;/p>
&lt;hr>
&lt;h2 id="그렇긴-해도-처음엔-약간의-용기가-필요합니다">그렇긴 해도 처음엔 약간의 용기가 필요합니다
&lt;/h2>&lt;p>개발자의 입장이 되어보면 &amp;ldquo;구조를 공개한다 = 약점도 보여준다&amp;quot;는 것 같아서 당연히 조마조마합니다.&lt;/p>
&lt;p>하지만 생각해보세요.&lt;/p>
&lt;p>구조를 제대로 보여준 뒤 &amp;ldquo;누구든 검증해도 좋아&amp;quot;라고 말할 수 있는 쪽이 결과적으로 더 신뢰받습니다.&lt;/p>
&lt;p>그건 인간관계와도 비슷하죠.&lt;/p>
&lt;p>&amp;ldquo;진짜 내 모습을 보여준 뒤에도 친하게 지내주는 사람&amp;quot;이 역시 가장 안심되잖아요.&lt;/p>
&lt;hr>
&lt;h2 id="그래서-결론은">그래서 결론은
&lt;/h2>&lt;p>케르크호프스의 원리라는 게 좀 이론적으로 들릴지도 모르겠지만, 본질은 아주 심플합니다.&lt;/p>
&lt;p>&lt;strong>&amp;ldquo;누구에게 보여줘도 망가지지 않는 구조를 만들자&amp;rdquo;&lt;/strong> 는 이야기일 뿐이죠.&lt;/p>
&lt;p>표면적인 비밀보다 제대로 된 설계.&lt;br>
누구에게도 보여주고 싶지 않은 코드보다, 보여줘도 부끄럽지 않은 코드.&lt;/p>
&lt;p>그런 &amp;lsquo;견고함&amp;rsquo;이 앞으로의 시대에는 더욱 요구될지도 모르겠습니다.&lt;/p>
&lt;hr>
&lt;p>읽어주셔서 감사합니다!&lt;/p>
&lt;p>보안 이야기는 좀 어렵지만, 그래도 &amp;lsquo;사람과의 관계&amp;rsquo;나 &amp;lsquo;일상의 안심감&amp;rsquo;과도 이어지는 부분이 있죠.&lt;br>
부담 갖지 말고, 조금씩 알아가다 보면 분명 좋은 일이 있을 거라 생각합니다.&lt;/p>
&lt;hr>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img.png"
width="189"
height="282"
srcset="http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_hu715032b7fe5224f655ebb7d29b676305_77325_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_hu715032b7fe5224f655ebb7d29b676305_77325_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="Auguste Kerckhoffs"
class="gallery-image"
data-flex-grow="67"
data-flex-basis="160px"
>&lt;/p></description></item><item><title>'C++에서 PowerShell을 C++/CLI DLL을 통해 실행하는 방법'</title><link>http://kenji.blog/ko/p/c-%E3%81%8B%E3%82%89-powershell-%E3%82%92-c-cli-dll-%E7%B5%8C%E7%94%B1%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86/</link><pubDate>Wed, 16 Apr 2025 01:58:03 +0900</pubDate><guid>http://kenji.blog/ko/p/c-%E3%81%8B%E3%82%89-powershell-%E3%82%92-c-cli-dll-%E7%B5%8C%E7%94%B1%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86/</guid><description>&lt;img src="http://kenji.blog/p/c-%E3%81%8B%E3%82%89-powershell-%E3%82%92-c-cli-dll-%E7%B5%8C%E7%94%B1%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86/img.png" alt="Featured image of post 'C++에서 PowerShell을 C++/CLI DLL을 통해 실행하는 방법'" />&lt;h1 id="-c에서-powershell을-ccli-dll을-통해-실행하는-방법-visual-studio-2022--c">🎯 C++에서 PowerShell을 C++/CLI DLL을 통해 실행하는 방법 (Visual Studio 2022 / C++)
&lt;/h1>&lt;h2 id="-전체-구조">✅ 전체 구조
&lt;/h2>&lt;h3 id="--cli-래퍼-dll-ccli">🔹 ① CLI 래퍼 DLL (C++/CLI)
&lt;/h3>&lt;p>PowerShell 스크립트를 실행하는 기능을 제공합니다.&lt;/p>
&lt;h3 id="--네이티브-c-호출자">🔹 ② 네이티브 C++ 호출자
&lt;/h3>&lt;p>CLI DLL을 호출하여 PowerShell 스크립트를 실행합니다.&lt;/p>
&lt;hr>
&lt;h2 id="-단계-1-cli-래퍼-dll-프로젝트-생성">🔧 단계 1: CLI 래퍼 DLL 프로젝트 생성
&lt;/h2>&lt;h3 id="1-프로젝트-생성">1. 프로젝트 생성
&lt;/h3>&lt;ul>
&lt;li>[새로 만들기] → [C++] → &lt;strong>CLR 클래스 라이브러리 (.NET Framework)&lt;/strong>&lt;/li>
&lt;li>이름：&lt;code>PowerShellWrapper&lt;/code>&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>💡 이 템플릿이 표시되지 않는 경우, &amp;ldquo;.NET 데스크톱 개발&amp;rdquo; 워크로드를 설치하세요.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h3 id="2-nuget-패키지-추가">2. NuGet 패키지 추가
&lt;/h3>&lt;ol>
&lt;li>프로젝트 우클릭 → [NuGet 패키지 관리]&lt;/li>
&lt;li>&lt;code>System.Management.Automation&lt;/code> 검색 및 설치&lt;br>
(버전 5.x 또는 7.x)&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h3 id="3-cli-측-코드-구현">3. CLI 측 코드 구현
&lt;/h3>&lt;h4 id="powershellwrapperh">PowerShellWrapper.h
&lt;/h4>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#pragma once
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">namespace&lt;/span> &lt;span class="n">PowerShellWrapper&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">public&lt;/span> &lt;span class="n">ref&lt;/span> &lt;span class="k">class&lt;/span> &lt;span class="nc">PowerShellExecutor&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">String&lt;/span>&lt;span class="o">^&lt;/span> &lt;span class="n">Execute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">^&lt;/span> &lt;span class="n">script&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="powershellwrappercpp">PowerShellWrapper.cpp
&lt;/h4>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;#34;PowerShellWrapper.h&amp;#34;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Management&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Automation&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Collections&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">ObjectModel&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">String&lt;/span>&lt;span class="o">^&lt;/span> &lt;span class="n">PowerShellWrapper&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">PowerShellExecutor&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Execute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="o">^&lt;/span> &lt;span class="n">script&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PowerShell&lt;/span>&lt;span class="o">^&lt;/span> &lt;span class="n">ps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">PowerShell&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Create&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ps&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">AddScript&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">script&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Collection&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">PSObject&lt;/span>&lt;span class="o">^&amp;gt;^&lt;/span> &lt;span class="n">results&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ps&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">Invoke&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">System&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Text&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">StringBuilder&lt;/span>&lt;span class="o">^&lt;/span> &lt;span class="n">sb&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcnew&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Text&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">StringBuilder&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="nf">each&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">PSObject&lt;/span>&lt;span class="o">^&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="n">in&lt;/span> &lt;span class="n">results&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sb&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">AppendLine&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">ToString&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">sb&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">ToString&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-단계-2-네이티브-c-측에서-호출">🔧 단계 2: 네이티브 C++ 측에서 호출
&lt;/h2>&lt;h3 id="1-c-콘솔-앱-프로젝트-생성">1. C++ 콘솔 앱 프로젝트 생성
&lt;/h3>&lt;ul>
&lt;li>이름：&lt;code>NativeApp&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="2-참조-설정">2. 참조 설정
&lt;/h3>&lt;ul>
&lt;li>프로젝트 우클릭 → [참조 추가] → [프로젝트] → &lt;code>PowerShellWrapper&lt;/code> 추가&lt;/li>
&lt;li>[구성 속성] → [C/C++] → [공용 언어 런타임 지원] → &lt;strong>/clr&lt;/strong> 로 변경&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 id="3-실행-코드-maincpp">3. 실행 코드 (main.cpp)
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#using &amp;lt;System.dll&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#using &amp;#34;..\\PowerShellWrapper\\Debug\\PowerShellWrapper.dll&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">System&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">PowerShellWrapper&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PowerShellExecutor&lt;/span>&lt;span class="o">^&lt;/span> &lt;span class="n">executor&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcnew&lt;/span> &lt;span class="n">PowerShellExecutor&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">String&lt;/span>&lt;span class="o">^&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">executor&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">Execute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Get-Process | Select-Object -First 1&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Console&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">WriteLine&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="-보충-idl--tlb--com-등록">💡 보충 (IDL / TLB / COM 등록)
&lt;/h2>&lt;ul>
&lt;li>이 구성은 COM이 아닌 .NET DLL을 직접 참조하는 방식이므로, &lt;strong>IDL이나 TLB, COM 등록이 필요하지 않습니다&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-최종-구성">✅ 최종 구성
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Solution
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── PowerShellWrapper (C++/CLI DLL)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── PowerShellExecutor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── NativeApp (C++ EXE)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── main.cpp → DLL 호출
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr></description></item><item><title>'Windows 라이선스 상태를 확인하는 명령어'</title><link>http://kenji.blog/ko/p/windows-%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/</link><pubDate>Mon, 14 Apr 2025 00:41:45 +0900</pubDate><guid>http://kenji.blog/ko/p/windows-%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/</guid><description>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img_1.png" alt="Featured image of post 'Windows 라이선스 상태를 확인하는 명령어'" />&lt;h1 id="windows-라이선스-상태를-확인하는-방법-명령어-하나로-ok">[Windows] 라이선스 상태를 확인하는 방법 (명령어 하나로 OK)
&lt;/h1>&lt;p>Windows 라이선스가 정상적으로 인증되어 있는지 궁금했던 적이 있으신가요?&lt;/p>
&lt;p>그럴 때 유용한 것이 &lt;strong>명령어 한 번으로 라이선스 정보를 확인할 수 있는 방법&lt;/strong> 입니다. 다음 단계를 실행하는 것만으로 현재 라이선스 상태를 쉽게 체크할 수 있습니다.&lt;/p>
&lt;h2 id="라이선스-상태를-확인하는-명령어">라이선스 상태를 확인하는 명령어
&lt;/h2>&lt;p>Windows에 기본 탑재된 스크립트 도구를 사용하여 라이선스 정보를 표시할 수 있습니다. 사용하는 명령어는 다음과 같습니다:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">slmgr /dli
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이 명령어를 실행하면 라이선스의 일부 정보가 창으로 표시됩니다.&lt;/p>
&lt;h2 id="실행-방법">실행 방법
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>&amp;ldquo;시작 메뉴&amp;quot;에서 &amp;ldquo;cmd&amp;quot;를 입력하고, 명령 프롬프트를 우클릭 → &amp;ldquo;관리자 권한으로 실행&amp;rdquo;&lt;/strong> 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>명령 프롬프트에 다음을 입력하고 Enter 키를 누릅니다:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">slmgr /dli
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>몇 초 기다리면 다음과 같은 라이선스 정보가 표시됩니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img.png"
width="346"
height="198"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img_hu36ac086b0626fce0cec542003390f65d_5495_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img_hu36ac086b0626fce0cec542003390f65d_5495_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="Windows 라이선스 확인 화면"
class="gallery-image"
data-flex-grow="174"
data-flex-basis="419px"
>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="표시되는-주요-정보">표시되는 주요 정보
&lt;/h2>&lt;ul>
&lt;li>제품 키의 일부&lt;/li>
&lt;li>라이선스 종류 (리테일, OEM 등)&lt;/li>
&lt;li>라이선스 상태 (유효, 만료, 미인증 등)&lt;/li>
&lt;/ul>
&lt;h2 id="더-자세한-정보를-알고-싶다면">더 자세한 정보를 알고 싶다면?
&lt;/h2>&lt;p>다음과 같은 명령어도 있습니다:&lt;/p>
&lt;ul>
&lt;li>&lt;code>slmgr /dlv&lt;/code> : 더 자세한 라이선스 정보를 표시&lt;/li>
&lt;li>&lt;code>slmgr /xpr&lt;/code> : 라이선스 만료일(영구 여부 등)을 표시&lt;/li>
&lt;/ul>
&lt;h2 id="요약">요약
&lt;/h2>&lt;p>Windows 라이선스 상태는 명령어 하나로 쉽게 확인할 수 있습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>간단 확인&lt;/strong> : &lt;code>slmgr /dli&lt;/code>&lt;/li>
&lt;li>&lt;strong>자세한 확인&lt;/strong> : &lt;code>slmgr /dlv&lt;/code>&lt;/li>
&lt;li>&lt;strong>만료일 확인&lt;/strong> : &lt;code>slmgr /xpr&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>라이선스에 문제가 있으면 업데이트나 일부 기능에 제한이 생길 수도 있으므로, 정기적으로 확인해 두면 안심할 수 있습니다.&lt;/p></description></item><item><title>'iOS용 ffmpeg 파라미터'</title><link>http://kenji.blog/ko/p/ios-%E5%90%91%E3%81%91%E3%81%AE-ffmpeg-%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF/</link><pubDate>Sun, 02 Mar 2025 04:16:07 +0900</pubDate><guid>http://kenji.blog/ko/p/ios-%E5%90%91%E3%81%91%E3%81%AE-ffmpeg-%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF/</guid><description>&lt;img src="http://kenji.blog/p/ios-%E5%90%91%E3%81%91%E3%81%AE-ffmpeg-%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF/img.png" alt="Featured image of post 'iOS용 ffmpeg 파라미터'" />&lt;h1 id="ios에-최적화된-ffmpeg-변환-파라미터">iOS에 최적화된 ffmpeg 변환 파라미터
&lt;/h1>&lt;p>iOS 기기(iPhone이나 iPad)에서 원활하게 재생할 수 있도록 동영상을 변환하기 위한 &lt;code>ffmpeg&lt;/code> 명령어를 소개합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ffmpeg -i input.mp4 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-c:v libx264 -profile:v high -level 4.1 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-vf &lt;span class="s2">&amp;#34;scale=1920:-2&amp;#34;&lt;/span> -r &lt;span class="m">30&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-crf &lt;span class="m">20&lt;/span> -preset slow &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-c:a aac -b:a 128k -ar &lt;span class="m">48000&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-movflags +faststart output.mp4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="각-옵션의-의미-간단한-해설">각 옵션의 의미 (간단한 해설)
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>옵션&lt;/th>
&lt;th>설명&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>-i input.mp4&lt;/code>&lt;/td>
&lt;td>입력 파일 (변환할 원본 동영상)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-c:v libx264&lt;/code>&lt;/td>
&lt;td>H.264로 영상을 인코딩 (iOS 지원)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-profile:v high -level 4.1&lt;/code>&lt;/td>
&lt;td>iOS에서 널리 호환되는 프로파일과 레벨&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-vf &amp;quot;scale=1920:-2&amp;quot;&lt;/code>&lt;/td>
&lt;td>폭 1920px로 리사이즈, 높이는 종횡비 유지하여 자동 조정&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-r 30&lt;/code>&lt;/td>
&lt;td>프레임 레이트를 30fps로 변환&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-crf 20&lt;/code>&lt;/td>
&lt;td>영상 품질 (수치가 낮을수록 고화질, 권장 18～23)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-preset slow&lt;/code>&lt;/td>
&lt;td>인코딩 속도와 압축률의 균형 (slow는 고압축·고화질)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-c:a aac&lt;/code>&lt;/td>
&lt;td>오디오를 AAC 형식으로 인코딩&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-b:a 128k&lt;/code>&lt;/td>
&lt;td>오디오 비트레이트를 128kbps로 설정&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-ar 48000&lt;/code>&lt;/td>
&lt;td>오디오 샘플링 레이트를 48kHz로 설정 (iOS 권장)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-movflags +faststart&lt;/code>&lt;/td>
&lt;td>동영상 시작 부분에 인덱스를 배치하여, &lt;strong>Web이나 iOS에서의 스트리밍 재생을 고속화&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;p>이 설정으로 변환된 동영상은 iPhone이나 iPad 등 Apple 기기에서 높은 호환성과 원활한 재생을 기대할 수 있습니다.&lt;/p>
&lt;hr>
&lt;p>필요에 따라 해상도나 비트레이트를 변경하여 파일 크기나 화질을 조정할 수 있습니다. 고화질이 필요한 경우에는 &lt;code>-crf&lt;/code>를 18 전후로, 파일 크기를 줄이고 싶은 경우에는 22～25로 설정해 보세요.&lt;/p></description></item><item><title>'Android (Google Pixel) 단말기 소프트웨어 복원(초기화·복구) 절차'</title><link>http://kenji.blog/ko/p/androidgoogle-pixel%E7%AB%AF%E6%9C%AB%E3%81%AE%E5%BE%A9%E5%85%83%E6%89%8B%E9%A0%86/</link><pubDate>Fri, 28 Feb 2025 01:20:41 +0900</pubDate><guid>http://kenji.blog/ko/p/androidgoogle-pixel%E7%AB%AF%E6%9C%AB%E3%81%AE%E5%BE%A9%E5%85%83%E6%89%8B%E9%A0%86/</guid><description>&lt;img src="http://kenji.blog/p/androidgoogle-pixel%E7%AB%AF%E6%9C%AB%E3%81%AE%E5%BE%A9%E5%85%83%E6%89%8B%E9%A0%86/pixel_restore_eyecatch_1788588727945.jpg" alt="Featured image of post 'Android (Google Pixel) 단말기 소프트웨어 복원(초기화·복구) 절차'" />&lt;h1 id="android-google-pixel-단말기-복원-절차">Android (Google Pixel) 단말기 복원 절차
&lt;/h1>&lt;p>Google Pixel 단말기가 &amp;lsquo;재부팅을 반복하는(무한 부팅)&amp;rsquo; 경우, &amp;lsquo;로고 화면에서 넘어가지 않는&amp;rsquo; 경우, 또는 &amp;lsquo;동작이 극도로 불안정해진&amp;rsquo; 경우 등 심각한 시스템 문제에 직면했을 때, Google이 제공하는 공식 &lt;strong>&amp;lsquo;Pixel Update and Software Repair&amp;rsquo;&lt;/strong> 도구를 사용하면 브라우저를 통해 안전하게 단말기의 소프트웨어를 복구(복원)할 수 있습니다.&lt;/p>
&lt;p>본 기사에서는 그 구체적인 절차와 주의사항에 대해 자세히 설명합니다.&lt;/p>
&lt;hr>
&lt;h2 id="1-복원-도구에-접속하기">1. 복원 도구에 접속하기
&lt;/h2>&lt;p>먼저 PC(Windows 또는 Mac)의 브라우저(Google Chrome 또는 Microsoft Edge 권장)에서 다음 공식 복구 도구 페이지에 접속합니다.&lt;/p>
&lt;p>🔗 &lt;strong>&lt;a class="link" href="https://pixelrepair.withgoogle.com/carrier_selection" target="_blank" rel="noopener"
>Pixel Update and Software Repair 공식 사이트&lt;/a>&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>※주의사항※&lt;/strong>
복원 처리를 실행하면 단말기 내의 데이터(사진, 앱, 연락처 등)가 &lt;strong>모두 삭제(초기화)&lt;/strong> 될 수 있습니다. 조작이 가능한 상태라면 사전에 반드시 Google 드라이브 등에 백업을 진행해 주세요.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="2-복원을-위한-사전-준비">2. 복원을 위한 사전 준비
&lt;/h2>&lt;p>원활한 작업을 위해 다음을 준비해 둡니다.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>배터리 충전&lt;/strong>
도중에 전원이 꺼지면 단말기가 벽돌이 될(완전히 고장 날) 우려가 있습니다. 최소 50% 이상, 가급적이면 충분히 충전해 두세요.&lt;/li>
&lt;li>&lt;strong>정품 USB 케이블 준비&lt;/strong>
데이터 전송이 안정적으로 이루어질 수 있도록 단말기에 동봉된 정품 USB-C 케이블을 사용하는 것을 강력히 권장합니다.&lt;/li>
&lt;li>&lt;strong>(필요에 따라) 드라이버 설치&lt;/strong>
Windows PC를 사용할 경우 디바이스가 제대로 인식되지 않을 수 있습니다. 그런 경우에는 &lt;a class="link" href="https://developer.android.com/studio/run/win-usb?hl=ko" target="_blank" rel="noopener"
>Google USB 드라이버&lt;/a>를 설치해 주세요.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="3-구체적인-복원-단계">3. 구체적인 복원 단계
&lt;/h2>&lt;p>준비가 완료되면 화면의 지시에 따라 복원을 진행합니다.&lt;/p>
&lt;h3 id="step-1-통신사-선택-및-단말기-연결">Step 1: 통신사 선택 및 단말기 연결
&lt;/h3>&lt;p>사이트를 열면 가장 먼저 통신사(이동통신사)를 선택하는 화면이 표시됩니다. 자급제(SIM 프리) 버전이거나 통신사 제한이 없는 경우에는 &amp;lsquo;기타(Other)&amp;rsquo; 등을 선택합니다.
그 후 PC와 Pixel 단말기를 USB 케이블로 연결합니다.&lt;/p>
&lt;h3 id="step-2-단말기를-rescue-modefastboot-모드로-전환하기">Step 2: 단말기를 &amp;lsquo;Rescue Mode(Fastboot 모드)&amp;lsquo;로 전환하기
&lt;/h3>&lt;p>화면의 지시에 따라 단말기의 전원을 끈 상태에서 &lt;strong>&amp;lsquo;전원 버튼&amp;rsquo;과 &amp;lsquo;볼륨 작게 버튼&amp;rsquo;을 동시에 길게 눌러&lt;/strong>, Fastboot 모드(검은 배경에 안드로이드 로봇이 쓰러져 있는 듯한 화면)를 실행합니다.&lt;/p>
&lt;h3 id="step-3-pc-측에서-디바이스-인식시키기">Step 3: PC 측에서 디바이스 인식시키기
&lt;/h3>&lt;p>브라우저에서 &amp;lsquo;디바이스 연결&amp;rsquo; 버튼을 클릭하면 브라우저 팝업이 열리고, 연결된 Pixel 단말기가 목록에 표시됩니다. 대상 단말기를 선택하여 연결을 허용합니다.&lt;/p>
&lt;h3 id="step-4-소프트웨어-다운로드-및-설치">Step 4: 소프트웨어 다운로드 및 설치
&lt;/h3>&lt;p>단말기가 인식되면 자동으로 최적의 버전인 Android OS(펌웨어)가 선정됩니다. &amp;lsquo;설치&amp;rsquo;를 클릭하면 PC 측에 소프트웨어가 다운로드되고, 이어서 바로 단말기에 쓰기(플래싱)가 시작됩니다.&lt;/p>
&lt;blockquote>
&lt;p>⚠️ &lt;strong>경고:&lt;/strong> 이 과정 중에는 ** 절대로 USB 케이블을 뽑거나 PC의 전원을 끄지 마세요.**&lt;/p>
&lt;/blockquote>
&lt;h3 id="step-5-완료-및-초기-설정">Step 5: 완료 및 초기 설정
&lt;/h3>&lt;p>진행률 표시줄이 100%가 되고 &amp;lsquo;완료&amp;rsquo; 메시지가 표시되면 복원 성공입니다. 단말기가 자동으로 재부팅되며, 구입 시와 동일한 초기 설정 화면(&amp;lsquo;안녕하세요&amp;rsquo; 화면)이 표시됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="요약">요약
&lt;/h2>&lt;p>Google Pixel의 공식 복구 도구는 특별한 명령어(adb나 fastboot)를 직접 입력하지 않아도, 브라우저 상의 클릭 조작만으로 안전하게 펌웨어를 다시 설치할 수 있는 매우 훌륭한 도구입니다.&lt;/p>
&lt;p>단말기 이상으로 매장에 방문하기 전에, 이 절차를 한 번 시도해 봄으로써 의외로 쉽게 문제가 해결될 수도 있습니다. 꼭 참고해 보세요.&lt;/p></description></item><item><title>'curl로 Gmail 보내기'</title><link>http://kenji.blog/ko/p/gmail%E3%82%92curl%E3%81%8B%E3%82%89%E9%80%81%E3%82%8B/</link><pubDate>Thu, 27 Feb 2025 02:13:31 +0900</pubDate><guid>http://kenji.blog/ko/p/gmail%E3%82%92curl%E3%81%8B%E3%82%89%E9%80%81%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/gmail%E3%82%92curl%E3%81%8B%E3%82%89%E9%80%81%E3%82%8B/img.png" alt="Featured image of post 'curl로 Gmail 보내기'" />&lt;h1 id="curl로-gmail-보내기">curl로 Gmail 보내기
&lt;/h1>&lt;h2 id="1-앱-비밀번호-얻기">1. 앱 비밀번호 얻기
&lt;/h2>&lt;p>&lt;a class="link" href="https://myaccount.google.com/apppasswords" target="_blank" rel="noopener"
>https://myaccount.google.com/apppasswords&lt;/a>
위의 링크를 클릭하여 앱 이름을 입력합니다.
생성된 비밀번호를 저장합니다.&lt;/p>
&lt;h2 id="2-curl-명령어로-메일-보내기">2. curl 명령어로 메일 보내기
&lt;/h2>&lt;p>아래의 명령어를 실행합니다.&lt;/p>
&lt;p>다음 예제에서는 mail.txt에 메일 내용을 작성합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-mail.txt" data-lang="mail.txt">&lt;span class="line">&lt;span class="cl">From: from@gmail.com
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">To: to@gmail.com
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Subject: 테스트 메일
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Content-Type: text/plain; charset=&amp;#34;UTF-8&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">테스트 메일입니다.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>위의 파일을 작성하고, 아래의 명령어를 실행합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl --url &lt;span class="s2">&amp;#34;smtps://smtp.gmail.com:465&amp;#34;&lt;/span> --ssl-reqd --mail-from &lt;span class="s2">&amp;#34;from@gmail.com&amp;#34;&lt;/span> --mail-rcpt &lt;span class="s2">&amp;#34;to@gmail.com&amp;#34;&lt;/span> --user &lt;span class="s2">&amp;#34;from@gmail.com:xxxxxxxxxxxxxxxx&amp;#34;&lt;/span> --upload-file mail.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>※ xxxxxxxxxxxxxxxx는 앱 비밀번호로 바꿔주세요.&lt;/p></description></item><item><title>'Python 코드 조각'</title><link>http://kenji.blog/ko/p/python%E3%82%B3%E3%83%BC%E3%83%89%E7%89%87/</link><pubDate>Mon, 24 Feb 2025 18:21:14 +0900</pubDate><guid>http://kenji.blog/ko/p/python%E3%82%B3%E3%83%BC%E3%83%89%E7%89%87/</guid><description>&lt;img src="http://kenji.blog/p/python%E3%82%B3%E3%83%BC%E3%83%89%E7%89%87/img.png" alt="Featured image of post 'Python 코드 조각'" />&lt;p>표준 라이브러리를 사용한 샘플 코드 소개입니다.&lt;/p>
&lt;h1 id="이미지-다운로드-및-표시하기">이미지 다운로드 및 표시하기
&lt;/h1>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">urllib.request&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">tempfile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">os&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">webbrowser&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">time&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;https://www.aomori-ringo.or.jp/kids/wp-content/uploads/2021/11/apple.png&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="n">urllib&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">request&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">urlopen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">img_data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 임시 파일에 저장하여 표시&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">with&lt;/span> &lt;span class="n">tempfile&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">NamedTemporaryFile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">delete&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">False&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">suffix&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;.png&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">tmp&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">tmp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">img_data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;file://&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">tmp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">webbrowser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;file://&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">tmp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">except&lt;/span> &lt;span class="ne">Exception&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;에러가 발생했습니다: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">finally&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="s1">&amp;#39;tmp&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">locals&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">os&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">unlink&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">tmp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 임시 파일 삭제&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>'ChatGPT API를 curl로 호출하기'</title><link>http://kenji.blog/ko/p/chatgpt-api%E3%82%92curl%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99/</link><pubDate>Sat, 01 Feb 2025 17:15:34 +0900</pubDate><guid>http://kenji.blog/ko/p/chatgpt-api%E3%82%92curl%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99/</guid><description>&lt;img src="http://kenji.blog/p/chatgpt-api%E3%82%92curl%E3%81%8B%E3%82%89%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99/img.png" alt="Featured image of post 'ChatGPT API를 curl로 호출하기'" />&lt;h1 id="chatgpt-api를-curl로-호출하기">ChatGPT API를 curl로 호출하기
&lt;/h1>&lt;p>Windows 명령 프롬프트에서 호출하는 것을 전제로 합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl https://api.openai.com/v1/chat/completions -H &amp;#34;Content-Type: application/json&amp;#34; -H &amp;#34;Authorization: Bearer sk-proj-XXXXXXXXXXXXXXXXXXXX&amp;#34; -d &amp;#34;{&amp;#34;&amp;#34;model&amp;#34;&amp;#34;: &amp;#34;&amp;#34;gpt-3.5-turbo&amp;#34;&amp;#34;,&amp;#34;&amp;#34;messages&amp;#34;&amp;#34;: [{&amp;#34;&amp;#34;role&amp;#34;&amp;#34;: &amp;#34;&amp;#34;system&amp;#34;&amp;#34;, &amp;#34;&amp;#34;content&amp;#34;&amp;#34;: &amp;#34;&amp;#34;간사이 사투리로 대답해 주세요.&amp;#34;&amp;#34;}, {&amp;#34;&amp;#34;role&amp;#34;&amp;#34;: &amp;#34;&amp;#34;user&amp;#34;&amp;#34;, &amp;#34;&amp;#34;content&amp;#34;&amp;#34;: &amp;#34;&amp;#34;여기에 보낼 메시지를 입력하세요&amp;#34;&amp;#34;}]}&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>'고배당주 요약'</title><link>http://kenji.blog/ko/p/%E9%AB%98%E9%85%8D%E5%BD%93%E6%A0%AA%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Sun, 22 Dec 2024 00:56:14 +0900</pubDate><guid>http://kenji.blog/ko/p/%E9%AB%98%E9%85%8D%E5%BD%93%E6%A0%AA%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>&lt;img src="http://kenji.blog/p/%E9%AB%98%E9%85%8D%E5%BD%93%E6%A0%AA%E3%81%BE%E3%81%A8%E3%82%81/img.png" alt="Featured image of post '고배당주 요약'" />&lt;h1 id="고배당주-요약">고배당주 요약
&lt;/h1>&lt;ol>
&lt;li>미쓰비시UFJ파이낸셜그룹 (8306)&lt;/li>
&lt;li>미쓰이스미토모파이낸셜그룹 (8316)&lt;/li>
&lt;li>미쓰비시상사 (8058)&lt;/li>
&lt;li>이토추상사 (8001)&lt;/li>
&lt;li>NTT (9432)&lt;/li>
&lt;li>KDDI (9433)&lt;/li>
&lt;li>오키나와 셀룰러 전화 (9436)&lt;/li>
&lt;li>도쿄해상홀딩스 (8766)&lt;/li>
&lt;li>토요타자동차 (7203)&lt;/li>
&lt;li>야마하발동기 (7272)&lt;/li>
&lt;li>아사히그룹홀딩스 (2502)&lt;/li>
&lt;li>기린홀딩스 (2503)&lt;/li>
&lt;li>JT (2914)&lt;/li>
&lt;li>브리지스톤 (5108)&lt;/li>
&lt;li>다이와하우스공업 (1925)&lt;/li>
&lt;li>세키스이하우스 (1928)&lt;/li>
&lt;li>교세라 (6971)&lt;/li>
&lt;li>신에츠화학공업 (4063)&lt;/li>
&lt;li>닛토덴코 (6988)&lt;/li>
&lt;li>오릭스 (8591)&lt;/li>
&lt;li>미쓰비시HC캐피탈 (8593)&lt;/li>
&lt;li>휴릭 (3003)&lt;/li>
&lt;/ol></description></item><item><title>'목표'</title><link>http://kenji.blog/ko/p/%E7%9B%AE%E6%A8%99/</link><pubDate>Sun, 08 Dec 2024 03:32:34 +0900</pubDate><guid>http://kenji.blog/ko/p/%E7%9B%AE%E6%A8%99/</guid><description>&lt;img src="http://kenji.blog/p/%E7%9B%AE%E6%A8%99/img.png" alt="Featured image of post '목표'" />&lt;h1 id="장기적인-목표">장기적인 목표
&lt;/h1>&lt;ul>
&lt;li>1년 후
&lt;ul>
&lt;li>사업을 시작한다&lt;/li>
&lt;li>HP(홈페이지)를 제작하여, 소프트웨어(무료)를 출시한다&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>2년 후
&lt;ul>
&lt;li>연 매출 1000만 엔&lt;/li>
&lt;li>서적을 출판한다&lt;/li>
&lt;li>소프트웨어(유료)를 출시한다&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>3년 후
&lt;ul>
&lt;li>연 매출 1억 엔&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>5년 후
&lt;ul>
&lt;li>연 매출 10억 엔&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>10년 후
&lt;ul>
&lt;li>연 매출 100억 엔&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h1 id="단기적인-목표">단기적인 목표
&lt;/h1>&lt;ul>
&lt;li>1개월 후
&lt;ul>
&lt;li>사업 계획서를 작성한다&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>3개월 후
&lt;ul>
&lt;li>사업을 시작하기 위한 자금을 조달한다 500만 엔 정도&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>6개월 후
&lt;ul>
&lt;li>사업을 시작한다&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>1년 후
&lt;ul>
&lt;li>사업을 궤도에 올린다&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h1 id="당장의-과제">당장의 과제
&lt;/h1>&lt;ol>
&lt;li>목표와 비전의 명확화&lt;br>
목적: 왜 소프트웨어를 개발하는가?
예: 문제를 해결한다, 새로운 가치를 제공한다, 특정 틈새시장을 노린다 등.
비전: 소프트웨어를 통해 어떤 미래를 실현하고 싶은가?
예: 업무 효율화, 일상생활의 편리함, 교육의 질 향상 등.&lt;/li>
&lt;li>시장 조사와 니즈 분석&lt;br>
타깃 사용자: 소프트웨어를 사용하는 사람은 누구인가? 연령대, 직업, 관심사 등을 구체적으로 설정.
경쟁사 조사: 같은 분야에 경쟁사가 있는가? 어떤 강점·약점이 있는지 분석.
니즈 특정: 타깃 사용자의 미해결 과제나 요구를 파악.&lt;/li>
&lt;li>소프트웨어 설계와 특징&lt;br>
기본 기능: 필수 기능을 리스트업. 예: 사용자 인증, 데이터 저장, 분석 기능 등.
차별화 포인트: 타사 제품과 비교하여, 유니크한 점을 명확히 한다. 예: 심플한 UI, AI 활용, 고도의 커스터마이즈성.
기술 사양: 사용할 프로그래밍 언어, 프레임워크, 데이터베이스 등.&lt;/li>
&lt;li>개발 계획과 리소스 배분&lt;br>
개발 일정: 프로젝트의 단계별 타임라인을 설정. 예: 프로토타입 개발, 테스트, 정식 출시.
팀 구성: 필요한 인재와 스킬셋(프로그래머, 디자이너, 마케팅 담당 등).
예산: 개발 비용, 마케팅 비용, 운영 비용을 추산.&lt;/li>
&lt;li>마케팅과 수익 모델&lt;br>
프로모션 방법: SNS, 웹사이트, 광고 등을 활용하여 인지도를 향상.
수익화 전략: 무료판＋유료판, 월간 구독, 광고 수입 등의 선택지를 검토.
사용자 획득 전략: 무료 트라이얼 제공, 입소문 촉진, 사용자 커뮤니티 형성 등.&lt;/li>
&lt;li>운영과 스케일링&lt;br>
출시 후 운영: 사용자로부터의 피드백 수집, 버그 수정, 기능 추가.
성장 전략: 사용자 수를 늘리는 방법, 해외 진출이나 신기능 개발을 계획.
리스크 관리: 법적 문제나 기술적 트러블에 대한 대응책을 준비.&lt;/li>
&lt;/ol></description></item><item><title>About</title><link>http://kenji.blog/ko/about/</link><pubDate>Sat, 07 Dec 2024 00:00:00 +0000</pubDate><guid>http://kenji.blog/ko/about/</guid><description>&lt;p>&lt;img src="http://kenji.blog/about/img_1.png"
width="400"
height="328"
srcset="http://kenji.blog/about/img_1_huacf3b85c792452cf72c6344c4d0caf3d_104793_480x0_resize_box_3.png 480w, http://kenji.blog/about/img_1_huacf3b85c792452cf72c6344c4d0caf3d_104793_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="121"
data-flex-basis="292px"
>&lt;/p>
&lt;h1 id="이-블로그에는-어떤-글을-쓰나요">이 블로그에는 어떤 글을 쓰나요?
&lt;/h1>&lt;p>안녕하세요!&lt;/p>
&lt;p>오늘은 &amp;ldquo;이 블로그에는 어떤 글을 쓰나요?&amp;ldquo;라는 조금 소박하지만, 자주 듣는 질문에 대해 이야기해 볼까 합니다.&lt;/p>
&lt;p>흔히들 블로그는 &amp;lsquo;전문적인 정보를 발신하는 곳&amp;rsquo;이라고 생각하기 쉽습니다. 예를 들어, &amp;lsquo;기술 블로그라면 기술적인 내용만 담담하게 써야 한다&amp;rsquo;거나, &amp;lsquo;일기는 일기, 일 이야기는 일&amp;rsquo;로 나눠야 한다는 식이죠.&lt;/p>
&lt;p>하지만 그렇게 선을 긋다 보면 쓰는 사람도, 읽는 사람도 왠지 숨막히지 않나요?&lt;/p>
&lt;p>이 블로그에서는 물론 기술 이야기가 메인입니다. 프로그래밍이나 개발 주변의 소소한 발견 같은 것 말이죠. 그런 이야기를 좋아하는 분들이라면 즐겁게 읽으실 수 있을 거예요.&lt;/p>
&lt;p>그렇다고 해서 그것만 있는 건 아닙니다.&lt;/p>
&lt;p>일상의 소소한 깨달음이나 취미 이야기 같은 것도 틈틈이 적고 있습니다. 산책하다 문득 든 생각이나 최근 읽은 만화 이야기 같은 것들요. 그런 것들이 의외로 누군가에게 도움이 되기도 해서 재미있거든요.&lt;/p>
&lt;p>&amp;ldquo;기술 블로그인데 상관없는 이야기를 해도 돼?&amp;ldquo;라고 생각하는 분도 계실지 모릅니다. 하지만 바로 그 점이 포인트입니다.&lt;/p>
&lt;p>일도 취미도, 일상의 고민도 모두 연결되어 있다고 생각하거든요. 그래서 이 블로그도 그런 &amp;lsquo;연결고리&amp;rsquo;나 &amp;lsquo;흐름&amp;rsquo; 속에서 쓰고 있습니다.&lt;/p>
&lt;p>그러니 혹시라도 궁금한 점이 있다면 편하게 댓글 남겨주세요. 생각난 점이나 가벼운 감상도 대환영입니다.&lt;/p>
&lt;p>이 블로그가 그런 느슨한 소통의 장이 되었으면 좋겠습니다.&lt;/p></description></item><item><title>'가죽 제품 유지 관리'</title><link>http://kenji.blog/ko/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/</link><pubDate>Wed, 30 Oct 2024 00:31:46 +0900</pubDate><guid>http://kenji.blog/ko/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/</guid><description>&lt;img src="http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/img.png" alt="Featured image of post '가죽 제품 유지 관리'" />&lt;p>최근 가죽 제품에 관심을 가지게 되어, 다양한 아이템을 구매하고 있습니다. 그러던 중 가죽 제품의 유지 관리에도 관심이 생겨, 관련 아이템을 몇 가지 갖추었기에 소개해 드립니다.&lt;/p>
&lt;h1 id="최근-구매한-가죽-제품-유지-관리-제품">최근 구매한 가죽 제품 유지 관리 제품
&lt;/h1>&lt;h2 id="mmowbray-delicate-cream">M.MOWBRAY DELICATE CREAM
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image1.JPEG"
width="2048"
height="1536"
srcset="http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image1_hu2baa2860805224f535a5049b0f15689e_521448_480x0_resize_q75_box.JPEG 480w, http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image1_hu2baa2860805224f535a5049b0f15689e_521448_1024x0_resize_q75_box.JPEG 1024w"
loading="lazy"
alt="image1.JPEG"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="320px"
>&lt;/p>
&lt;p>가격: 1,320엔 정도&lt;/p>
&lt;p>이 크림은 영양 공급, 보습, 유연 효과가 있습니다.
광택은 나지 않지만, 수분이 많아 보습이 필요한 가죽에 적합합니다.
불쾌한 냄새는 아니지만, 냄새가 조금 있습니다.
무색이라 범용성이 높다고 생각합니다. 보송보송한 크림이라서
다른 크림에 비해 다소 넉넉하게 사용하는 것이 좋을지도 모릅니다.&lt;/p>
&lt;h2 id="콜로닐-1909-슈프림-크림-디럭스">콜로닐 1909 슈프림 크림 디럭스
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image3.JPEG"
width="1536"
height="1456"
srcset="http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image3_hu2e2775357ae6e9cda8b3181ed1a2c625_440198_480x0_resize_q75_box.JPEG 480w, http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image3_hu2e2775357ae6e9cda8b3181ed1a2c625_440198_1024x0_resize_q75_box.JPEG 1024w"
loading="lazy"
alt="image3.JPEG"
class="gallery-image"
data-flex-grow="105"
data-flex-basis="253px"
>&lt;/p>
&lt;p>가격: 1,777엔 정도&lt;/p>
&lt;p>유명하고 표준적이며 만능인 크림으로, 얼룩이 잘 생기지 않습니다. 가죽의 색을 보수하고 촉촉하게 해주는 크림입니다.
약간의 광택이 납니다. 백색으로 발수 효과도 기대할 수 있는 것 같습니다.&lt;/p>
&lt;h2 id="mmowbray-shoe-cream-블랙">M.MOWBRAY SHOE CREAM (블랙)
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image2.JPEG"
width="1536"
height="1295"
srcset="http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image2_hu613b0f0cd2dd5531cf18353d93b52d95_368912_480x0_resize_q75_box.JPEG 480w, http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image2_hu613b0f0cd2dd5531cf18353d93b52d95_368912_1024x0_resize_q75_box.JPEG 1024w"
loading="lazy"
alt="image2.JPEG"
class="gallery-image"
data-flex-grow="118"
data-flex-basis="284px"
>&lt;/p>
&lt;p>가격: 1,000엔 정도&lt;/p>
&lt;p>구두용 크림. 왁스, 유분, 유기 용제가 포함되어 있습니다.
가죽의 색을 보수하고 광택이 납니다. 검은색이라 검은 가죽에 적용합니다.
저는 정장 구두에 사용하고 있습니다.&lt;/p>
&lt;h2 id="mmowbray-stain-remover">M.MOWBRAY STAIN REMOVER
&lt;/h2>&lt;p>가격: 700엔 정도&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image4.JPEG"
width="983"
height="1239"
srcset="http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image4_hu683aba9e78ed7fba9d59872956b612e1_217713_480x0_resize_q75_box.JPEG 480w, http://kenji.blog/p/%E9%9D%A9%E8%A3%BD%E5%93%81%E3%81%AE%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9/image4_hu683aba9e78ed7fba9d59872956b612e1_217713_1024x0_resize_q75_box.JPEG 1024w"
loading="lazy"
alt="image4.JPEG"
class="gallery-image"
data-flex-grow="79"
data-flex-basis="190px"
>&lt;/p>
&lt;p>브러시를 샀을 때 딸려 온 것입니다.
구두용 수성 클리너. 가죽의 오염을 제거합니다.
천에 듬뿍 묻혀서, 가죽에 부드럽게 문지르면 오염이 지워집니다.&lt;/p></description></item><item><title>'한론의 면도날'</title><link>http://kenji.blog/ko/p/%E3%83%8F%E3%83%B3%E3%83%AD%E3%83%B3%E3%81%AE%E5%89%83%E5%88%80/</link><pubDate>Tue, 24 Sep 2024 18:14:34 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%8F%E3%83%B3%E3%83%AD%E3%83%B3%E3%81%AE%E5%89%83%E5%88%80/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%8F%E3%83%B3%E3%83%AD%E3%83%B3%E3%81%AE%E5%89%83%E5%88%80/img.png" alt="Featured image of post '한론의 면도날'" />&lt;h1 id="안녕하세요-오늘은-한론의-면도날에-대한-이야기입니다">안녕하세요! 오늘은 &amp;lsquo;한론의 면도날&amp;rsquo;에 대한 이야기입니다.
&lt;/h1>&lt;p>오늘은 &amp;lsquo;한론의 면도날&amp;rsquo;이라는, 조금 특이한 이름의 사고방식에 대해 써보려고 합니다. 이름만 들으면 &amp;lsquo;뭔가 무서운데…?&amp;lsquo;라고 생각할지도 모르지만, 사실은 매우 친숙하고 다정한 관점을 제시해 주는 아이디어입니다.&lt;/p>
&lt;hr>
&lt;h1 id="저-사람-나를-싫어할지도-몰라라고-생각한-적-없나요">&amp;lsquo;저 사람, 나를 싫어할지도 몰라…&amp;lsquo;라고 생각한 적 없나요?
&lt;/h1>&lt;p>예를 들어, 이런 경험 없으신가요?&lt;/p>
&lt;p>・라인(LINE) 답장이 늦다
・눈이 마주쳤는데 인사하지 않았다
・부탁한 일을 무시당했다&lt;/p>
&lt;p>그럴 때 &amp;lsquo;혹시 미움받고 있나?&amp;lsquo;라며 불안해지죠.
저도 자주 그럽니다. 그래서 혼자 우울해지곤 하죠.&lt;/p>
&lt;hr>
&lt;h1 id="한론의-면도날이란-뭘까">한론의 면도날이란 뭘까?
&lt;/h1>&lt;p>거기서 등장하는 것이 &amp;lsquo;한론의 면도날&amp;rsquo;입니다.&lt;/p>
&lt;p>이 말은 원래 영어의 &amp;ldquo;Hanlon&amp;rsquo;s Razor&amp;quot;에서 왔습니다.
의미는 대략 이렇습니다.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;악의로 설명할 수 있는 많은 것들은, 단순한 어리석음으로 설명할 수 있다&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>…조금 말이 세죠.
조금 더 부드럽게 말하면,&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;상대방이 심술궂게 구는 것처럼 보여도, 그저 깜빡했거나 부주의한 것일 뿐일 수도 있다&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>라는 사고방식입니다.&lt;/p>
&lt;hr>
&lt;h1 id="누가-처음-말했을까-로버트-j-한론이란">누가 처음 말했을까? 로버트 J. 한론이란?
&lt;/h1>&lt;p>이 말은 1980년에 출판된 &amp;lsquo;Murphy’s Law Book Two&amp;rsquo;라는 책에 처음 등장한 것으로 알려져 있습니다.&lt;/p>
&lt;p>저자 중 한 명인 &lt;strong>로버트 J. 한론&lt;/strong> 씨가 기고한 아이디어가 그대로 사용되어 &amp;lsquo;한론의 면도날&amp;rsquo;이라는 이름이 붙었습니다.&lt;/p>
&lt;p>참고로 여기서 &amp;lsquo;면도날(Razor)&amp;lsquo;이라는 것은 &amp;lsquo;불필요한 것을 잘라내고 단순하게 생각하자&amp;rsquo;는 철학적 도구 같은 의미로, 오컴의 면도날 등과 함께 사고를 정리할 때 쓰이는 표현입니다.&lt;/p>
&lt;hr>
&lt;h1 id="악의가-있었다고-생각하면-힘들어집니다">&amp;lsquo;악의가 있었다&amp;rsquo;고 생각하면 힘들어집니다
&lt;/h1>&lt;p>예를 들어, 직장에서 메일을 무시당했을 때.&lt;/p>
&lt;p>&amp;lsquo;왜 답장을 안 주지? 미움받고 있나?&amp;lsquo;라고 생각하면 점점 부정적이게 되죠.&lt;/p>
&lt;p>하지만 잘 생각해 보면,
・우연히 못 봤다
・답장을 썼는데 안 보냈다
・스마트폰 알림이 묻혔다&lt;/p>
&lt;p>이런 이유들이 의외로 많습니다.
그리고 우리 자신도 종종 저지르는 실수이기도 하죠.&lt;/p>
&lt;hr>
&lt;h1 id="내-실수에는-관대하면서-남에게는-엄격해지는-신기함">내 실수에는 관대하면서, 남에게는 엄격해지는 신기함
&lt;/h1>&lt;p>예를 들어, 친구의 라인(LINE)에 답장하는 것을 깜빡했을 때.&lt;/p>
&lt;p>&amp;lsquo;아, 미안! 알림을 못 봤어～&amp;lsquo;라며 악의 제로인 상태로 답장하곤 하죠.&lt;/p>
&lt;p>하지만 상대방이 똑같은 행동을 했을 때는 &amp;lsquo;무시당했다&amp;rsquo;고 생각하게 됩니다.&lt;/p>
&lt;p>이건 아주 흔한 일입니다.
사람은 자신의 사정은 아주 잘 이해하지만, 타인의 사정은 잘 보이지 않기 때문이죠.&lt;/p>
&lt;hr>
&lt;h1 id="악의가-있다고-단정-짓는-것은-사실-손해">&amp;lsquo;악의가 있다&amp;rsquo;고 단정 짓는 것은 사실 손해
&lt;/h1>&lt;p>상대방이 어떤 행동을 했을 때 &amp;lsquo;악의가 있다&amp;rsquo;고 단정 지으면 마음속으로 그 사람을 적으로 만들게 됩니다.&lt;/p>
&lt;p>하지만 사실은 그저 서툴렀을 뿐이거나, 다른 일로 정신이 없었을 수도 있습니다.&lt;/p>
&lt;p>물론 정말로 무례한 사람도 있고, 기분 나쁜 태도를 겪으면 상처받는 게 당연합니다.&lt;/p>
&lt;p>하지만 &amp;lsquo;분명 악의일 거야&amp;rsquo;라고 단정 짓지 않는 편이 내 마음이 조금 더 편해집니다.&lt;/p>
&lt;hr>
&lt;h1 id="그렇다고-무조건-참자는-이야기는-아닙니다">그렇다고 무조건 참자는 이야기는 아닙니다
&lt;/h1>&lt;p>여기서 오해하지 않으셨으면 하는 것은 &amp;lsquo;전부 네가 너무 예민한 거야&amp;rsquo;라고 말하려는 게 아닙니다.&lt;/p>
&lt;p>기분 나쁜 일을 겪었을 때 &amp;lsquo;그건 좀 심했지&amp;rsquo;라고 생각해도 괜찮습니다.&lt;/p>
&lt;p>다만, &amp;lsquo;저 사람은 성격이 나빠&amp;rsquo;라거나 &amp;lsquo;일부러 상처 주려고 했어&amp;rsquo;라고 단정 짓기보다는,&lt;/p>
&lt;p>&amp;lsquo;어쩌면 사정이 있었을지도 모르지&amp;rsquo; 정도의 여유를 가져보는 건 어떨까 하는 제안입니다.&lt;/p>
&lt;hr>
&lt;h1 id="결론-조금만-더-다정하게-보면-세상이-바뀔지도-모릅니다">결론: 조금만 더 다정하게 보면 세상이 바뀔지도 모릅니다
&lt;/h1>&lt;p>한론의 면도날은 &amp;lsquo;사람들에게 다정하게 대하자&amp;rsquo;라기보다는 &amp;lsquo;내 마음을 지키는 방법&amp;rsquo;이라고 생각합니다.&lt;/p>
&lt;p>사람의 행동에서 악의를 느끼면 내 마음도 각박해지니까요.&lt;/p>
&lt;p>하지만 &amp;lsquo;아마 그냥 실수이거나, 여유가 없었던 것뿐일지도 몰라&amp;rsquo;라고 생각할 수 있다면 내 마음이 조금 편안해집니다.&lt;/p>
&lt;p>그렇게 자신을 위해 사용할 수 있는 사고방식입니다.&lt;/p>
&lt;hr>
&lt;h1 id="마지막으로-여러분의-경험도-꼭-들려주세요">마지막으로: 여러분의 경험도 꼭 들려주세요
&lt;/h1>&lt;p>읽어주셔서 감사합니다.&lt;/p>
&lt;p>혹시 &amp;lsquo;이럴 때 마음이 복잡했던 적이 있어～&amp;rsquo; 하는 에피소드가 있다면 꼭 들려주세요.&lt;/p>
&lt;p>자신의 경험을 말로 표현하는 것만으로도 마음이 조금 후련해지기도 하니까요.&lt;/p>
&lt;p>그럼, 또 만나요!&lt;/p>
&lt;hr></description></item><item><title>'컴퓨터의 기본 지식'</title><link>http://kenji.blog/ko/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AD%98/</link><pubDate>Thu, 19 Sep 2024 01:10:20 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AD%98/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9F%A5%E8%AD%98/img.png" alt="Featured image of post '컴퓨터의 기본 지식'" />&lt;h1 id="컴퓨터의-기본-지식">컴퓨터의 기본 지식
&lt;/h1>&lt;p>이 페이지에서는 컴퓨터란 무엇인지에 대해 설명합니다.&lt;/p>
&lt;h2 id="컴퓨터의-정의">컴퓨터의 정의
&lt;/h2>&lt;p>컴퓨터란, 다음 5가지 장치를 가진 기계입니다.&lt;/p>
&lt;ol>
&lt;li>입력 장치&lt;/li>
&lt;li>출력 장치&lt;/li>
&lt;li>기억 장치&lt;/li>
&lt;li>제어 장치&lt;/li>
&lt;li>연산 장치&lt;/li>
&lt;/ol>
&lt;p>간단히 말해서, 어떤 &lt;code>입력&lt;/code>에 대해 특정 &lt;code>처리&lt;/code>를 수행하고 그 결과를 &lt;code>출력&lt;/code>하는 기계가 컴퓨터입니다.
&lt;code>입력&lt;/code>된 데이터를 &lt;code>기억&lt;/code>하고, &lt;code>연산&lt;/code>하며, &lt;code>출력&lt;/code>할 수 있습니다. &lt;code>제어&lt;/code>는 앞서 언급한 4가지 장치를 제어하는 역할을 가집니다.&lt;/p>
&lt;h2 id="컴퓨터를-작동시키기-위해-필요한-것">컴퓨터를 작동시키기 위해 필요한 것
&lt;/h2>&lt;p>컴퓨터를 작동시키기 위해서는 장치(하드웨어) 외에도 프로그램(소프트웨어)이 필요합니다.&lt;/p>
&lt;p>프로그램에서는 컴퓨터에게 어떤 처리를 할지 지시합니다. 프로그램은 컴퓨터가 이해할 수 있는 형식으로 작성됩니다.&lt;/p>
&lt;p>프로그램의 예로는 다음과 같은 것이 있습니다.
1부터 입력된 정수까지의 합을 구하는 프로그램&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-c++" data-lang="c++">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 필요한 기억 영역 확보
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">sum&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 출력
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;정수를 입력해 주세요: &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 입력
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cin&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 연산
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="c1">// 연산
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">sum&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 출력
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;1부터 &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;까지의 합은 &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">sum&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34;입니다.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// 종료
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>프로그램은 컴파일러에 의해 기계어로 변환되어, 컴퓨터가 실행할 수 있는 형식으로 변환됩니다.&lt;/p></description></item><item><title>'추천 iOS 앱'</title><link>http://kenji.blog/ko/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/</link><pubDate>Wed, 18 Sep 2024 23:31:20 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/</guid><description>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img.png" alt="Featured image of post '추천 iOS 앱'" />&lt;h2 id="추천-ios-앱">추천 iOS 앱
&lt;/h2>&lt;h3 id="xhttpsappsapplecomjpappxid333903271">&lt;a class="link" href="https://apps.apple.com/jp/app/x/id333903271" target="_blank" rel="noopener"
>X&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_2.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_2_hu462c57ec387ca409298a502f8a8b2494_3092_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_2_hu462c57ec387ca409298a502f8a8b2494_3092_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="instagramhttpsappsapplecomjpappinstagramid389801252">&lt;a class="link" href="https://apps.apple.com/jp/app/instagram/id389801252" target="_blank" rel="noopener"
>Instagram&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_1.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_1_huaee4f1dda91fcc48cb464b6a8341c51b_12480_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_1_huaee4f1dda91fcc48cb464b6a8341c51b_12480_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="facebookhttpsappsapplecomjpappfacebookid284882215">&lt;a class="link" href="https://apps.apple.com/jp/app/facebook/id284882215" target="_blank" rel="noopener"
>facebook&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_3.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_3_huc2d1e97510f3a51dfaec535717039904_6505_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_3_huc2d1e97510f3a51dfaec535717039904_6505_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="youtubehttpsappsapplecomjpappyoutubeid544007664">&lt;a class="link" href="https://apps.apple.com/jp/app/youtube/id544007664" target="_blank" rel="noopener"
>youtube&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_4.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_4_huc7ff17a9037ee459ec076969231732ff_2217_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_4_huc7ff17a9037ee459ec076969231732ff_2217_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="tiktokhttpsappsapplecomjpapptiktok-e38386e382a3e38383e382afe38388e38383e382afid1235601864">&lt;a class="link" href="https://apps.apple.com/jp/app/tiktok-%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%88%E3%83%83%E3%82%AF/id1235601864" target="_blank" rel="noopener"
>TikTok&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_5.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_5_hu586229f9b4cfff262ba6fda24e7ea241_6643_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_5_hu586229f9b4cfff262ba6fda24e7ea241_6643_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="microsoft-edgehttpsappsapplecomjpappmicrosoft-edge-ai-e38396e383a9e382a6e382b6id1288723196">&lt;a class="link" href="https://apps.apple.com/jp/app/microsoft-edge-ai-%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6/id1288723196" target="_blank" rel="noopener"
>Microsoft Edge&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_6.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_6_hu29f80384ce66070f1c4b087b84d37b0b_8950_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_6_hu29f80384ce66070f1c4b087b84d37b0b_8950_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="firefoxhttpsappsapplecomjpappfirefox-private-safe-browserid989804926">&lt;a class="link" href="https://apps.apple.com/jp/app/firefox-private-safe-browser/id989804926" target="_blank" rel="noopener"
>Firefox&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_7.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_7_hud4c8d2e9de7d5a057069e1bb8fe7a15f_8457_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_7_hud4c8d2e9de7d5a057069e1bb8fe7a15f_8457_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_7.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="google-chromehttpsappsapplecomjpappgoogle-chromeid535886823">&lt;a class="link" href="https://apps.apple.com/jp/app/google-chrome/id535886823" target="_blank" rel="noopener"
>Google Chrome&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_8.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_8_hucdf12dcf4c62afc76470aea9f650b47a_6392_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_8_hucdf12dcf4c62afc76470aea9f650b47a_6392_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_8.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="chatgpthttpsappsapplecomjpappchatgptid6448311069">&lt;a class="link" href="https://apps.apple.com/jp/app/chatgpt/id6448311069" target="_blank" rel="noopener"
>ChatGPT&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_9.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_9_hu159cd7f606ee564b08e18b29673e8c8f_3046_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_9_hu159cd7f606ee564b08e18b29673e8c8f_3046_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_9.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="linehttpsappsapplecomjpapplineid443904275">&lt;a class="link" href="https://apps.apple.com/jp/app/line/id443904275" target="_blank" rel="noopener"
>LINE&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_10.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_10_hud6f51ba0429c4e9ba264927e068700c9_3739_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_10_hud6f51ba0429c4e9ba264927e068700c9_3739_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_10.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="microsoft-teamshttpsappsapplecomjpappmicrosoft-teamsid1113153706">&lt;a class="link" href="https://apps.apple.com/jp/app/microsoft-teams/id1113153706" target="_blank" rel="noopener"
>Microsoft Teams&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_18.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_18_hue85e52cfe63c3e9fd5f8f47daf0356e9_5147_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_18_hue85e52cfe63c3e9fd5f8f47daf0356e9_5147_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_18.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="notionhttpsappsapplecomjpappnotion-e383a1e383a2-e382bfe382b9e382af-aiid1232780281">&lt;a class="link" href="https://apps.apple.com/jp/app/notion-%E3%83%A1%E3%83%A2-%E3%82%BF%E3%82%B9%E3%82%AF-ai/id1232780281" target="_blank" rel="noopener"
>Notion&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_19.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_19_huc41ff98efdf43db453238da8a6120bce_2546_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_19_huc41ff98efdf43db453238da8a6120bce_2546_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_19.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="goodnotes-6httpsappsapplecomjpappgoodnotes-6id1444383602">&lt;a class="link" href="https://apps.apple.com/jp/app/goodnotes-6/id1444383602" target="_blank" rel="noopener"
>Goodnotes 6&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_20.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_20_hu6abe5128292adbcb18b1e181c0e5636a_3192_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_20_hu6abe5128292adbcb18b1e181c0e5636a_3192_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_20.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="teamviewerhttpsappsapplecomjpappteamviewere381a7e383aae383a2e383bce38388e382b3e383b3e38388e383ade383bce383abid692035811">&lt;a class="link" href="https://apps.apple.com/jp/app/teamviewer%E3%81%A7%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB/id692035811" target="_blank" rel="noopener"
>TeamViewer&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_11.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_11_hu8d24bed80552a75708e386fd8f8d80c0_5132_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_11_hu8d24bed80552a75708e386fd8f8d80c0_5132_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_11.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="dropboxhttpsappsapplecomjpappdropboxid327630330">&lt;a class="link" href="https://apps.apple.com/jp/app/dropbox/id327630330" target="_blank" rel="noopener"
>DropBox&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_12.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_12_hu87adf821381dd24af677cb81324f5e4d_3950_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_12_hu87adf821381dd24af677cb81324f5e4d_3950_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_12.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="githubhttpsappsapplecomjpappgithubid1477376905">&lt;a class="link" href="https://apps.apple.com/jp/app/github/id1477376905" target="_blank" rel="noopener"
>GitHub&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_13.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_13_hu20dbed9536873940b5fb2888a85a5348_4157_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_13_hu20dbed9536873940b5fb2888a85a5348_4157_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_13.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="amazonhttpsappsapplecomjpappamazon-e382b7e383a7e38383e38394e383b3e382b0e382a2e38397e383aaid374254473">&lt;a class="link" href="https://apps.apple.com/jp/app/amazon-%E3%82%B7%E3%83%A7%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%97%E3%83%AA/id374254473" target="_blank" rel="noopener"
>Amazon&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_14.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_14_hu76d651bea9048b09443a642f4f41ce86_4111_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_14_hu76d651bea9048b09443a642f4f41ce86_4111_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_14.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="paypayhttpsappsapplecomjpapppaypay-e3839ae382a4e3839ae382a4id1435783608">&lt;a class="link" href="https://apps.apple.com/jp/app/paypay-%E3%83%9A%E3%82%A4%E3%83%9A%E3%82%A4/id1435783608" target="_blank" rel="noopener"
>PayPay&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_15.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_15_huaf4d4b4494b29706fb9cd3ac68c9ce38_4285_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_15_huaf4d4b4494b29706fb9cd3ac68c9ce38_4285_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_15.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="wolframalphahttpsappsapplecomjpappwolframalphaid548861535">&lt;a class="link" href="https://apps.apple.com/jp/app/wolframalpha/id548861535" target="_blank" rel="noopener"
>WolframAlpha&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_16.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_16_hu5eb819bf483304fdad0cb7e0cd72a169_6819_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_16_hu5eb819bf483304fdad0cb7e0cd72a169_6819_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_16.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h3 id="메루카리httpsappsapplecomjpappe38395e383aae3839ee382a2e38397e383aae381afe383a1e383abe382abe383aa-e383a1e383abe3839ae382a4e381aee382b9e3839ee3839be6b1bae6b888e381a7e38282e381a3e381a8e3818ae5be97id667861049">&lt;a class="link" href="https://apps.apple.com/jp/app/%E3%83%95%E3%83%AA%E3%83%9E%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E3%83%A1%E3%83%AB%E3%82%AB%E3%83%AA-%E3%83%A1%E3%83%AB%E3%83%9A%E3%82%A4%E3%81%AE%E3%82%B9%E3%83%9E%E3%83%9B%E6%B1%BA%E6%B8%88%E3%81%A7%E3%82%82%E3%81%A3%E3%81%A8%E3%81%8A%E5%BE%97/id667861049" target="_blank" rel="noopener"
>메루카리&lt;/a>
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_17.png"
width="72"
height="72"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_17_hu9a243187d206781377b6a667e678a3bf_3431_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81ios%E3%82%A2%E3%83%97%E3%83%AA/img_17_hu9a243187d206781377b6a667e678a3bf_3431_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_17.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p></description></item><item><title>'노부부와 당나귀 이야기'</title><link>http://kenji.blog/ko/p/%E8%80%81%E5%A4%AB%E5%A9%A6%E3%81%A8%E3%83%AD%E3%83%90%E3%81%AE%E8%A9%B1/</link><pubDate>Wed, 18 Sep 2024 00:56:59 +0900</pubDate><guid>http://kenji.blog/ko/p/%E8%80%81%E5%A4%AB%E5%A9%A6%E3%81%A8%E3%83%AD%E3%83%90%E3%81%AE%E8%A9%B1/</guid><description>&lt;img src="http://kenji.blog/p/%E8%80%81%E5%A4%AB%E5%A9%A6%E3%81%A8%E3%83%AD%E3%83%90%E3%81%AE%E8%A9%B1/img.png" alt="Featured image of post '노부부와 당나귀 이야기'" />&lt;h2 id="노부부와-당나귀-그리고-우리의-누구의-말을-들을-것인가-문제">노부부와 당나귀, 그리고 우리의 &amp;ldquo;누구의 말을 들을 것인가&amp;rdquo; 문제
&lt;/h2>&lt;p>안녕하세요!&lt;/p>
&lt;p>오늘은 &amp;ldquo;노부부와 당나귀 이야기&amp;quot;에서 조금 생각해볼 만한 점이 있어서, 그 이야기를 써보려고 합니다.&lt;/p>
&lt;p>아마 들어본 적 있는 분들도 많을 겁니다. 그 유명한 우화죠.&lt;/p>
&lt;hr>
&lt;h3 id="노부부와-당나귀-이야기란">&amp;ldquo;노부부와 당나귀 이야기&amp;quot;란?
&lt;/h3>&lt;p>옛날 옛적 어느 곳에 노부부와 당나귀 한 마리가 있었습니다.&lt;/p>
&lt;p>처음에는 할아버지가 당나귀를 타고 있었고, 할머니는 걷고 있었습니다. 그러자 지나가던 사람이 말했습니다.&lt;/p>
&lt;p>&amp;ldquo;저런 몹쓸 남자를 봤나, 나이 든 아내를 걷게 하고 혼자만 타고 가다니!&amp;rdquo;&lt;/p>
&lt;p>그 말을 들은 노부부는 이번에는 할머니가 당나귀를 타기로 했습니다. 그러자 또 다른 사람이 말했습니다.&lt;/p>
&lt;p>&amp;ldquo;여자가 당나귀를 타고 남자를 걷게 하다니, 괘씸하군!&amp;rdquo;&lt;/p>
&lt;p>그렇다면, 하고 이번에는 두 사람 모두 당나귀에 탔습니다. 그러자 또 한 소리 듣습니다.&lt;/p>
&lt;p>&amp;ldquo;불쌍한 당나귀, 두 사람이나 태우니 너무 무겁겠네!&amp;rdquo;&lt;/p>
&lt;p>그렇다면, 하고 두 사람 모두 당나귀에서 내려서 걷기 시작했습니다. 그러자 이번에는……&lt;/p>
&lt;p>&amp;ldquo;당나귀가 있는데 왜 아무도 안 타는 거지?&amp;rdquo;&lt;/p>
&lt;p>결국, 노부부는 어찌할 바를 몰라 망연자실하고 말았습니다.&lt;/p>
&lt;hr>
&lt;h3 id="모두의-의견을-듣자는-확실히-옳은-말입니다-하지만">&amp;ldquo;모두의 의견을 듣자&amp;quot;는 확실히 옳은 말입니다. 하지만……
&lt;/h3>&lt;p>이 이야기는 왠지 &amp;ldquo;아, 남의 시선만 신경 쓰면 끝이 없지&amp;quot;라는 교훈처럼 받아들여지기 쉽습니다.&lt;/p>
&lt;p>하지만 현실이란 그렇게 단순하지 않죠.&lt;/p>
&lt;p>&amp;ldquo;남의 시선 따위는 신경 쓰지 마!&amp;ldquo;라고 말하는 사람, 종종 있습니다.&lt;/p>
&lt;p>하지만, 전부 무시할 수 있느냐 하면 조금 어렵습니다. 예를 들어 SNS에 무언가를 올릴 때. 회사 회식 자리에서 무슨 말을 할지 고민할 때. 누군가의 반응이 아무래도 신경 쓰입니다.&lt;/p>
&lt;p>왜냐하면 &amp;ldquo;남의 의견&amp;quot;이란 때로는 우리의 안전이나 평가와 직결되기 때문입니다.&lt;/p>
&lt;hr>
&lt;h3 id="그렇다고는-해도-너무-휘둘리면-괴로워집니다">그렇다고는 해도, 너무 휘둘리면 괴로워집니다
&lt;/h3>&lt;p>이 이야기 속의 노부부, 아마 처음에는 그저 &amp;ldquo;어떻게 하는 게 좋을까?&amp;rdquo; 하고 생각했을 뿐일 겁니다.&lt;/p>
&lt;p>하지만 어디까지 가든 &amp;ldquo;누군가&amp;quot;는 불평을 합니다.&lt;/p>
&lt;p>그리고 &amp;ldquo;그럼 다음에는 이렇게 하자&amp;rdquo; &amp;ldquo;역시 이렇게 할까?&amp;rdquo; 하고 빙빙 돌기 시작하다가, 어느새 자신이 하고 싶은 것도 잃어버리게 됩니다.&lt;/p>
&lt;p>이거, 우리 일상에서도 흔히 있는 이야기입니다.&lt;/p>
&lt;p>상사의 기대, 부모님의 말씀, SNS의 &amp;ldquo;좋아요&amp;rdquo; 수. 그것들에 맞추다 보면 자신이 정말 어떻게 하고 싶은 건지 모르게 될 때가 있지 않나요?&lt;/p>
&lt;hr>
&lt;h3 id="누구의-말을-들을-것인가를-선택하는-것이-중요합니다">&amp;ldquo;누구의 말을 들을 것인가&amp;quot;를 선택하는 것이 중요합니다
&lt;/h3>&lt;p>그럼 어떻게 해야 해? 라는 이야기입니다만, 정답이 있는 것은 아닙니다.&lt;/p>
&lt;p>다만, &amp;ldquo;모든 사람의 의견을 따르는 것&amp;quot;은 현실적으로 불가능합니다.&lt;/p>
&lt;p>그렇기 때문에 &amp;ldquo;누구의 말을 들을 것인가&amp;quot;를 스스로 선택하는 것이 중요하다고 생각합니다.&lt;/p>
&lt;p>예를 들어, &amp;ldquo;내가 존경하는 사람의 조언만 듣는다&amp;quot;든가, &amp;ldquo;과거의 내가 납득할 수 있는지를 기준으로 삼는다&amp;quot;든가 하는 식으로요.&lt;/p>
&lt;p>단 하나라도 &amp;ldquo;이것만은 믿고 싶다&amp;quot;고 생각할 수 있는 기준을 가지면, 세상의 노이즈가 조금은 줄어들게 됩니다.&lt;/p>
&lt;hr>
&lt;h3 id="그러므로-조금-지쳤을-때에는">그러므로, 조금 지쳤을 때에는
&lt;/h3>&lt;p>&amp;ldquo;노부부와 당나귀&amp;rdquo; 이야기를 떠올려 보는 것도 좋을지도 모릅니다.&lt;/p>
&lt;p>남의 시선이란, 무심코 신경이 쓰이게 마련이죠.&lt;/p>
&lt;p>하지만, 모든 것에 부응하려다 보면 당나귀에서도 내리게 됩니다.&lt;/p>
&lt;p>가끔은 &amp;ldquo;내 마음을 우선해도 괜찮을지도&amp;rdquo; 하고, 그런 생각이 든다면. 아주 조금, 마음이 가벼워질지도 모릅니다.&lt;/p>
&lt;hr></description></item><item><title>'왜 청색 LED를 만드는 것이 거의 불가능했는가'</title><link>http://kenji.blog/ko/p/%E3%81%AA%E3%81%9C%E9%9D%92%E8%89%B2led%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%BB%E3%81%BC%E4%B8%8D%E5%8F%AF%E8%83%BD%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B/</link><pubDate>Sun, 15 Sep 2024 00:43:52 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%81%AA%E3%81%9C%E9%9D%92%E8%89%B2led%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%BB%E3%81%BC%E4%B8%8D%E5%8F%AF%E8%83%BD%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B/</guid><description>&lt;img src="http://kenji.blog/p/%E3%81%AA%E3%81%9C%E9%9D%92%E8%89%B2led%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%BB%E3%81%BC%E4%B8%8D%E5%8F%AF%E8%83%BD%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B/img.png" alt="Featured image of post '왜 청색 LED를 만드는 것이 거의 불가능했는가'" />&lt;h2 id="왜-청색-led를-만드는-것이-거의-불가능했는가">왜 청색 LED를 만드는 것이 거의 불가능했는가
&lt;/h2>&lt;p>영어 다큐멘터리 프로그램 소개. 매우 흥미롭다. 매우 어려운 문제를 해결한 일본인은, 처음에 일본 국내에서 별로 평가받지 못했다는 인상이 강하다.&lt;/p>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/AF8d72mA41M"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div></description></item><item><title>'Visual Studio Code에 Qt Extension Pack을 설치해 보았다'</title><link>http://kenji.blog/ko/p/visual-studio-code-%E3%81%AB-qt-extension-pack-%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F/</link><pubDate>Fri, 13 Sep 2024 00:53:53 +0900</pubDate><guid>http://kenji.blog/ko/p/visual-studio-code-%E3%81%AB-qt-extension-pack-%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F/</guid><description>&lt;img src="http://kenji.blog/p/visual-studio-code-%E3%81%AB-qt-extension-pack-%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F/img_1.png" alt="Featured image of post 'Visual Studio Code에 Qt Extension Pack을 설치해 보았다'" />&lt;h1 id="vscode에서-qt-개발-시작하기-qt-extension-pack-설치-방법">VSCode에서 Qt 개발 시작하기: Qt Extension Pack 설치 방법
&lt;/h1>&lt;p>안녕하세요, Kenji입니다.
이번에는 &amp;ldquo;Visual Studio Code(이하 VSCode)에서 Qt 개발 환경을 구축하는 방법&amp;quot;에 대해 소개합니다.&lt;/p>
&lt;p>최근에는 공식 Qt Creator 외에도 가볍고 확장성이 뛰어난 VSCode를 사용하여 Qt 앱을 개발하고 싶다는 목소리도 많아졌습니다.
그런 분들에게 추천하는 것이 &amp;ldquo;&lt;strong>Qt Extension Pack&lt;/strong>&amp;ldquo;입니다.
이 확장 팩을 설치하는 것만으로 Qt와 관련된 주요 확장 기능들이 한 번에 갖춰집니다.&lt;/p>
&lt;hr>
&lt;h2 id="대상-독자">대상 독자
&lt;/h2>&lt;ul>
&lt;li>Qt를 사용한 GUI 앱 개발을 시작하고 싶은 분&lt;/li>
&lt;li>Qt Creator가 아닌 VSCode에서 개발하고 싶은 분&lt;/li>
&lt;li>확장 기능을 하나씩 찾는 것이 번거로운 분&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="전제-조건">전제 조건
&lt;/h2>&lt;ul>
&lt;li>VSCode가 설치되어 있을 것
(&lt;a class="link" href="https://code.visualstudio.com/" target="_blank" rel="noopener"
>공식 사이트에서 무료로 다운로드할 수 있습니다&lt;/a>)&lt;/li>
&lt;li>Qt 라이브러리 본체가 설치되어 있을 것(&lt;a class="link" href="https://www.qt.io/" target="_blank" rel="noopener"
>Qt 공식 사이트&lt;/a>)&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="qt-extension-pack이란">Qt Extension Pack이란?
&lt;/h2>&lt;p>Qt Extension Pack은 VSCode용 확장 기능 팩입니다.
설치하면 다음과 같은 기능이 자동으로 추가됩니다:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.ui&lt;/code> 파일(Qt Designer) 지원&lt;/li>
&lt;li>&lt;code>.pro&lt;/code> 파일 및 &lt;code>.qrc&lt;/code> 파일 구문 강조&lt;/li>
&lt;li>Qt용 C++ 코드 완성, 빌드, 디버깅 지원&lt;/li>
&lt;li>Qt Resource Browser(리소스 참조)&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="설치-순서">설치 순서
&lt;/h2>&lt;h3 id="1-vscode-열기">1. VSCode 열기
&lt;/h3>&lt;p>먼저 VSCode를 실행합니다.&lt;/p>
&lt;h3 id="2-확장-기능-뷰-열기">2. 확장 기능 뷰 열기
&lt;/h3>&lt;p>왼쪽의 액티비티 바(사각형 블록 아이콘)를 클릭하여 &amp;ldquo;확장 기능&amp;quot;을 표시합니다.&lt;/p>
&lt;p>또는 단축키로
&lt;code>Ctrl + Shift + X&lt;/code>를 눌러도 됩니다.&lt;/p>
&lt;h3 id="3-qt-extension-pack-검색">3. &amp;ldquo;Qt Extension Pack&amp;rdquo; 검색
&lt;/h3>&lt;p>검색 창에 다음 키워드를 입력합니다:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Qt Extension Pack
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;img src="http://kenji.blog/p/visual-studio-code-%E3%81%AB-qt-extension-pack-%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F/img.png"
width="867"
height="228"
srcset="http://kenji.blog/p/visual-studio-code-%E3%81%AB-qt-extension-pack-%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F/img_hua3a606fe260b4f1c55a0f37b6ed054ec_30325_480x0_resize_box_3.png 480w, http://kenji.blog/p/visual-studio-code-%E3%81%AB-qt-extension-pack-%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%81%9F/img_hua3a606fe260b4f1c55a0f37b6ed054ec_30325_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="380"
data-flex-basis="912px"
>&lt;/p>
&lt;h3 id="4-설치-버튼-클릭">4. 설치 버튼 클릭
&lt;/h3>&lt;p>대상 팩이 표시되면 &amp;ldquo;설치&amp;rdquo; 버튼을 클릭합니다.
이것으로 다음과 같은 여러 확장 기능이 한 번에 설치됩니다:&lt;/p>
&lt;ul>
&lt;li>Qt Language Support&lt;/li>
&lt;li>QML Support&lt;/li>
&lt;li>Qt Designer Integration&lt;/li>
&lt;li>CMake Tools(CMake 기반 Qt 개발 시 필수)&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="프로젝트-설정-보충-cmake--qt의-예">프로젝트 설정 보충 (CMake + Qt의 예)
&lt;/h2>&lt;p>만약 Qt를 CMake 기반으로 사용하는 경우, 다음 확장 기능과의 조합을 추천합니다:&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools" target="_blank" rel="noopener"
>CMake Tools&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://marketplace.visualstudio.com/items?itemName=twxs.cmake" target="_blank" rel="noopener"
>CMake Language Support&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>또한 CMakeLists.txt에 다음과 같은 내용을 추가해 두면 Qt와의 연동이 원활합니다:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cmake" data-lang="cmake">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">find_package&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">Qt6&lt;/span> &lt;span class="s">REQUIRED&lt;/span> &lt;span class="s">COMPONENTS&lt;/span> &lt;span class="s">Widgets&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="nb">target_link_libraries&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">MyApp&lt;/span> &lt;span class="s">PRIVATE&lt;/span> &lt;span class="s">Qt6::Widgets&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="부록-ui-파일은-어떻게-열까">부록: .ui 파일은 어떻게 열까?
&lt;/h2>&lt;p>&lt;code>.ui&lt;/code> 파일은 Qt Designer에서 편집할 수 있습니다.
VSCode 상에서 &lt;code>.ui&lt;/code> 파일을 마우스 오른쪽 버튼으로 클릭 → &lt;code>Open with Qt Designer&lt;/code>를 선택할 수 있게 됩니다(환경 변수 &lt;code>PATH&lt;/code>에 Qt Designer가 포함되어 있어야 함).&lt;/p>
&lt;hr>
&lt;h2 id="요약">요약
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>순서&lt;/th>
&lt;th>내용&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1&lt;/td>
&lt;td>VSCode 실행&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2&lt;/td>
&lt;td>확장 기능 패널 열기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3&lt;/td>
&lt;td>&amp;ldquo;Qt Extension Pack&amp;rdquo; 검색&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4&lt;/td>
&lt;td>설치 버튼 클릭&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>VSCode에 Qt 환경을 구축하는 것이 이전보다 훨씬 간단해졌습니다.
Qt Creator의 대안으로도 충분한 기능이 있으며, 가볍게 작업하고 싶은 분들에게 추천합니다.&lt;/p>
&lt;hr>
&lt;h2 id="추천-링크-모음">추천 링크 모음
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://www.qt.io/" target="_blank" rel="noopener"
>Qt 공식&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://marketplace.visualstudio.com/items?itemName=TheQtCompany.qt" target="_blank" rel="noopener"
>Qt Extension Pack - Visual Studio Marketplace&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://code.visualstudio.com/" target="_blank" rel="noopener"
>VSCode 공식&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools" target="_blank" rel="noopener"
>CMake Tools 확장&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="마무리하며">마무리하며
&lt;/h2>&lt;p>앞으로는 이 환경에서 Qt의 UI 도구나 QML을 활용한 개발도 진행해 볼 생각입니다.
다음에는 &lt;strong>Qt로 Hello World 앱을 VSCode에서 빌드하고 실행하는 방법&lt;/strong> 에 대해 해설할 예정입니다.&lt;/p>
&lt;p>그럼 다음에 또 만나요!&lt;/p></description></item><item><title>iPhone에 SIM락이 걸려있는지 확인하는 방법</title><link>http://kenji.blog/ko/p/iphone%E3%81%ABsim%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Thu, 12 Sep 2024 00:32:11 +0900</pubDate><guid>http://kenji.blog/ko/p/iphone%E3%81%ABsim%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/iphone%E3%81%ABsim%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post iPhone에 SIM락이 걸려있는지 확인하는 방법" />&lt;h1 id="iphone에-sim락이-걸려있는지-확인하는-방법">iPhone에 SIM락이 걸려있는지 확인하는 방법
&lt;/h1>&lt;p>&lt;code>홈 화면&lt;/code>＞&lt;code>설정&lt;/code>＞&lt;code>일반&lt;/code>＞&lt;code>정보&lt;/code>＞&lt;code>SIM락&lt;/code>&lt;/p>
&lt;p>&lt;code>SIM락 없음&lt;/code>이라고 표시되는지 &lt;code>SIM락 있음&lt;/code>이라고 표시되는지 확인한다.&lt;/p></description></item><item><title>'P≠NP 예상'</title><link>http://kenji.blog/ko/p/pnp%E4%BA%88%E6%83%B3/</link><pubDate>Wed, 11 Sep 2024 02:22:39 +0900</pubDate><guid>http://kenji.blog/ko/p/pnp%E4%BA%88%E6%83%B3/</guid><description>&lt;h1 id="개요">개요
&lt;/h1>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">클래스 P란, 결정론적 튜링 기계에서 다항 시간에 판정 가능한 문제의 클래스이며, 클래스 NP는 Yes가 되는 증거(Witness라고 함)가 주어졌을 때 다항 시간에 Witness의 정당성 판정(이를 검증이라고 함)이 가능한 문제의 클래스이다. 다항 시간에 판정 가능한 문제는 다항 시간에 검증 가능하므로 P⊆NP인 것은 분명하지만, P가 NP의 진부분집합인지 여부에 대해서는 명확하지 않다. 아직 증명되지는 않았지만, 많은 연구자는 P≠NP라고 믿고 있다. 그리고 이 클래스 P와 클래스 NP가 같지 않다는 예상을 &amp;#39;P≠NP 예상&amp;#39;이라고 한다.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>참고 사이트 : &lt;a class="link" href="https://daigakudenki.com/np-hard/" target="_blank" rel="noopener"
>https://daigakudenki.com/np-hard/&lt;/a>&lt;/p></description></item><item><title>'Microsoft MVP（2024-2025）를 재수상했습니다'</title><link>http://kenji.blog/ko/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</link><pubDate>Tue, 03 Sep 2024 21:25:20 +0900</pubDate><guid>http://kenji.blog/ko/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</guid><description>&lt;img src="http://kenji.blog/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img.png" alt="Featured image of post 'Microsoft MVP（2024-2025）를 재수상했습니다'" />&lt;h1 id="microsoft-mvp2024-2025를-재수상했습니다">Microsoft MVP（2024-2025）를 재수상했습니다
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img_1.png"
width="510"
height="680"
srcset="http://kenji.blog/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img_1_hu43fc94f004bc47efe4ebeb44e3c1c9ff_744182_480x0_resize_box_3.png 480w, http://kenji.blog/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img_1_hu43fc94f004bc47efe4ebeb44e3c1c9ff_744182_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img\_1.png"
class="gallery-image"
data-flex-grow="75"
data-flex-basis="180px"
>&lt;/p>
&lt;p>안녕하세요, kenji입니다.
보고 말씀드립니다만, 올해도 &lt;strong>Microsoft MVP（Most Valuable Professional）&lt;/strong> 를 수상했습니다. 이번으로 8번째 수상이 됩니다.&lt;/p>
&lt;p>모처럼이니, MVP란 무엇인가? 라는 것부터, 조금 적어볼까 합니다.&lt;/p>
&lt;hr>
&lt;h2 id="microsoft-mvp란">Microsoft MVP란?
&lt;/h2>&lt;p>MVP라고 해도, 스포츠의 최우수 선수를 말하는 것은 아닙니다 (가끔 질문받습니다만…).
&lt;strong>Microsoft MVP（Most Valuable Professional）&lt;/strong> 는, Microsoft 기술에 관한 지식이나 경험을,
커뮤니티를 향해 적극적으로 발신・공유하고 있는 사람에게 주어지는 칭호입니다.&lt;/p>
&lt;p>기술 블로그를 작성하거나, Q&amp;amp;A 사이트에서 질문에 답변하거나,
샘플 코드를 공개하거나, 이벤트에서 등단하거나.
「자신이 알고 있는 것을, 누군가에게 도움이 되는 형태로 공유한다」――그런 꾸준한 활동이 평가됩니다.&lt;/p>
&lt;p>수상자는 전 세계에 있습니다만, 인원은 매년 한정되어 있어, 재수상도 쉽지 않습니다.
그런 와중에, 또 인정받을 수 있었던 것은 정말로 감사한 일이라고 생각합니다.&lt;/p>
&lt;hr>
&lt;h2 id="수상-이유에-대하여">수상 이유에 대하여
&lt;/h2>&lt;p>이번 수상은, 「Developer Technologies」라는 카테고리에서의 재수상입니다.
최근 1년은, 이런 느낌의 활동을 해왔습니다:&lt;/p>
&lt;ul>
&lt;li>Microsoft 관련 기술에 대한 블로그 집필&lt;/li>
&lt;li>기술계 Q&amp;amp;A 사이트에서의 답변 게시&lt;/li>
&lt;li>GitHub에서의 샘플 코드 공개&lt;/li>
&lt;li>스터디나 기술 이벤트에서의 등단 등&lt;/li>
&lt;/ul>
&lt;p>어느 것도 특별한 것은 아닙니다만,
「내가 시험해 보고 잘 된 것」이나 「막혔지만 해결할 수 있었던 것」을
조금이라도 도움이 되는 형태로 발신하는 것을 의식하며 해왔습니다.&lt;/p>
&lt;p>그것이 이렇게 형태가 된 것은, 솔직히 기쁩니다.&lt;/p>
&lt;hr>
&lt;h2 id="앞으로에-대하여">앞으로에 대하여
&lt;/h2>&lt;p>기술의 세계는 어쨌든 속도가 빨라서, 따라가는 것만으로도 힘듭니다.
하지만 그렇기 때문에, 실제로 사용해보고 어땠는지, 어디가 이해하기 어려웠는지,
라는 「생생한 정보」를 공유하는 것에는, 의미가 있다고 느끼고 있습니다.&lt;/p>
&lt;p>앞으로도, 어깨에 힘을 빼고 제 페이스대로 계속해 나갈 수 있었으면 좋겠습니다.
어떤 형태로든, 「아, 그거 도움이 됐어」라고 누군가 생각해 줄 만한 정보를 전달해 갈 수 있다면 좋겠습니다.&lt;/p>
&lt;p>앞으로도, 아무쪼록 잘 부탁드립니다.&lt;/p></description></item><item><title>'yt-dlp.exe를 이용한 YouTube 동영상 다운로드 방법'</title><link>http://kenji.blog/ko/p/yt-dlp.exe-%E3%81%AB%E3%82%88%E3%82%8B-youtube-%E5%8B%95%E7%94%BB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E6%96%B9%E6%B3%95/</link><pubDate>Tue, 03 Sep 2024 14:09:26 +0900</pubDate><guid>http://kenji.blog/ko/p/yt-dlp.exe-%E3%81%AB%E3%82%88%E3%82%8B-youtube-%E5%8B%95%E7%94%BB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/yt-dlp.exe-%E3%81%AB%E3%82%88%E3%82%8B-youtube-%E5%8B%95%E7%94%BB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E6%96%B9%E6%B3%95/img_1.png" alt="Featured image of post 'yt-dlp.exe를 이용한 YouTube 동영상 다운로드 방법'" />&lt;h1 id="yt-dlp란">yt-dlp란
&lt;/h1>&lt;p>&lt;code>yt-dlp&lt;/code>는 YouTube 동영상을 다운로드하기 위한 명령줄 도구입니다.
동영상을 다운로드할 뿐만 아니라, 음악 파일인 mp3 형식으로 다운로드할 수도 있습니다.&lt;/p>
&lt;h2 id="다운로드-및-설치">다운로드 및 설치
&lt;/h2>&lt;ol>
&lt;li>&lt;a class="link" href="https://github.com/yt-dlp/yt-dlp/releases" target="_blank" rel="noopener"
>yt-dlp 릴리스 페이지&lt;/a>에서 최신 yt-dlp.exe를 다운로드합니다.&lt;/li>
&lt;li>yt-dlp.exe를 원하는 폴더에 배치합니다.&lt;/li>
&lt;li>yt-dlp.exe의 폴더 경로를 환경 변수 Path에 추가합니다.&lt;/li>
&lt;/ol>
&lt;h2 id="사용-방법">사용 방법
&lt;/h2>&lt;p>yt-dlp.exe를 명령 프롬프트에서 실행하고, YouTube 동영상의 URL을 지정합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">yt-dlp.exe &amp;#34;https://www.youtube.com/watch?v=VIDEO_ID&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>※인수는 VIDEO_ID 부분만 있어도 괜찮습니다.&lt;/p>
&lt;p>음악 파일 mp3로 다운로드할 경우에는 다음 명령을 실행합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">yt-dlp.exe --extract-audio --audio-format mp3 --embed-thumbnail --add-metadata &amp;#34;https://www.youtube.com/watch?v=VIDEO_ID&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이제 명령을 실행한 현재 디렉터리에 동영상이 다운로드됩니다.&lt;/p>
&lt;p>이상.&lt;/p></description></item><item><title>'쇼츠 영상 링크'</title><link>http://kenji.blog/ko/p/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E5%8B%95%E7%94%BB%E3%83%AA%E3%83%B3%E3%82%AF/</link><pubDate>Sun, 25 Aug 2024 16:24:35 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E5%8B%95%E7%94%BB%E3%83%AA%E3%83%B3%E3%82%AF/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E5%8B%95%E7%94%BB%E3%83%AA%E3%83%B3%E3%82%AF/img.png" alt="Featured image of post '쇼츠 영상 링크'" />&lt;ol>
&lt;li>축구 볼보이&lt;/li>
&lt;/ol>
&lt;blockquote class="tiktok-embed" cite="https://www.tiktok.com/@gg211204/video/7398347526975294738" data-video-id="7398347526975294738" style="max-width: 605px;min-width: 325px;" > &lt;section> &lt;a target="_blank" title="@gg211204" href="https://www.tiktok.com/@gg211204?refer=embed">@gg211204&lt;/a> 『볼보이가 영웅이 된 날』 이날 팀을 구한 볼보이는 나중에 클럽에 초대되어, 선수들과 식사를 함께 했다. &lt;a title="토트넘" target="_blank" href="https://www.tiktok.com/tag/%E3%83%88%E3%83%83%E3%83%86%E3%83%8A%E3%83%A0?refer=embed">#토트넘&lt;/a> &lt;a title="스퍼스" target="_blank" href="https://www.tiktok.com/tag/%E3%82%B9%E3%83%91%E3%83%BC%E3%82%BA?refer=embed">#스퍼스&lt;/a> &lt;a title="무리뉴" target="_blank" href="https://www.tiktok.com/tag/%E3%83%A2%E3%82%A6%E3%83%AA%E3%83%BC%E3%83%8B%E3%83%A7?refer=embed">#무리뉴&lt;/a> &lt;a title="볼보이" target="_blank" href="https://www.tiktok.com/tag/%E3%83%9C%E3%83%BC%E3%83%AB%E3%83%9C%E3%83%BC%E3%82%A4?refer=embed">#볼보이&lt;/a> &lt;a target="_blank" title="♬ original sound - じょり" href="https://www.tiktok.com/music/original-sound-じょり-7398347563419601680?refer=embed">♬ original sound - じょり&lt;/a> &lt;/section> &lt;/blockquote> &lt;script async src="https://www.tiktok.com/embed.js">&lt;/script>
&lt;ol start="2">
&lt;li>스타벅스
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/P3pSGIWng-E"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;/ol></description></item><item><title>'아인슈타인의 명언'</title><link>http://kenji.blog/ko/p/%E3%82%A2%E3%82%A4%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E3%81%AE%E5%90%8D%E8%A8%80/</link><pubDate>Sat, 24 Aug 2024 18:38:47 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%A2%E3%82%A4%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E3%81%AE%E5%90%8D%E8%A8%80/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A2%E3%82%A4%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E3%81%AE%E5%90%8D%E8%A8%80/Solvay_conference_1927.jpg" alt="Featured image of post '아인슈타인의 명언'" />&lt;p>안녕하세요!&lt;/p>
&lt;p>오늘은 아인슈타인의 명언에 대해 이야기하고자 합니다.&lt;/p>
&lt;hr>
&lt;h2 id="세상은-당신의-선행을-평가하지-않는다">세상은 당신의 선행을 평가하지 않는다?
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">세상은 당신이 행하는 백만 번의 선행을 결코 평가하지 않을 것입니다.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">하지만 당신이 하는 한 가지 잘못된 행동은 비판할 것입니다...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">하지만 낙담하지 마십시오.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;항상 모든 비웃음과 비판을 딛고 일어서십시오. 계속 강해지십시오.&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 알베르트 아인슈타인
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이것은 아인슈타인이 남겼다고 알려진 말입니다. 우리가 매일 느끼는 사회의 가혹함이나 사람들의 평가가 가진 편향성을 날카롭게 지적하고 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="그럼에도-계속해서-일어선다">그럼에도, 계속해서 일어선다
&lt;/h2>&lt;p>&amp;ldquo;항상 모든 비웃음과 비판을 딛고 일어서십시오. 계속 강해지십시오.&amp;rdquo;&lt;/p>
&lt;p>이 이어지는 말은, 앞서 언급한 냉혹한 현실에 대한 아인슈타인의 대답이라고도 할 수 있습니다. 비판이나 조롱에 굴하지 않고, 자기 자신을 믿고 계속 전진하는 것의 소중함을 가르쳐 줍니다.&lt;/p>
&lt;hr>
&lt;h2 id="일상에-활용하는-아인슈타인의-가르침">일상에 활용하는 아인슈타인의 가르침
&lt;/h2>&lt;p>이 명언은 우리의 일상 생활과도 깊이 관련되어 있습니다. 예를 들어, 직장에서의 노력이 인정받지 못하고 사소한 실수만 눈에 띄는 경우가 있습니다. 또한 SNS에서의 발언이 일부만 잘려서 비판받는 일도 있을 것입니다.&lt;/p>
&lt;p>그럴 때, 아인슈타인의 이 말을 떠올려 보십시오. 타인의 평가에 일희일비하기보다는 자신의 신념을 유지하는 것이 중요합니다.&lt;/p>
&lt;hr>
&lt;h2 id="요약">요약
&lt;/h2>&lt;p>아인슈타인의 이 명언은 우리에게 &amp;ldquo;타인의 평가에 좌우되지 않고 자신을 믿고 살아가는&amp;rdquo; 것의 중요성을 가르쳐 줍니다. 비판이나 조롱에 지지 않고 자신이 믿는 길을 나아갈 용기를 가집시다.&lt;/p>
&lt;p>마지막으로, 아인슈타인의 말을 다시 한 번.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>&amp;ldquo;항상 모든 비웃음과 비판을 딛고 일어서십시오. 계속 강해지십시오.&amp;rdquo;&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>이 말이 여러분의 마음에 닿아 긍정적인 한 걸음을 내딛는 계기가 되기를 바랍니다.&lt;/p></description></item><item><title>'소수를 생성하는 C 언어 코드'</title><link>http://kenji.blog/ko/p/%E7%B4%A0%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bc%E8%A8%80%E8%AA%9E%E3%82%B3%E3%83%BC%E3%83%89/</link><pubDate>Sat, 24 Aug 2024 09:38:10 +0900</pubDate><guid>http://kenji.blog/ko/p/%E7%B4%A0%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bc%E8%A8%80%E8%AA%9E%E3%82%B3%E3%83%BC%E3%83%89/</guid><description>&lt;img src="http://kenji.blog/p/%E7%B4%A0%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bc%E8%A8%80%E8%AA%9E%E3%82%B3%E3%83%BC%E3%83%89/img.png" alt="Featured image of post '소수를 생성하는 C 언어 코드'" />&lt;p>다음은 지정된 범위 내의 소수를 생성하는 간단한 C 언어 코드입니다. 이 예제에서는 1부터 n까지의 소수를 나열합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdbool.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">bool&lt;/span> &lt;span class="nf">isPrime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">printPrimes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;2 &amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">isPrime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;%d &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;소수를 생성할 범위의 최댓값을 입력해 주세요: &amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scanf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;1부터 %d까지의 소수는 다음과 같습니다:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printPrimes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이 코드는 다음과 같이 동작합니다:&lt;/p>
&lt;ol>
&lt;li>isPrime 함수: 주어진 수가 소수인지 판별합니다. 효율성을 고려하여 먼저 2와 3으로 나누어떨어지는지 확인하고, 그 다음 6의 배수로 확인을 진행합니다.&lt;/li>
&lt;li>printPrimes 함수: 지정된 범위 내의 소수를 출력합니다. 2는 처음에 출력하고, 그 이후에는 홀수만 확인합니다.&lt;/li>
&lt;li>main 함수: 사용자로부터 범위의 최댓값을 입력받아, 그 범위 내의 소수를 출력합니다.&lt;/li>
&lt;/ol>
&lt;p>이 코드를 컴파일하고 실행하면, 지정된 범위 내의 소수가 표시됩니다.&lt;/p></description></item><item><title>'너는 죽지 말지어다'</title><link>http://kenji.blog/ko/p/%E5%90%9B%E6%AD%BB%E3%81%AB%E3%81%9F%E3%81%BE%E3%81%B5%E3%81%93%E3%81%A8%E3%81%AA%E3%81%8B%E3%82%8C/</link><pubDate>Thu, 25 Jul 2024 13:16:47 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%90%9B%E6%AD%BB%E3%81%AB%E3%81%9F%E3%81%BE%E3%81%B5%E3%81%93%E3%81%A8%E3%81%AA%E3%81%8B%E3%82%8C/</guid><description>&lt;p>&lt;img src="http://kenji.blog/p/%E5%90%9B%E6%AD%BB%E3%81%AB%E3%81%9F%E3%81%BE%E3%81%B5%E3%81%93%E3%81%A8%E3%81%AA%E3%81%8B%E3%82%8C/img.png"
width="1080"
height="1080"
srcset="http://kenji.blog/p/%E5%90%9B%E6%AD%BB%E3%81%AB%E3%81%9F%E3%81%BE%E3%81%B5%E3%81%93%E3%81%A8%E3%81%AA%E3%81%8B%E3%82%8C/img_hub1fb50838efd9b9ec0f364c86e062d91_1677486_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%90%9B%E6%AD%BB%E3%81%AB%E3%81%9F%E3%81%BE%E3%81%B5%E3%81%93%E3%81%A8%E3%81%AA%E3%81%8B%E3%82%8C/img_hub1fb50838efd9b9ec0f364c86e062d91_1677486_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h1 id="요사노-아키코">요사노 아키코
&lt;/h1>&lt;p>&lt;strong>「너는 죽지 말지어다」&lt;/strong>&lt;/p>
&lt;p>――뤼순항 포위군 속에 있는 동생을 한탄하며&lt;/p>
&lt;p>아아 동생이여, 너를 위해 우노라,&lt;br>
너는 죽지 말지어다,&lt;br>
막내로 태어난 너이기에&lt;br>
부모님의 사랑은 남달랐건만,&lt;br>
부모님은 칼을 쥐어주며&lt;br>
사람을 죽이라고 가르치셨던가,&lt;br>
사람을 죽이고 죽으라고&lt;br>
스물넷까지 키우셨던가.&lt;/p>
&lt;p>사카이 거리 상인의&lt;br>
유서 깊은 집안을 자랑하는 주인으로서&lt;br>
부모님의 이름을 이을 너이기에,&lt;br>
너는 죽지 말지어다,&lt;br>
뤼순 성이 멸망하든,&lt;br>
멸망하지 않든, 무슨 상관이랴,&lt;br>
너는 모르리라, 상인의&lt;br>
집안 법도에는 없었느니라.&lt;/p>
&lt;p>너는 죽지 말지어다,&lt;br>
천황 폐하께서는, 전쟁에&lt;br>
친히 출진하지 않으시니,&lt;br>
서로 남의 피를 흘리고,&lt;br>
짐승의 길에서 죽으라 함은,&lt;br>
죽는 것을 사람의 명예라 함은,&lt;br>
크나큰 마음이 깊으시다면&lt;br>
어찌 생각이나 하시겠는가.&lt;/p>
&lt;p>아아 동생이여, 전쟁에서&lt;br>
너는 죽지 말지어다,&lt;br>
지난 가을 아버지를&lt;br>
여의신 어머니는,&lt;br>
슬픔 속에서, 애처롭게도&lt;br>
아들을 징집당하고, 집을 지키며,&lt;br>
평안하다 들리는 태평성대에도&lt;br>
어머니의 백발은 늘어만 가네.&lt;/p>
&lt;p>포장막 뒤에 엎드려 우는&lt;br>
가녀리고 젊은 새색시를,&lt;br>
너는 잊었느냐, 생각하느냐,&lt;br>
열 달도 함께하지 못하고 헤어진&lt;br>
소녀의 마음을 생각해보라,&lt;br>
이 세상 유일한 너 말고&lt;br>
아아 또 누구를 의지하리오,&lt;br>
너는 죽지 말지어다.&lt;/p></description></item><item><title>'요사노 아키코에 대하여'</title><link>http://kenji.blog/ko/p/%E4%B8%8E%E8%AC%9D%E9%87%8E%E6%99%B6%E5%AD%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</link><pubDate>Thu, 25 Jul 2024 13:08:36 +0900</pubDate><guid>http://kenji.blog/ko/p/%E4%B8%8E%E8%AC%9D%E9%87%8E%E6%99%B6%E5%AD%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</guid><description>&lt;p>&lt;img src="http://kenji.blog/p/%E4%B8%8E%E8%AC%9D%E9%87%8E%E6%99%B6%E5%AD%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img.png"
width="1080"
height="1080"
srcset="http://kenji.blog/p/%E4%B8%8E%E8%AC%9D%E9%87%8E%E6%99%B6%E5%AD%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img_hub1fb50838efd9b9ec0f364c86e062d91_1677486_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E4%B8%8E%E8%AC%9D%E9%87%8E%E6%99%B6%E5%AD%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img_hub1fb50838efd9b9ec0f364c86e062d91_1677486_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h2 id="-인물-개요">🔹 인물 개요
&lt;/h2>&lt;p>요사노 아키코(与謝野晶子, 1878년～1942년)는 메이지 시대부터 쇼와 초기까지 활약한 일본의 가인(歌人)·작가·사상가입니다. 특히 정열적이고 개성적인 단카(短歌) 작품으로 알려져 있으며, 근대 일본 문학에서 여성의 자립이나 연애 표현의 새로운 지평을 개척한 인물입니다.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>본명&lt;/strong>: 요사노(옛 성: 호) 쇼(쇼=鳳しょう)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>출신지&lt;/strong>: 사카이(오사카부 사카이시)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>남편&lt;/strong>: 요사노 텟칸(가인·시인)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>주요 활동 시기&lt;/strong>: 메이지 후기～쇼와 초기&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>특징&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>여성의 연애 감정을 솔직하게 읊은 단카로 주목받음&lt;/li>
&lt;li>페미니즘적 사상을 가지고, 여성의 교육과 자립을 추진&lt;/li>
&lt;li>러일전쟁을 비판하는 평화주의적인 자세도 보임&lt;/li>
&lt;li>『묘조(明星)』라는 문학 잡지의 중심 멤버&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-대표작과-그-줄거리특징">🔹 대표작과 그 줄거리·특징
&lt;/h2>&lt;h3 id="1-미다레가미みだれ髪-1901년">1. 『미다레가미(みだれ髪)』 (1901년)
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>개요&lt;/strong>: 처녀 가집(歌集). 20대 초반에 발표되어 일본 문단에 큰 충격을 주었다.&lt;/li>
&lt;li>&lt;strong>특징&lt;/strong>: 연애 감정이나 육체적인 욕망을 여성의 입장에서 솔직하게 표현.&lt;/li>
&lt;li>&lt;strong>유명한 노래(단카)&lt;/strong>:&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>부드러운 피부의
뜨거운 피에 닿아보지도 않고
외롭지 않은가 길을 설교하는 그대여&lt;/p>
&lt;/blockquote>
&lt;p>→ 당시의 윤리관에서는 대담하다고 여겨지는 연애관을 여성 자신의 언어로 표현하여 화제가 되었습니다.&lt;/p>
&lt;hr>
&lt;h3 id="2-너는-죽지-말지어다君死にたまふことなかれ-1904년">2. 『너는 죽지 말지어다(君死にたまふことなかれ)』 (1904년)
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>형식&lt;/strong>: 시 (단카가 아닌 시문)&lt;/li>
&lt;li>&lt;strong>내용&lt;/strong>: 러일전쟁에 출정 중인 남동생에게 보낸 반전 시.&lt;/li>
&lt;li>&lt;strong>일부 발췌&lt;/strong>:&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>너는 죽지 말지어다
막내로 태어난 너이기에
어머님은 눈물 많이 흘리시며
너의 소매를 쥐어짜며……&lt;/p>
&lt;/blockquote>
&lt;ul>
&lt;li>&lt;strong>의의&lt;/strong>: 당시 전쟁을 미화하는 풍조가 강한 가운데, 남동생의 죽음을 걱정하는 여성의 입장에서 반전을 호소했다는 점에서 획기적.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-영향과-평가">🔹 영향과 평가
&lt;/h2>&lt;ul>
&lt;li>여성 해방이나 평화주의, 교육의 보급 등 사회적으로도 선진적인 활동을 했다.&lt;/li>
&lt;li>말년에는 여성 교육에 진력하여, 여자대학 설립에도 관여했다 (문화학원 등).&lt;/li>
&lt;li>전전(戰前) 일본에 있어 가장 중요한 여성 지식인·문학자 중 한 명.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-요약">🔹 요약
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>항목&lt;/th>
&lt;th>내용&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>이름&lt;/td>
&lt;td>요사노 아키코&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>활동 분야&lt;/td>
&lt;td>단카, 시, 평론, 교육&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>주요 작품&lt;/td>
&lt;td>『미다레가미』 『너는 죽지 말지어다』&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>특징&lt;/td>
&lt;td>연애의 자유, 여성의 자립, 평화주의의 표현&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>현대에의 영향&lt;/td>
&lt;td>페미니즘 문학, 근대 단카의 혁신, 반전 시의 선구자&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr></description></item><item><title>'Mathematica 입문'</title><link>http://kenji.blog/ko/p/mathematica%E5%85%A5%E9%96%80/</link><pubDate>Thu, 25 Jul 2024 01:36:19 +0900</pubDate><guid>http://kenji.blog/ko/p/mathematica%E5%85%A5%E9%96%80/</guid><description>&lt;img src="http://kenji.blog/p/mathematica%E5%85%A5%E9%96%80/img.png" alt="Featured image of post 'Mathematica 입문'" />&lt;h1 id="mathematica-입문">Mathematica 입문
&lt;/h1>&lt;h2 id="방정식-풀기">방정식 풀기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Solve[x^2 - 3 x + 2 == 0, x]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{x -&amp;gt; 1}, {x -&amp;gt; 2}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="정수-범위에서-방정식의-해-구하기">정수 범위에서 방정식의 해 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Solve[x^2 - 3 x + 2 == 0 &amp;amp;&amp;amp; 0 &amp;lt;= x &amp;lt;= 2, x, Integers]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{x -&amp;gt; 1}, {x -&amp;gt; 2}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="연립방정식-풀기">연립방정식 풀기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Solve[{x + y == 3, x - y == 1}, {x, y}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{x -&amp;gt; 2, y -&amp;gt; 1}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="부등식-풀기">부등식 풀기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Reduce[x^2 - 3 x + 2 &amp;gt; 0, x]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">x &amp;lt; 1 || x &amp;gt; 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="미분하기">미분하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">D[x^2, x]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">2 x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="적분하기">적분하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Integrate[x^2, x]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">x^3/3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="극한-구하기">극한 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Limit[1/x, x -&amp;gt; 0]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Infinity
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="급수-구하기">급수 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Sum[1/n^2, {n, 1, Infinity}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">π^2/6
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="행렬-만들기">행렬 만들기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">m = {{1, 2}, {3, 4}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="행렬의-곱-구하기">행렬의 곱 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">m . m
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{7, 10}, {15, 22}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="역행렬-구하기">역행렬 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Inverse[m]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{-2, 1}, {1.5, -0.5}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="고유값과-고유벡터-구하기">고유값과 고유벡터 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Eigensystem[m]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{5, 0}, {{1, 1}, {1, -1}}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="벡터의-내적-구하기">벡터의 내적 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{1, 2} . {3, 4}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">11
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="벡터의-외적-구하기">벡터의 외적 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Cross[{1, 2, 3}, {4, 5, 6}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{-3, 6, -3}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="벡터의-크기-구하기">벡터의 크기 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Norm[{1, 2, 3}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">√14
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="벡터의-각도-구하기">벡터의 각도 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ArcCos[{1, 2} . {3, 4}/(Norm[{1, 2}] Norm[{3, 4}])]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ArcCos[11/(√5 √25)]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="벡터의-사영-구하기">벡터의 사영 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{1, 2} . {3, 4}/Norm[{3, 4}] {3, 4}/Norm[{3, 4}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{11/5, 22/5}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="벡터의-회전-구하기">벡터의 회전 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RotationMatrix[π/2].{1, 0}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{0, 1}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="벡터의-평행이동-구하기">벡터의 평행이동 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">TranslationTransform[{1, 2}][{3, 4}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{4, 6}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="벡터의-확대-축소-구하기">벡터의 확대 축소 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ScalingTransform[{2, 3}][{1, 1}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{2, 3}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="벡터의-반전-구하기">벡터의 반전 구하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ReflectionTransform[{1, 1}][{1, 1}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{0, 0}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="난수-생성하기">난수 생성하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomReal[]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">0.123456
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="난수-생성하기-정수">난수 생성하기 (정수)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomInteger[]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">123456
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="난수-생성하기-범위-지정">난수 생성하기 (범위 지정)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomReal[{1, 10}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">5.6789
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="난수-생성하기-정수-범위-지정">난수 생성하기 (정수, 범위 지정)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomInteger[{1, 10}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="난수-생성하기-분포-지정">난수 생성하기 (분포 지정)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomVariate[NormalDistribution[0, 1]]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">0.123456
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="난수-생성하기-분포-지정-개수-지정">난수 생성하기 (분포 지정, 개수 지정)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomVariate[NormalDistribution[0, 1], 10]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{0.123456, 0.234567, ..., 0.987654}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="난수-생성하기-분포-지정-개수-지정-시드-지정">난수 생성하기 (분포 지정, 개수 지정, 시드 지정)
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">SeedRandom[12345]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RandomVariate[NormalDistribution[0, 1], 10]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{0.123456, 0.234567, ..., 0.987654}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="배열의-요소에-함수-적용하기">배열의 요소에 함수 적용하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Map[Sqrt, {1, 4, 9}]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sqrt /@ {1, 4, 9}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Map[#^(1/2)&amp;amp;, {1, 4, 9}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{1, 2, 3}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="람다식을-사용하여-함수-정의하기">람다식을 사용하여 함수 정의하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">f = Function[x, x^2]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">f[3]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">9
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="함수-합성하기">함수 합성하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">f = Function[x, x^2]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">g = Function[x, x + 1]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h = Function[x, f[g[x]]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h[3]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">16
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="직전-계산-결과-참조하기">직전 계산 결과 참조하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">% + 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">17
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="순수-함수">순수 함수
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">(#+3)&amp;amp;[5]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="배열-추출하기">배열 추출하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Select[{1, 2, 3, 4, 5}, EvenQ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Select[{1, 2, 3, 4, 5}, Mod[#,2]==0&amp;amp;]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{2, 4}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>'Hugo 명령어 목록'</title><link>http://kenji.blog/ko/p/hugo%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7/</link><pubDate>Fri, 31 May 2024 01:36:00 +0900</pubDate><guid>http://kenji.blog/ko/p/hugo%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7/</guid><description>&lt;img src="http://kenji.blog/p/hugo%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%B8%80%E8%A6%A7/img.png" alt="Featured image of post 'Hugo 명령어 목록'" />&lt;h1 id="hugo란">Hugo란
&lt;/h1>&lt;p>Hugo는 정적 사이트 생성기 중 하나입니다. Markdown 파일을 HTML로 변환하여 웹사이트를 만들 수 있습니다. Hugo는 Go 언어로 작성되어 빠르게 동작합니다.&lt;/p>
&lt;p>이 블로그도 Hugo로 제작되었습니다.&lt;/p>
&lt;h1 id="hugo-cli-설치">Hugo CLI 설치
&lt;/h1>&lt;p>Hugo CLI를 설치하려면 다음 명령어를 실행합니다.&lt;/p>
&lt;p>※ macOS의 경우의 예시입니다. 다른 OS의 경우, 공식 문서를 참조하세요.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">brew install hugo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Homebrew를 사용하여 설치할 수 있습니다.&lt;/p>
&lt;h1 id="hugo-명령어-목록">Hugo 명령어 목록
&lt;/h1>&lt;p>Hugo에는 다양한 명령어가 준비되어 있습니다. 아래에 자주 사용하는 명령어를 정리했습니다.&lt;/p>
&lt;h2 id="새로운-사이트-만들기">새로운 사이트 만들기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo new site &amp;lt;사이트명&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>새로운 사이트를 생성하는 명령어입니다. &lt;code>&amp;lt;사이트명&amp;gt;&lt;/code>에는 사이트의 이름을 지정합니다.&lt;/p>
&lt;h2 id="새로운-글-작성하기">새로운 글 작성하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo new &amp;lt;기사명&amp;gt;.md
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>새로운 글을 작성하는 명령어입니다. &lt;code>&amp;lt;기사명&amp;gt;&lt;/code>에는 글의 이름을 지정합니다.&lt;/p>
&lt;h2 id="서버-실행하기">서버 실행하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo server
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>로컬 서버를 기동하는 명령어입니다. &lt;code>http://localhost:1313&lt;/code>으로 접속할 수 있습니다.&lt;/p>
&lt;h2 id="빌드하기">빌드하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>사이트를 빌드하는 명령어입니다. &lt;code>public&lt;/code> 디렉토리에 HTML 파일이 생성됩니다.&lt;/p>
&lt;h2 id="배포하기">배포하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo deploy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>사이트를 배포하는 명령어입니다. 배포처 설정은 &lt;code>config.toml&lt;/code> 파일에서 합니다.&lt;/p>
&lt;h2 id="글-목록-표시하기">글 목록 표시하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo list all
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>작성된 글 목록을 표시하는 명령어입니다.&lt;/p>
&lt;h2 id="설정-확인하기">설정 확인하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo config
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>설정을 확인하는 명령어입니다.&lt;/p>
&lt;h2 id="도움말-표시하기">도움말 표시하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo &lt;span class="nb">help&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>도움말을 표시하는 명령어입니다.&lt;/p>
&lt;h2 id="버전-표시하기">버전 표시하기
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo version
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>버전을 표시하는 명령어입니다.&lt;/p>
&lt;p>이상이 Hugo 명령어 목록입니다. 이 외에도 다양한 명령어가 준비되어 있으므로 공식 문서를 참고해 주세요.&lt;/p>
&lt;h1 id="참고">참고
&lt;/h1>&lt;ul>
&lt;li>&lt;a class="link" href="https://gohugo.io/documentation/" target="_blank" rel="noopener"
>Hugo 공식 문서&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Visual Studio Code 추천 확장 기능</title><link>http://kenji.blog/ko/p/visual-studio-code%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD/</link><pubDate>Wed, 29 May 2024 17:20:19 +0900</pubDate><guid>http://kenji.blog/ko/p/visual-studio-code%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD/</guid><description>&lt;img src="http://kenji.blog/p/visual-studio-code%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD/img.png" alt="Featured image of post Visual Studio Code 추천 확장 기능" />&lt;h1 id="visual-studio-code-추천-확장-기능-목록">Visual Studio Code 추천 확장 기능 목록
&lt;/h1>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>분류&lt;/th>
&lt;th>명칭&lt;/th>
&lt;th>제공자&lt;/th>
&lt;th>설명&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>가상·컨테이너 관리&lt;/td>
&lt;td>Remote Development&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>SSH 접속으로 가상 컨테이너/WSL에 연결하여 원격 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>가상·컨테이너 관리&lt;/td>
&lt;td>Docker&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Docker 컨테이너 관리를 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>코드 관리&lt;/td>
&lt;td>GitHub Pull Requests&lt;/td>
&lt;td>GitHub&lt;/td>
&lt;td>GitHub의 Pull Request를 VSCode 상에서 관리한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>코드 관리&lt;/td>
&lt;td>GitHub Copilot&lt;/td>
&lt;td>GitHub&lt;/td>
&lt;td>AI에 의한 코드 자동 완성을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>코드 관리&lt;/td>
&lt;td>Git Graph&lt;/td>
&lt;td>mhutchie&lt;/td>
&lt;td>Git의 브랜치나 커밋을 그래픽으로 표시한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>코드 관리&lt;/td>
&lt;td>Git History&lt;/td>
&lt;td>Don Jayamanne&lt;/td>
&lt;td>Git의 히스토리를 표시한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>브라우저·웹 개발&lt;/td>
&lt;td>Debugger for Firefox&lt;/td>
&lt;td>Firefox DevTools&lt;/td>
&lt;td>Firefox의 디버거를 VSCode 상에서 이용한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>브라우저·웹 개발&lt;/td>
&lt;td>Microsoft Edge Tool For VScode&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Edge의 개발자 도구를 VSCode 상에서 이용한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>브라우저·웹 개발&lt;/td>
&lt;td>Vue Language Features(Volar)&lt;/td>
&lt;td>Vue&lt;/td>
&lt;td>Vue의 언어 기능을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>브라우저·웹 개발&lt;/td>
&lt;td>JavaScript (ES6) code snippets&lt;/td>
&lt;td>charalampos karypidis&lt;/td>
&lt;td>JavaScript 스니펫을 제공한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>브라우저·웹 개발&lt;/td>
&lt;td>Tailwind CSS IntelliSense&lt;/td>
&lt;td>Tailwind Labs&lt;/td>
&lt;td>Tailwind CSS 스니펫을 제공한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>클라우드 개발&lt;/td>
&lt;td>AWS Toolkit&lt;/td>
&lt;td>Amazon Web Services&lt;/td>
&lt;td>AWS 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>클라우드 개발&lt;/td>
&lt;td>Azure Tools&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Azure 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>클라우드 개발&lt;/td>
&lt;td>Google Cloud Tools&lt;/td>
&lt;td>Google Cloud&lt;/td>
&lt;td>Google Cloud 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>데이터베이스&lt;/td>
&lt;td>MySQL&lt;/td>
&lt;td>Jun Han&lt;/td>
&lt;td>MySQL 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>데이터베이스&lt;/td>
&lt;td>SQL Server(mssql)&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>SQL Server 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>데이터베이스&lt;/td>
&lt;td>PostgreSQL&lt;/td>
&lt;td>Chris Kolkman&lt;/td>
&lt;td>PostgreSQL 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>임베디드&lt;/td>
&lt;td>PlatformIO&lt;/td>
&lt;td>PlatformIO&lt;/td>
&lt;td>PlatformIO 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>임베디드&lt;/td>
&lt;td>Arduino&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Arduino 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>임베디드&lt;/td>
&lt;td>WorkBench&lt;/td>
&lt;td>Particle&lt;/td>
&lt;td>Particle이 제공하는 개발 환경, 펌웨어, 라이브러리, 클라우드 연동까지 IoT용 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>C/C++&lt;/td>
&lt;td>C/C++ Extension Pack&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>C/C++ 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>C/C++&lt;/td>
&lt;td>C/C++ Runner&lt;/td>
&lt;td>franneck94&lt;/td>
&lt;td>C/C++ 코드를 실행한다(gcc, msvc, cuda nvccc 컴파일러 지원)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>C/C++&lt;/td>
&lt;td>Cortex-Debug&lt;/td>
&lt;td>marus25&lt;/td>
&lt;td>Cortex-A/R/M 마이컴 디버깅을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Python&lt;/td>
&lt;td>Python Extension Pack&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Python 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Python&lt;/td>
&lt;td>jupyter&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Jupyter Notebook 개발을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>유틸리티·UI 확장&lt;/td>
&lt;td>Markdown All in One&lt;/td>
&lt;td>Yu Zhang&lt;/td>
&lt;td>Markdown 작성을 지원한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>유틸리티·UI 확장&lt;/td>
&lt;td>Hex Editor&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>바이너리 파일을 편집한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>유틸리티·UI 확장&lt;/td>
&lt;td>vscode-pdf&lt;/td>
&lt;td>tomoki1207&lt;/td>
&lt;td>PDF 파일을 표시한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>유틸리티·UI 확장&lt;/td>
&lt;td>Rainbow CSV&lt;/td>
&lt;td>mechatroner&lt;/td>
&lt;td>CSV 파일을 컬러풀하게 표시한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>유틸리티·UI 확장&lt;/td>
&lt;td>Draw.io Integration&lt;/td>
&lt;td>Henning Dieterichs&lt;/td>
&lt;td>Draw.io를 VSCode 상에서 이용한다&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>유틸리티·UI 확장&lt;/td>
&lt;td>Japanese Language Pack for Visual Studio Code&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>일본어화 팩&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>유틸리티·UI 확장&lt;/td>
&lt;td>Live Share&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>실시간 공동 작업을 지원한다&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>'mermaid.js를 사용해 보기'</title><link>http://kenji.blog/ko/p/mermaid.js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/</link><pubDate>Sat, 25 May 2024 02:18:09 +0900</pubDate><guid>http://kenji.blog/ko/p/mermaid.js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/mermaid.js%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/img_2.png" alt="Featured image of post 'mermaid.js를 사용해 보기'" />&lt;h2 id="mermaidjs란">mermaid.js란
&lt;/h2>&lt;p>mermaid.js는 JavaScript 라이브러리로, 텍스트 기반의 독자적인 구문(Mermaid 표기법)을 작성하여 플로우차트나 다이어그램, 간트 차트 등 복잡한 도표를 그래픽으로 표시할 수 있습니다.
GitHub나 Qiita, Notion 등 다양한 서비스에서도 채택되어 있습니다. 이번에는 hugo에서 mermaid.js를 사용할 수 있도록 해보겠습니다.&lt;/p>
&lt;h2 id="hugo에서-mermaidjs를-사용할-수-있게-하기">hugo에서 mermaid.js를 사용할 수 있게 하기
&lt;/h2>&lt;p>순서는 다음과 같습니다.&lt;/p>
&lt;ol>
&lt;li>layouts/partials/extend_footer.html에 다음을 추가합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">{{ if or .Params.mermaid .Site.Params.mermaid }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;https://cdn.jsdelivr.net/npm/mermaid@10.3.0/dist/mermaid.min.js&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{- $loadmermaid := resources.Get &amp;#34;js/load-mermaid.js&amp;#34; }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;{{ $loadmermaid.RelPermalink }}&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">initMermaid&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">isDarkTheme&lt;/span>&lt;span class="p">())&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">setPrefTheme&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">setPrefTheme&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;light&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{ end }}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>※if문으로 &lt;code>mermaid: true&lt;/code>로 설정한 경우에만 &lt;code>mermaid.min.js&lt;/code>를 불러오도록 하고 있습니다. 이 라이브러리는 3MB 정도로 의외로 큽니다.&lt;/p>
&lt;ol start="3">
&lt;li>assets/js/load-mermaid.js를 생성합니다. 이 처리는 초기화 및 동적으로 테마가 전환되었을 때 다시 그리기 위해 사용됩니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="p">(&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">window&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">&amp;#39;use strict&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">elementCode&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;.mermaid&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">loadMermaid&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kd">function&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">theme&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mermaid&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">initialize&lt;/span>&lt;span class="p">({&lt;/span>&lt;span class="nx">theme&lt;/span>&lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mermaid&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">init&lt;/span>&lt;span class="p">({&lt;/span>&lt;span class="nx">theme&lt;/span>&lt;span class="p">},&lt;/span> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">querySelectorAll&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">elementCode&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">saveOriginalData&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kd">function&lt;/span>&lt;span class="p">(){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nb">Promise&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nx">resolve&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">reject&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">els&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">querySelectorAll&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">elementCode&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">els&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">els&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">forEach&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">element&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">element&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">setAttribute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;data-original-code&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">element&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">innerHTML&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">count&lt;/span>&lt;span class="o">--&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">count&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">resolve&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">reject&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">resetProcessed&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kd">function&lt;/span>&lt;span class="p">(){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="nb">Promise&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nx">resolve&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">reject&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">els&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">querySelectorAll&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">elementCode&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">els&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">els&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">forEach&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">element&lt;/span> &lt;span class="p">=&amp;gt;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">element&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getAttribute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;data-original-code&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">element&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">removeAttribute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;data-processed&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">element&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">innerHTML&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">element&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getAttribute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;data-original-code&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">count&lt;/span>&lt;span class="o">--&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">count&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">resolve&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">reject&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kr">const&lt;/span> &lt;span class="nx">init&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">()=&amp;gt;{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">saveOriginalData&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="k">catch&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">addEventListener&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dark-theme-set&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">()=&amp;gt;{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">resetProcessed&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">then&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">loadMermaid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="k">catch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">addEventListener&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;light-theme-set&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">()=&amp;gt;{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">resetProcessed&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nx">then&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">loadMermaid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;default&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="k">catch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">console&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">error&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">initMermaid&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">init&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">})(&lt;/span>&lt;span class="nb">window&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>여기 바탕이 되는 코드는 다음을 참고했습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://github.com/mermaid-js/mermaid/issues/1945" target="_blank" rel="noopener"
>Reinitialize with new theme #1945&lt;/a>&lt;/li>
&lt;/ul>
&lt;ol start="3">
&lt;li>header.html의 테마 전환 시의 처리를 수정합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">function&lt;/span> &lt;span class="nx">switchTheme&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">theme&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">switch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">theme&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="s1">&amp;#39;light&amp;#39;&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{{&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="nx">or&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">Params&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mermaid&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">Site&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Params&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mermaid&lt;/span> &lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">dispatchEvent&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="nx">CustomEvent&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;light-theme-set&amp;#39;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{{&lt;/span> &lt;span class="nx">end&lt;/span> &lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">classList&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">remove&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{{&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="nx">or&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">Params&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mermaid&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">Site&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Params&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mermaid&lt;/span> &lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">dispatchEvent&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="nx">CustomEvent&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dark-theme-set&amp;#39;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{{&lt;/span> &lt;span class="nx">end&lt;/span> &lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">classList&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">add&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// auto
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">default&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">matchMedia&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;(prefers-color-scheme: dark)&amp;#39;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">matches&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{{&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="nx">or&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">Params&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mermaid&lt;/span> &lt;span class="p">.&lt;/span>&lt;span class="nx">Site&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Params&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">mermaid&lt;/span> &lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">dispatchEvent&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">new&lt;/span> &lt;span class="nx">CustomEvent&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dark-theme-set&amp;#39;&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{{&lt;/span> &lt;span class="nx">end&lt;/span> &lt;span class="p">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">body&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">classList&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">add&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="4">
&lt;li>layouts/shortcodes/mermaid.html을 생성합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;mermaid&amp;#34;&lt;/span> &lt;span class="na">align&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;{{ if .Get &amp;#34;&lt;/span>&lt;span class="na">align&lt;/span>&lt;span class="err">&amp;#34;&lt;/span> &lt;span class="err">}}{{&lt;/span> &lt;span class="err">.&lt;/span>&lt;span class="na">Get&lt;/span> &lt;span class="err">&amp;#34;&lt;/span>&lt;span class="na">align&lt;/span>&lt;span class="err">&amp;#34;&lt;/span> &lt;span class="err">}}{{&lt;/span> &lt;span class="na">else&lt;/span> &lt;span class="err">}}&lt;/span>&lt;span class="na">center&lt;/span>&lt;span class="err">{{&lt;/span> &lt;span class="na">end&lt;/span> &lt;span class="err">}}&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{ safeHTML .Inner }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이상으로 mermaid.js를 사용할 준비가 완료되었습니다.&lt;/p>
&lt;h2 id="mermaidjs-사용해-보기">mermaid.js 사용해 보기
&lt;/h2>&lt;ol>
&lt;li>게시글 정의에 다음을 추가합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-dtd" data-lang="dtd">&lt;span class="line">&lt;span class="cl">&lt;span class="err">marmaid:&lt;/span> &lt;span class="err">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="2">
&lt;li>게시글 본문에 다음을 추가합니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>플로우차트&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">mermaid&lt;/span> &lt;span class="na">align&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;center&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">graph TD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A[시작] --&amp;gt;|조건1| B(조건2)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt; C{조건3}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|조건4| D[종료]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">mermaid&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>출력 결과&lt;/strong>&lt;/p>
&lt;div class="mermaid" align="center">
graph TD
A[시작] -->|조건1| B(조건2)
B --> C{조건3}
C -->|조건4| D[종료]
&lt;/div>
&lt;p>&lt;strong>간트 차트&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">mermaid&lt;/span> &lt;span class="na">align&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;center&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gantt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> section Project
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 요구사항 정의 :done, a, 2024-05-25, 5d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 기본 설계 :done, b, after a, 5d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 상세 설계 :done, c, after b, 5d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 구현 :active, d, after c, 10d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 단위 테스트 :crit, e, after d, 5d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 통합 테스트 : f, after e, 5d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 종합 테스트 : g, after f, 5d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 릴리스 :milestone, h, after g, 1d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">mermaid&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>출력 결과&lt;/strong>&lt;/p>
&lt;div class="mermaid" align="center">
gantt
section Project
요구사항 정의 :done, a, 2024-05-25, 5d
기본 설계 :done, b, after a, 5d
상세 설계 :done, c, after b, 5d
구현 :active, d, after c, 10d
단위 테스트 :crit, e, after d, 5d
통합 테스트 : f, after e, 5d
종합 테스트 : g, after f, 5d
릴리스 :milestone, h, after g, 1d
&lt;/div>
&lt;p>&lt;strong>시퀀스 다이어그램&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-markdown" data-lang="markdown">&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">mermaid&lt;/span> &lt;span class="na">align&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;center&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sequenceDiagram
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant user
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant view
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant controller
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> participant database
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> user-&amp;gt;&amp;gt;view: ID/PW 입력
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> view-&amp;gt;&amp;gt;controller: 인증 요청
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> controller-&amp;gt;&amp;gt;model: 인증 요청
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> model-&amp;gt;&amp;gt;database: 인증 요청
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> database--&amp;gt;&amp;gt;model: 인증 결과 반환
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> model--&amp;gt;&amp;gt;controller: 인증 결과 반환
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> controller--&amp;gt;&amp;gt;view: 인증 결과 반환
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> view--&amp;gt;&amp;gt;user: 인증 결과 표시
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">mermaid&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>출력 결과&lt;/strong>&lt;/p>
&lt;div class="mermaid" align="center">
sequenceDiagram
participant user
participant view
participant controller
participant model
participant database
user->>view: ID/PW 입력
view->>controller: ajax 문의
controller->>model: 인증 요청
model->>database: SQL 실행
database-->>model: SQL 결과 반환
model-->>controller: 인증 요청 결과 반환
controller-->>view: ajax 문의 결과 반환
view-->>user: 인증 결과 표시
&lt;/div>
&lt;p>이상입니다.&lt;/p>
&lt;h3 id="참고">참고
&lt;/h3>&lt;ul>
&lt;li>&lt;a class="link" href="https://mermaid.js.org/#/" target="_blank" rel="noopener"
>mermaid.js 공식 사이트&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://mermaid.live/" target="_blank" rel="noopener"
>mermaid 구문을 미리 볼 수 있는 데모 사이트&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>git reset을 취소하는 방법</title><link>http://kenji.blog/ko/p/git-reset%E3%82%92%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%99%E6%96%B9%E6%B3%95/</link><pubDate>Wed, 15 May 2024 23:32:43 +0900</pubDate><guid>http://kenji.blog/ko/p/git-reset%E3%82%92%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%99%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/git-reset%E3%82%92%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%99%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post git reset을 취소하는 방법" />&lt;h1 id="git-reset을-취소하는-방법">git reset을 취소하는 방법
&lt;/h1>&lt;p>git commit을 수행한 후, 실수로 git reset을 실행해버린 경우, git reset을 취소하는 방법(git commit 시의 상태를 복원하는 방법)을 소개합니다.&lt;/p>
&lt;ol>
&lt;li>&lt;code>git reflog&lt;/code>로 리셋 전의 커밋 ID를 확인&lt;/li>
&lt;li>&lt;code>git reset --hard HEAD@{숫자}&lt;/code>로 리셋 전의 상태로 되돌림&lt;/li>
&lt;/ol>
&lt;p>이상, git reset을 취소하는 방법이었습니다.&lt;/p></description></item><item><title>'MS-DOS 4.0의 오픈소스화'</title><link>http://kenji.blog/ko/p/ms-dos-4.0-%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E5%8C%96/</link><pubDate>Sun, 05 May 2024 16:44:28 +0900</pubDate><guid>http://kenji.blog/ko/p/ms-dos-4.0-%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E5%8C%96/</guid><description>&lt;img src="http://kenji.blog/p/ms-dos-4.0-%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E5%8C%96/img.png" alt="Featured image of post 'MS-DOS 4.0의 오픈소스화'" />&lt;h2 id="ms-dos-40의-오픈소스화">MS-DOS 4.0의 오픈소스화
&lt;/h2>&lt;p>마이크로소프트사는 약 40년 전 출시된 MS-DOS 4.0의 소스 코드를 공개했다.
거의 완전히 8086 어셈블리 코드로 작성되어 있다.&lt;/p>
&lt;h2 id="github-리포지토리">github 리포지토리
&lt;/h2>&lt;p>&lt;a class="link" href="https://github.com/microsoft/MS-DOS" target="_blank" rel="noopener"
>https://github.com/microsoft/MS-DOS&lt;/a>&lt;/p>
&lt;h2 id="참고-사이트">참고 사이트
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://cloudblogs.microsoft.com/opensource/2024/04/25/open-sourcing-ms-dos-4-0/" target="_blank" rel="noopener"
>MS-DOS 4.0의 오픈소스화&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'엔지니어 초보자에게 추천하는 도서'</title><link>http://kenji.blog/ko/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/</link><pubDate>Sun, 05 May 2024 16:03:33 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img.png" alt="Featured image of post '엔지니어 초보자에게 추천하는 도서'" />&lt;ol>
&lt;li>리더블 코드
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_15.png"
width="1057"
height="1500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_15_huc95b138ee3dcf3e01c804919bb0a2951_1439618_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_15_huc95b138ee3dcf3e01c804919bb0a2951_1439618_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_15.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/li>
&lt;li>프로그래밍의 원리
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_14.png"
width="1057"
height="1500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_14_hu2ef10bf97b3341f50f5ce872bb9819ce_858111_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_14_hu2ef10bf97b3341f50f5ce872bb9819ce_858111_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_14.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/li>
&lt;li>실용주의 프로그래머
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_13.png"
width="1057"
height="1500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_13_hued43a825a7cef0e2f2f134925c5c929d_2826767_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_13_hued43a825a7cef0e2f2f134925c5c929d_2826767_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_13.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/li>
&lt;li>웹을 지탱하는 기술
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_12.png"
width="706"
height="1000"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_12_hu38f3f9fa330cdace274fc1d65dae56ad_542421_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_12_hu38f3f9fa330cdace274fc1d65dae56ad_542421_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_12.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/li>
&lt;li>안전한 웹 애플리케이션을 만드는 방법
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_11.png"
width="930"
height="1184"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_11_hu261da33dc4cf509479817847be63b78a_1062282_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_11_hu261da33dc4cf509479817847be63b78a_1062282_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_11.png"
class="gallery-image"
data-flex-grow="78"
data-flex-basis="188px"
>&lt;/li>
&lt;li>네트워크는 왜 연결되는가
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_10.png"
width="1060"
height="1500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_10_hu648160deb00f1ab01a6a1e5bf748893c_1757585_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_10_hu648160deb00f1ab01a6a1e5bf748893c_1757585_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_10.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/li>
&lt;li>달인에게 배우는 SQL 철저 지침서
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_9.png"
width="1058"
height="1500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_9_hu22594e93e209e80bffc86bee1328466c_2717668_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_9_hu22594e93e209e80bffc86bee1328466c_2717668_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_9.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/li>
&lt;li>Docker 실전 가이드
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_8.png"
width="1090"
height="1389"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_8_hu41a2f5f4345654e7bc83a15eefe34981_1727526_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_8_hu41a2f5f4345654e7bc83a15eefe34981_1727526_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_8.png"
class="gallery-image"
data-flex-grow="78"
data-flex-basis="188px"
>&lt;/li>
&lt;li>Kubernetes 완전 가이드
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_7.png"
width="1177"
height="1500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_7_hu8dd85a224029593fc5dc9a13ef20f0cd_3843087_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_7_hu8dd85a224029593fc5dc9a13ef20f0cd_3843087_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_7.png"
class="gallery-image"
data-flex-grow="78"
data-flex-basis="188px"
>&lt;/li>
&lt;li>CODE COMPLETE 제2판
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_5.png"
width="386"
height="500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_5_hucc61503c023b43658f514cad763aa5d4_337603_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_5_hucc61503c023b43658f514cad763aa5d4_337603_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="77"
data-flex-basis="185px"
>
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_6.png"
width="386"
height="500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_6_hu61c8fa1a50334de472b3f02d2e9b5d94_341513_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_6_hu61c8fa1a50334de472b3f02d2e9b5d94_341513_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="77"
data-flex-basis="185px"
>&lt;/li>
&lt;li>Clean Code 애자일 소프트웨어 달인의 기술
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_4.png"
width="1151"
height="1500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_4_hue4b240787121702069b25a9b17aebafc_1187914_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_4_hue4b240787121702069b25a9b17aebafc_1187914_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="76"
data-flex-basis="184px"
>&lt;/li>
&lt;li>Clean Architecture 달인에게 배우는 소프트웨어 구조와 설계
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_3.png"
width="1136"
height="1500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_3_hu14a1d1f632f80003cac638b75db73255_1099307_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_3_hu14a1d1f632f80003cac638b75db73255_1099307_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="75"
data-flex-basis="181px"
>&lt;/li>
&lt;li>게임 프로그래머가 되기 전에 알아두어야 할 기술
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_2.png"
width="387"
height="500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_2_hub093cdb3288ee25756912df1d9ec1a1d_177794_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_2_hub093cdb3288ee25756912df1d9ec1a1d_177794_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="77"
data-flex-basis="185px"
>&lt;/li>
&lt;li>Being Geek
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_1.png"
width="352"
height="500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_1_hub3e512c89bba46a5fcb37114a89f0140_168953_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_1_hub3e512c89bba46a5fcb37114a89f0140_168953_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="168px"
>&lt;/li>
&lt;li>객체지향으로 왜 만드는가
&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_16.png"
width="1057"
height="1500"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_16_hu55ba229358890270c55ec54f21a37dbc_1487603_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E5%88%9D%E5%AD%A6%E8%80%85%E3%81%AB%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E6%9B%B8%E7%B1%8D/img_16_hu55ba229358890270c55ec54f21a37dbc_1487603_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_16.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/li>
&lt;/ol></description></item><item><title>Excel 달력 템플릿 (공휴일 지원 버전)</title><link>http://kenji.blog/ko/p/excel%E3%81%AE%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E4%BC%91%E6%97%A5%E5%AF%BE%E5%BF%9C%E7%89%88/</link><pubDate>Wed, 01 May 2024 00:15:57 +0900</pubDate><guid>http://kenji.blog/ko/p/excel%E3%81%AE%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E4%BC%91%E6%97%A5%E5%AF%BE%E5%BF%9C%E7%89%88/</guid><description>&lt;img src="http://kenji.blog/p/excel%E3%81%AE%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E4%BC%91%E6%97%A5%E5%AF%BE%E5%BF%9C%E7%89%88/img.png" alt="Featured image of post Excel 달력 템플릿 (공휴일 지원 버전)" />&lt;h2 id="excel-달력-템플릿-공휴일-지원-버전을-만들었습니다">Excel 달력 템플릿 (공휴일 지원 버전)을 만들었습니다!
&lt;/h2>&lt;p>연도와 월을 입력하면 해당 월 달력의 공휴일이 표시되는 Excel 템플릿을 만들었습니다.&lt;/p>
&lt;p>다운로드하여 사용해 주세요.
&lt;a class="link" href="%e3%82%ab%e3%83%ac%e3%83%b3%e3%83%80%e3%83%bc.xlsx" >カレンダー.xlsx&lt;/a>&lt;/p></description></item><item><title>멀티 모니터에서 매번 부팅 시 DPI 설정이 초기화되는 문제 해결 방법</title><link>http://kenji.blog/ko/p/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%A2%E3%83%8B%E3%82%BF%E3%81%A7%E6%AF%8E%E5%9B%9E%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%ABdpi%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%8C%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/</link><pubDate>Mon, 29 Apr 2024 19:42:20 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%A2%E3%83%8B%E3%82%BF%E3%81%A7%E6%AF%8E%E5%9B%9E%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%ABdpi%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%8C%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%A2%E3%83%8B%E3%82%BF%E3%81%A7%E6%AF%8E%E5%9B%9E%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%ABdpi%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%8C%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/img.png" alt="Featured image of post 멀티 모니터에서 매번 부팅 시 DPI 설정이 초기화되는 문제 해결 방법" />&lt;p>※Windows 11에서의 설정 방법입니다.&lt;/p>
&lt;ol>
&lt;li>제어판 열기&lt;/li>
&lt;li>전원 옵션 선택&lt;/li>
&lt;li>&amp;lsquo;전원 단추 작동 설정&amp;rsquo; 클릭&lt;/li>
&lt;li>&amp;lsquo;현재 사용할 수 없는 설정 변경&amp;rsquo; 클릭&lt;/li>
&lt;li>&amp;lsquo;빠른 시작 켜기(권장)&amp;rsquo; 체크 해제&lt;/li>
&lt;li>&amp;lsquo;변경 내용 저장&amp;rsquo; 클릭&lt;/li>
&lt;/ol>
&lt;h3 id="참고">참고
&lt;/h3>&lt;p>&lt;a class="link" href="https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?PID=6010-9312" target="_blank" rel="noopener"
>\[Windows 10\] 빠른 시작을 비활성화하는 방법을 알려주세요.&lt;/a>&lt;/p></description></item><item><title>git 저장소의 최신 커밋만 가져오기</title><link>http://kenji.blog/ko/p/git%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E6%9C%80%E6%96%B0%E3%81%A0%E3%81%91%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/</link><pubDate>Sat, 27 Apr 2024 02:54:12 +0900</pubDate><guid>http://kenji.blog/ko/p/git%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E6%9C%80%E6%96%B0%E3%81%A0%E3%81%91%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/git%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E6%9C%80%E6%96%B0%E3%81%A0%E3%81%91%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/img.png" alt="Featured image of post git 저장소의 최신 커밋만 가져오기" />&lt;h1 id="저장소의-최신-커밋만-가져오기">저장소의 최신 커밋만 가져오기
&lt;/h1>&lt;p>다음 명령어로 저장소의 최신 커밋만 가져올 수 있습니다.
디스크 용량을 절약하기 위해, 빠르게 저장소를 가져오고 싶을 때 유용합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">git clone --depth 1 &amp;lt;저장소 URL&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>인증서 오류로 GitHub Copilot을 사용할 수 없게 된 경우의 대처 방법</title><link>http://kenji.blog/ko/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 21 Apr 2024 18:47:26 +0900</pubDate><guid>http://kenji.blog/ko/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 인증서 오류로 GitHub Copilot을 사용할 수 없게 된 경우의 대처 방법" />&lt;h1 id="github-copilot에서-다음과-같은-오류가-표시된-경우의-대처-방법">GitHub Copilot에서 다음과 같은 오류가 표시된 경우의 대처 방법
&lt;/h1>&lt;p>2024년 4월 19일경부터 GitHub Copilot을 사용할 수 없게 되었습니다. 오류 메시지는 다음과 같습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[ERROR] [ghostText] [2024-04-21T04:06:46.900Z] Error on ghost text request: (FetchError) unable to verify the first certificate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[ERROR] [certificates] [2024-04-21T04:06:46.901Z] Your current Copilot license doesn&amp;#39;t support proxy connections with custom certificates. Please visit https://gh.io/copilot-network-errors to learn more. Original cause: {&amp;#34;type&amp;#34;:&amp;#34;system&amp;#34;,&amp;#34;_name&amp;#34;:&amp;#34;FetchError&amp;#34;,&amp;#34;code&amp;#34;:&amp;#34;UNABLE_TO_VERIFY_LEAF_SIGNATURE&amp;#34;}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="대처-방법">대처 방법
&lt;/h2>&lt;p>이것은 ESET의 버그인 것 같습니다. ESET의 고급 설정에서 &amp;lsquo;SSL/TLS 활성화&amp;rsquo;를 OFF로 설정합니다.
&lt;img src="http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_1.png"
width="679"
height="468"
srcset="http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_1_hu79798d24a79f4dc94eb7f8ca51727896_114738_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_1_hu79798d24a79f4dc94eb7f8ca51727896_114738_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="145"
data-flex-basis="348px"
>&lt;/p>
&lt;h2 id="참고">참고
&lt;/h2>&lt;p>AWS의 CDK에서도 동일한 오류가 발생하는 것 같습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://repost.aws/questions/QU2H94hF04SIuEVejK_a1mtQ/aws-cdk-bootstrap-certificate-warning-error" target="_blank" rel="noopener"
>AWS CDK bootstrap certificate warning-error&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Vim 입문</title><link>http://kenji.blog/ko/p/vim%E5%85%A5%E9%96%80/</link><pubDate>Fri, 19 Apr 2024 22:06:34 +0900</pubDate><guid>http://kenji.blog/ko/p/vim%E5%85%A5%E9%96%80/</guid><description>&lt;img src="http://kenji.blog/p/vim%E5%85%A5%E9%96%80/img.png" alt="Featured image of post Vim 입문" />&lt;p>&lt;img src="http://kenji.blog/p/vim%E5%85%A5%E9%96%80/img_1.png"
width="1920"
height="1080"
srcset="http://kenji.blog/p/vim%E5%85%A5%E9%96%80/img_1_hue190cb5546151f3c9f61d693ae541095_45716_480x0_resize_box_3.png 480w, http://kenji.blog/p/vim%E5%85%A5%E9%96%80/img_1_hue190cb5546151f3c9f61d693ae541095_45716_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
>&lt;/p>
&lt;h1 id="vim-입문">Vim 입문
&lt;/h1>&lt;h2 id="다운로드와-설치">다운로드와 설치
&lt;/h2>&lt;p>&lt;a class="link" href="https://www.vim.org/download.php" target="_blank" rel="noopener"
>https://www.vim.org/download.php&lt;/a>&lt;/p>
&lt;p>위의 사이트에서, 설치하고 싶은 OS에 맞춰 모듈을 다운로드 및 설치합니다.&lt;/p>
&lt;p>Windows의 경우 &lt;code>gvim_X.X.X_x64_signed.exe&lt;/code>를 선택하면 좋을 것입니다.&lt;/p>
&lt;h2 id="시작-방법">시작 방법
&lt;/h2>&lt;p>Windows의 경우 환경 변수에 &lt;code>vim.exe&lt;/code>가 있는 폴더를 Path에 등록해 둘 필요가 있습니다.&lt;/p>
&lt;p>시작 방법&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">vim
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>파일명을 지정해서 시작할 경우&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">vim filename.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="종료-방법">종료 방법
&lt;/h2>&lt;p>종료할 경우 &lt;code>:&lt;/code>(콜론)을 입력 후, &lt;code>q&lt;/code>를 입력하고, Enter를 입력&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">:q
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>파일을 업데이트했을 경우 &lt;code>마지막 변경이 저장되지 않았습니다 (!를 추가하여 변경 사항 폐기)&lt;/code>라고 표시됩니다.
내용을 폐기하고 강제적으로 종료할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">:q!
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>파일을 쓰고 종료할 경우&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">:wq
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>다음과 같이 입력해도 같은 의미입니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">:x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>또한, &lt;code>Shift&lt;/code>를 누른 채 &lt;code>z&lt;/code>를 2번 누르는 것으로도 종료할 수 있습니다. (&lt;code>:wq&lt;/code>와 같음)&lt;/p>
&lt;h2 id="모드">모드
&lt;/h2>&lt;p>Vim에는 &lt;code>명령 모드&lt;/code>와 &lt;code>입력 모드&lt;/code>가 있습니다. Vim을 시작한 시점에는 &lt;code>명령 모드&lt;/code>가 되며, &lt;code>i&lt;/code> 키를 누르면 &lt;code>입력 모드&lt;/code>로 전환됩니다.&lt;/p>
&lt;p>&lt;code>입력 모드&lt;/code>에서는 문자 그대로 입력이 가능해집니다. &lt;code>입력 모드&lt;/code>에서 &lt;code>명령 모드&lt;/code>로 전환하려면 &lt;code>ESC&lt;/code> 키를 누릅니다.&lt;/p>
&lt;p>이 입력 모드의 전환이 있는 것이 Vim의 특징입니다.&lt;/p>
&lt;h2 id="커서-이동과-스크롤">커서 이동과 스크롤
&lt;/h2>&lt;p>&lt;code>명령 모드&lt;/code>일 때의 커서 이동과 스크롤에 대해 정리합니다.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>키&lt;/th>
&lt;th>설명&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>h&lt;/code> (또는 &lt;code>Ctrl&lt;/code>+&lt;code>H&lt;/code>, &lt;code>BackSpace&lt;/code>, &lt;code>←&lt;/code>)&lt;/td>
&lt;td>왼쪽으로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>j&lt;/code> (또는 &lt;code>Ctrl&lt;/code>+&lt;code>J&lt;/code>・&lt;code>N&lt;/code>, &lt;code>↓&lt;/code>)&lt;/td>
&lt;td>아래로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>k&lt;/code> (또는 &lt;code>Ctrl&lt;/code>+&lt;code>P&lt;/code>, &lt;code>↑&lt;/code>)&lt;/td>
&lt;td>위로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>l&lt;/code> (또는 &lt;code>Space&lt;/code>, &lt;code>→&lt;/code>)&lt;/td>
&lt;td>오른쪽으로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>+&lt;/code> (또는 &lt;code>Enter&lt;/code>)&lt;/td>
&lt;td>다음 줄의 첫 문자로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-&lt;/code>&lt;/td>
&lt;td>이전 줄의 첫 문자로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>B&lt;/code> (또는 &lt;code>PageUp&lt;/code>)&lt;/td>
&lt;td>위쪽 방향으로 스크롤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>F&lt;/code> (또는 &lt;code>PageDown&lt;/code>)&lt;/td>
&lt;td>아래쪽 방향으로 스크롤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>U&lt;/code>&lt;/td>
&lt;td>위쪽 방향으로 반 스크롤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>D&lt;/code>&lt;/td>
&lt;td>아래쪽 방향으로 반 스크롤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>Y&lt;/code>&lt;/td>
&lt;td>위쪽 방향으로 1줄 스크롤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>E&lt;/code>&lt;/td>
&lt;td>아래쪽 방향으로 1줄 스크롤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z&lt;/code> &lt;code>Enter&lt;/code>&lt;/td>
&lt;td>커서가 있는 줄을 화면 상단으로 스크롤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z&lt;/code> &lt;code>.&lt;/code>&lt;/td>
&lt;td>커서가 있는 줄을 화면 중앙으로 스크롤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z&lt;/code> &lt;code>-&lt;/code>&lt;/td>
&lt;td>커서가 있는 줄을 화면 하단으로 스크롤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>0&lt;/code> (또는 &lt;code>|&lt;/code>)&lt;/td>
&lt;td>커서를 줄의 맨 앞으로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>$&lt;/code>&lt;/td>
&lt;td>커서를 줄의 맨 뒤로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>^&lt;/code> (또는 &lt;code>_&lt;/code>)&lt;/td>
&lt;td>커서를 줄의 맨 앞으로 (공백, Tab 제외) 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>G&lt;/code> (또는 &lt;code>:$&lt;/code>)&lt;/td>
&lt;td>커서를 마지막 줄로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>:줄 번호&lt;/code> &lt;code>Enter&lt;/code>&lt;/td>
&lt;td>지정한 줄로 이동&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;code>숫자&lt;/code> 뒤에 위의 이동하는 키를 입력하면, 숫자만큼 여러 번 이동할 수 있습니다.
(예를 들어, &lt;code>3j&lt;/code>를 입력하면 현재 커서 위치에서 아래로 3줄 이동합니다.)&lt;/p>
&lt;h2 id="기타-명령">기타 명령
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>키&lt;/th>
&lt;th>설명&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>L&lt;/code>&lt;/td>
&lt;td>화면을 다시 그림&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>G&lt;/code>&lt;/td>
&lt;td>파일 전체의 줄 수, 커서 위치 등을 표시&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>LoadIcon은 DestroyIcon을 호출할 필요가 없다</title><link>http://kenji.blog/ko/p/loadicon%E3%81%AFdestroyicon%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E5%BF%85%E8%A6%81%E3%81%AF%E3%81%AA%E3%81%84/</link><pubDate>Fri, 19 Apr 2024 01:55:17 +0900</pubDate><guid>http://kenji.blog/ko/p/loadicon%E3%81%AFdestroyicon%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E5%BF%85%E8%A6%81%E3%81%AF%E3%81%AA%E3%81%84/</guid><description>&lt;h1 id="destroyicon을-호출할-필요성에-대하여">DestroyIcon을 호출할 필요성에 대하여
&lt;/h1>&lt;p>DestroyIcon을 호출해야 하는 경우는 다음과 같다.&lt;/p>
&lt;ul>
&lt;li>CreateIconFromResourceEx (LR_SHARED 플래그 없이 호출된 경우)&lt;/li>
&lt;li>CreateIconIndirect&lt;/li>
&lt;li>CopyIcon&lt;/li>
&lt;/ul>
&lt;p>위의 함수로 생성된 경우.&lt;/p>
&lt;ul>
&lt;li>LoadIcon&lt;/li>
&lt;li>LoadImage (LR_SHARED 플래그를 사용하는 경우)&lt;/li>
&lt;li>CopyImage (LR_COPYRETURNORG 플래그를 사용하고, hImage 매개변수가 공유 아이콘인 경우)&lt;/li>
&lt;li>CreateIconFromResource&lt;/li>
&lt;li>CreateIconFromResourceEx (LR_SHARED 플래그를 사용하는 경우)&lt;/li>
&lt;/ul>
&lt;p>위의 경우로 생성 및 로드된 아이콘은 DestroyIcon을 호출해서는 안 된다.&lt;/p>
&lt;h3 id="참고">참고
&lt;/h3>&lt;ul>
&lt;li>&lt;a class="link" href="https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-destroyicon" target="_blank" rel="noopener"
>DestroyIcon 함수 (winuser.h)&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>생성형 AI에 대하여</title><link>http://kenji.blog/ko/p/%E7%94%9F%E6%88%90ai%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</link><pubDate>Tue, 16 Apr 2024 02:13:56 +0900</pubDate><guid>http://kenji.blog/ko/p/%E7%94%9F%E6%88%90ai%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</guid><description>&lt;img src="http://kenji.blog/p/%E7%94%9F%E6%88%90ai%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img.png" alt="Featured image of post 생성형 AI에 대하여" />&lt;h2 id="생성형-ai에-대한-강의-영상">생성형 AI에 대한 강의 영상
&lt;/h2>&lt;ul>
&lt;li>「생성형 AI」(1) 나카오 마사유키·도쿄대학 교수　2023.9.8&lt;/li>
&lt;/ul>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/uN0eilnXl4E"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;ul>
&lt;li>「생성형 AI」(2) 사카이 쿠니요시·도쿄대학 대학원 교수　2023.10.11&lt;/li>
&lt;/ul>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/wz1-DOZoQt0"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;ul>
&lt;li>「생성형 AI」(3) 마츠오 유타카·도쿄대학 대학원 교수　2024.3.15&lt;/li>
&lt;/ul>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/U9vhGvFxKu0"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div></description></item><item><title>curl로 QR 코드 생성</title><link>http://kenji.blog/ko/p/curl%E3%81%A7qr%E3%82%B3%E3%83%BC%E3%83%89%E7%94%9F%E6%88%90/</link><pubDate>Tue, 16 Apr 2024 00:42:27 +0900</pubDate><guid>http://kenji.blog/ko/p/curl%E3%81%A7qr%E3%82%B3%E3%83%BC%E3%83%89%E7%94%9F%E6%88%90/</guid><description>&lt;img src="http://kenji.blog/p/curl%E3%81%A7qr%E3%82%B3%E3%83%BC%E3%83%89%E7%94%9F%E6%88%90/img.png" alt="Featured image of post curl로 QR 코드 생성" />&lt;h2 id="curl로-qr-코드-생성">curl로 QR 코드 생성
&lt;/h2>&lt;p>주의: 소개하는 방법은 서버 측에서 QR 코드를 생성하여 반환하기 때문에 로그가 남을 수 있습니다. 개인 정보 등 기밀 정보를 QR 코드로 변환할 때는 주의하세요.&lt;/p>
&lt;h3 id="방법-1">방법 1
&lt;/h3>&lt;p>명령 프롬프트에서 QR 코드를 생성하는 방법입니다.
&lt;code>qrenco.de&lt;/code>는 응답을 텍스트 기반으로 반환합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">curl qrenco.de/kenji.blog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>출력 결과&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">█████████████████████████████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">█████████████████████████████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████ ▄▄▄▄▄ █ ▄ ▄ █ ▄▄▄▄▄ ████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████ █ █ █ ▀▀▀██ █ █ ████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████ █▄▄▄█ █▀▀█▀▄█ █▄▄▄█ ████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████▄▄▄▄▄▄▄█▄▀ ▀ █▄▄▄▄▄▄▄████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████▄ █▀▄ ▄▀█▄▀ ▀██▄▀ ▄████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████▀▀▀█ ▄▄ ▄█▄█▀█▀▄██ ▀████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████▄▄▄██▄▄█ █▀█ ▄██▀▀█ █████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████ ▄▄▄▄▄ █▀█ ▀ ▄▀▄▄▄ ▀████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████ █ █ █▄▄ ▄▀▄▀▄ ██ ▀████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████ █▄▄▄█ █▀▀█ ▀▄▄▄ ▄▄██████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">████▄▄▄▄▄▄▄█▄▄███▄▄█▄███▄████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">█████████████████████████████
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">█████████████████████████████
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="참고">참고
&lt;/h4>&lt;ul>
&lt;li>&lt;a class="link" href="https://qrenco.de/" target="_blank" rel="noopener"
>qrenco.de&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="방법-2">방법 2
&lt;/h3>&lt;p>&lt;code>api.qrserver.com&lt;/code>은 이미지를 반환합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">curl -o qr.png &amp;#34;https://api.qrserver.com/v1/create-qr-code/?size=150x150&amp;amp;data=HelloWorld&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>출력 결과
&lt;img src="http://kenji.blog/p/curl%E3%81%A7qr%E3%82%B3%E3%83%BC%E3%83%89%E7%94%9F%E6%88%90/qr.png"
width="250"
height="250"
srcset="http://kenji.blog/p/curl%E3%81%A7qr%E3%82%B3%E3%83%BC%E3%83%89%E7%94%9F%E6%88%90/qr_hud34111b99823e39dfc62f9ba667fd5f9_390_480x0_resize_box_3.png 480w, http://kenji.blog/p/curl%E3%81%A7qr%E3%82%B3%E3%83%BC%E3%83%89%E7%94%9F%E6%88%90/qr_hud34111b99823e39dfc62f9ba667fd5f9_390_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/li>
&lt;/ul>
&lt;h4 id="참고-1">참고
&lt;/h4>&lt;ul>
&lt;li>&lt;a class="link" href="https://goqr.me/api/doc/create-qr-code/" target="_blank" rel="noopener"
>QR Code Generator&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Microsoft Word의 단축키 목록</title><link>http://kenji.blog/ko/p/microsoft-word%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/</link><pubDate>Sun, 07 Apr 2024 14:18:51 +0900</pubDate><guid>http://kenji.blog/ko/p/microsoft-word%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/</guid><description>&lt;img src="http://kenji.blog/p/microsoft-word%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img.png" alt="Featured image of post Microsoft Word의 단축키 목록" />&lt;h2 id="단축키-목록">단축키 목록
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>단축키&lt;/th>
&lt;th>설명&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>B&lt;/code>&lt;/td>
&lt;td>굵게&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>I&lt;/code>&lt;/td>
&lt;td>기울임꼴&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>U&lt;/code>&lt;/td>
&lt;td>밑줄&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>E&lt;/code>&lt;/td>
&lt;td>가운데 정렬&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>L&lt;/code>&lt;/td>
&lt;td>왼쪽 정렬&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>R&lt;/code>&lt;/td>
&lt;td>오른쪽 정렬&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>]&lt;/code>&lt;/td>
&lt;td>글꼴 크기 크게&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>[&lt;/code>&lt;/td>
&lt;td>글꼴 크기 작게&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>C&lt;/code>&lt;/td>
&lt;td>복사&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>V&lt;/code>&lt;/td>
&lt;td>붙여넣기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>&lt;/td>
&lt;td>잘라내기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Z&lt;/code>&lt;/td>
&lt;td>실행 취소&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Y&lt;/code>&lt;/td>
&lt;td>다시 실행&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>A&lt;/code>&lt;/td>
&lt;td>모두 선택&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Shift&lt;/code> + &lt;code>방향키&lt;/code>&lt;/td>
&lt;td>범위 선택&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>텍스트 찾기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>H&lt;/code>&lt;/td>
&lt;td>텍스트 바꾸기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>P&lt;/code>&lt;/td>
&lt;td>인쇄 미리보기 표시&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>S&lt;/code>&lt;/td>
&lt;td>문서 저장&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F12&lt;/code>&lt;/td>
&lt;td>다른 이름으로 저장&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Home&lt;/code>&lt;/td>
&lt;td>문서의 시작으로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>End&lt;/code>&lt;/td>
&lt;td>문서의 끝으로 이동&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://support.microsoft.com/ja-jp/office/word-%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88-95ef89dd-7142-4b50-afb2-f762f663ceb2" target="_blank" rel="noopener"
>Word의 키보드 단축키&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>웹 페이지 자동 새로고침 브라우저 확장 프로그램 (Edge 애드온)</title><link>http://kenji.blog/ko/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/</link><pubDate>Sat, 06 Apr 2024 15:36:54 +0900</pubDate><guid>http://kenji.blog/ko/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/</guid><description>&lt;img src="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img.png" alt="Featured image of post 웹 페이지 자동 새로고침 브라우저 확장 프로그램 (Edge 애드온)" />&lt;p>웹 페이지를 자동으로 새로고침하는 Edge 브라우저 확장 기능 &amp;lsquo;탭 자동 새로고침&amp;rsquo;을 소개합니다.&lt;/p>
&lt;h2 id="탭-자동-새로고침-설치">탭 자동 새로고침 설치
&lt;/h2>&lt;p>&lt;a class="link" href="https://microsoftedge.microsoft.com/addons/detail/%E3%82%BF%E3%83%96%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0/bicjibdndeejemialpbohjpiimehbapb" target="_blank" rel="noopener"
>탭 자동 새로고침&lt;/a>&lt;/p>
&lt;p>위 사이트에 접속하여 &lt;code>설치&lt;/code>를 클릭합니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_2.png"
width="1273"
height="293"
srcset="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_2_hub66f442627eafd2aa9852e4d513af28c_23623_480x0_resize_box_3.png 480w, http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_2_hub66f442627eafd2aa9852e4d513af28c_23623_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="434"
data-flex-basis="1042px"
>&lt;/p>
&lt;p>&lt;code>확장 기능 추가&lt;/code>를 클릭합니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_3.png"
width="451"
height="117"
srcset="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_3_hu76927d4adfd21a9bc7e2622ce89ec4f1_7963_480x0_resize_box_3.png 480w, http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_3_hu76927d4adfd21a9bc7e2622ce89ec4f1_7963_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="385"
data-flex-basis="925px"
>&lt;/p>
&lt;h2 id="사용법">사용법
&lt;/h2>&lt;p>설치가 완료되면 Edge의 우측 상단에 아이콘이 추가됩니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_4.png"
width="67"
height="37"
srcset="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_4_hu2426c2158830cf89cd3747985b808d16_425_480x0_resize_box_3.png 480w, http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_4_hu2426c2158830cf89cd3747985b808d16_425_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="181"
data-flex-basis="434px"
>&lt;/p>
&lt;p>자동으로 새로고침할 웹 페이지를 열고 아이콘을 클릭하면 자동 새로고침이 시작됩니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_1.png"
width="565"
height="345"
srcset="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_1_hu36cf9795d5097e9109b83445e7aae628_79361_480x0_resize_box_3.png 480w, http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_1_hu36cf9795d5097e9109b83445e7aae628_79361_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="163"
data-flex-basis="393px"
>&lt;/p>
&lt;p>녹색 테두리 부분이 자동 새로고침되는 간격입니다. 자동 새로고침할 타이밍을 선택해 주세요.&lt;/p>
&lt;p>자동 새로고침을 중지하려면 아이콘을 클릭하고 &lt;code>Stop reloading this tab&lt;/code>을 클릭합니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_5.png"
width="565"
height="395"
srcset="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_5_hud3ff5692d970d8f2ac1fd8633c8cc9ef_79989_480x0_resize_box_3.png 480w, http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E6%8B%A1%E5%BC%B5edge%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/img_5_hud3ff5692d970d8f2ac1fd8633c8cc9ef_79989_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="143"
data-flex-basis="343px"
>&lt;/p></description></item><item><title>'Visual Studio 단축키 목록'</title><link>http://kenji.blog/ko/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/</link><pubDate>Sat, 06 Apr 2024 11:27:37 +0900</pubDate><guid>http://kenji.blog/ko/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/</guid><description>&lt;img src="http://kenji.blog/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img.png" alt="Featured image of post 'Visual Studio 단축키 목록'" />&lt;h1 id="visual-studio-단축키-목록">Visual Studio 단축키 목록
&lt;/h1>&lt;p>개인적으로 자주 사용하는 Visual Studio 단축키를 목록으로 정리했습니다.
Visual Studio의 단축키는 키보드 조작을 익힘으로써 효율적으로 개발 작업을 진행할 수 있습니다. 꼭 활용해 보세요.&lt;/p>
&lt;p>※Visual Studio 2022에서 확인했습니다.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>단축키&lt;/th>
&lt;th>설명&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>F1&lt;/code>&lt;/td>
&lt;td>선택한 단어의 도움말 표시&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F2&lt;/code>&lt;/td>
&lt;td>북마크로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F2&lt;/code>&lt;/td>
&lt;td>북마크 등록&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>F2&lt;/code>&lt;/td>
&lt;td>모든 북마크 삭제&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F5&lt;/code>&lt;/td>
&lt;td>빌드 후 실행 (디버그 실행)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F5&lt;/code>&lt;/td>
&lt;td>빌드 후 실행 (디버그 없이)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F7&lt;/code>&lt;/td>
&lt;td>빌드&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F9&lt;/code>&lt;/td>
&lt;td>커서가 있는 줄에 중단점 추가&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F9&lt;/code>&lt;/td>
&lt;td>커서가 있는 줄의 중단점을 비활성화&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Shift&lt;/code> + &lt;code>Ctrl&lt;/code> + &lt;code>F9&lt;/code>&lt;/td>
&lt;td>모든 중단점 삭제&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F10&lt;/code>&lt;/td>
&lt;td>프로시저 단위 실행 (Step Over)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F11&lt;/code>&lt;/td>
&lt;td>한 단계씩 코드 실행 (Step Into)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F12&lt;/code>&lt;/td>
&lt;td>정의로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>D&lt;/code>&lt;/td>
&lt;td>커서가 있는 줄 복제&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>&lt;/td>
&lt;td>선택 범위가 없을 때 줄 잘라내기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>]&lt;/code>&lt;/td>
&lt;td>커서 부분의 괄호에 대응하는 괄호까지 선택&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Alt&lt;/code> + &lt;code>위/아래 방향키&lt;/code>&lt;/td>
&lt;td>커서가 있는 줄을 위아래로 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Alt&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>방향키&lt;/code>&lt;/td>
&lt;td>멀티 커서 / 사각형 선택&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Tab&lt;/code>&lt;/td>
&lt;td>소스 코드 / 창 표시 전환&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>V&lt;/code>&lt;/td>
&lt;td>클립보드 기록 표시&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>K&lt;/code> 후 &lt;code>Ctrl&lt;/code> + &lt;code>C&lt;/code>&lt;/td>
&lt;td>커서가 있는 줄 주석 처리&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>K&lt;/code> 후 &lt;code>Ctrl&lt;/code> + &lt;code>U&lt;/code>&lt;/td>
&lt;td>커서가 있는 줄 주석 처리 해제&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>G&lt;/code>&lt;/td>
&lt;td>줄 번호를 지정하여 이동&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>찾기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>전역 찾기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>H&lt;/code>&lt;/td>
&lt;td>바꾸기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>전역 바꾸기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Tab&lt;/code>&lt;/td>
&lt;td>소스 코드 / 창 표시 전환&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Space&lt;/code>&lt;/td>
&lt;td>단어 자동 완성&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Alt&lt;/code> + &lt;code>L&lt;/code>&lt;/td>
&lt;td>솔루션 탐색기 창 열기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>E&lt;/code>&lt;/td>
&lt;td>리소스 뷰 창 열기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>0&lt;/code> 후 &lt;code>Ctrl&lt;/code> + &lt;code>G&lt;/code>&lt;/td>
&lt;td>Git 커밋 창 열기&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://learn.microsoft.com/ko-kr/visualstudio/ide/default-keyboard-shortcuts-in-visual-studio?view=vs-2022&amp;amp;utm_source=vshelp&amp;amp;wt.mc_id=visualstudio_inproduct_shortcuts_csaapp" target="_blank" rel="noopener"
>Visual Studio의 키보드 단축키&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="http://kenji.blog/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img_1.png"
width="1094"
height="823"
srcset="http://kenji.blog/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img_1_hu4eaca85d6437d1dd6b23efd21afacc82_582969_480x0_resize_box_3.png 480w, http://kenji.blog/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img_1_hu4eaca85d6437d1dd6b23efd21afacc82_582969_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="132"
data-flex-basis="319px"
>&lt;/p></description></item><item><title>'파일 탐색기 우클릭 메뉴에 히데마루 에디터 grep 추가하기'</title><link>http://kenji.blog/ko/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AB%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFgrep%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/</link><pubDate>Wed, 03 Apr 2024 00:00:46 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AB%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFgrep%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AB%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFgrep%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/img.png" alt="Featured image of post '파일 탐색기 우클릭 메뉴에 히데마루 에디터 grep 추가하기'" />&lt;p>Windows 10/11에서 파일 탐색기의 우클릭 메뉴에 히데마루 에디터의 grep을 추가하는 방법을 소개합니다.&lt;/p>
&lt;p>&lt;strong>※ 다음 절차는 레지스트리를 변경하므로 본인의 책임 하에 진행해 주십시오.&lt;/strong>&lt;/p>
&lt;h2 id="절차">절차
&lt;/h2>&lt;ol>
&lt;li>아래 링크를 열어 원하는 폴더에 저장합니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;a class="link" href="%e7%a7%80%e4%b8%b8%e3%83%ac%e3%82%b8%e3%82%b9%e3%83%88%e3%83%aa%e7%99%bb%e9%8c%b2.reg" >히데마루 레지스트리 등록.reg&lt;/a>&lt;/p>
&lt;ol start="2">
&lt;li>&lt;code>秀丸レジストリ登録.reg&lt;/code> 파일을 더블 클릭하여 레지스트리에 추가합니다.&lt;/li>
&lt;/ol>
&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://aimek-developer.blogspot.com/2019/02/grep.html" target="_blank" rel="noopener"
>폴더 우클릭 메뉴에서 히데마루 grep 실행하기&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'생일 역설이란?'</title><link>http://kenji.blog/ko/p/%E3%83%90%E3%83%BC%E3%82%B9%E3%83%87%E3%82%A4%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9%E3%81%A8%E3%81%AF/</link><pubDate>Tue, 02 Apr 2024 01:20:50 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%90%E3%83%BC%E3%82%B9%E3%83%87%E3%82%A4%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9%E3%81%A8%E3%81%AF/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%90%E3%83%BC%E3%82%B9%E3%83%87%E3%82%A4%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9%E3%81%A8%E3%81%AF/img.png" alt="Featured image of post '생일 역설이란?'" />&lt;h2 id="생일-역설을-아시나요">생일 역설을 아시나요?
&lt;/h2>&lt;p>조금 신기한 이야기를 해볼까 합니다.
&amp;lsquo;같은 생일인 사람이 있을 확률&amp;rsquo;은 몇 명 정도 모여야 높아질 것이라 생각하시나요?&lt;/p>
&lt;p>예를 들어 1년은 365일이므로, &amp;lsquo;23명이 모여서 누군가와 생일이 겹칠 확률은 50% 이상&amp;rsquo;이라고 한다면… 왠지 직관에 어긋나는 느낌이 드실 겁니다.&lt;/p>
&lt;p>하지만 이것은 &lt;strong>정말 50% 이상입니다.&lt;/strong>&lt;/p>
&lt;hr>
&lt;h2 id="왜-그런-일이-발생할까요">왜 그런 일이 발생할까요?
&lt;/h2>&lt;p>이 현상은 &amp;lsquo;생일 역설&amp;rsquo;이라고 불립니다.
이름은 &amp;lsquo;역설(패러독스)&amp;lsquo;이지만, 제대로 된 수학적인 이유가 있습니다.&lt;/p>
&lt;p>인원수를 &amp;rsquo;n&amp;rsquo;이라고 했을 때, &lt;strong>아무도 생일이 겹치지 않을 확률&lt;/strong> 은 다음 수식으로 구할 수 있습니다:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">P(아무도 겹치지 않음) = 365/365 × 364/365 × 363/365 × ... × (365 - n + 1)/365
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이 값을 1에서 빼면 &amp;lsquo;누군가와 겹칠 확률&amp;rsquo;이 나옵니다.&lt;/p>
&lt;hr>
&lt;h2 id="결과를-살펴보면">결과를 살펴보면…
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>인원수&lt;/th>
&lt;th>같은 생일인 사람이 있을 확률&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>10명&lt;/td>
&lt;td>약 11.7%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>20명&lt;/td>
&lt;td>약 41.1%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>23명&lt;/td>
&lt;td>&lt;strong>약 50.7% (여기가 주목!)&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>30명&lt;/td>
&lt;td>약 70.6%&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>70명&lt;/td>
&lt;td>&lt;strong>무려 약 99.9%!&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>즉, 단 &lt;strong>23명&lt;/strong> 만 있으면 절반 이상의 확률로 누군가와 생일이 겹치게 됩니다.
학교 학급이나 직장 회의에서도 꽤 자주 들어맞을 것 같죠.&lt;/p>
&lt;hr>
&lt;h2 id="요약-직관과-수학의-차이가-재미있다">요약: 직관과 수학의 차이가 재미있다
&lt;/h2>&lt;p>&amp;lsquo;생일 역설&amp;rsquo;은 우리의 직관과 실제 수학적인 확률이 어긋나는 재미있는 예입니다.
이런 이야기를 알아두면 가벼운 잡담이나 퀴즈로 분위기를 띄울 수 있을지도 모릅니다!&lt;/p>
&lt;hr>
&lt;h2 id="참고-링크">참고 링크
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E8%AA%95%E7%94%9F%E6%97%A5%E3%81%AE%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9" target="_blank" rel="noopener"
>생일 역설 (Wikipedia)&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'Snipping Tool 사용법'</title><link>http://kenji.blog/ko/p/snipping-tool%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/</link><pubDate>Mon, 01 Apr 2024 23:19:45 +0900</pubDate><guid>http://kenji.blog/ko/p/snipping-tool%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/</guid><description>&lt;img src="http://kenji.blog/p/snipping-tool%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/img.png" alt="Featured image of post 'Snipping Tool 사용법'" />&lt;h2 id="snipping-tool이란">Snipping Tool이란
&lt;/h2>&lt;p>Snipping Tool은 Windows에 기본 탑재되어 있는 스크린샷 도구입니다. 화면의 일부를 잘라서 저장하거나, 화면 전체를 캡처하거나, 녹화할 수 있습니다.&lt;/p>
&lt;h2 id="snipping-tool-실행-방법">Snipping Tool 실행 방법
&lt;/h2>&lt;p>주로 다음 3가지 방법으로 실행할 수 있습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;code>Win키&lt;/code>를 누르고, &lt;code>Snipping Tool&lt;/code>을 입력한 후 &lt;code>Enter키&lt;/code>를 누릅니다.&lt;/li>
&lt;li>&lt;code>Win키&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>S키&lt;/code>를 누릅니다.&lt;/li>
&lt;li>&lt;code>Win키&lt;/code> + &lt;code>R키&lt;/code>를 누르고, &lt;code>snippingtool&lt;/code>을 입력한 후 &lt;code>Enter키&lt;/code>를 누릅니다.&lt;/li>
&lt;/ul>
&lt;h2 id="snipping-tool-사용법">Snipping Tool 사용법
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/snipping-tool%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/img_1.png"
width="502"
height="233"
srcset="http://kenji.blog/p/snipping-tool%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/img_1_hu247f0b306a45625cfd47c1bc5c2f693d_7300_480x0_resize_box_3.png 480w, http://kenji.blog/p/snipping-tool%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/img_1_hu247f0b306a45625cfd47c1bc5c2f693d_7300_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="215"
data-flex-basis="517px"
>&lt;/p>
&lt;h3 id="캡처-이미지를-저장하는-방법은-다음과-같습니다">캡처 이미지를 저장하는 방법은 다음과 같습니다.
&lt;/h3>&lt;ol>
&lt;li>&lt;code>카메라&lt;/code> 마크를 선택합니다.&lt;/li>
&lt;li>&lt;code>새로 만들기&lt;/code> 버튼을 클릭합니다.&lt;/li>
&lt;li>캡처할 영역을 선택합니다.&lt;/li>
&lt;li>&lt;code>다른 이름으로 저장&lt;/code> 버튼을 클릭합니다.&lt;/li>
&lt;li>저장 위치와 파일명을 입력하고 저장합니다.&lt;/li>
&lt;/ol>
&lt;h3 id="캡처-동영상을-복사하는-방법은-다음과-같습니다">캡처 동영상을 복사하는 방법은 다음과 같습니다.
&lt;/h3>&lt;ol>
&lt;li>&lt;code>비디오&lt;/code> 마크를 선택합니다.&lt;/li>
&lt;li>&lt;code>새로 만들기&lt;/code> 버튼을 클릭합니다.&lt;/li>
&lt;li>캡처할 영역을 선택합니다.&lt;/li>
&lt;li>&lt;code>시작&lt;/code> 버튼을 클릭합니다.&lt;/li>
&lt;li>화면 녹화를 합니다.&lt;/li>
&lt;li>&lt;code>중지&lt;/code> 버튼을 클릭합니다.&lt;/li>
&lt;li>&lt;code>다른 이름으로 저장&lt;/code> 버튼을 클릭합니다.&lt;/li>
&lt;li>저장 위치와 파일명을 입력하고 저장합니다.&lt;/li>
&lt;/ol>
&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://support.microsoft.com/ja-jp/windows/snipping-tool-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3-%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%E3%82%92%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%81%99%E3%82%8B-00246869-1843-655f-f220-97299b865f6b" target="_blank" rel="noopener"
>Snipping Tool을 사용하여 스크린샷 캡처하기&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'컴퓨터 잠금 바로 가기를 만드는 방법'</title><link>http://kenji.blog/ko/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Mon, 01 Apr 2024 01:37:49 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post '컴퓨터 잠금 바로 가기를 만드는 방법'" />&lt;p>컴퓨터를 잠그는 바로 가기를 만드는 방법을 소개합니다.&lt;/p>
&lt;p>만든 바로 가기를 바탕화면 등에 두고 더블클릭하면 컴퓨터를 잠글 수 있어 편리합니다.&lt;/p>
&lt;h2 id="만드는-방법">만드는 방법
&lt;/h2>&lt;h4 id="1-바탕화면에서-우클릭하여-새로-만들기바로-가기를-선택">1. 바탕화면에서 우클릭하여, &lt;code>새로 만들기&lt;/code>＞&lt;code>바로 가기&lt;/code>를 선택
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png"
width="497"
height="310"
srcset="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hu68fc7215f5b611a42509ec28239f03ed_82746_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hu68fc7215f5b611a42509ec28239f03ed_82746_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="160"
data-flex-basis="384px"
>&lt;/p>
&lt;h4 id="2-바로-가기-만들기-화면이-표시되면-rundll32exe-user32dlllockworkstation을-입력하고-다음을-클릭">2. 바로 가기 만들기 화면이 표시되면 &lt;code>rundll32.exe user32.dll,LockWorkStation&lt;/code>을 입력하고 &lt;code>다음&lt;/code>을 클릭
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="614"
height="454"
srcset="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu0d4835ef465704aabd38109d760b63eb_14728_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu0d4835ef465704aabd38109d760b63eb_14728_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="135"
data-flex-basis="324px"
>&lt;/p>
&lt;h4 id="3-바로-가기-이름-컴퓨터-잠금을-입력하고-마침을-클릭">3. 바로 가기 이름 &lt;code>컴퓨터 잠금&lt;/code>을 입력하고 &lt;code>마침&lt;/code>을 클릭
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3.png"
width="614"
height="454"
srcset="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hu44e1aec8e86c339d674a378757ec4650_12577_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hu44e1aec8e86c339d674a378757ec4650_12577_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="135"
data-flex-basis="324px"
>&lt;/p>
&lt;h4 id="4-생성된-바로-가기-아이콘-변경하기">4. 생성된 바로 가기 아이콘 변경하기
&lt;/h4>&lt;p>생성된 바로 가기를 우클릭하여 &lt;code>속성&lt;/code>을 선택&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4.png"
width="368"
height="376"
srcset="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4_hufea304b74b77df48eaf897c362c80395_24161_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4_hufea304b74b77df48eaf897c362c80395_24161_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="97"
data-flex-basis="234px"
>&lt;/p>
&lt;p>&lt;code>아이콘 변경&lt;/code>을 클릭&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_6.png"
width="421"
height="580"
srcset="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_6_hua3af668a56a5a3efe3d9cfc5e6b2ac17_19464_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_6_hua3af668a56a5a3efe3d9cfc5e6b2ac17_19464_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="72"
data-flex-basis="174px"
>&lt;/p>
&lt;p>노란색 사각형 아이콘을 선택하고 &lt;code>확인&lt;/code>을 클릭, 다시 &lt;code>확인&lt;/code>을 클릭하여 속성 창을 닫음&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_5.png"
width="340"
height="420"
srcset="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_5_hud49e429cd2963712e519c6e541751db5_41795_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_5_hud49e429cd2963712e519c6e541751db5_41795_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="80"
data-flex-basis="194px"
>&lt;/p>
&lt;p>이상.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_7.png"
width="79"
height="95"
srcset="http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_7_hub726554b64c896d5f41210824d4f60e8_7903_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_7_hub726554b64c896d5f41210824d4f60e8_7903_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_7.png"
class="gallery-image"
data-flex-grow="83"
data-flex-basis="199px"
>&lt;/p>
&lt;p>생성된 바로 가기를 더블클릭하면 컴퓨터가 잠깁니다.&lt;/p>
&lt;p>&lt;code>Win키&lt;/code> + &lt;code>L키&lt;/code>를 눌러도 똑같이 컴퓨터를 잠글 수 있습니다.&lt;/p>
&lt;p>※주의: 컴퓨터 잠금 확인 대화 상자는 표시되지 않습니다.&lt;/p></description></item><item><title>'몬티 홀 문제'</title><link>http://kenji.blog/ko/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/</link><pubDate>Sun, 31 Mar 2024 23:41:51 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/img_1.png" alt="Featured image of post '몬티 홀 문제'" />&lt;h2 id="몬티-홀-문제란">몬티 홀 문제란
&lt;/h2>&lt;p>몬티 홀 문제란, 미국의 텔레비전 프로그램 「Let&amp;rsquo;s Make a Deal」에서 진행되었던 게임 중 하나로, 다음과 같은 문제입니다.&lt;/p>
&lt;p>전제 조건：3개의 문 중 1개에는 상품이 들어 있고, 나머지 2개에는 꽝이 들어 있다.&lt;/p>
&lt;ol>
&lt;li>참가자는 3개의 문 중 1개를 선택합니다.&lt;/li>
&lt;li>사회자는 참가자가 선택한 문 이외의 2개의 문 중, 꽝인 1개의 문을 엽니다.&lt;/li>
&lt;li>참가자에게 선택한 문을 변경할지 여부를 묻습니다.&lt;/li>
&lt;/ol>
&lt;p>이때, 참가자는 문을 변경하는 것이 좋은지, 변경하지 않는 것이 좋은지를 생각하는 문제입니다.&lt;/p>
&lt;h2 id="해법">해법
&lt;/h2>&lt;p>몬티 홀 문제의 해법은 다음과 같습니다.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>참가자가 처음에 선택한 문을 변경하지 않을 경우&lt;/p>
&lt;ul>
&lt;li>당첨 확률：1/3&lt;/li>
&lt;li>꽝일 확률：2/3&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>사회자가 꽝인 문을 연 후&lt;/p>
&lt;ul>
&lt;li>변경하지 않을 경우, 당첨 확률：1/3 (1.의 당첨 확률에서 변하지 않음)&lt;/li>
&lt;li>변경할 경우, 당첨 확률：2/3 (1.의 당첨 이외의 확률)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>따라서, 참가자가 문을 변경하는 편이 당첨 확률이 높아집니다.&lt;/p>
&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>Wikipedia &lt;a class="link" href="https://en.wikipedia.org/wiki/Monty_Hall_problem" target="_blank" rel="noopener"
>Monty Hall problem&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Windows에 텍스트 에디터 micro를 설치하는 방법</title><link>http://kenji.blog/ko/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 31 Mar 2024 21:50:39 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Windows에 텍스트 에디터 micro를 설치하는 방법" />&lt;h2 id="micro-다운로드하기">micro 다운로드하기
&lt;/h2>&lt;p>&lt;a class="link" href="https://github.com/zyedidia/micro/releases" target="_blank" rel="noopener"
>https://github.com/zyedidia/micro/releases&lt;/a>&lt;/p>
&lt;p>위 링크를 열고 &lt;code>Show all XX assets&lt;/code>(X 부분은 숫자)를 클릭하여 &lt;code>micro-X.X.XX-win64.zip&lt;/code>(X 부분은 숫자)을 다운로드합니다.
zip 파일의 압축을 풀고, 파일 일체를 임의의 폴더에 배치합니다.&lt;/p>
&lt;h2 id="환경-변수-설정하기">환경 변수 설정하기
&lt;/h2>&lt;p>명령 프롬프트에서 &lt;code>micro.exe&lt;/code>를 사용하려면 환경 변수를 설정해야 합니다.&lt;/p>
&lt;ol>
&lt;li>&lt;code>Win키&lt;/code> + &lt;code>R키&lt;/code>를 누르고, &lt;code>sysdm.cpl&lt;/code>을 입력한 뒤 &lt;code>Enter키&lt;/code>를 누릅니다.&lt;/li>
&lt;li>&lt;code>시스템 속성&lt;/code>의 &lt;code>시스템 속성&lt;/code>을 클릭합니다.&lt;/li>
&lt;li>&lt;code>환경 변수&lt;/code>를 클릭합니다.&lt;/li>
&lt;li>&lt;code>시스템 환경 변수&lt;/code>의 &lt;code>Path&lt;/code>를 선택하고 &lt;code>편집&lt;/code>을 클릭합니다.&lt;/li>
&lt;li>&lt;code>새로 만들기&lt;/code>를 클릭하여, &lt;code>micro.exe&lt;/code>가 포함된 폴더의 경로를 추가합니다.&lt;/li>
&lt;li>&lt;code>확인&lt;/code>을 클릭하여 모든 대화 상자를 닫습니다.&lt;/li>
&lt;li>명령 프롬프트를 다시 시작하고, &lt;code>nano&lt;/code>라고 입력하여 실행할 수 있는지 확인합니다.&lt;/li>
&lt;/ol>
&lt;h2 id="micro-사용-방법">micro 사용 방법
&lt;/h2>&lt;p>명령 프롬프트에서 &lt;code>micro&lt;/code>라고 입력하여 실행하면, 다음과 같은 화면이 표시됩니다.
&lt;img src="http://kenji.blog/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3.png"
width="962"
height="512"
srcset="http://kenji.blog/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hucac22a4d580735ddd83b1fd5173c3197_6852_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hucac22a4d580735ddd83b1fd5173c3197_6852_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="187"
data-flex-basis="450px"
>&lt;/p>
&lt;p>주요 조작 방법과 단축키는 다음과 같습니다.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>단축키&lt;/th>
&lt;th>조작&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Ctrl+Q&lt;/td>
&lt;td>파일 닫기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+S&lt;/td>
&lt;td>파일 저장&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+O&lt;/td>
&lt;td>파일 열기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+A&lt;/td>
&lt;td>전체 선택&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+X&lt;/td>
&lt;td>선택 범위 잘라내기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+C&lt;/td>
&lt;td>선택 범위 복사&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+V&lt;/td>
&lt;td>붙여넣기&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+Z&lt;/td>
&lt;td>실행 취소&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+Y&lt;/td>
&lt;td>다시 실행&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+E&lt;/td>
&lt;td>에디터 명령 실행&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://micro-editor.github.io/" target="_blank" rel="noopener"
>micro&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>CLI 텍스트 에디터 nano를 Windows에 설치하는 방법</title><link>http://kenji.blog/ko/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 31 Mar 2024 18:09:32 +0900</pubDate><guid>http://kenji.blog/ko/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png" alt="Featured image of post CLI 텍스트 에디터 nano를 Windows에 설치하는 방법" />&lt;h2 id="nanoexe-다운로드하기">nano.exe 다운로드하기
&lt;/h2>&lt;p>&lt;a class="link" href="https://sourceforge.net/projects/nano-for-windows/" target="_blank" rel="noopener"
>https://sourceforge.net/projects/nano-for-windows/&lt;/a>&lt;/p>
&lt;p>위의 링크를 열고, &lt;code>Download&lt;/code>를 클릭하여 &lt;code>GNU-Nano_Win32(static).zip&lt;/code>을 다운로드한다.
zip 파일을 압축 해제하고, 임의의 폴더에 &lt;code>nano.exe&lt;/code>를 배치한다.
※일본어 입력은 지원하지 않는다. (2024/03/31 현재)&lt;/p>
&lt;h2 id="환경-변수-설정하기">환경 변수 설정하기
&lt;/h2>&lt;p>명령 프롬프트에서 &lt;code>nano.exe&lt;/code>를 사용하려면, 환경 변수를 설정해야 한다.&lt;/p>
&lt;ol>
&lt;li>&lt;code>Win 키&lt;/code> + &lt;code>R 키&lt;/code>를 눌러 &lt;code>sysdm.cpl&lt;/code>을 입력하고 &lt;code>Enter 키&lt;/code>를 누른다.&lt;/li>
&lt;li>&lt;code>시스템 속성&lt;/code>의 &lt;code>시스템 속성&lt;/code>을 클릭한다.&lt;/li>
&lt;li>&lt;code>환경 변수&lt;/code>를 클릭한다.&lt;/li>
&lt;li>&lt;code>시스템 환경 변수&lt;/code>의 &lt;code>Path&lt;/code>를 선택하고 &lt;code>편집&lt;/code>을 클릭한다.&lt;/li>
&lt;li>&lt;code>새로 만들기&lt;/code>를 클릭하고, &lt;code>nano.exe&lt;/code>의 경로를 추가한다.&lt;/li>
&lt;li>&lt;code>확인&lt;/code>을 클릭하여 모든 대화 상자를 닫는다.&lt;/li>
&lt;li>명령 프롬프트를 재시작하고, &lt;code>nano&lt;/code>를 입력하여 실행할 수 있는지 확인한다.&lt;/li>
&lt;/ol>
&lt;h2 id="nano-사용법">nano 사용법
&lt;/h2>&lt;p>&lt;code>nano&lt;/code>를 입력하여 실행하면, 다음과 같은 화면이 표시된다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png"
width="1082"
height="632"
srcset="http://kenji.blog/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hucb9efcdf08d2eda99abffd0a9502a2c3_16316_480x0_resize_box_3.png 480w, http://kenji.blog/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hucb9efcdf08d2eda99abffd0a9502a2c3_16316_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="171"
data-flex-basis="410px"
>&lt;/p>
&lt;p>화면 하단에 단축키 설명이 표시되어 있다.&lt;/p>
&lt;p>기호의 의미는 다음과 같다.&lt;/p>
&lt;ul>
&lt;li>&lt;code>^&lt;/code>는 &lt;code>Ctrl&lt;/code> 키를 나타낸다.&lt;/li>
&lt;li>&lt;code>M-&lt;/code>은 &lt;code>Alt&lt;/code> 키를 나타낸다.&lt;/li>
&lt;/ul>
&lt;p>저장하고 닫으려면, &lt;code>Ctrl&lt;/code> + &lt;code>S&lt;/code>를 누른 후에, &lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>를 누른다.&lt;/p>
&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://www.nano-editor.org/" target="_blank" rel="noopener"
>GNU nano&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>wsl에서 「Temporary failure resolving～」라고 표시되는 경우의 대처 방법</title><link>http://kenji.blog/ko/p/wsl-%E3%81%A7temporary-failure-resolving%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 31 Mar 2024 16:57:33 +0900</pubDate><guid>http://kenji.blog/ko/p/wsl-%E3%81%A7temporary-failure-resolving%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/wsl-%E3%81%A7temporary-failure-resolving%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post wsl에서 「Temporary failure resolving～」라고 표시되는 경우의 대처 방법" />&lt;h1 id="wsl에서-temporary-failure-resolving라고-표시되는-경우의-대처-방법">wsl에서 「Temporary failure resolving～」라고 표시되는 경우의 대처 방법
&lt;/h1>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">kenji@MyComputer:~$ sudo apt update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[sudo] password for kenji:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Err:1 http://archive.ubuntu.com/ubuntu focal InRelease
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Temporary failure resolving &amp;#39;archive.ubuntu.com&amp;#39;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>wsl에서 위 오류가 표시될 때는 DNS 서버 설정이 올바르지 않을 가능성이 있습니다.
제 환경에서는 다음 절차로 해결했습니다.&lt;/p>
&lt;ol>
&lt;li>wsl을 시작합니다.&lt;/li>
&lt;li>&lt;code>sudo nano /etc/resolv.conf&lt;/code>를 실행합니다.&lt;/li>
&lt;li>&lt;code>nameserver&lt;/code> 줄을 다음과 같이 변경합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">nameserver 8.8.8.8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="4">
&lt;li>&lt;code>Ctrl&lt;/code> + &lt;code>S&lt;/code>로 저장하고, &lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>로 종료합니다.&lt;/li>
&lt;li>&lt;code>sudo apt update&lt;/code>를 실행합니다.&lt;/li>
&lt;li>오류가 표시되지 않으면 해결된 것입니다.&lt;/li>
&lt;/ol>
&lt;h2 id="위-절차로-해결되지-않는-경우">위 절차로 해결되지 않는 경우
&lt;/h2>&lt;p>위 절차로 해결되지 않는 경우도 있는 것 같습니다. 다음 기사를 참고하세요.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://qiita.com/ryosukeYamazaki/items/c04ec3ff78aac6eb8d26" target="_blank" rel="noopener"
>WSL에서 apt update 시의 『Temporary failure resolving ～』를 해결하는 방법&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'탐색기 종료 및 재시작 방법'</title><link>http://kenji.blog/ko/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 30 Mar 2024 15:40:24 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_2.png" alt="Featured image of post '탐색기 종료 및 재시작 방법'" />&lt;h2 id="작업-표시줄-우클릭으로-종료하는-방법">작업 표시줄 우클릭으로 종료하는 방법
&lt;/h2>&lt;p>이것은 Windows 10에서의 방법입니다. Windows 11에서는 메뉴가 표시되지 않는 것 같습니다.
작업 표시줄에서 &lt;code>Shift&lt;/code> 키와 &lt;code>Ctrl&lt;/code> 키를 누른 상태에서 우클릭을 하면, 메뉴에 &lt;code>탐색기 종료&lt;/code>가 표시됩니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img.png"
width="492"
height="849"
srcset="http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_hu25fa4fd28e26e648c7df7b34d330fb4a_26017_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_hu25fa4fd28e26e648c7df7b34d330fb4a_26017_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="57"
data-flex-basis="139px"
>&lt;/p>
&lt;h2 id="작업-관리자에서-종료하는-방법">작업 관리자에서 종료하는 방법
&lt;/h2>&lt;ol>
&lt;li>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>Esc&lt;/code> 키를 눌러 작업 관리자를 실행합니다.&lt;/li>
&lt;li>&lt;code>세부 정보&lt;/code>를 선택합니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_3.png"
width="675"
height="439"
srcset="http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_3_hu94dd07716acd73c3bf3a07b52949d73b_34688_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_3_hu94dd07716acd73c3bf3a07b52949d73b_34688_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="153"
data-flex-basis="369px"
>&lt;/p>
&lt;ol start="3">
&lt;li>&lt;code>explorer.exe&lt;/code> 를 선택하고, &lt;code>Delete&lt;/code> 키를 누르면, &lt;code>explorer.exe를 종료하시겠습니까?&lt;/code>라고 묻기 때문에, &lt;code>프로세스 종료&lt;/code>를 선택합니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_1.png"
width="529"
height="304"
srcset="http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_1_hu9ea0cd188ab9aa2b045ca3bb921a75d4_17142_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E7%B5%82%E4%BA%86%E5%86%8D%E8%B5%B7%E5%8B%95%E6%96%B9%E6%B3%95/img_1_hu9ea0cd188ab9aa2b045ca3bb921a75d4_17142_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="174"
data-flex-basis="417px"
>&lt;/p>
&lt;h2 id="명령-프롬프트에서-종료하는-방법">명령 프롬프트에서 종료하는 방법
&lt;/h2>&lt;ol>
&lt;li>&lt;code>Win&lt;/code> + &lt;code>R&lt;/code> 키를 눌러서, &lt;code>cmd&lt;/code> 라고 입력하고, &lt;code>Enter&lt;/code> 키를 누릅니다.&lt;/li>
&lt;li>&lt;code>taskkill /f /im explorer.exe&lt;/code> 라고 입력하고, &lt;code>Enter&lt;/code> 키를 누릅니다.&lt;/li>
&lt;/ol>
&lt;h2 id="작업-관리자에서-탐색기를-실행하는-방법">작업 관리자에서 탐색기를 실행하는 방법
&lt;/h2>&lt;ol>
&lt;li>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>Esc&lt;/code> 키를 눌러 작업 관리자를 실행합니다.&lt;/li>
&lt;li>파일 메뉴에서, &lt;code>새 작업 실행&lt;/code>을 선택합니다.&lt;/li>
&lt;li>&lt;code>explorer.exe&lt;/code> 라고 입력하고, &lt;code>Enter&lt;/code> 키를 누릅니다.&lt;/li>
&lt;/ol></description></item><item><title>'Windows 11의 오른쪽 클릭 메뉴를 이전 버전으로 되돌리는 방법'</title><link>http://kenji.blog/ko/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 30 Mar 2024 13:13:36 +0900</pubDate><guid>http://kenji.blog/ko/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'Windows 11의 오른쪽 클릭 메뉴를 이전 버전으로 되돌리는 방법'" />&lt;h1 id="windows-11의-오른쪽-클릭-메뉴를-이전-버전으로-되돌리는-방법">Windows 11의 오른쪽 클릭 메뉴를 이전 버전으로 되돌리는 방법
&lt;/h1>&lt;p>Windows 11의 오른쪽 클릭 메뉴를 이전 버전으로 되돌리는 방법을 소개합니다.&lt;/p>
&lt;ol>
&lt;li>레지스트리 편집기를 엽니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;code>Win키&lt;/code> + &lt;code>R키&lt;/code>를 누르고, &lt;code>regedit&lt;/code>를 입력한 후 &lt;code>Enter키&lt;/code>를 누릅니다.
&lt;img src="http://kenji.blog/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/img_1.png"
width="399"
height="206"
srcset="http://kenji.blog/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/img_1_hu57f8ec9d7413c1dd616d892c3bf497ce_10532_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/img_1_hu57f8ec9d7413c1dd616d892c3bf497ce_10532_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="193"
data-flex-basis="464px"
>　&lt;/p>
&lt;ol start="2">
&lt;li>
&lt;p>&lt;code>HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&lt;/code>로 이동합니다. 이 키가 없는 경우 새로 만듭니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&lt;/code>로 이동합니다. 이 키가 없는 경우 새로 만듭니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>InprocServer32&lt;/code>의 &lt;code>(기본값)&lt;/code>에 데이터가 설정되어 있지 않은지 확인합니다.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="http://kenji.blog/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/img_2.png"
width="770"
height="746"
srcset="http://kenji.blog/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/img_2_hu825cb5788fa7c4fef725a65d032e0e06_65034_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-11%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E5%BE%93%E6%9D%A5%E7%89%88%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/img_2_hu825cb5788fa7c4fef725a65d032e0e06_65034_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="103"
data-flex-basis="247px"
>&lt;/p>
&lt;ol start="6">
&lt;li>컴퓨터를 다시 시작합니다.&lt;/li>
&lt;li>오른쪽 클릭 메뉴가 이전 버전으로 되돌아갔는지 확인합니다.&lt;/li>
&lt;/ol></description></item><item><title>'프로그래밍에서 사용할 수 있는 폰트 모음'</title><link>http://kenji.blog/ko/p/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E9%9B%86/</link><pubDate>Sat, 30 Mar 2024 02:21:31 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E9%9B%86/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E9%9B%86/img.png" alt="Featured image of post '프로그래밍에서 사용할 수 있는 폰트 모음'" />&lt;h2 id="jetbrains-mono">JetBrains Mono
&lt;/h2>&lt;p>JetBrains에서 제공하는 오픈 소스 프로그래밍 폰트입니다.&lt;/p>
&lt;p>다운로드: &lt;a class="link" href="https://www.jetbrains.com/ja-jp/lp/mono/" target="_blank" rel="noopener"
>https://www.jetbrains.com/ja-jp/lp/mono/&lt;/a>&lt;/p>
&lt;h2 id="hackgen">HackGen
&lt;/h2>&lt;p>백원(하쿠겐/HackGen)은 프로그래밍용 영문 폰트 Hack과 본고딕의 파생 폰트인 겐쥬고딕을 합성한 프로그래밍 폰트입니다.&lt;/p>
&lt;p>다운로드: &lt;a class="link" href="https://github.com/yuru7/HackGen/releases" target="_blank" rel="noopener"
>https://github.com/yuru7/HackGen/releases&lt;/a>&lt;/p>
&lt;h2 id="ricty-diminished">Ricty Diminished
&lt;/h2>&lt;p>&lt;code>Ricty Diminished&lt;/code>(릭티 디미니시드)는 &lt;code>Ricty&lt;/code>의 자매 폰트이며, &lt;code>Inconsolata&lt;/code>와 &lt;code>Migu 1M&lt;/code>이 아닌, &lt;code>Inconsolata&lt;/code>와 &lt;code>Circle M+ 1m&lt;/code>을 &lt;code>Ricty&lt;/code> 생성 스크립트로 합성한 폰트입니다. IPA 고딕의 글리프를 포함하지 않기 때문에 사용할 수 있는 한자 글리프 수가 적은 대신, &lt;code>SIL Open Font License&lt;/code> 하에 배포가 가능합니다.&lt;/p>
&lt;p>다운로드: &lt;a class="link" href="https://rictyfonts.github.io/diminished" target="_blank" rel="noopener"
>https://rictyfonts.github.io/diminished&lt;/a>&lt;/p>
&lt;h2 id="cica">Cica
&lt;/h2>&lt;p>영숫자, 기호류에 &lt;code>Hack&lt;/code> + &lt;code>DejaVu Sans Mono&lt;/code>.
그 외의 문자에 &lt;code>Rounded Mgen+&lt;/code>를 사용한 프로그래밍 폰트입니다.&lt;/p>
&lt;p>다운로드: &lt;a class="link" href="https://github.com/miiton/Cica/releases" target="_blank" rel="noopener"
>https://github.com/miiton/Cica/releases&lt;/a>&lt;/p>
&lt;p>참고:&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://sourcefoundry.org/hack/" target="_blank" rel="noopener"
>Hack&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://dejavu-fonts.github.io/" target="_blank" rel="noopener"
>DejaVu Sans Mono&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="http://jikasei.me/font/rounded-mgenplus/" target="_blank" rel="noopener"
>Rounded Mgen+&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="migu">Migu
&lt;/h2>&lt;p>M+와 IPA의 합성 폰트입니다.&lt;/p>
&lt;p>다운로드: &lt;a class="link" href="https://itouhiro.github.io/mixfont-mplus-ipa/migu/" target="_blank" rel="noopener"
>https://itouhiro.github.io/mixfont-mplus-ipa/migu/&lt;/a>&lt;/p>
&lt;h2 id="osaka">Osaka
&lt;/h2>&lt;p>Mac OS 기본 폰트인 &lt;code>Osaka&lt;/code>를 Windows에서 사용할 수 있게 만든 폰트입니다.&lt;/p>
&lt;p>다운로드: &lt;a class="link" href="http://ifs.nog.cc/osakattf.hp.infoseek.co.jp/" target="_blank" rel="noopener"
>http://ifs.nog.cc/osakattf.hp.infoseek.co.jp/&lt;/a>&lt;/p>
&lt;h2 id="plemoljp">PlemolJP
&lt;/h2>&lt;p>IBM사가 릴리스한 오픈 소스 일본어 폰트 &lt;code>IBM Plex Sans JP&lt;/code>와 마찬가지로 IBM사의 Plex 시리즈인 &lt;code>IBM Plex Mono&lt;/code>를 조합한 프로그래밍 폰트입니다.&lt;/p>
&lt;p>다운로드: &lt;a class="link" href="https://github.com/yuru7/PlemolJP/releases" target="_blank" rel="noopener"
>https://github.com/yuru7/PlemolJP/releases&lt;/a>&lt;/p></description></item><item><title>명령어 ''hide''로 Hidemaru 에디터를 실행하는 방법</title><link>http://kenji.blog/ko/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Fri, 29 Mar 2024 23:45:37 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png" alt="Featured image of post 명령어 ''hide''로 Hidemaru 에디터를 실행하는 방법" />&lt;h2 id="명령어-hide로-hidemaru-에디터를-실행하는-방법을-소개합니다">명령어 &amp;lsquo;hide&amp;rsquo;로 Hidemaru 에디터를 실행하는 방법을 소개합니다.
&lt;/h2>&lt;p>주석: 이 방법은 &lt;code>Windows 10/11&lt;/code>에서 동작을 확인했습니다.&lt;/p>
&lt;ol>
&lt;li>레지스트리 편집기를 엽니다.&lt;/li>
&lt;li>&lt;code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths&lt;/code>로 이동합니다.&lt;/li>
&lt;li>&lt;code>App Paths&lt;/code>에 &lt;code>hide.exe&lt;/code>라는 키를 생성합니다. ※이 키 이름의 &lt;code>.exe&lt;/code> 앞부분이 명령어 이름이 됩니다.&lt;/li>
&lt;li>&lt;code>hide.exe&lt;/code> 키의 &lt;code>(기본값)&lt;/code>에 Hidemaru 에디터의 실행 파일 경로를 설정합니다. 제 환경에서는 &lt;code>&amp;quot;C:\Program Files (x86)\Hidemaru\Hidemaru.exe&amp;quot;&lt;/code>였습니다.&lt;/li>
&lt;li>&lt;code>hide.exe&lt;/code> 키에 &lt;code>Path&lt;/code>라는 문자열 값을 생성합니다.&lt;/li>
&lt;li>&lt;code>Path&lt;/code>의 데이터에 Hidemaru 에디터의 실행 파일이 있는 폴더의 경로를 설정합니다. 제 환경에서는 &lt;code>&amp;quot;C:\Program Files (x86)\Hidemaru&amp;quot;&lt;/code>였습니다.&lt;/li>
&lt;li>이제 &lt;code>Win 키&lt;/code> + &lt;code>R 키&lt;/code>로 표시되는 &lt;em>실행&lt;/em> 창에서 &lt;code>hide&lt;/code>라는 명령어로 Hidemaru 에디터를 실행할 수 있게 됩니다. 또한, 명령 프롬프트에서는 &lt;code>start hide&lt;/code>라는 명령어로 Hidemaru 에디터를 실행할 수 있습니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Windows Registry Editor Version 5.00
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\hide.exe]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">@=&amp;#34;\&amp;#34;C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe\&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;Path&amp;#34;=&amp;#34;\&amp;#34;C:\\Program Files (x86)\\Hidemaru\\\&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>위의 내용을 &lt;code>.reg&lt;/code> 파일로 저장하여 실행하면, 레지스트리에 설정이 추가됩니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="399"
height="206"
srcset="http://kenji.blog/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hue374203b955e2a50cac4186ada52cd43_10600_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hue374203b955e2a50cac4186ada52cd43_10600_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="193"
data-flex-basis="464px"
>&lt;/p></description></item><item><title>수학의 미해결 문제</title><link>http://kenji.blog/ko/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%9C%AA%E8%A7%A3%E6%B1%BA%E5%95%8F%E9%A1%8C/</link><pubDate>Sat, 02 Mar 2024 22:57:36 +0900</pubDate><guid>http://kenji.blog/ko/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%9C%AA%E8%A7%A3%E6%B1%BA%E5%95%8F%E9%A1%8C/</guid><description>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%9C%AA%E8%A7%A3%E6%B1%BA%E5%95%8F%E9%A1%8C/img.png" alt="Featured image of post 수학의 미해결 문제" />&lt;h1 id="수학의-미해결-문제">수학의 미해결 문제
&lt;/h1>&lt;p>수학의 미해결 문제에 대해 설명합니다. 문제 자체는 단순해도, 증명되지 않은 문제가 아직 많이 있습니다.&lt;/p>
&lt;h2 id="완전수는-무수히-많은가">완전수는 무수히 많은가?
&lt;/h2>&lt;p>완전수란, 자기 자신을 제외한 양의 약수의 합이 자기 자신과 같은 자연수입니다.
예를 들어,&lt;/p>
&lt;ul>
&lt;li>6은 약수가 1, 2, 3이 되며, 1+2+3=6이므로 완전수입니다.&lt;/li>
&lt;li>28은 약수가 1, 2, 4, 7, 14가 되며, 1+2+4+7+14=28이므로 완전수입니다.&lt;/li>
&lt;/ul>
&lt;p>현재 51개밖에 발견되지 않았지만, 무수히 많을 것으로 예상되고 있습니다만,
아직 증명되지 않았습니다.&lt;/p>
&lt;h2 id="골드바흐의-추측">골드바흐의 추측
&lt;/h2>&lt;p>골드바흐의 추측은, 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다는 추측입니다.
(여기서 소수란, 1과 자기 자신 이외의 약수를 가지지 않는 자연수입니다.)&lt;/p>
&lt;p>예를 들어,&lt;/p>
&lt;ul>
&lt;li>4=2+2&lt;/li>
&lt;li>6=3+3&lt;/li>
&lt;li>8=3+5&lt;/li>
&lt;li>10=3+7=5+5&lt;/li>
&lt;/ul>
&lt;p>문제 자체는 매우 단순하지만, 아직까지 증명되지 않았습니다.&lt;/p>
&lt;h2 id="리만-가설">리만 가설
&lt;/h2>&lt;p>리만 제타 함수의 영점이, 음의 짝수와, 실수부가 1 / 2 인 복소수에 한정된다는 추측이다.&lt;/p>
&lt;p>리만 제타 함수는, $s$를 복소수, $n$을 자연수라고 할 때,&lt;/p>
$$\zeta(s):=\sum _{n=1}^{\infty }{\frac {1}{n^{s}}}=1+{\frac {1}{2^{s}}}+{\frac {1}{3^{s}}}+{\frac {1}{4^{s}}}+\cdots$$
&lt;p>로 정의되는 함수 $\zeta$를 말한다.&lt;/p></description></item><item><title>'여러 가지 버전 정보 대화 상자를 모아보았다'</title><link>http://kenji.blog/ko/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/</link><pubDate>Sat, 02 Mar 2024 21:32:11 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/</guid><description>&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img.png" alt="Featured image of post '여러 가지 버전 정보 대화 상자를 모아보았다'" />&lt;h1 id="여러-가지-버전-정보-대화-상자를-모아보았다">여러 가지 버전 정보 대화 상자를 모아보았다
&lt;/h1>&lt;h2 id="windows-11">Windows 11
&lt;/h2>&lt;p>우선 지금 사용하고 있는 Windows 11의 버전 정보입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img.png"
width="536"
height="472"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_hub829fc9858068bdd622cbafca10cd245_20954_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_hub829fc9858068bdd622cbafca10cd245_20954_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="113"
data-flex-basis="272px"
>&lt;/p>
&lt;h2 id="intellij-idea-community-edition">IntelliJ IDEA (Community Edition)
&lt;/h2>&lt;p>이 블로그를 작성하고 있는 환경입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_1.png"
width="430"
height="280"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_1_hua5367752a804b207b533162809f32018_16224_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_1_hua5367752a804b207b533162809f32018_16224_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="153"
data-flex-basis="368px"
>&lt;/p>
&lt;h2 id="visual-studio-code">Visual Studio Code
&lt;/h2>&lt;p>이것 또한 자주 사용하는 에디터입니다. 의외로 심플합니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_2.png"
width="369"
height="279"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_2_hu6f1ad03ad750bb1606eb1362d5adbc93_13862_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_2_hu6f1ad03ad750bb1606eb1362d5adbc93_13862_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="132"
data-flex-basis="317px"
>&lt;/p>
&lt;h2 id="visual-studio">Visual Studio
&lt;/h2>&lt;p>이것은 C++에서 사용하고 있는 개발 환경입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_3.png"
width="766"
height="558"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_3_hue2937726cf71daf9e61d0319a27b00f9_40495_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_3_hue2937726cf71daf9e61d0319a27b00f9_40495_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="137"
data-flex-basis="329px"
>&lt;/p>
&lt;h2 id="linewindows">LINE(Windows)
&lt;/h2>&lt;p>이것은 LINE의 Windows 버전입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_4.png"
width="657"
height="494"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_4_hu8581061934b0bb5022cd7a96525141a7_21285_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_4_hu8581061934b0bb5022cd7a96525141a7_21285_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="132"
data-flex-basis="319px"
>&lt;/p>
&lt;h2 id="paintnet">Paint.NET
&lt;/h2>&lt;p>이것은 이미지 편집 소프트웨어입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_5.png"
width="497"
height="444"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_5_huea1c283c954d5aa522490bb5fd418a17_41055_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_5_huea1c283c954d5aa522490bb5fd418a17_41055_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="111"
data-flex-basis="268px"
>&lt;/p>
&lt;h2 id="sakura에디터">sakura에디터
&lt;/h2>&lt;p>이것은 텍스트 에디터입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_6.png"
width="457"
height="374"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_6_hu30dd12ad135ab6e1e97018cf29903ec0_25090_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_6_hu30dd12ad135ab6e1e97018cf29903ec0_25090_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="122"
data-flex-basis="293px"
>&lt;/p>
&lt;h2 id="google-chrome">Google Chrome
&lt;/h2>&lt;p>이것은 Google Chrome입니다. Edge 등장 이후에는 잘 사용하지 않게 되었습니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_7.png"
width="716"
height="550"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_7_hu7711134ce22b051fae7bc05ca532351f_20474_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_7_hu7711134ce22b051fae7bc05ca532351f_20474_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_7.png"
class="gallery-image"
data-flex-grow="130"
data-flex-basis="312px"
>&lt;/p>
&lt;h2 id="firefox">Firefox
&lt;/h2>&lt;p>이것은 Firefox입니다. 최근에는 잘 사용하지 않습니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_8.png"
width="732"
height="399"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_8_hue61323b7348180f9bdf1b2fdcc2598aa_71867_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_8_hue61323b7348180f9bdf1b2fdcc2598aa_71867_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_8.png"
class="gallery-image"
data-flex-grow="183"
data-flex-basis="440px"
>&lt;/p>
&lt;h2 id="microsoft-edge">Microsoft Edge
&lt;/h2>&lt;p>이것은 Microsoft Edge입니다. 최근에는 이것을 사용하는 경우가 많습니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_9.png"
width="862"
height="813"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_9_hu45c417f9fcbb634e734d206de2b56aca_107279_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_9_hu45c417f9fcbb634e734d206de2b56aca_107279_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_9.png"
class="gallery-image"
data-flex-grow="106"
data-flex-basis="254px"
>&lt;/p>
&lt;h2 id="obs-studio">OBS Studio
&lt;/h2>&lt;p>이것은 OBS Studio입니다. 최근에는 잘 사용하지 않습니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_10.png"
width="842"
height="551"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_10_hu180a6e2acbef184b6ad8a3fffb45c90c_39675_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_10_hu180a6e2acbef184b6ad8a3fffb45c90c_39675_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_10.png"
class="gallery-image"
data-flex-grow="152"
data-flex-basis="366px"
>&lt;/p>
&lt;h2 id="tradingview">TradingView
&lt;/h2>&lt;p>이것은 TradingView입니다. 최근에는 달러/엔 차트를 보는데 사용하고 있습니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_11.png"
width="633"
height="650"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_11_hu53621cc6fc47bf074deb3028d86cf3c0_19381_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_11_hu53621cc6fc47bf074deb3028d86cf3c0_19381_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_11.png"
class="gallery-image"
data-flex-grow="97"
data-flex-basis="233px"
>&lt;/p>
&lt;h2 id="spy">Spy++
&lt;/h2>&lt;p>이것은 Spy++입니다. Windows SDK에 포함된 툴입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_12.png"
width="492"
height="218"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_12_hu637d3cfc5948f4a10326a7ffccf8ce5f_10468_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_12_hu637d3cfc5948f4a10326a7ffccf8ce5f_10468_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_12.png"
class="gallery-image"
data-flex-grow="225"
data-flex-basis="541px"
>&lt;/p>
&lt;h2 id="depency-walker">depency walker
&lt;/h2>&lt;p>이것은 depency walker입니다. Windows SDK에 포함된 툴입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_13.png"
width="352"
height="209"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_13_hu842e211dd17745aa6a8fb1c0bbdff9f5_6341_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_13_hu842e211dd17745aa6a8fb1c0bbdff9f5_6341_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_13.png"
class="gallery-image"
data-flex-grow="168"
data-flex-basis="404px"
>&lt;/p>
&lt;h2 id="resource-hacker">resource hacker
&lt;/h2>&lt;p>이것은 resource hacker입니다. 실행 파일의 리소스를 편집·가져오는 툴입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_14.png"
width="338"
height="246"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_14_huc57d60e163fd0bcc8f075dec24a49f89_36267_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_14_huc57d60e163fd0bcc8f075dec24a49f89_36267_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_14.png"
class="gallery-image"
data-flex-grow="137"
data-flex-basis="329px"
>&lt;/p>
&lt;h2 id="microsoft-excel">Microsoft Excel
&lt;/h2>&lt;p>이것은 Microsoft Excel입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_15.png"
width="768"
height="618"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_15_hu8a9136a150d5d639659ac9ceca75f4b3_91079_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_15_hu8a9136a150d5d639659ac9ceca75f4b3_91079_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_15.png"
class="gallery-image"
data-flex-grow="124"
data-flex-basis="298px"
>&lt;/p>
&lt;h2 id="bandy-cam">bandy cam
&lt;/h2>&lt;p>이것은 bandy cam입니다. 동영상 캡처 툴입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_16.png"
width="620"
height="570"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_16_hu3e31361df9b5deb62846e4b96bf6b125_70140_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_16_hu3e31361df9b5deb62846e4b96bf6b125_70140_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_16.png"
class="gallery-image"
data-flex-grow="108"
data-flex-basis="261px"
>&lt;/p>
&lt;h2 id="winmerge">winmerge
&lt;/h2>&lt;p>이것은 winmerge입니다. 파일의 차이를 보는 툴입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_17.png"
width="551"
height="409"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_17_hud946a2eea7a4d661d773b263a8824288_229090_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_17_hud946a2eea7a4d661d773b263a8824288_229090_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_17.png"
class="gallery-image"
data-flex-grow="134"
data-flex-basis="323px"
>&lt;/p>
&lt;h2 id="itunes">iTunes
&lt;/h2>&lt;p>이것은 iTunes입니다. 최근에는 잘 사용하지 않습니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_18.png"
width="602"
height="352"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_18_hu2285c1c196750773901fc479753d8d52_62514_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_18_hu2285c1c196750773901fc479753d8d52_62514_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_18.png"
class="gallery-image"
data-flex-grow="171"
data-flex-basis="410px"
>&lt;/p>
&lt;h2 id="秀丸에디터">秀丸에디터
&lt;/h2>&lt;p>이것은 秀丸에디터입니다. 텍스트 에디터입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_19.png"
width="364"
height="362"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_19_hu64b6fe4a78cf41bc83a36608446a6a6f_12142_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_19_hu64b6fe4a78cf41bc83a36608446a6a6f_12142_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_19.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="241px"
>&lt;/p>
&lt;h2 id="adobe-photoshop-cs6">Adobe Photoshop CS6
&lt;/h2>&lt;p>이것은 Adobe Photoshop CS6입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_20.png"
width="684"
height="526"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_20_hu0e5417f24efe83fe850895cbdc3ee6bd_33925_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_20_hu0e5417f24efe83fe850895cbdc3ee6bd_33925_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_20.png"
class="gallery-image"
data-flex-grow="130"
data-flex-basis="312px"
>&lt;/p>
&lt;h2 id="adobe-illustrator-cs6">Adobe Illustrator CS6
&lt;/h2>&lt;p>이것은 Adobe Illustrator CS6입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_21.png"
width="688"
height="510"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_21_hu75d0b46d92a40a63b233ebe509de2aef_34525_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_21_hu75d0b46d92a40a63b233ebe509de2aef_34525_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_21.png"
class="gallery-image"
data-flex-grow="134"
data-flex-basis="323px"
>&lt;/p>
&lt;h2 id="eset-nod32">ESET NOD32
&lt;/h2>&lt;p>이것은 ESET NOD32입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_22.png"
width="1024"
height="670"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_22_hu56c202fdeac0311855a721ca11397713_49037_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_22_hu56c202fdeac0311855a721ca11397713_49037_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_22.png"
class="gallery-image"
data-flex-grow="152"
data-flex-basis="366px"
>&lt;/p>
&lt;h2 id="notepad">NotePad++
&lt;/h2>&lt;p>이것은 NotePad++입니다. 텍스트 에디터입니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_23.png"
width="407"
height="392"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_23_hu6eb2f3dbf16fa243605b7d0ac832471c_23159_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_23_hu6eb2f3dbf16fa243605b7d0ac832471c_23159_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_23.png"
class="gallery-image"
data-flex-grow="103"
data-flex-basis="249px"
>&lt;/p>
&lt;h2 id="mifes">MIFES
&lt;/h2>&lt;p>이것은 MIFES입니다. 최근에는 잘 사용하지 않습니다.
&lt;img src="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_24.png"
width="454"
height="353"
srcset="http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_24_hu78d7832f427554a574352f83766204e1_11395_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%84%E3%82%8D%E3%82%93%E3%81%AA%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%E9%9B%86%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F/img_24_hu78d7832f427554a574352f83766204e1_11395_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_24.png"
class="gallery-image"
data-flex-grow="128"
data-flex-basis="308px"
>&lt;/p></description></item><item><title>'GIF 애니메이션 화면 녹화 도구'</title><link>http://kenji.blog/ko/p/gif%E3%82%A2%E3%83%8B%E3%83%A1%E7%94%BB%E9%9D%A2%E9%8C%B2%E7%94%BB%E3%83%84%E3%83%BC%E3%83%AB/</link><pubDate>Thu, 08 Feb 2024 01:23:01 +0900</pubDate><guid>http://kenji.blog/ko/p/gif%E3%82%A2%E3%83%8B%E3%83%A1%E7%94%BB%E9%9D%A2%E9%8C%B2%E7%94%BB%E3%83%84%E3%83%BC%E3%83%AB/</guid><description>&lt;img src="http://kenji.blog/p/gif%E3%82%A2%E3%83%8B%E3%83%A1%E7%94%BB%E9%9D%A2%E9%8C%B2%E7%94%BB%E3%83%84%E3%83%BC%E3%83%AB/img.png" alt="Featured image of post 'GIF 애니메이션 화면 녹화 도구'" />&lt;h1 id="gif-애니메이션-화면-녹화-도구">GIF 애니메이션 화면 녹화 도구
&lt;/h1>&lt;p>화면을 녹화하여 GIF 애니메이션으로 만드는 도구를 만들었습니다.
이 도구를 사용하면 화면상의 조작 등을 녹화하여 Microsoft Teams 등 커뮤니케이션 도구 등에서 공유할 수 있습니다.&lt;/p>
&lt;h2 id="사용법">사용법
&lt;/h2>&lt;ol>
&lt;li>도구를 실행합니다.&lt;/li>
&lt;li>녹화할 범위를 지정합니다. 지정하지 않을 경우, 화면 전체가 녹화됩니다.&lt;/li>
&lt;li>녹화 버튼을 누릅니다.&lt;/li>
&lt;li>녹화 종료 버튼을 누릅니다.&lt;/li>
&lt;li>실행 파일과 같은 위치에 GIF 애니메이션이 출력됩니다.&lt;/li>
&lt;/ol>
&lt;h2 id="다운로드">다운로드
&lt;/h2>&lt;p>&lt;a class="link" href="https://github.com/kenjinote/GifScreenRecorder/releases" target="_blank" rel="noopener"
>다운로드&lt;/a>&lt;/p>
&lt;p>위의 링크를 열고, &lt;code>GIFScreenRecorder.exe&lt;/code> 링크를 클릭하여 실행 파일을 다운로드해 주세요.&lt;/p>
&lt;h2 id="소스-코드">소스 코드
&lt;/h2>&lt;p>&lt;a class="link" href="https://github.com/kenjinote/GifScreenRecorder" target="_blank" rel="noopener"
>GitHub&lt;/a>&lt;/p></description></item><item><title>'PMP 공부'</title><link>http://kenji.blog/ko/p/pmp%E5%8B%89%E5%BC%B7/</link><pubDate>Sun, 04 Feb 2024 18:41:31 +0900</pubDate><guid>http://kenji.blog/ko/p/pmp%E5%8B%89%E5%BC%B7/</guid><description>&lt;img src="http://kenji.blog/p/pmp%E5%8B%89%E5%BC%B7/img.png" alt="Featured image of post 'PMP 공부'" />&lt;h1 id="pmp-수험-공부-요약">PMP 수험 공부 요약
&lt;/h1>&lt;p>PMP 수험 공부 요약입니다.&lt;/p>
&lt;h2 id="개요">개요
&lt;/h2>&lt;p>PMP는 프로젝트 관리 자격증입니다. PMBOK(최신 7판)이라는 가이드북을 기반으로 한 자격증입니다.
PMP 시험은 230분 동안 180문제가 출제되지만 5문제는 더미 문제이므로 175문제 중 106문제 이상 정답을 맞히면 합격입니다.
답변은 선택형이며, 대부분은 4지선다형이지만 중에는 5지선다형 혹은 복수 선택형이 있습니다.&lt;/p>
&lt;h2 id="서번트-리더십">서번트 리더십
&lt;/h2>&lt;p>위에서 명령하는 것이 아니라 아래에서 지원하는 리더십 스타일.&lt;/p>
&lt;h3 id="서번트-리더십의-10가지-원칙특징">서번트 리더십의 10가지 원칙(특징)
&lt;/h3>&lt;ol>
&lt;li>경청&lt;/li>
&lt;li>공감&lt;/li>
&lt;li>치유&lt;/li>
&lt;li>인지&lt;/li>
&lt;li>설득&lt;/li>
&lt;li>개념화&lt;/li>
&lt;li>선견지명&lt;/li>
&lt;li>청지기 의식&lt;/li>
&lt;li>사람들의 성장에 대한 헌신&lt;/li>
&lt;li>커뮤니티 형성&lt;/li>
&lt;/ol>
&lt;h2 id="애자일-선언-4가지-가치">애자일 선언 4가지 가치
&lt;/h2>&lt;p>우리는 소프트웨어 개발을 실천하거나
실천을 돕는 활동을 통해,
더 나은 개발 방법을 찾아내려 하고 있다.
이 활동을 통해, 우리는 다음의 가치에 이르렀다.&lt;/p>
&lt;ol>
&lt;li>프로세스나 도구보다 개인과 상호작용을,&lt;/li>
&lt;li>포괄적인 문서보다 작동하는 소프트웨어를,&lt;/li>
&lt;li>계약 협상보다 고객과의 협력을,&lt;/li>
&lt;li>계획을 따르기보다 변화에 대응하기를,&lt;/li>
&lt;/ol>
&lt;p>가치로 삼는다. 즉, 왼쪽의 항목들에 가치가 있음을
인정하면서도, 우리는 오른쪽 항목들에 더 높은 가치를 둔다.&lt;/p>
&lt;p>&lt;a class="link" href="https://agilemanifesto.org/iso/ko/manifesto.html" target="_blank" rel="noopener"
>애자일 선언&lt;/a>&lt;/p>
&lt;h2 id="애자일-애자일-선언-이면의-12가지-원칙">애자일 애자일 선언 이면의 12가지 원칙
&lt;/h2>&lt;ol>
&lt;li>고객 만족을 최우선으로 하고 가치 있는 소프트웨어를 일찍 지속적으로 제공합니다.&lt;/li>
&lt;li>요구사항 변경은 비록 개발 후기라 하더라도 환영합니다. 변화를 우군으로 삼아 고객의 경쟁력을 높입니다.&lt;/li>
&lt;li>작동하는 소프트웨어를 2-3주에서 2-3개월이라는 가능한 짧은 시간 간격으로 릴리스합니다.&lt;/li>
&lt;li>비즈니스 쪽 사람들과 개발자들은 프로젝트 내내 매일 함께 일해야 합니다.&lt;/li>
&lt;li>의욕이 넘치는 사람들로 프로젝트를 구성합니다. 환경과 지원을 제공하고 일이 무사히 끝날 때까지 그들을 신뢰합니다.&lt;/li>
&lt;li>정보를 전달하는 가장 효율적이고 효과적인 방법은 얼굴을 마주보고 대화하는 것입니다.&lt;/li>
&lt;li>작동하는 소프트웨어만이 진척의 가장 중요한 척도입니다.&lt;/li>
&lt;li>애자일 프로세스는 지속 가능한 개발을 촉진합니다. 일정한 속도를 지속적으로 유지할 수 있어야 합니다.&lt;/li>
&lt;li>기술적 탁월성과 우수한 설계에 대한 끊임없는 주의가 기민성을 높입니다.&lt;/li>
&lt;li>단순함(낭비 없이 만들 수 있는 양을 최대화하는 것)이 본질입니다.&lt;/li>
&lt;li>최상의 아키텍처, 요구사항, 설계는 자기 조직적인 팀에서 나옵니다.&lt;/li>
&lt;li>팀은 어떻게 하면 효율을 높일 수 있을지 정기적으로 회고하고, 그에 따라 자신들의 방식을 최적으로 조정합니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;a class="link" href="https://agilemanifesto.org/iso/ko/principles.html" target="_blank" rel="noopener"
>애자일 선언 이면의 원칙&lt;/a>&lt;/p>
&lt;h3 id="용어">용어
&lt;/h3>&lt;ul>
&lt;li>에픽(개략)&lt;/li>
&lt;li>사용자 스토리(프로덕트 백로그에 등록하는 단위, 우선순위 지정을 수행하는 단위)&lt;/li>
&lt;li>태스크(기술적인 작업 항목, 소요 시간 추정 대상)&lt;/li>
&lt;li>프로덕트 백로그 / 프로덕트 백로그 아이템&lt;/li>
&lt;li>프로덕트 오너&lt;/li>
&lt;li>이해관계자&lt;/li>
&lt;li>애자일 실무 가이드(서적)&lt;/li>
&lt;li>린 개발&lt;/li>
&lt;li>칸반&lt;/li>
&lt;li>가치 사슬 (Value Chain)&lt;/li>
&lt;li>AC (Actual Cost)&lt;/li>
&lt;li>EV (Earned Value)&lt;/li>
&lt;li>PV (Planned Value)&lt;/li>
&lt;li>EVA (Earned Value Analysis)&lt;/li>
&lt;li>SPI (Schedule Performance Index = EV / PV)&lt;/li>
&lt;li>CPI (Cost Performance Index = EV / AC)&lt;/li>
&lt;li>EVM (Earned Value Management) 획득 가치 관리&lt;/li>
&lt;li>BAC (완료 시 예산)&lt;/li>
&lt;li>ETC (Estimate To Complete)&lt;/li>
&lt;li>EAC (Estimate At Completion)&lt;/li>
&lt;li>기능형&lt;/li>
&lt;li>매트릭스형&lt;/li>
&lt;li>프로젝트형&lt;/li>
&lt;li>서번트 리더십&lt;/li>
&lt;li>터크먼 모델 (형성기, 격동기, 규범기, 성취기, 해산기)&lt;/li>
&lt;li>팀 헌장&lt;/li>
&lt;li>플래닝 포커 (피보나치 수열)&lt;/li>
&lt;li>레트로스펙티브 (회고 활동)&lt;/li>
&lt;li>가상 팀&lt;/li>
&lt;li>프로젝트 헌장&lt;/li>
&lt;li>갈등 (6가지 대처법: 대면/문제 해결, 협력, 타협, 완화/수용, 강제, 철회/회피)&lt;/li>
&lt;li>가치 흐름 매핑&lt;/li>
&lt;li>멘토링&lt;/li>
&lt;li>코칭&lt;/li>
&lt;li>트레이닝&lt;/li>
&lt;li>더글라스 맥그리거의 XY 이론&lt;/li>
&lt;li>SWOT 분석 Strength(강점), Weakness(약점), Opportunity(기회), Threat(위협)&lt;/li>
&lt;li>SECI 모델 (Socialization 공동화, Externalization 표출화, Combination 연결화, Internalization 내면화)&lt;/li>
&lt;li>PDCA, PDSA&lt;/li>
&lt;li>PESTLE (Political 정치, Economic 경제, Social 사회, Technological 기술, Legal 법, Environmental 환경)&lt;/li>
&lt;li>VUCA (변동성・불확실성・복잡성・모호성)&lt;/li>
&lt;li>몬테카를로 기법&lt;/li>
&lt;li>의사결정 트리 분석&lt;/li>
&lt;li>기대 금전 가치 (EMV)&lt;/li>
&lt;li>순 추천 고객 지수 (NPS)&lt;/li>
&lt;li>비용 편익 분석&lt;/li>
&lt;li>스프린트 리뷰&lt;/li>
&lt;li>릴리스 관리&lt;/li>
&lt;li>SOW (Statement of Work) 작업 범위 기술서, 작업 명세서 &amp;ldquo;프로젝트의 범위, 목적, 산출물, 기간, 리소스 등의 상세한 설명을 포함하는 문서&amp;rdquo;&lt;/li>
&lt;li>P-SOW (조달 작업 범위 기술서)&lt;/li>
&lt;li>RFI (Request For Information) 정보 제공 요청서&lt;/li>
&lt;li>RFP (Request For Proposal) 제안 요청서&lt;/li>
&lt;li>정액 계약 (FP: Fixed Price)&lt;/li>
&lt;li>시간 자재 계약 (T&amp;amp;M: Time and Material)&lt;/li>
&lt;li>실비 정산 계약 (CR: Cost Reimbursable)&lt;/li>
&lt;li>고정가 인센티브 부과 계약 (FPIF)&lt;/li>
&lt;li>스코프 크리프&lt;/li>
&lt;li>카노 모델 분석&lt;/li>
&lt;li>자금 배분법&lt;/li>
&lt;li>100점법&lt;/li>
&lt;li>MSCW (Must, Should, Could, Would) 방식&lt;/li>
&lt;li>요구사항 추적 매트릭스&lt;/li>
&lt;li>WBS 사전&lt;/li>
&lt;li>벨로시티 (각 이터레이션에서 달성한 스토리 포인트 수)&lt;/li>
&lt;li>벨로시티 차트&lt;/li>
&lt;li>관여도 매트릭스 (무지, 저항, 중립, 지지, 주도)&lt;/li>
&lt;li>단계 관문&lt;/li>
&lt;li>정보 라디에이터&lt;/li>
&lt;li>번다운 차트&lt;/li>
&lt;li>번업 차트&lt;/li>
&lt;li>누적 흐름도&lt;/li>
&lt;li>QCD (Quality, Cost, Delivery)&lt;/li>
&lt;li>나선형 모델&lt;/li>
&lt;li>크리티컬 체인&lt;/li>
&lt;li>피처&lt;/li>
&lt;li>이터레이션 / 스프린트&lt;/li>
&lt;li>반복적 (Iterative)&lt;/li>
&lt;li>점진적 (Incremental)&lt;/li>
&lt;li>인크리먼트 (증분 산출물)&lt;/li>
&lt;li>회복 탄력성 / 레질리언스&lt;/li>
&lt;li>스튜어드십 성실하고 신뢰할 수 있는 태도와 책임감 있는 행동 (의사결정)&lt;/li>
&lt;li>에스컬레이션&lt;/li>
&lt;li>KPT (Keep, Problem, Try)&lt;/li>
&lt;li>RACI (Responsible, Accountable, Consulted, Informed)&lt;/li>
&lt;li>PMO (Project Management Office) 지원형, 통제형, 지휘형&lt;/li>
&lt;li>케이던스&lt;/li>
&lt;li>테일러링&lt;/li>
&lt;li>신경 논리적 수준 (환경, 행동, 능력, 신념・가치관, 정체성)&lt;/li>
&lt;li>비즈니스 케이스 (프로젝트의 목적이나 이익, 리스크, 투자 대비 효과 등을 문서화한 것)&lt;/li>
&lt;li>추세 분석 (런 차트를 사용하여 실행되며, 그 결과를 바탕으로 미래의 성과를 예측하기 위해 수학적 기법을 사용함)&lt;/li>
&lt;li>품질 관리 계획서 (프로젝트 산출물의 품질에 관한 전략과 접근 방식을 정의)&lt;/li>
&lt;li>거버넌스 프로세스&lt;/li>
&lt;li>프로덕트 오너 (프로덕트의 비전, 프로덕트 백로그 우선순위 지정, 프로덕트 릴리스)&lt;/li>
&lt;li>프로젝트 오너 (프로젝트 발주자)&lt;/li>
&lt;li>프로젝트 관리자 (프로젝트 전체 관리)&lt;/li>
&lt;li>프로젝트 리더 (현장 지휘)&lt;/li>
&lt;li>프로젝트 팀원 (프로젝트 추진)&lt;/li>
&lt;li>하이브리드 접근법&lt;/li>
&lt;li>최소 기능 제품 (MVP)&lt;/li>
&lt;li>이터레이션 리뷰&lt;/li>
&lt;li>워크숍&lt;/li>
&lt;li>프로젝트 편익 관리 계획서 (프로젝트 목표의 편익, 편익을 실현하기 위한 전략적 수단 및 편익을 실현하기 위한 기간)&lt;/li>
&lt;li>핵심 성과 지표 (KPI)&lt;/li>
&lt;li>온사이트 (현장에서, 현지로)&lt;/li>
&lt;li>유사 추정&lt;/li>
&lt;li>3점 추정&lt;/li>
&lt;li>모수 추정&lt;/li>
&lt;li>프로젝트 리뷰&lt;/li>
&lt;li>빅뱅 접근법&lt;/li>
&lt;li>DSDM (Dynamic Systems Development Method)&lt;/li>
&lt;li>브룩스의 법칙&lt;/li>
&lt;li>빅뱅 접근법 (모두 동시에 일괄적으로 도입)&lt;/li>
&lt;li>리스크 레지스터 (프로젝트 내의 잠재적인 차질을 식별하기 위한 리스크 관리 도구로 사용되는 문서입니다)&lt;/li>
&lt;li>리스크 등록부&lt;/li>
&lt;li>SL 이론 (상대방의 상황에 맞춘 4가지 행동)&lt;/li>
&lt;li>역량&lt;/li>
&lt;li>몰입&lt;/li>
&lt;/ul>
&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Korean.pdf" target="_blank" rel="noopener"
>스크럼 가이드 (Ken Schwaber &amp;amp; Jeff Sutherland)&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.pmi.org/-/media/pmi/documents/public/pdf/certifications/pmp-examination-content-outline.pdf?sc_lang_temp=ja-JP" target="_blank" rel="noopener"
>PMI ECO (일본어판) 페이지&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.agilealliance.org/wp-content/uploads/2018/07/AgilePG_JAP.pdf" target="_blank" rel="noopener"
>애자일 실무 가이드&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.pmi.org/-/media/pmi/documents/public/pdf/ethics/pmi-code-of-ethics.pdf?sc_lang_temp=ja-JP" target="_blank" rel="noopener"
>PMI 윤리 및 직무 규정&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="교재">교재
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://www.udemy.com/course/ace-the-pmp" target="_blank" rel="noopener"
>｢PMP® 인증 시험｣에 단번에 합격하기! 효율적인 시험 대비를 위한 전략 코스 (2021) 애자일 대응&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'일본의 재해'</title><link>http://kenji.blog/ko/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/</link><pubDate>Sun, 07 Jan 2024 00:50:09 +0900</pubDate><guid>http://kenji.blog/ko/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/</guid><description>&lt;img src="http://kenji.blog/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/img.png" alt="Featured image of post '일본의 재해'" />&lt;h1 id="개요">개요
&lt;/h1>&lt;p>일본에서 발생한 자연재해에 대한 메모&lt;/p>
&lt;h2 id="2024년-1월-1일-노토반도-지진">2024년 1월 1일 노토반도 지진
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/img.png"
width="474"
height="266"
srcset="http://kenji.blog/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/img_hue649e8d0b3bd837ea85e155e108b15fd_273208_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E6%97%A5%E6%9C%AC%E3%81%AE%E7%81%BD%E5%AE%B3/img_hue649e8d0b3bd837ea85e155e108b15fd_273208_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="178"
data-flex-basis="427px"
>&lt;/p></description></item><item><title>칠초죽 레시피</title><link>http://kenji.blog/ko/p/%E4%B8%83%E8%8D%89%E7%B2%A5%E3%81%AE%E3%83%AC%E3%82%B7%E3%83%94/</link><pubDate>Sat, 06 Jan 2024 22:22:00 +0900</pubDate><guid>http://kenji.blog/ko/p/%E4%B8%83%E8%8D%89%E7%B2%A5%E3%81%AE%E3%83%AC%E3%82%B7%E3%83%94/</guid><description>&lt;img src="http://kenji.blog/p/%E4%B8%83%E8%8D%89%E7%B2%A5%E3%81%AE%E3%83%AC%E3%82%B7%E3%83%94/img.png" alt="Featured image of post 칠초죽 레시피" />&lt;h1 id="칠초">칠초
&lt;/h1>&lt;ul>
&lt;li>미나리&lt;/li>
&lt;li>냉이&lt;/li>
&lt;li>떡쑥&lt;/li>
&lt;li>별꽃&lt;/li>
&lt;li>광대나물&lt;/li>
&lt;li>순무&lt;/li>
&lt;li>무&lt;/li>
&lt;/ul></description></item><item><title>'좋아하는 일본 음악'</title><link>http://kenji.blog/ko/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E9%82%A6%E6%A5%BD/</link><pubDate>Sat, 06 Jan 2024 04:11:01 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E9%82%A6%E6%A5%BD/</guid><description>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E9%82%A6%E6%A5%BD/img.png" alt="Featured image of post '좋아하는 일본 음악'" />&lt;h1 id="추천-일본-음악">추천 일본 음악
&lt;/h1>&lt;ol>
&lt;li>튤립 - 청춘의 그림자
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/k9UJs3TR_KU"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>이루카 - 잔설
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/H2TR3oEA13o"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>카와시마 에이고 - 술과 눈물과 남자와 여자
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/Uxy9Keo_KVc"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Orangestar - Surges
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/QvWsAIc5mO8"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>타케우치 마리야 - Plastic Love
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/T_lC2O1oIew"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>RADWIMPS - 전전전세
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/PDSkFeMVNFs"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>BEGIN - 섬사람의 보물
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/7iZ4-4EYNnk"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>더 블루 하츠 - 정열의 장미
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/-p0Yqcx53O8"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>아라이 유미 - 루즈의 전언
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/MH-P4mXvDPE"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Begin - 바다의 소리
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/qV91xBo1Vxc"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>아라이 유미 - 비행기 구름
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/9HInQDjCCRc"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Love is Over - 오우양페이페이
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/T5Te_czLFCw"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>클램본 - 파도가 밀려와
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/kfvZZKm3gA0"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>RADWIMPS - 스파클
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/a2GujJZfXpg"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>카리유시58 - 안마
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/4_OKI91h3tw"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>카리유시58 - 끝의 시작
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/Vb50GwvHH14"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>테레사 텡 - 시간의 흐름에 몸을 맡기고
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/8g9B-iWsO-o"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>우타다 히카루 『One Last Kiss』
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/0Uhh62MUEic"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>불가사의/wonderboy - Pellicule (Official Music Video)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/ueq2QFIIpu0"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;/ol>
&lt;iframe allow="autoplay *; encrypted-media *;" frameborder="0" height="150" style="width:100%;max-width:660px;overflow:hidden;background:transparent;" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-storage-access-by-user-activation allow-top-navigation-by-user-activation" src="https://embed.music.apple.com/jp/album/pellicule/1480825458?i=1480825460">&lt;/iframe>
&lt;ol start="20">
&lt;li>Kamen Rider Black RX - Opening Song
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/tV5l-Nt18o4"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>확실한 것 / 오다 카즈마사 - Covered by 박유나
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/q3myGl1PZgU"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>【Japanese healing song】Hana／Kosuke Atari（covered by Leah）
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/FpdrS6YGP4o"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>「한밤중의 도어〜stay with me」/ 마츠바라 미키 Official Lyric Video
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/nuU2YHtxMik"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Midnight Pretenders
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/7pPb5fmumNo"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Anri - Last Summer Whisper
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/BlvOAd10kJo"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>1985 - The Blue Hearts
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/sKarAUhTWMw"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>BUMP OF CHICKEN - supernova
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/0EpQ40X_r0Q"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>튤립 마음의 여행 1972
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/AFBPJW7wsho"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>작은 사랑의 노래
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/u8EkSB9zSpE"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>ASKA - 시작은 언제나 비 (Official Music Video)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/74IKR0WeKXY"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>키린지 - 에일리언즈
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/w05Q_aZKkFw"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>그 날의 하늘이여 - 미나미 코세츠
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/xC7o4N3Zb1U"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;/ol></description></item><item><title>'좋아하는 팝송'</title><link>http://kenji.blog/ko/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%B4%8B%E6%A5%BD/</link><pubDate>Fri, 05 Jan 2024 00:14:22 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%B4%8B%E6%A5%BD/</guid><description>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%B4%8B%E6%A5%BD/img.png" alt="Featured image of post '좋아하는 팝송'" />&lt;h1 id="추천-팝송">추천 팝송
&lt;/h1>&lt;ol>
&lt;li>Keane - Somewhere Only We Know
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/Oextk-If8HQ"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Ben E. King - Stand By Me
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/hwZNL7QVJjE"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>The Beatles - Hey Jude
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/A_MjCqQoLLA"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>The Mamas &amp;amp; The Papas - California Dreamin'
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/N-aK6JnyFmk"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Ed Sheeran - Shape of You
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/JGwWNGJdvx8"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Mark Ronson ft. Bruno Mars – Uptown Funk
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/OPf0YbXqDm0"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Sugar - Maroon 5
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/09R8_2nJtjg"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Bette Midler - The Rose
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/CB4EgdpYlnk"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Green Day - Basket Case
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/NUTGr5t3MoY"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Coldplay - Viva La VidaViva La Vida
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/dvgZkm1xWPE"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Maroon 5 - Memories (Lyrics)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/SlPhMPnQ58k"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Dido - Thank You (Official Video)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/1TO48Cnl66w"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>밥 딜런 - Blowin&amp;rsquo;The Wind(바람만이 아는 대답)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/MMFj8uDubsE"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Coldplay - Yellow
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/yKNxeF4KMsY"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Eric Clapton - Tears In Heaven
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/JxPj3GAYYZ0"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>B. J. Thomas - Raindrops Keep Fallin&amp;rsquo; on My Head (Stereo / Lyrics)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/_VyA2f6hGW4"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Take Me Home, Country Roads
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/1vrEljMfXYo"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Simon &amp;amp; Garfunkel - Mrs. Robinson (Audio)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/9C1BCAgu2I8"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Taylor Swift - Love Story (Live on Letterman)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/mNLVMDF9mUo"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Wiz Khalifa - See You Again ft. Charlie Puth [Official Video] Furious 7 Soundtrack
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/RgKAFK5djSk"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>The Top (Extended Mix)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/aeKCKIwDnwI"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Something Just Like This
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/Y1Nip-y0BcQ"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>필링
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/27cedsZpN4w"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Yesterday Once More
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/-sltNGgjU_4"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Carpenters - Top Of The World
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/3hyFB6SA7b4"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>청춘의 빛 / I Need To Be In Love [일본어 번역 포함]　 카펜터스
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/EmFiOb0To7w"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Bob Marley &amp;amp; The Wailers &amp;ldquo;Three Little Birds&amp;rdquo;
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/HNBCVM4KbUM"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Alan Walker - All Falls Down (feat. Noah Cyrus with Digital Farm Animals)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/6RLLOEzdxsM"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Alan Walker - Darkside (feat. Au/Ra and Tomine Harket)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/M-P4QBt-FWw"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Alan Walker - Alone
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/1-xGerv5FOk"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Alan Walker - Sing Me To Sleep
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/2i2khp_npdE"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>Alan Walker - Faded
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/60ItHLz5WEA"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>killing me softly with his song
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/oKOtzIo-uYw"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;li>a-ha - Take On Me (Official Video)
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/djV11Xbc914"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/li>
&lt;/ol></description></item><item><title>명령 프롬프트에서 PowerToys 설치하기</title><link>http://kenji.blog/ko/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</link><pubDate>Sat, 30 Sep 2023 21:23:00 +0900</pubDate><guid>http://kenji.blog/ko/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</guid><description>&lt;img src="http://kenji.blog/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/img.png" alt="Featured image of post 명령 프롬프트에서 PowerToys 설치하기" />&lt;h1 id="명령-프롬프트에서-powertoys-설치하기">명령 프롬프트에서 PowerToys 설치하기
&lt;/h1>&lt;p>명령 프롬프트를 사용하여 PowerToys를 설치하는 방법을 소개합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">winget install Microsoft.PowerToys --source winget
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h1 id="명령-프롬프트에서-powertoys-제거하기">명령 프롬프트에서 PowerToys 제거하기
&lt;/h1>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">winget uninstall --name PowerToys
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>'자신이 할 수 없는 일을 하는 사람에게 경의를 표하자'</title><link>http://kenji.blog/ko/p/%E8%87%AA%E5%88%86%E3%81%AB%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E4%BA%BA%E3%81%AB%E6%95%AC%E6%84%8F%E3%82%92%E6%89%95%E3%81%8A%E3%81%86/</link><pubDate>Tue, 01 Aug 2023 23:42:31 +0900</pubDate><guid>http://kenji.blog/ko/p/%E8%87%AA%E5%88%86%E3%81%AB%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E4%BA%BA%E3%81%AB%E6%95%AC%E6%84%8F%E3%82%92%E6%89%95%E3%81%8A%E3%81%86/</guid><description>&lt;img src="http://kenji.blog/p/%E8%87%AA%E5%88%86%E3%81%AB%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E4%BA%BA%E3%81%AB%E6%95%AC%E6%84%8F%E3%82%92%E6%89%95%E3%81%8A%E3%81%86/img.png" alt="Featured image of post '자신이 할 수 없는 일을 하는 사람에게 경의를 표하자'" />&lt;h1 id="경의를-표하자">경의를 표하자
&lt;/h1>&lt;p>자신이 할 수 없는 일을 하는 사람에게 경의를 표하자&lt;/p>
&lt;p>사회에는 일이나 입장에 우열을 가리며 경의를 표하지 못하는 사람이 의외로 많다&lt;/p>
&lt;p>자신이 할 수 없는 일을 해내는 사람에게는 어떤 일이든 경의를 표하자&lt;/p>
&lt;p>명심하고 싶다&lt;/p></description></item><item><title>스플래툰 2</title><link>http://kenji.blog/ko/p/%E3%82%B9%E3%83%97%E3%83%A9%E3%83%88%E3%82%A5%E3%83%BC%E3%83%B32/</link><pubDate>Tue, 01 Aug 2023 00:26:30 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B9%E3%83%97%E3%83%A9%E3%83%88%E3%82%A5%E3%83%BC%E3%83%B32/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B9%E3%83%97%E3%83%A9%E3%83%88%E3%82%A5%E3%83%BC%E3%83%B32/img.png" alt="Featured image of post 스플래툰 2" />&lt;h1 id="스플래툰-2">스플래툰 2
&lt;/h1>&lt;p>아마 인생에서 가장 오래 플레이하고 있는 게임이 스플래툰 2입니다.
스토리 모드는 거의 플레이하지 않지만, 4대4 온라인 대전의 매칭이 매우 잘 되어 있어서, 저와 비슷한 수준의 사람과 대전할 수 있기 때문에,
질리지 않는 재미가 있습니다. 또한, 상대나 아군의 움직임의 특징을 읽고, 이기기 위한 전략을 생각하는 것도 즐겁습니다.&lt;/p>
&lt;h1 id="무기">무기
&lt;/h1>&lt;p>자주 사용하는 무기는 순서대로 &amp;lsquo;보틀 가이저 포일&amp;rsquo;, &amp;lsquo;새싹 슈터&amp;rsquo;, &amp;lsquo;스플랫 롤러&amp;rsquo;, &amp;lsquo;베리어블 롤러 포일&amp;rsquo;입니다.
&amp;lsquo;새싹 슈터&amp;rsquo;는 초보자용 무기로, 초반에는 이것을 자주 사용했습니다.&lt;/p>
&lt;p>각각의 칠 포인트는 아래와 같습니다.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>무기&lt;/th>
&lt;th>칠 포인트&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>베리어블 롤러&lt;/td>
&lt;td>6,636,594p&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>스플랫 롤러&lt;/td>
&lt;td>6,200,629p&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>새싹 슈터&lt;/td>
&lt;td>4,211,759p&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>보틀 가이저 포일&lt;/td>
&lt;td>744,678p&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>스플랫 슈터&lt;/td>
&lt;td>301,238p&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h1 id="레벨에-대해서는">레벨에 대해서는
&lt;/h1>&lt;p>A+～S+ 사이를 오가고 있는 느낌으로, 좀처럼 S+의 상위권으로는 올라가지 못하는 상태가 계속되고 있지만,
상위권으로 올라가기보다는 시합을 즐기면서 플레이하고 있는 느낌입니다.
(너무 상위권이 되면 상대도 강해져서 긴장감이 생기기 때문에 즐길 수 없게 되어버립니다)&lt;/p>
&lt;h1 id="플레이-시간">플레이 시간
&lt;/h1>&lt;p>플레이 시간은 2500시간 이상을 넘었습니다.&lt;/p>
&lt;h1 id="향후-목표">향후 목표
&lt;/h1>&lt;p>게임의 레벨은 유지하면서 즐겁게 플레이하는 것이지만, 돈이나 기어에 대해서는 최대치를 목표로 하고 싶습니다.
스플래툰 3가 나온 이후로 대전 매칭에 시간이 걸리거나 매칭이 안 되는 일이 늘어나고 있어서,
더 이상 사람이 줄어들지 않기를 기도하면서 플레이하고 싶습니다.&lt;/p></description></item><item><title>'Microsoft MVP 수상에 대하여(2023-2024)'</title><link>http://kenji.blog/ko/p/microsoft-mvp%E5%8F%97%E8%B3%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A62023-2024/</link><pubDate>Mon, 31 Jul 2023 19:15:14 +0900</pubDate><guid>http://kenji.blog/ko/p/microsoft-mvp%E5%8F%97%E8%B3%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A62023-2024/</guid><description>&lt;img src="http://kenji.blog/p/microsoft-mvp%E5%8F%97%E8%B3%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A62023-2024/img.png" alt="Featured image of post 'Microsoft MVP 수상에 대하여(2023-2024)'" />&lt;h1 id="microsoft-mvp-수상에-대하여-2023-2024">Microsoft MVP 수상에 대하여 (2023-2024)
&lt;/h1>&lt;p>이번에 Microsoft MVP(2023-2024)를 수상하게 되었습니다.
2017년부터 7년 연속 수상입니다.&lt;/p>
&lt;p>수상한 카테고리는 &lt;strong>Developer Technologies&lt;/strong> 입니다.&lt;/p>
&lt;p>지금까지의 활동을 돌아보면 다음과 같은 활동을 해왔습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://github.com/kenjinote" target="_blank" rel="noopener"
>GitHub&lt;/a>에 코드 공개&lt;/li>
&lt;li>블로그나 &lt;a class="link" href="https://twitter.com/kenjinote" target="_blank" rel="noopener"
>SNS(Twitter 등)&lt;/a>에 기술 정보 발신&lt;/li>
&lt;li>&lt;a class="link" href="https://social.msdn.microsoft.com/Forums/ja-JP/home" target="_blank" rel="noopener"
>MSDN 포럼&lt;/a>에 게시글 작성&lt;/li>
&lt;li>Microsoft 제품에 대한 피드백&lt;/li>
&lt;/ul>
&lt;p>앞으로도 더 좋은 글을 쓰며 정보 발신을 해나가고자 합니다.&lt;/p>
&lt;p>잘 부탁드립니다.&lt;/p></description></item><item><title>'수학의 역사'</title><link>http://kenji.blog/ko/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%AD%B4%E5%8F%B2/</link><pubDate>Sat, 22 Jul 2023 15:25:10 +0900</pubDate><guid>http://kenji.blog/ko/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%AD%B4%E5%8F%B2/</guid><description>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%AD%B4%E5%8F%B2/img.png" alt="Featured image of post '수학의 역사'" />&lt;h3 id="고대-그리스의-3대-작도-문제">고대 그리스의 3대 작도 문제
&lt;/h3>&lt;ol>
&lt;li>원이 주어졌을 때, 그 원과 같은 넓이를 가지는 정사각형을 만들기 (원의 정방형화 문제)&lt;/li>
&lt;li>임의의 각이 지정되었을 때, 그것을 3등분하기 (각의 3등분 문제)&lt;/li>
&lt;li>정육면체가 주어졌을 때, 그 두 배의 부피를 가지는 정육면체를 만들기 (정육면체의 배적 문제)&lt;/li>
&lt;/ol>
&lt;h3 id="아르키메데스의-나선">아르키메데스의 나선
&lt;/h3>&lt;p>평면 상에서 반직선 OB를 정점 O를 중심으로 일정한 속도로 회전시킵니다. 처음 위치를 OA라고 할 때,
OA에서 움직이기 시작함과 동시에 점 P가 O에서 출발하여, OB를 따라 일정한 속도로 움직일 때 점 P가 그리는
선이 아르키메데스의 나선입니다.&lt;/p>
&lt;h3 id="파푸스의-정리">파푸스의 정리
&lt;/h3>&lt;ul>
&lt;li>사이클로이드&lt;/li>
&lt;li>니코메데스의 콘코이드&lt;/li>
&lt;li>디오클레스의 시소이드&lt;/li>
&lt;li>페르마의 접선법&lt;/li>
&lt;li>데카르트의 법선법&lt;/li>
&lt;/ul>
&lt;h3 id="연표">연표
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>연도&lt;/th>
&lt;th>사건&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>기원전 3400년경&lt;/td>
&lt;td>수메르인이 점토로 만든 대용 화폐로 계산을 수행&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>기원전 3000년경&lt;/td>
&lt;td>이집트에서 상형문자의 수학이 등장&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>기원전 2800년경&lt;/td>
&lt;td>인더스 문명에서 10진법에 따른 도량형이 사용됨&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>기원전 2700년경&lt;/td>
&lt;td>이집트인이 밧줄과 피타고라스 수를 사용하여 각도를 확인&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>기원전 2500년경&lt;/td>
&lt;td>계산에 사용하는 도구, 주판이 발견됨&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>기원전 2500년경&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="참고">참고
&lt;/h3>&lt;ul>
&lt;li>&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E3%81%AE%E6%AD%B4%E5%8F%B2" target="_blank" rel="noopener"
>수학의 역사&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>트랙볼 Deft Pro(M-DPT1MRBK) 추천</title><link>http://kenji.blog/ko/p/%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%83%ABdeft-prom-dpt1mrbk%E3%81%AE%E3%81%99%E3%81%99%E3%82%81/</link><pubDate>Tue, 02 May 2023 23:28:33 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%83%ABdeft-prom-dpt1mrbk%E3%81%AE%E3%81%99%E3%81%99%E3%82%81/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%83%ABdeft-prom-dpt1mrbk%E3%81%AE%E3%81%99%E3%81%99%E3%82%81/img.png" alt="Featured image of post 트랙볼 Deft Pro(M-DPT1MRBK) 추천" />&lt;h1 id="엘레컴-트랙볼-deft-pro-m-dpt1mrbk에-대하여">엘레컴 트랙볼 Deft Pro M-DPT1MRBK에 대하여
&lt;/h1>&lt;p>엘레컴의 트랙볼 &amp;lsquo;Deft Pro M-DPT1MRBK&amp;rsquo;를 구매한 지 1주일 정도 지나서 사용감 등을 리뷰합니다.&lt;/p>
&lt;p>&lt;strong>주요 특징&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>버튼 수가 8개로 많음&lt;/li>
&lt;li>유선, 무선 리시버, 블루투스 3가지 방식으로 연결 가능&lt;/li>
&lt;li>볼 크기가 큼 (중형 직경 44mm)&lt;/li>
&lt;li>Amazon 구매 가격: ￥7,012 (2021년 5월 2일 기준)&lt;/li>
&lt;/ul>
&lt;h2 id="좋은-점">좋은 점
&lt;/h2>&lt;ul>
&lt;li>마우스에 비해 손목을 움직일 필요가 없어서, 손목의 부담이 줄어듦&lt;/li>
&lt;li>버튼 수가 많아서, 버튼에 다양한 기능을 할당할 수 있음
&lt;img src="http://kenji.blog/p/%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%83%ABdeft-prom-dpt1mrbk%E3%81%AE%E3%81%99%E3%81%99%E3%82%81/img_1.png"
width="767"
height="686"
srcset="http://kenji.blog/p/%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%83%ABdeft-prom-dpt1mrbk%E3%81%AE%E3%81%99%E3%81%99%E3%82%81/img_1_hu552d9af378dc908f7eb4fb5eb2e28a90_78909_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%83%ABdeft-prom-dpt1mrbk%E3%81%AE%E3%81%99%E3%81%99%E3%82%81/img_1_hu552d9af378dc908f7eb4fb5eb2e28a90_78909_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="111"
data-flex-basis="268px"
>
현재는 위와 같이 할당하고 있습니다. 애플리케이션마다 버튼 할당을 변경할 수도 있습니다.
※ 버튼 할당에는 전용 소프트웨어 설치가 필요합니다.&lt;/li>
&lt;li>버튼이 크기 때문에 트랙볼 중에서는 비교적 섬세한 조작도 하기 쉬움&lt;/li>
&lt;/ul>
&lt;h2 id="아쉬운-점">아쉬운 점
&lt;/h2>&lt;ul>
&lt;li>트랙볼 주위에 먼지가 쌓이므로 정기적(며칠에 한 번 정도)으로 볼을 분리해서 청소가 필요함&lt;/li>
&lt;li>검지, 중지 등으로 커서 이동, 엄지로 마우스 휠 조작 등 마우스와는 다른 조작감이기 때문에, 익숙해지는 데 시간이 걸림&lt;/li>
&lt;li>위에서 섬세한 움직임을 하기 쉽다고 적었지만, 트랙볼에서는 역시 1픽셀 단위로 커서를 움직이는 것은 어려움&lt;/li>
&lt;li>왼쪽 버튼을 누르면서 휠 조작은 불가능함 (예를 들어 그림판에서 범위 선택 중에 확대/축소를 하고 싶은 경우 등)&lt;/li>
&lt;/ul>
&lt;p>이상, 트랙볼 중에서는 비싼 편이라고 생각하지만, 전반적으로는 꽤 조작하기 쉽고, 업무 효율이 올랐다고 생각합니다.
고려 중인 분들께 참고가 되었으면 좋겠습니다.&lt;/p></description></item><item><title>'wxWidgets를 사용한 샘플'</title><link>http://kenji.blog/ko/p/wxwidgets-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/</link><pubDate>Tue, 18 Apr 2023 00:18:22 +0900</pubDate><guid>http://kenji.blog/ko/p/wxwidgets-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/</guid><description>&lt;img src="http://kenji.blog/p/wxwidgets-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/img.png" alt="Featured image of post 'wxWidgets를 사용한 샘플'" />&lt;h2 id="wxwidgets란">wxWidgets란
&lt;/h2>&lt;p>wxWidgets는 Windows, Mac, Linux, Android, iOS 등의 플랫폼에서 동작하는 C++ GUI 라이브러리입니다.&lt;/p>
&lt;h2 id="wxwidgets-설치">wxWidgets 설치
&lt;/h2>&lt;ol>
&lt;li>&lt;a class="link" href="https://www.wxwidgets.org/downloads/" target="_blank" rel="noopener"
>https://www.wxwidgets.org/downloads/&lt;/a> 를 열어 &lt;code>Windows Installer&lt;/code>를 다운로드합니다.&lt;/li>
&lt;li>&lt;code>wxMSW-3.2.2.1-Setup.exe&lt;/code>를 실행하여 설치합니다.&lt;/li>
&lt;li>설치된 폴더에서 &amp;ldquo;C:\wxWidgets-3.2.2.1\build\msw\wx_vc17.sln&amp;quot;을 엽니다.&lt;/li>
&lt;li>&lt;code>wx_vc17.sln&lt;/code>을 열고 &lt;code>빌드&lt;/code>＞&lt;code>일괄 빌드&lt;/code>를 선택합니다.&lt;/li>
&lt;li>&lt;code>모두 선택&lt;/code> 버튼을 누르고, 리빌드 버튼을 누릅니다.&lt;/li>
&lt;li>빌드가 완료되면 일단 Visual Studio를 닫습니다.&lt;/li>
&lt;/ol>
&lt;h2 id="샘플-프로젝트-생성">샘플 프로젝트 생성
&lt;/h2>&lt;ol>
&lt;li>Visual Studio를 엽니다.&lt;/li>
&lt;li>&lt;code>파일&lt;/code>＞&lt;code>새로 만들기&lt;/code>＞&lt;code>프로젝트&lt;/code>를 선택합니다.&lt;/li>
&lt;li>&lt;code>Windows 데스크톱 애플리케이션&lt;/code> (탭이 &lt;code>C++&lt;/code>, &lt;code>Windows&lt;/code>, &lt;code>데스크톱&lt;/code>)을 선택합니다.&lt;/li>
&lt;li>&lt;code>프로젝트 이름&lt;/code>에 &lt;code>wxWidgetsSample&lt;/code>을 입력합니다.&lt;/li>
&lt;li>&lt;code>만들기&lt;/code>를 클릭합니다.&lt;/li>
&lt;li>&lt;code>wxWidgetsSample&lt;/code>을 우클릭하고 &lt;code>속성&lt;/code>을 선택합니다.&lt;/li>
&lt;li>&lt;code>구성 속성&lt;/code>＞&lt;code>C/C++&lt;/code>＞&lt;code>추가 포함 디렉터리&lt;/code>에 &lt;code>C:\wxWidgets-3.2.2.1\include&lt;/code>와 &lt;code>C:\wxWidgets-3.2.2.1\include\msvc&lt;/code>를 추가합니다.&lt;/li>
&lt;li>&lt;code>구성 속성&lt;/code>＞&lt;code>링커&lt;/code>＞&lt;code>추가 라이브러리 디렉터리&lt;/code>에 &lt;code>C:\wxWidgets-3.2.2.1\lib\vc_x64_lib&lt;/code>를 추가합니다.&lt;/li>
&lt;li>&lt;code>wxWidgetsSample.cpp&lt;/code>를 열고 다음 코드로 교체합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;span class="lnt">67
&lt;/span>&lt;span class="lnt">68
&lt;/span>&lt;span class="lnt">69
&lt;/span>&lt;span class="lnt">70
&lt;/span>&lt;span class="lnt">71
&lt;/span>&lt;span class="lnt">72
&lt;/span>&lt;span class="lnt">73
&lt;/span>&lt;span class="lnt">74
&lt;/span>&lt;span class="lnt">75
&lt;/span>&lt;span class="lnt">76
&lt;/span>&lt;span class="lnt">77
&lt;/span>&lt;span class="lnt">78
&lt;/span>&lt;span class="lnt">79
&lt;/span>&lt;span class="lnt">80
&lt;/span>&lt;span class="lnt">81
&lt;/span>&lt;span class="lnt">82
&lt;/span>&lt;span class="lnt">83
&lt;/span>&lt;span class="lnt">84
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#pragma comment(linker,&amp;#34;\&amp;#34;/manifestdependency:type=&amp;#39;win32&amp;#39; name=&amp;#39;Microsoft.Windows.Common-Controls&amp;#39; version=&amp;#39;6.0.0.0&amp;#39; processorArchitecture=&amp;#39;*&amp;#39; publicKeyToken=&amp;#39;6595b64144ccf1df&amp;#39; language=&amp;#39;*&amp;#39;\&amp;#34;&amp;#34;)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;wx/wxprec.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#ifndef WX_PRECOMP
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;wx/wx.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#endif
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">MyApp&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="k">public&lt;/span> &lt;span class="n">wxApp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">virtual&lt;/span> &lt;span class="kt">bool&lt;/span> &lt;span class="n">OnInit&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">class&lt;/span> &lt;span class="nc">MyFrame&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="k">public&lt;/span> &lt;span class="n">wxFrame&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">public&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">MyFrame&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">private&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="n">OnHello&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxCommandEvent&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">event&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="nf">OnExit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxCommandEvent&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">event&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="nf">OnAbout&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxCommandEvent&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">event&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">enum&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ID_Hello&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">};&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wxIMPLEMENT_APP&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">MyApp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">bool&lt;/span> &lt;span class="n">MyApp&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnInit&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">MyFrame&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">frame&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">MyFrame&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">frame&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">Show&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">true&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">MyFrame&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">:&lt;/span> &lt;span class="n">wxFrame&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxID_ANY&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Hello World&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wxMenu&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">menuFile&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">wxMenu&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">menuFile&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">Append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ID_Hello&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&amp;amp;Hello...&lt;/span>&lt;span class="se">\t&lt;/span>&lt;span class="s">Ctrl-H&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;Help string shown in status bar for this menu item&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">menuFile&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">AppendSeparator&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">menuFile&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">Append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxID_EXIT&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wxMenu&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">menuHelp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">wxMenu&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">menuHelp&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">Append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxID_ABOUT&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wxMenuBar&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">menuBar&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">wxMenuBar&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">menuBar&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">Append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">menuFile&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&amp;amp;File&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">menuBar&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">Append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">menuHelp&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;&amp;amp;Help&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">SetMenuBar&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">menuBar&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wxButton&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">button1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">wxButton&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">this&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ID_Hello&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Hello&amp;#34;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">wxPoint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">wxSize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">32&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Connect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ID_Hello&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxEVT_COMMAND_BUTTON_CLICKED&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxCommandEventHandler&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnHello&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wxButton&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">button2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">wxButton&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">this&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxID_ABOUT&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;About&amp;#34;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">wxPoint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">60&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">wxSize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">32&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Connect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxID_ABOUT&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxEVT_COMMAND_BUTTON_CLICKED&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxCommandEventHandler&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnAbout&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wxButton&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">button3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">new&lt;/span> &lt;span class="n">wxButton&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">this&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxID_EXIT&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Exit&amp;#34;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">wxPoint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">20&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">wxSize&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">32&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Connect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxID_EXIT&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxEVT_COMMAND_BUTTON_CLICKED&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxCommandEventHandler&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnExit&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">CreateStatusBar&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">SetStatusText&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Welcome to wxWidgets!&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Bind&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxEVT_MENU&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnHello&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ID_Hello&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Bind&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxEVT_MENU&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnAbout&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxID_ABOUT&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Bind&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxEVT_MENU&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnExit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">this&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxID_EXIT&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnExit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxCommandEvent&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">event&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Close&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">true&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnAbout&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxCommandEvent&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">event&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wxMessageBox&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;This is a wxWidgets&amp;#39; Hello world sample&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s">&amp;#34;About Hello World&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">wxOK&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">wxICON_INFORMATION&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="n">MyFrame&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">OnHello&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">wxCommandEvent&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">event&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">wxLogMessage&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Hello world from wxWidgets!&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="10">
&lt;li>빌드하고 실행하면 아래와 같은 창이 열립니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="http://kenji.blog/p/wxwidgets-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/img_1.png"
width="386"
height="243"
srcset="http://kenji.blog/p/wxwidgets-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/img_1_hu5f63ad1505c8497f33a78280f704873d_5545_480x0_resize_box_3.png 480w, http://kenji.blog/p/wxwidgets-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/img_1_hu5f63ad1505c8497f33a78280f704873d_5545_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="158"
data-flex-basis="381px"
>&lt;/p>
&lt;h2 id="참고">참고
&lt;/h2>&lt;p>샘플 프로젝트를 아래에 올려두었습니다.
&lt;a class="link" href="https://github.com/kenjinote/wxWidgetsSample" target="_blank" rel="noopener"
>wxWidgetsSample&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://www.wxwidgets.org" target="_blank" rel="noopener"
>공식 사이트&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://ken-ohwada.hatenadiary.org/entry/2022/07/14/165213" target="_blank" rel="noopener"
>C++와 wxWidgets를 사용한 게임&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>이상입니다.&lt;/p></description></item><item><title>영화 TODO 리스트</title><link>http://kenji.blog/ko/p/%E6%98%A0%E7%94%BBtodo%E3%83%AA%E3%82%B9%E3%83%88/</link><pubDate>Mon, 17 Apr 2023 00:34:13 +0900</pubDate><guid>http://kenji.blog/ko/p/%E6%98%A0%E7%94%BBtodo%E3%83%AA%E3%82%B9%E3%83%88/</guid><description>&lt;img src="http://kenji.blog/p/%E6%98%A0%E7%94%BBtodo%E3%83%AA%E3%82%B9%E3%83%88/image.jpg" alt="Featured image of post 영화 TODO 리스트" />&lt;h1 id="보고-싶은-영화-보면-체크하기">보고 싶은 영화 (보면 체크하기)
&lt;/h1>&lt;ul>
&lt;li>&lt;input disabled="" type="checkbox"> 이별의 아침에 약속의 꽃을 장식하자&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 박사가 사랑한 수식&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 썸머 워즈&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 히든 피겨스&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 굿 윌 헌팅&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 뷰티풀 마인드&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 사랑에 대한 모든 것&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 무한대를 본 남자&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 호킹 (베네딕트 컴버배치)&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 천지명찰&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 파이 (π)&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 21&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 아이큐&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 프루프&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 세 얼간이&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 버팔로 &amp;lsquo;66&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 시계태엽 오렌지&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 분노의 역류&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 아사쿠사 키드&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 탑건&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 매트릭스: 리저렉션&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 나는 전설이다&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 다빈치 코드&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 소셜 네트워크&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 슈타인즈 게이트&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 플라네테스&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 그래비티&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 바이올렛 에버가든&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 사이코패스 (Psycho-Pass)&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 귀멸의 칼날&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 원령공주&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 위니 (Winny)&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 제로의 초점&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 주토피아&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 너의 이름은.&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 날씨의 아이&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 백 투 더 퓨처 (1, 2, 3)&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 신 고질라&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 신 울트라맨&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 신 가면라이더&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 스즈메의 문단속&lt;/li>
&lt;li>&lt;input disabled="" type="checkbox"> 더 퍼스트 슬램덩크&lt;/li>
&lt;/ul></description></item><item><title>멋진 웹 페이지 템플릿 (html5up)</title><link>http://kenji.blog/ko/p/%E3%81%8B%E3%81%A3%E3%81%93%E3%81%84%E3%81%84-web-%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88html5up/</link><pubDate>Mon, 17 Apr 2023 00:26:55 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%81%8B%E3%81%A3%E3%81%93%E3%81%84%E3%81%84-web-%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88html5up/</guid><description>&lt;img src="http://kenji.blog/p/%E3%81%8B%E3%81%A3%E3%81%93%E3%81%84%E3%81%84-web-%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88html5up/img.png" alt="Featured image of post 멋진 웹 페이지 템플릿 (html5up)" />&lt;p>멋진 웹 페이지 템플릿&lt;/p>
&lt;ul>
&lt;li>html5up
&lt;a class="link" href="https://html5up.net/" target="_blank" rel="noopener"
>https://html5up.net/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>을 사용해 보고 싶어서 남기는 메모입니다.&lt;/p></description></item><item><title>C++에서 현재 시간을 ISO8601 형식으로 출력하는 방법</title><link>http://kenji.blog/ko/p/c-%E3%81%A7%E7%8F%BE%E5%9C%A8%E6%99%82%E5%88%BB%E3%82%92iso8601%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%A7%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 15 Apr 2023 19:35:27 +0900</pubDate><guid>http://kenji.blog/ko/p/c-%E3%81%A7%E7%8F%BE%E5%9C%A8%E6%99%82%E5%88%BB%E3%82%92iso8601%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%A7%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/c-%E3%81%A7%E7%8F%BE%E5%9C%A8%E6%99%82%E5%88%BB%E3%82%92iso8601%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%A7%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post C++에서 현재 시간을 ISO8601 형식으로 출력하는 방법" />&lt;h3 id="전제-조건">전제 조건
&lt;/h3>&lt;ul>
&lt;li>ISO C++ 20 표준 (/std:c++20)&lt;/li>
&lt;/ul>
&lt;h3 id="코드">코드
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;chrono&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;format&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">string&lt;/span> &lt;span class="n">datetime&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;{:%FT%TZ}&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">system_clock&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">now&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이상, C++에서 현재 시간을 ISO8601 형식으로 출력하는 방법이었습니다.&lt;/p>
&lt;h3 id="참고">참고
&lt;/h3>&lt;ul>
&lt;li>&lt;a class="link" href="https://eel.is/c&amp;#43;&amp;#43;draft/time.format" target="_blank" rel="noopener"
>std::format&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Windows를 종료하는 바로 가기 만들기</title><link>http://kenji.blog/ko/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Tue, 11 Apr 2023 17:03:32 +0900</pubDate><guid>http://kenji.blog/ko/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Windows를 종료하는 바로 가기 만들기" />&lt;p>Windows를 종료하는 바로 가기를 만드는 방법을 소개합니다.&lt;/p>
&lt;p>생성된 바로 가기를 바탕 화면 등에 두고 두 번 클릭하면 종료할 수 있어 편리합니다.&lt;/p>
&lt;h2 id="만드는-방법">만드는 방법
&lt;/h2>&lt;h4 id="1-바탕-화면을-마우스-오른쪽-버튼으로-클릭하고-새로-만들기--바로-가기를-선택">1. 바탕 화면을 마우스 오른쪽 버튼으로 클릭하고 &lt;code>새로 만들기&lt;/code> ＞ &lt;code>바로 가기&lt;/code>를 선택
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="568"
height="601"
srcset="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu34071110105a0a7e05ea19b3faf627f0_58330_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu34071110105a0a7e05ea19b3faf627f0_58330_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="94"
data-flex-basis="226px"
>&lt;/p>
&lt;h4 id="2-바로-가기-만들기-화면이-표시되면-shutdownexe--s--f--t-0을-입력하고-다음을-클릭">2. 바로 가기 만들기 화면이 표시되면 &lt;code>shutdown.exe -s -f -t 0&lt;/code>을 입력하고 &lt;code>다음&lt;/code>을 클릭
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png"
width="614"
height="454"
srcset="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hu0fdb01c392b6fac60e6bb98f573f8713_17593_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hu0fdb01c392b6fac60e6bb98f573f8713_17593_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="135"
data-flex-basis="324px"
>&lt;/p>
&lt;h4 id="3-바로-가기-이름에-시스템-종료를-입력하고-마침을-클릭">3. 바로 가기 이름에 &lt;code>시스템 종료&lt;/code>를 입력하고 &lt;code>마침&lt;/code>을 클릭
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3.png"
width="614"
height="454"
srcset="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hub638dd79dd16a877bb5fea8c6f2bf142_11979_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hub638dd79dd16a877bb5fea8c6f2bf142_11979_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="135"
data-flex-basis="324px"
>&lt;/p>
&lt;h4 id="4-생성된-바로-가기의-아이콘-변경하기">4. 생성된 바로 가기의 아이콘 변경하기
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4.png"
width="419"
height="469"
srcset="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4_hua5d649daacdf0dbdf4f93bd3239c3858_27168_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4_hua5d649daacdf0dbdf4f93bd3239c3858_27168_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="89"
data-flex-basis="214px"
>&lt;/p>
&lt;p>생성된 바로 가기를 마우스 오른쪽 버튼으로 클릭하고 &lt;code>속성&lt;/code>을 선택&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_5.png"
width="432"
height="600"
srcset="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_5_hu313a9d69197efb75a0725e0e6793e592_24420_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_5_hu313a9d69197efb75a0725e0e6793e592_24420_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="72"
data-flex-basis="172px"
>&lt;/p>
&lt;p>&lt;code>아이콘 변경&lt;/code>을 클릭&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_6.png"
width="340"
height="420"
srcset="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_6_hud40ff43810cbe8f07802320fab97e1e8_45995_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_6_hud40ff43810cbe8f07802320fab97e1e8_45995_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="80"
data-flex-basis="194px"
>&lt;/p>
&lt;p>빨간색 사각형 아이콘을 선택하고 &lt;code>확인&lt;/code>을 클릭한 후, 다시 &lt;code>확인&lt;/code>을 클릭하여 속성을 닫음&lt;/p>
&lt;p>이상입니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png"
width="126"
height="122"
srcset="http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu9b7c59b017f6e7ad15ccc41a6e668b14_6147_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%82%92%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu9b7c59b017f6e7ad15ccc41a6e668b14_6147_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="103"
data-flex-basis="247px"
>&lt;/p>
&lt;p>생성된 바로 가기를 두 번 클릭하면 Windows가 종료됩니다.&lt;/p>
&lt;p>※주의：시스템 종료 확인 대화 상자가 표시되지 않습니다.&lt;/p></description></item><item><title>paint.net에서 이미지의 특정 부분에 모자이크 처리하는 방법</title><link>http://kenji.blog/ko/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Tue, 11 Apr 2023 16:33:10 +0900</pubDate><guid>http://kenji.blog/ko/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post paint.net에서 이미지의 특정 부분에 모자이크 처리하는 방법" />&lt;p>paint.net에서 이미지의 특정 부분에 모자이크 처리하는 방법을 소개합니다.&lt;/p>
&lt;p>인터넷에 이미지를 업로드할 때, 이미지의 특정 부분에 모자이크를 처리하고 싶은 경우가 있을 텐데요,
paint.net을 사용하면 이미지를 금방 가공할 수 있습니다.&lt;/p>
&lt;h2 id="순서">순서
&lt;/h2>&lt;h4 id="1-모자이크-처리를-할-이미지를-paintnet에서-열기">1. 모자이크 처리를 할 이미지를 paint.net에서 열기
&lt;/h4>&lt;h4 id="2-선택-도구를-사용하여-모자이크할-부분을-선택하기-다중-선택-가능">2. 선택 도구를 사용하여 모자이크할 부분을 선택하기 (다중 선택 가능)
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png"
width="380"
height="344"
srcset="http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hub2f9dbafba1021c88614fe95fc580d3f_11592_480x0_resize_box_3.png 480w, http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hub2f9dbafba1021c88614fe95fc580d3f_11592_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="110"
data-flex-basis="265px"
>&lt;/p>
&lt;h4 id="3-메뉴--효과--왜곡--모자이크-선택">3. 메뉴 ＞ 효과 ＞ 왜곡 ＞ 모자이크 선택
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="347"
height="197"
srcset="http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu9217e3f3ef9abeb3d05f81497cc9e2c6_7552_480x0_resize_box_3.png 480w, http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu9217e3f3ef9abeb3d05f81497cc9e2c6_7552_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="176"
data-flex-basis="422px"
>&lt;/p>
&lt;ul>
&lt;li>셀 크기로 모자이크 처리의 거칠기를 설정합니다. 수치가 클수록 은닉성이 높아집니다.&lt;/li>
&lt;li>[축소]&lt;code>멀티샘플 바이리니어법&lt;/code>을 선택&lt;/li>
&lt;li>[확대]&lt;code>최근접 이웃법&lt;/code>을 선택&lt;/li>
&lt;/ul>
&lt;p>&lt;code>OK&lt;/code>로 대화 상자를 닫습니다.&lt;/p>
&lt;h4 id="4-이미지에-모자이크-처리가-되므로-이미지를-저장합니다">4. 이미지에 모자이크 처리가 되므로, 이미지를 저장합니다.
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img.png"
width="380"
height="344"
srcset="http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_huffa96a6cc9046fae85e7535d0c0f77f3_7385_480x0_resize_box_3.png 480w, http://kenji.blog/p/paint.net%E3%81%A7%E7%94%BB%E5%83%8F%E3%81%AE%E7%89%B9%E5%AE%9A%E5%80%8B%E6%89%80%E3%81%AB%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF%E3%82%92%E3%81%8B%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_huffa96a6cc9046fae85e7535d0c0f77f3_7385_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="110"
data-flex-basis="265px"
>&lt;/p>
&lt;p>이상.&lt;/p></description></item><item><title>paint.net을 사용하여 이미지에 테두리를 넣는 방법</title><link>http://kenji.blog/ko/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Tue, 11 Apr 2023 14:31:59 +0900</pubDate><guid>http://kenji.blog/ko/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_3.png" alt="Featured image of post paint.net을 사용하여 이미지에 테두리를 넣는 방법" />&lt;p>paint.net을 사용하여 이미지에 테두리를 넣는 방법을 소개합니다.&lt;/p>
&lt;h2 id="절차">절차
&lt;/h2>&lt;h4 id="1-테두리를-넣을-이미지를-paintnet으로-엽니다">1. 테두리를 넣을 이미지를 paint.net으로 엽니다
&lt;/h4>&lt;h4 id="2-보조-색상을-설정합니다-이것이-테두리-색상이-됩니다">2. 보조 색상을 설정합니다 (이것이 테두리 색상이 됩니다)
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img.png"
width="211"
height="249"
srcset="http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_hua62af0f7d67e0ed0c246e20a82fe1998_44893_480x0_resize_box_3.png 480w, http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_hua62af0f7d67e0ed0c246e20a82fe1998_44893_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="84"
data-flex-basis="203px"
>&lt;/p>
&lt;p>색상 팔레트가 표시되지 않는 경우, 키보드의 &lt;code>F8&lt;/code> 키를 누르세요.&lt;/p>
&lt;p>검은색으로 설정하려면 &lt;img src="http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="15"
height="13"
srcset="http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_1_huaca51541d504c6afa3b8c1f00eff82f6_257_480x0_resize_box_3.png 480w, http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_1_huaca51541d504c6afa3b8c1f00eff82f6_257_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="115"
data-flex-basis="276px"
>을 클릭하세요.&lt;/p>
&lt;h4 id="3-메뉴이미지캔버스-크기-변경을-선택">3. 메뉴＞이미지＞캔버스 크기 변경을 선택
&lt;/h4>&lt;p>&lt;img src="http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png"
width="277"
height="467"
srcset="http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_2_huc4c336e94d4deff61f9c52eb8a834089_23405_480x0_resize_box_3.png 480w, http://kenji.blog/p/paint.net%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%94%BB%E5%83%8F%E3%81%AB%E6%9E%A0%E7%B7%9A%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img_2_huc4c336e94d4deff61f9c52eb8a834089_23405_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="59"
data-flex-basis="142px"
>&lt;/p>
&lt;p>너비와 높이를 각각 2픽셀씩 늘립니다. 2픽셀을 늘리면 테두리가 1픽셀이 됩니다.
테두리를 5픽셀로 설정하고 싶은 경우, 너비와 높이를 각각 10픽셀씩 늘립니다.&lt;/p>
&lt;p>앵커는 &amp;lsquo;가운데&amp;rsquo;를 선택하고, OK를 클릭합니다.&lt;/p>
&lt;h4 id="4-이미지에-테두리가-추가되면-이미지를-저장합니다">4. 이미지에 테두리가 추가되면, 이미지를 저장합니다.
&lt;/h4>&lt;p>이상.&lt;/p></description></item><item><title>Google 애널리틱스에서 인기 페이지 랭킹을 가져와 배치하는 방법</title><link>http://kenji.blog/ko/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Mon, 10 Apr 2023 20:26:57 +0900</pubDate><guid>http://kenji.blog/ko/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Google 애널리틱스에서 인기 페이지 랭킹을 가져와 배치하는 방법" />&lt;h2 id="시작하며">시작하며
&lt;/h2>&lt;p>&lt;code>Ranklet&lt;/code>이라는 서비스를 사용하면 Google 애널리틱스에서 인기 페이지 랭킹을 가져와 쉽게 배치할 수 있습니다.&lt;/p>
&lt;p>이 글에서는 HUGO 블로그에 배치하는 방법을 소개합니다.&lt;/p>
&lt;h2 id="동작-이미지">동작 이미지
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="769"
height="759"
srcset="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu717de7196f67be0249dafd2187915cbc_172896_480x0_resize_box_3.png 480w, http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu717de7196f67be0249dafd2187915cbc_172896_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="101"
data-flex-basis="243px"
>&lt;/p>
&lt;h2 id="준비">준비
&lt;/h2>&lt;ul>
&lt;li>사이트에 Google 애널리틱스가 설정되어 있을 것&lt;/li>
&lt;/ul>
&lt;h2 id="절차">절차
&lt;/h2>&lt;ol>
&lt;li>&lt;code>Ranklet&lt;/code>에 접속합니다.&lt;/li>
&lt;li>&lt;code>Sign in with Google&lt;/code>을 클릭하여 Google 계정으로 로그인합니다 (Google 애널리틱스 계정과 연결되어 있어야 합니다).
&lt;img src="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png"
width="478"
height="834"
srcset="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hufd6a9cea0728a6881e82fafb17789865_36794_480x0_resize_box_3.png 480w, http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hufd6a9cea0728a6881e82fafb17789865_36794_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="57"
data-flex-basis="137px"
>&lt;/li>
&lt;/ol>
&lt;p>&lt;code>허용&lt;/code>을 클릭&lt;/p>
&lt;ol start="3">
&lt;li>기본 정보를 설정합니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3.png"
width="669"
height="849"
srcset="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hu8c23b62b71c084f37537f97908add2df_53340_480x0_resize_box_3.png 480w, http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hu8c23b62b71c084f37537f97908add2df_53340_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="78"
data-flex-basis="189px"
>
위와 같이 설정했습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;code>Google Analytics 뷰&lt;/code>에서는 랭킹을 가져오고 싶은 뷰를 선택합니다.&lt;/li>
&lt;/ul>
&lt;ol start="4">
&lt;li>텍스트 치환을 설정합니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4.png"
width="663"
height="359"
srcset="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4_hu31425455692dc059183478d4c88b4e60_14253_480x0_resize_box_3.png 480w, http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4_hu31425455692dc059183478d4c88b4e60_14253_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="184"
data-flex-basis="443px"
>
위와 같이 설정했습니다.
페이지 제목의 &lt;code> | kenji.blog&lt;/code>를 삭제하기 위해 설정했습니다.&lt;/p>
&lt;ol start="5">
&lt;li>템플릿을 설정합니다.&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>HTML (랭킹 숫자를 숨겼습니다)&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet ranklet-reset&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">table&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-table&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">tbody&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-pages&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{#context.pages}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">tr&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-page&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">td&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-image&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{#image}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">a&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;{{url}}&amp;#34;&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-link&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">img&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-img&amp;#34;&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;{{image}}&amp;#34;&lt;/span> &lt;span class="p">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">a&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{/image}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">td&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">td&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-meta&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-title&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">a&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;{{url}}&amp;#34;&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-link&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{title}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">a&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{#description}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-description&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">a&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;{{url}}&amp;#34;&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-link&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{description}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">a&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{/description}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">td&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">tr&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{/context.pages}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">tbody&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">table&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>CSS (폰트 크기를 변경하고, 설명문이 3줄로 표시되도록 했습니다)&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="cl">&lt;span class="p">#&lt;/span>&lt;span class="nn">ranklet-&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="err">{context.id&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="err">}&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">.ranklet-reset&lt;/span> &lt;span class="err">{&lt;/span> &lt;span class="err">//&lt;/span> &lt;span class="err">리셋&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">table,&lt;/span> &lt;span class="err">tr,&lt;/span> &lt;span class="err">td,&lt;/span> &lt;span class="err">div,&lt;/span> &lt;span class="err">span&lt;/span> &lt;span class="err">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">margin&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">padding&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">border&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">font-size&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="kt">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">font&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">inherit&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">vertical-align&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">baseline&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">line-height&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">box-sizing&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">border-box&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nc">ranklet-table&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">border-collapse&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">separate&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">border-spacing&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="kt">px&lt;/span> &lt;span class="mi">24&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">width&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="kt">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">word-break&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">break-all&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">td&lt;/span> &lt;span class="err">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">vertical-align&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">middle&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nc">ranklet-rank&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">text-align&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">center&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">font-size&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">120&lt;/span>&lt;span class="kt">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nc">ranklet-image&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">text-align&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">center&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">img&lt;/span> &lt;span class="err">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">max-width&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">128&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">max-height&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">128&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nc">ranklet-meta&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">.ranklet-title&lt;/span> &lt;span class="err">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">font-size&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">line-height&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">125&lt;/span>&lt;span class="kt">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nc">ranklet-description&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">font-size&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">margin-top&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">line-height&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">125&lt;/span>&lt;span class="kt">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">display&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kp">-webkit-&lt;/span>&lt;span class="n">box&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">overflow&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">hidden&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kp">-webkit-&lt;/span>&lt;span class="n">box-orient&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">vertical&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kp">-webkit-&lt;/span>&lt;span class="n">line-clamp&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c">/* 줄 수 */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>JavaScript는 변경 없음&lt;/li>
&lt;/ul>
&lt;ol start="6">
&lt;li>사이트 게재에서 HTML을 복사합니다.&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_5.png"
width="1136"
height="210"
srcset="http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_5_hu69f0184a74d22d1d54f42ee4dc3de643_22304_480x0_resize_box_3.png 480w, http://kenji.blog/p/google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E3%81%8B%E3%82%89%E4%BA%BA%E6%B0%97%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_5_hu69f0184a74d22d1d54f42ee4dc3de643_22304_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="540"
data-flex-basis="1298px"
>&lt;/p>
&lt;p>표시된 HTML을 복사합니다.&lt;/p>
&lt;ol start="7">
&lt;li>HUGO 템플릿에 붙여넣습니다.&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>&lt;code>layouts/partials/ranklet.html&lt;/code>을 생성하고, 복사한 HTML을 붙여넣습니다.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">id&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;ranklet-11958&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;//widget.ranklet.com/v1/ranklet/s3/widgets/11958/widget.js&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>&lt;code>layouts/_default/single.html&lt;/code>의 &lt;code>&amp;lt;/footer&amp;gt;&lt;/code> 앞 줄에 아래 코드를 붙여넣습니다.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">{{- partial &amp;#34;ranklet.html&amp;#34; . }}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이상입니다. 이제 이 페이지 아래와 같이 랭킹이 표시됩니다.&lt;/p></description></item><item><title>【언어별】 온라인 코드 실행 환경 정리</title><link>http://kenji.blog/ko/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Sun, 09 Apr 2023 14:01:00 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%BE%E3%81%A8%E3%82%81/img.png" alt="Featured image of post 【언어별】 온라인 코드 실행 환경 정리" />&lt;h2 id="python">Python
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://colab.research.google.com/#create=true" target="_blank" rel="noopener"
>Google Colaboratory&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Google Colaboratory(콜라보래토리)란, 온라인상에서 실행 가능한 Python 실행 환경.&lt;/p>
&lt;ul>
&lt;li>GPU 이용도 가능.&lt;/li>
&lt;li>Colab 노트북을 사용하면 실행 가능한 코드와 리치 텍스트(이미지, HTML, LaTeX 등도 가능)를 하나의 문서로 작성 가능.&lt;/li>
&lt;/ul>
&lt;p>Jupyter Notebook을 기반으로 하고 있다.&lt;/p>
&lt;h2 id="rust">Rust
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://play.rust-lang.org/?version=stable&amp;amp;mode=debug&amp;amp;edition=2021" target="_blank" rel="noopener"
>Rust Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="javascript">JavaScript
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://playcode.io/" target="_blank" rel="noopener"
>Javascript Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="java">Java
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://paiza.io/ja/projects/new?language=java" target="_blank" rel="noopener"
>paiza.IO Online Java compiler&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="haskell">Haskell
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://play.haskell.org/" target="_blank" rel="noopener"
>Haskell Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="swift">Swift
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://online.swiftplayground.run/" target="_blank" rel="noopener"
>Online Swift Playground&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="c">C++
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://www.onlinegdb.com/online_c&amp;#43;&amp;#43;_compiler" target="_blank" rel="noopener"
>C++ 14&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="기타">기타
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://aws.amazon.com/jp/cloud9/" target="_blank" rel="noopener"
>AWS Cloud9&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Amazon AWS에서 제공하는 온라인 통합 개발 환경. Node.js, JavaScript, Python, PHP, Ruby, Go, C++ 등 40개가 넘는 프로그래밍 언어용 도구가 미리 패키징되어 있습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://vscode.dev/" target="_blank" rel="noopener"
>Visual Studio Code for the Web&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Microsoft에서 제공하는 온라인 개발 환경. 단, 컴파일이 필요한 언어는 실행이나 디버깅을 할 수 없다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://paiza.io/projects/CGAcQLfW-IOXYy8Dq2OHBw?locale=ja-jp" target="_blank" rel="noopener"
>paiza.IO&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>C, C++, Java, Ruby, Python, PHP, Perl 등 주요 24개 언어를 지원하는 온라인 실행 환경.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://codepen.io/" target="_blank" rel="noopener"
>CodePen&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>HTML, CSS, JavaScript의 온라인 실행 환경.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://codeanywhere.com/" target="_blank" rel="noopener"
>codeanywhere&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>온라인 IDE. 코드 공유나 채팅을 할 수 있다.&lt;/p></description></item><item><title>'에라토스테네스의 체를 사용하여 1000 이하의 소수를 나열하는 방법'</title><link>http://kenji.blog/ko/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 09 Apr 2023 12:54:24 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post '에라토스테네스의 체를 사용하여 1000 이하의 소수를 나열하는 방법'" />&lt;h2 id="에라토스테네스의-체란">에라토스테네스의 체란
&lt;/h2>&lt;p>에라토스테네스의 체는 어떤 수 이하의 소수를 나열하는 알고리즘입니다.
알고리즘은 단순하며, 다음 절차로 구현할 수 있습니다.&lt;/p>
&lt;ol>
&lt;li>N개의 요소를 가진 bool 값 배열을 만들고, 모든 요소를 true로 초기화한다&lt;/li>
&lt;li>배열의 0번째와 1번째 요소를 false로 한다(0과 1은 소수가 아니기 때문)&lt;/li>
&lt;li>배열의 2번째 요소가 true라면, 2를 소수로 출력한다&lt;/li>
&lt;li>배열의 $2^2$ 이상의 2의 배수 번째 요소를 모두 false로 한다※&lt;/li>
&lt;li>배열의 3번째 요소가 true라면, 3을 소수로 출력한다&lt;/li>
&lt;li>배열의 $3^2$ 이상의 3의 배수 번째 요소를 모두 false로 한다&lt;/li>
&lt;li>4번째, 5번째, &amp;hellip;, N번째 요소에 대해 동일한 처리를 반복한다&lt;/li>
&lt;/ol>
&lt;p>※ 2제곱 이상의 요소를 false의 대상으로 하는 이유는, 2제곱보다 작은 수에 대해서는 이미 처리가 완료되었기(나열이 완료되었기) 때문입니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/Animation_Sieb_des_Eratosthenes.gif"
width="445"
height="369"
srcset="http://kenji.blog/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/Animation_Sieb_des_Eratosthenes_hua63c6218ac9f9cdba93ccb20db392e0e_206214_480x0_resize_box_1.gif 480w, http://kenji.blog/p/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A61000%E4%BB%A5%E4%B8%8B%E3%81%AE%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/Animation_Sieb_des_Eratosthenes_hua63c6218ac9f9cdba93ccb20db392e0e_206214_1024x0_resize_box_1.gif 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="120"
data-flex-basis="289px"
>&lt;/p>
&lt;h2 id="rust에서의-구현">Rust에서의 구현
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">fn main() {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let n = 1000;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let mut is_prime = vec![true; n+1];
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[0] = false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[1] = false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> for i in 2..=n {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> if is_prime[i] {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> println!(&amp;#34;{}&amp;#34;, i);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let mut j = i * i;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> while j &amp;lt;= n {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[j] = false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> j += i;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="조금-더-고속화된-버전">조금 더 고속화된 버전
&lt;/h2>&lt;p>다음 사항을 고려하여, 조금 더 고속화된 구현을 수행합니다.&lt;/p>
&lt;ul>
&lt;li>배열을 true로 초기화하는 것이 아니라, false로 초기화한다 (이 편이 더 고속)&lt;/li>
&lt;li>2의 배수는 소수가 아니므로, 2의 배수 요소를 false로 하는 처리를 생략&lt;/li>
&lt;li>n까지 루프를 돌 필요 없이, n의 제곱근까지의 소수를 나열하면, n 이하의 소수를 나열할 수 있다&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">fn main() {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let n = 1000;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let mut is_prime = vec![false; n+1];
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[2] = true;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> for i in (3..=n).step_by(2) {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[i] = true;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> for i in 3..=((n as f64).sqrt() as usize) {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> if is_prime[i] {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> let mut j = i * i;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> while j &amp;lt;= n {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> is_prime[j] = false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> j += i * 2;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> for i in (2..=n).filter(|&amp;amp;x| is_prime[x]) {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> println!(&amp;#34;{}&amp;#34;, i);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9" target="_blank" rel="noopener"
>에라토스테네스의 체&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>mac에 CocoaPods를 설치하는 방법</title><link>http://kenji.blog/ko/p/mac%E3%81%ABcocoapods%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 09 Apr 2023 03:25:54 +0900</pubDate><guid>http://kenji.blog/ko/p/mac%E3%81%ABcocoapods%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/mac%E3%81%ABcocoapods%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png" alt="Featured image of post mac에 CocoaPods를 설치하는 방법" />&lt;h1 id="터미널에서-설치">터미널에서 설치
&lt;/h1>&lt;ol>
&lt;li>터미널 열기&lt;/li>
&lt;li>&lt;code>sudo gem install cocoapods&lt;/code> 실행
→ 어째서인지 아래와 같은 에러 메시지가 나오며 설치에 실패했다.&lt;/li>
&lt;/ol>
&lt;details>
&lt;summary>출력&lt;/summary>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ERROR: Error installing cocoapods:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> The last version of activesupport (&amp;gt;= 5.0, &amp;lt; 8) to support your Ruby &amp;amp; RubyGems was 6.1.7.3. Try installing it with `gem install activesupport -v 6.1.7.3` and then running the current command again
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> activesupport requires Ruby version &amp;gt;= 2.7.0. The current ruby version is 2.6.10.210.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/details>
&lt;ol start="3">
&lt;li>그래서 에러 메시지를 웹에서 검색해서 (아래 &amp;lsquo;참고&amp;rsquo;를 참조), 다음 명령어를 실행했다&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">/bin/bash -c &amp;#34;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;details>
&lt;summary>출력&lt;/summary>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt"> 10
&lt;/span>&lt;span class="lnt"> 11
&lt;/span>&lt;span class="lnt"> 12
&lt;/span>&lt;span class="lnt"> 13
&lt;/span>&lt;span class="lnt"> 14
&lt;/span>&lt;span class="lnt"> 15
&lt;/span>&lt;span class="lnt"> 16
&lt;/span>&lt;span class="lnt"> 17
&lt;/span>&lt;span class="lnt"> 18
&lt;/span>&lt;span class="lnt"> 19
&lt;/span>&lt;span class="lnt"> 20
&lt;/span>&lt;span class="lnt"> 21
&lt;/span>&lt;span class="lnt"> 22
&lt;/span>&lt;span class="lnt"> 23
&lt;/span>&lt;span class="lnt"> 24
&lt;/span>&lt;span class="lnt"> 25
&lt;/span>&lt;span class="lnt"> 26
&lt;/span>&lt;span class="lnt"> 27
&lt;/span>&lt;span class="lnt"> 28
&lt;/span>&lt;span class="lnt"> 29
&lt;/span>&lt;span class="lnt"> 30
&lt;/span>&lt;span class="lnt"> 31
&lt;/span>&lt;span class="lnt"> 32
&lt;/span>&lt;span class="lnt"> 33
&lt;/span>&lt;span class="lnt"> 34
&lt;/span>&lt;span class="lnt"> 35
&lt;/span>&lt;span class="lnt"> 36
&lt;/span>&lt;span class="lnt"> 37
&lt;/span>&lt;span class="lnt"> 38
&lt;/span>&lt;span class="lnt"> 39
&lt;/span>&lt;span class="lnt"> 40
&lt;/span>&lt;span class="lnt"> 41
&lt;/span>&lt;span class="lnt"> 42
&lt;/span>&lt;span class="lnt"> 43
&lt;/span>&lt;span class="lnt"> 44
&lt;/span>&lt;span class="lnt"> 45
&lt;/span>&lt;span class="lnt"> 46
&lt;/span>&lt;span class="lnt"> 47
&lt;/span>&lt;span class="lnt"> 48
&lt;/span>&lt;span class="lnt"> 49
&lt;/span>&lt;span class="lnt"> 50
&lt;/span>&lt;span class="lnt"> 51
&lt;/span>&lt;span class="lnt"> 52
&lt;/span>&lt;span class="lnt"> 53
&lt;/span>&lt;span class="lnt"> 54
&lt;/span>&lt;span class="lnt"> 55
&lt;/span>&lt;span class="lnt"> 56
&lt;/span>&lt;span class="lnt"> 57
&lt;/span>&lt;span class="lnt"> 58
&lt;/span>&lt;span class="lnt"> 59
&lt;/span>&lt;span class="lnt"> 60
&lt;/span>&lt;span class="lnt"> 61
&lt;/span>&lt;span class="lnt"> 62
&lt;/span>&lt;span class="lnt"> 63
&lt;/span>&lt;span class="lnt"> 64
&lt;/span>&lt;span class="lnt"> 65
&lt;/span>&lt;span class="lnt"> 66
&lt;/span>&lt;span class="lnt"> 67
&lt;/span>&lt;span class="lnt"> 68
&lt;/span>&lt;span class="lnt"> 69
&lt;/span>&lt;span class="lnt"> 70
&lt;/span>&lt;span class="lnt"> 71
&lt;/span>&lt;span class="lnt"> 72
&lt;/span>&lt;span class="lnt"> 73
&lt;/span>&lt;span class="lnt"> 74
&lt;/span>&lt;span class="lnt"> 75
&lt;/span>&lt;span class="lnt"> 76
&lt;/span>&lt;span class="lnt"> 77
&lt;/span>&lt;span class="lnt"> 78
&lt;/span>&lt;span class="lnt"> 79
&lt;/span>&lt;span class="lnt"> 80
&lt;/span>&lt;span class="lnt"> 81
&lt;/span>&lt;span class="lnt"> 82
&lt;/span>&lt;span class="lnt"> 83
&lt;/span>&lt;span class="lnt"> 84
&lt;/span>&lt;span class="lnt"> 85
&lt;/span>&lt;span class="lnt"> 86
&lt;/span>&lt;span class="lnt"> 87
&lt;/span>&lt;span class="lnt"> 88
&lt;/span>&lt;span class="lnt"> 89
&lt;/span>&lt;span class="lnt"> 90
&lt;/span>&lt;span class="lnt"> 91
&lt;/span>&lt;span class="lnt"> 92
&lt;/span>&lt;span class="lnt"> 93
&lt;/span>&lt;span class="lnt"> 94
&lt;/span>&lt;span class="lnt"> 95
&lt;/span>&lt;span class="lnt"> 96
&lt;/span>&lt;span class="lnt"> 97
&lt;/span>&lt;span class="lnt"> 98
&lt;/span>&lt;span class="lnt"> 99
&lt;/span>&lt;span class="lnt">100
&lt;/span>&lt;span class="lnt">101
&lt;/span>&lt;span class="lnt">102
&lt;/span>&lt;span class="lnt">103
&lt;/span>&lt;span class="lnt">104
&lt;/span>&lt;span class="lnt">105
&lt;/span>&lt;span class="lnt">106
&lt;/span>&lt;span class="lnt">107
&lt;/span>&lt;span class="lnt">108
&lt;/span>&lt;span class="lnt">109
&lt;/span>&lt;span class="lnt">110
&lt;/span>&lt;span class="lnt">111
&lt;/span>&lt;span class="lnt">112
&lt;/span>&lt;span class="lnt">113
&lt;/span>&lt;span class="lnt">114
&lt;/span>&lt;span class="lnt">115
&lt;/span>&lt;span class="lnt">116
&lt;/span>&lt;span class="lnt">117
&lt;/span>&lt;span class="lnt">118
&lt;/span>&lt;span class="lnt">119
&lt;/span>&lt;span class="lnt">120
&lt;/span>&lt;span class="lnt">121
&lt;/span>&lt;span class="lnt">122
&lt;/span>&lt;span class="lnt">123
&lt;/span>&lt;span class="lnt">124
&lt;/span>&lt;span class="lnt">125
&lt;/span>&lt;span class="lnt">126
&lt;/span>&lt;span class="lnt">127
&lt;/span>&lt;span class="lnt">128
&lt;/span>&lt;span class="lnt">129
&lt;/span>&lt;span class="lnt">130
&lt;/span>&lt;span class="lnt">131
&lt;/span>&lt;span class="lnt">132
&lt;/span>&lt;span class="lnt">133
&lt;/span>&lt;span class="lnt">134
&lt;/span>&lt;span class="lnt">135
&lt;/span>&lt;span class="lnt">136
&lt;/span>&lt;span class="lnt">137
&lt;/span>&lt;span class="lnt">138
&lt;/span>&lt;span class="lnt">139
&lt;/span>&lt;span class="lnt">140
&lt;/span>&lt;span class="lnt">141
&lt;/span>&lt;span class="lnt">142
&lt;/span>&lt;span class="lnt">143
&lt;/span>&lt;span class="lnt">144
&lt;/span>&lt;span class="lnt">145
&lt;/span>&lt;span class="lnt">146
&lt;/span>&lt;span class="lnt">147
&lt;/span>&lt;span class="lnt">148
&lt;/span>&lt;span class="lnt">149
&lt;/span>&lt;span class="lnt">150
&lt;/span>&lt;span class="lnt">151
&lt;/span>&lt;span class="lnt">152
&lt;/span>&lt;span class="lnt">153
&lt;/span>&lt;span class="lnt">154
&lt;/span>&lt;span class="lnt">155
&lt;/span>&lt;span class="lnt">156
&lt;/span>&lt;span class="lnt">157
&lt;/span>&lt;span class="lnt">158
&lt;/span>&lt;span class="lnt">159
&lt;/span>&lt;span class="lnt">160
&lt;/span>&lt;span class="lnt">161
&lt;/span>&lt;span class="lnt">162
&lt;/span>&lt;span class="lnt">163
&lt;/span>&lt;span class="lnt">164
&lt;/span>&lt;span class="lnt">165
&lt;/span>&lt;span class="lnt">166
&lt;/span>&lt;span class="lnt">167
&lt;/span>&lt;span class="lnt">168
&lt;/span>&lt;span class="lnt">169
&lt;/span>&lt;span class="lnt">170
&lt;/span>&lt;span class="lnt">171
&lt;/span>&lt;span class="lnt">172
&lt;/span>&lt;span class="lnt">173
&lt;/span>&lt;span class="lnt">174
&lt;/span>&lt;span class="lnt">175
&lt;/span>&lt;span class="lnt">176
&lt;/span>&lt;span class="lnt">177
&lt;/span>&lt;span class="lnt">178
&lt;/span>&lt;span class="lnt">179
&lt;/span>&lt;span class="lnt">180
&lt;/span>&lt;span class="lnt">181
&lt;/span>&lt;span class="lnt">182
&lt;/span>&lt;span class="lnt">183
&lt;/span>&lt;span class="lnt">184
&lt;/span>&lt;span class="lnt">185
&lt;/span>&lt;span class="lnt">186
&lt;/span>&lt;span class="lnt">187
&lt;/span>&lt;span class="lnt">188
&lt;/span>&lt;span class="lnt">189
&lt;/span>&lt;span class="lnt">190
&lt;/span>&lt;span class="lnt">191
&lt;/span>&lt;span class="lnt">192
&lt;/span>&lt;span class="lnt">193
&lt;/span>&lt;span class="lnt">194
&lt;/span>&lt;span class="lnt">195
&lt;/span>&lt;span class="lnt">196
&lt;/span>&lt;span class="lnt">197
&lt;/span>&lt;span class="lnt">198
&lt;/span>&lt;span class="lnt">199
&lt;/span>&lt;span class="lnt">200
&lt;/span>&lt;span class="lnt">201
&lt;/span>&lt;span class="lnt">202
&lt;/span>&lt;span class="lnt">203
&lt;/span>&lt;span class="lnt">204
&lt;/span>&lt;span class="lnt">205
&lt;/span>&lt;span class="lnt">206
&lt;/span>&lt;span class="lnt">207
&lt;/span>&lt;span class="lnt">208
&lt;/span>&lt;span class="lnt">209
&lt;/span>&lt;span class="lnt">210
&lt;/span>&lt;span class="lnt">211
&lt;/span>&lt;span class="lnt">212
&lt;/span>&lt;span class="lnt">213
&lt;/span>&lt;span class="lnt">214
&lt;/span>&lt;span class="lnt">215
&lt;/span>&lt;span class="lnt">216
&lt;/span>&lt;span class="lnt">217
&lt;/span>&lt;span class="lnt">218
&lt;/span>&lt;span class="lnt">219
&lt;/span>&lt;span class="lnt">220
&lt;/span>&lt;span class="lnt">221
&lt;/span>&lt;span class="lnt">222
&lt;/span>&lt;span class="lnt">223
&lt;/span>&lt;span class="lnt">224
&lt;/span>&lt;span class="lnt">225
&lt;/span>&lt;span class="lnt">226
&lt;/span>&lt;span class="lnt">227
&lt;/span>&lt;span class="lnt">228
&lt;/span>&lt;span class="lnt">229
&lt;/span>&lt;span class="lnt">230
&lt;/span>&lt;span class="lnt">231
&lt;/span>&lt;span class="lnt">232
&lt;/span>&lt;span class="lnt">233
&lt;/span>&lt;span class="lnt">234
&lt;/span>&lt;span class="lnt">235
&lt;/span>&lt;span class="lnt">236
&lt;/span>&lt;span class="lnt">237
&lt;/span>&lt;span class="lnt">238
&lt;/span>&lt;span class="lnt">239
&lt;/span>&lt;span class="lnt">240
&lt;/span>&lt;span class="lnt">241
&lt;/span>&lt;span class="lnt">242
&lt;/span>&lt;span class="lnt">243
&lt;/span>&lt;span class="lnt">244
&lt;/span>&lt;span class="lnt">245
&lt;/span>&lt;span class="lnt">246
&lt;/span>&lt;span class="lnt">247
&lt;/span>&lt;span class="lnt">248
&lt;/span>&lt;span class="lnt">249
&lt;/span>&lt;span class="lnt">250
&lt;/span>&lt;span class="lnt">251
&lt;/span>&lt;span class="lnt">252
&lt;/span>&lt;span class="lnt">253
&lt;/span>&lt;span class="lnt">254
&lt;/span>&lt;span class="lnt">255
&lt;/span>&lt;span class="lnt">256
&lt;/span>&lt;span class="lnt">257
&lt;/span>&lt;span class="lnt">258
&lt;/span>&lt;span class="lnt">259
&lt;/span>&lt;span class="lnt">260
&lt;/span>&lt;span class="lnt">261
&lt;/span>&lt;span class="lnt">262
&lt;/span>&lt;span class="lnt">263
&lt;/span>&lt;span class="lnt">264
&lt;/span>&lt;span class="lnt">265
&lt;/span>&lt;span class="lnt">266
&lt;/span>&lt;span class="lnt">267
&lt;/span>&lt;span class="lnt">268
&lt;/span>&lt;span class="lnt">269
&lt;/span>&lt;span class="lnt">270
&lt;/span>&lt;span class="lnt">271
&lt;/span>&lt;span class="lnt">272
&lt;/span>&lt;span class="lnt">273
&lt;/span>&lt;span class="lnt">274
&lt;/span>&lt;span class="lnt">275
&lt;/span>&lt;span class="lnt">276
&lt;/span>&lt;span class="lnt">277
&lt;/span>&lt;span class="lnt">278
&lt;/span>&lt;span class="lnt">279
&lt;/span>&lt;span class="lnt">280
&lt;/span>&lt;span class="lnt">281
&lt;/span>&lt;span class="lnt">282
&lt;/span>&lt;span class="lnt">283
&lt;/span>&lt;span class="lnt">284
&lt;/span>&lt;span class="lnt">285
&lt;/span>&lt;span class="lnt">286
&lt;/span>&lt;span class="lnt">287
&lt;/span>&lt;span class="lnt">288
&lt;/span>&lt;span class="lnt">289
&lt;/span>&lt;span class="lnt">290
&lt;/span>&lt;span class="lnt">291
&lt;/span>&lt;span class="lnt">292
&lt;/span>&lt;span class="lnt">293
&lt;/span>&lt;span class="lnt">294
&lt;/span>&lt;span class="lnt">295
&lt;/span>&lt;span class="lnt">296
&lt;/span>&lt;span class="lnt">297
&lt;/span>&lt;span class="lnt">298
&lt;/span>&lt;span class="lnt">299
&lt;/span>&lt;span class="lnt">300
&lt;/span>&lt;span class="lnt">301
&lt;/span>&lt;span class="lnt">302
&lt;/span>&lt;span class="lnt">303
&lt;/span>&lt;span class="lnt">304
&lt;/span>&lt;span class="lnt">305
&lt;/span>&lt;span class="lnt">306
&lt;/span>&lt;span class="lnt">307
&lt;/span>&lt;span class="lnt">308
&lt;/span>&lt;span class="lnt">309
&lt;/span>&lt;span class="lnt">310
&lt;/span>&lt;span class="lnt">311
&lt;/span>&lt;span class="lnt">312
&lt;/span>&lt;span class="lnt">313
&lt;/span>&lt;span class="lnt">314
&lt;/span>&lt;span class="lnt">315
&lt;/span>&lt;span class="lnt">316
&lt;/span>&lt;span class="lnt">317
&lt;/span>&lt;span class="lnt">318
&lt;/span>&lt;span class="lnt">319
&lt;/span>&lt;span class="lnt">320
&lt;/span>&lt;span class="lnt">321
&lt;/span>&lt;span class="lnt">322
&lt;/span>&lt;span class="lnt">323
&lt;/span>&lt;span class="lnt">324
&lt;/span>&lt;span class="lnt">325
&lt;/span>&lt;span class="lnt">326
&lt;/span>&lt;span class="lnt">327
&lt;/span>&lt;span class="lnt">328
&lt;/span>&lt;span class="lnt">329
&lt;/span>&lt;span class="lnt">330
&lt;/span>&lt;span class="lnt">331
&lt;/span>&lt;span class="lnt">332
&lt;/span>&lt;span class="lnt">333
&lt;/span>&lt;span class="lnt">334
&lt;/span>&lt;span class="lnt">335
&lt;/span>&lt;span class="lnt">336
&lt;/span>&lt;span class="lnt">337
&lt;/span>&lt;span class="lnt">338
&lt;/span>&lt;span class="lnt">339
&lt;/span>&lt;span class="lnt">340
&lt;/span>&lt;span class="lnt">341
&lt;/span>&lt;span class="lnt">342
&lt;/span>&lt;span class="lnt">343
&lt;/span>&lt;span class="lnt">344
&lt;/span>&lt;span class="lnt">345
&lt;/span>&lt;span class="lnt">346
&lt;/span>&lt;span class="lnt">347
&lt;/span>&lt;span class="lnt">348
&lt;/span>&lt;span class="lnt">349
&lt;/span>&lt;span class="lnt">350
&lt;/span>&lt;span class="lnt">351
&lt;/span>&lt;span class="lnt">352
&lt;/span>&lt;span class="lnt">353
&lt;/span>&lt;span class="lnt">354
&lt;/span>&lt;span class="lnt">355
&lt;/span>&lt;span class="lnt">356
&lt;/span>&lt;span class="lnt">357
&lt;/span>&lt;span class="lnt">358
&lt;/span>&lt;span class="lnt">359
&lt;/span>&lt;span class="lnt">360
&lt;/span>&lt;span class="lnt">361
&lt;/span>&lt;span class="lnt">362
&lt;/span>&lt;span class="lnt">363
&lt;/span>&lt;span class="lnt">364
&lt;/span>&lt;span class="lnt">365
&lt;/span>&lt;span class="lnt">366
&lt;/span>&lt;span class="lnt">367
&lt;/span>&lt;span class="lnt">368
&lt;/span>&lt;span class="lnt">369
&lt;/span>&lt;span class="lnt">370
&lt;/span>&lt;span class="lnt">371
&lt;/span>&lt;span class="lnt">372
&lt;/span>&lt;span class="lnt">373
&lt;/span>&lt;span class="lnt">374
&lt;/span>&lt;span class="lnt">375
&lt;/span>&lt;span class="lnt">376
&lt;/span>&lt;span class="lnt">377
&lt;/span>&lt;span class="lnt">378
&lt;/span>&lt;span class="lnt">379
&lt;/span>&lt;span class="lnt">380
&lt;/span>&lt;span class="lnt">381
&lt;/span>&lt;span class="lnt">382
&lt;/span>&lt;span class="lnt">383
&lt;/span>&lt;span class="lnt">384
&lt;/span>&lt;span class="lnt">385
&lt;/span>&lt;span class="lnt">386
&lt;/span>&lt;span class="lnt">387
&lt;/span>&lt;span class="lnt">388
&lt;/span>&lt;span class="lnt">389
&lt;/span>&lt;span class="lnt">390
&lt;/span>&lt;span class="lnt">391
&lt;/span>&lt;span class="lnt">392
&lt;/span>&lt;span class="lnt">393
&lt;/span>&lt;span class="lnt">394
&lt;/span>&lt;span class="lnt">395
&lt;/span>&lt;span class="lnt">396
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Checking&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="err">`&lt;/span>&lt;span class="n">sudo&lt;/span>&lt;span class="err">`&lt;/span> &lt;span class="n">access&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">which&lt;/span> &lt;span class="n">may&lt;/span> &lt;span class="n">request&lt;/span> &lt;span class="n">your&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">This&lt;/span> &lt;span class="n">script&lt;/span> &lt;span class="n">will&lt;/span> &lt;span class="n">install&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">brew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">doc&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">man&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">man1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">brew&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">site&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">functions&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">_brew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">etc&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bash_completion&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">brew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Homebrew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">The&lt;/span> &lt;span class="n">following&lt;/span> &lt;span class="n">new&lt;/span> &lt;span class="n">directories&lt;/span> &lt;span class="n">will&lt;/span> &lt;span class="n">be&lt;/span> &lt;span class="n">created&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">etc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">include&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">lib&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">opt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">site&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">functions&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">linked&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Caskroom&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Frameworks&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">The&lt;/span> &lt;span class="n">Xcode&lt;/span> &lt;span class="n">Command&lt;/span> &lt;span class="n">Line&lt;/span> &lt;span class="n">Tools&lt;/span> &lt;span class="n">will&lt;/span> &lt;span class="n">be&lt;/span> &lt;span class="n">installed&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Press&lt;/span> &lt;span class="n">RETURN&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ENTER&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="k">continue&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">any&lt;/span> &lt;span class="n">other&lt;/span> &lt;span class="n">key&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">abort&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">mkdir&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">etc&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">include&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">lib&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">opt&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">site&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">functions&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">linked&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Caskroom&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Frameworks&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">chmod&lt;/span> &lt;span class="n">ug&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">rwx&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">etc&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">include&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">lib&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">opt&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">site&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">functions&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">linked&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Caskroom&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Frameworks&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">chmod&lt;/span> &lt;span class="n">go&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">w&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">site&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">functions&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">chown&lt;/span> &lt;span class="n">kenji&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">etc&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">include&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">lib&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">opt&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">site&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">functions&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">linked&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Caskroom&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Frameworks&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">chgrp&lt;/span> &lt;span class="n">admin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">etc&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">include&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">lib&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">opt&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">share&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">zsh&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">site&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">functions&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">var&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">linked&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Caskroom&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Frameworks&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">mkdir&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Homebrew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">chown&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">R&lt;/span> &lt;span class="n">kenji&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">admin&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Homebrew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">mkdir&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">kenji&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Library&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Caches&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Homebrew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">chmod&lt;/span> &lt;span class="n">g&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">rwx&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">kenji&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Library&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Caches&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Homebrew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">chown&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">R&lt;/span> &lt;span class="n">kenji&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">kenji&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Library&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Caches&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Homebrew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Searching&lt;/span> &lt;span class="n">online&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">Command&lt;/span> &lt;span class="n">Line&lt;/span> &lt;span class="n">Tools&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">touch&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">tmp&lt;/span>&lt;span class="o">/.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">apple&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CommandLineTools&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">installondemand&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="ow">in&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">progress&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Installing&lt;/span> &lt;span class="n">Command&lt;/span> &lt;span class="n">Line&lt;/span> &lt;span class="n">Tools&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">Xcode&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">14.3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sbin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">softwareupdate&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="n">Command&lt;/span>\ &lt;span class="n">Line&lt;/span>\ &lt;span class="n">Tools&lt;/span>\ &lt;span class="k">for&lt;/span>\ &lt;span class="n">Xcode&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">14.3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Software&lt;/span> &lt;span class="n">Update&lt;/span> &lt;span class="n">Tool&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Finding&lt;/span> &lt;span class="n">available&lt;/span> &lt;span class="n">software&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Downloading&lt;/span> &lt;span class="n">Command&lt;/span> &lt;span class="n">Line&lt;/span> &lt;span class="n">Tools&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">Xcode&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Downloaded&lt;/span> &lt;span class="n">Command&lt;/span> &lt;span class="n">Line&lt;/span> &lt;span class="n">Tools&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">Xcode&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Installing&lt;/span> &lt;span class="n">Command&lt;/span> &lt;span class="n">Line&lt;/span> &lt;span class="n">Tools&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">Xcode&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Done&lt;/span> &lt;span class="n">with&lt;/span> &lt;span class="n">Command&lt;/span> &lt;span class="n">Line&lt;/span> &lt;span class="n">Tools&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">Xcode&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Done&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">xcode&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">select&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="k">switch&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">Library&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Developer&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">CommandLineTools&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sudo&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">bin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">rm&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">f&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">tmp&lt;/span>&lt;span class="o">/.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">apple&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CommandLineTools&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">installondemand&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="ow">in&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">progress&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">installing&lt;/span> &lt;span class="n">Homebrew&lt;/span>&lt;span class="o">...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">remote&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Enumerating&lt;/span> &lt;span class="n">objects&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">236191&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">done&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">remote&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Counting&lt;/span> &lt;span class="n">objects&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="o">%&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">504&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">504&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">done&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">remote&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Compressing&lt;/span> &lt;span class="n">objects&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="o">%&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">327&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">327&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">done&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">remote&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Total&lt;/span> &lt;span class="mi">236191&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">delta&lt;/span> &lt;span class="mi">176&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">reused&lt;/span> &lt;span class="mi">468&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">delta&lt;/span> &lt;span class="mi">158&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">pack&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">reused&lt;/span> &lt;span class="mi">235687&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Receiving&lt;/span> &lt;span class="n">objects&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="o">%&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">236191&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">236191&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mf">68.37&lt;/span> &lt;span class="n">MiB&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="mf">15.51&lt;/span> &lt;span class="n">MiB&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">done&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Resolving&lt;/span> &lt;span class="n">deltas&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="o">%&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">173058&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">173058&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">done&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">From&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">github&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">brew&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">branch&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">master&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">origin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">master&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">branch&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">test&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">runners&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="n">origin&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">test&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">runners&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">0.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">17&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">17&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.8&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">1.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">1.9&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">17&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">17&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">2.7&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">17&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">17&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.3&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.4&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">12&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">13&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">14&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">16&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">17&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">17&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">18&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">18&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">19&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">19&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">20&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">20&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">21&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">21&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">3.6&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">3&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">new&lt;/span> &lt;span class="n">tag&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span> &lt;span class="o">-&amp;gt;&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">HEAD&lt;/span> &lt;span class="n">is&lt;/span> &lt;span class="n">now&lt;/span> &lt;span class="n">at&lt;/span> &lt;span class="n">c51687009&lt;/span> &lt;span class="n">Merge&lt;/span> &lt;span class="n">pull&lt;/span> &lt;span class="n">request&lt;/span> &lt;span class="c1">#15168 from reitermarkus/api-ruby-source-path&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Installation&lt;/span> &lt;span class="n">successful&lt;/span>&lt;span class="o">!&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Homebrew&lt;/span> &lt;span class="n">has&lt;/span> &lt;span class="n">enabled&lt;/span> &lt;span class="n">anonymous&lt;/span> &lt;span class="n">aggregate&lt;/span> &lt;span class="n">formulae&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">cask&lt;/span> &lt;span class="n">analytics&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Read&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">analytics&lt;/span> &lt;span class="n">documentation&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="ow">and&lt;/span> &lt;span class="n">how&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">opt&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">out&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">here&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">docs&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">brew&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sh&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Analytics&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">No&lt;/span> &lt;span class="n">analytics&lt;/span> &lt;span class="n">data&lt;/span> &lt;span class="n">has&lt;/span> &lt;span class="n">been&lt;/span> &lt;span class="n">sent&lt;/span> &lt;span class="n">yet&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">nor&lt;/span> &lt;span class="n">will&lt;/span> &lt;span class="n">any&lt;/span> &lt;span class="n">be&lt;/span> &lt;span class="n">during&lt;/span> &lt;span class="n">this&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">run&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Homebrew&lt;/span> &lt;span class="n">is&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="n">entirely&lt;/span> &lt;span class="n">by&lt;/span> &lt;span class="n">unpaid&lt;/span> &lt;span class="n">volunteers&lt;/span>&lt;span class="o">.&lt;/span> &lt;span class="n">Please&lt;/span> &lt;span class="n">consider&lt;/span> &lt;span class="n">donating&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">github&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">brew&lt;/span>&lt;span class="c1">#donations&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Next&lt;/span> &lt;span class="n">steps&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">-&lt;/span> &lt;span class="n">Run&lt;/span> &lt;span class="n">these&lt;/span> &lt;span class="n">two&lt;/span> &lt;span class="n">commands&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">your&lt;/span> &lt;span class="n">terminal&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">add&lt;/span> &lt;span class="n">Homebrew&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">your&lt;/span> &lt;span class="n">PATH&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">echo&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">echo&lt;/span> &lt;span class="s1">&amp;#39;eval &amp;#34;$(/usr/local/bin/brew shellenv)&amp;#34;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">Users&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">kenji&lt;/span>&lt;span class="o">/.&lt;/span>&lt;span class="n">zprofile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">eval&lt;/span> &lt;span class="s2">&amp;#34;$(/usr/local/bin/brew shellenv)&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">-&lt;/span> &lt;span class="n">Run&lt;/span> &lt;span class="n">brew&lt;/span> &lt;span class="n">help&lt;/span> &lt;span class="n">to&lt;/span> &lt;span class="n">get&lt;/span> &lt;span class="n">started&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">-&lt;/span> &lt;span class="n">Further&lt;/span> &lt;span class="n">documentation&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">docs&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">brew&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sh&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/details>
&lt;ol start="4">
&lt;li>&lt;code>brew install cocoapods&lt;/code> 실행&lt;/li>
&lt;/ol>
&lt;details>
&lt;summary>출력&lt;/summary>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">Warning&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Treating&lt;/span> &lt;span class="n">cocoapods&lt;/span> &lt;span class="n">as&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="n">formula&lt;/span>&lt;span class="o">.&lt;/span> &lt;span class="n">For&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">cask&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">use&lt;/span> &lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">cask&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">cocoapods&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Fetching&lt;/span> &lt;span class="n">dependencies&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">cocoapods&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">libyaml&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ca&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">certificates&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">openssl&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">readline&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">ruby&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Fetching&lt;/span> &lt;span class="n">libyaml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">libyaml&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">manifests&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">0.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">libyaml&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sha256&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">b49e62f014&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">from&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">pkg&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">containers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">githubusercontent&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ghcr1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Fetching&lt;/span> &lt;span class="n">ca&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">certificates&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ca&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">certificates&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">manifests&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">2023&lt;/span>&lt;span class="o">-&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ca&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">certificates&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sha256&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">11&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">from&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">pkg&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">containers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">githubusercontent&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ghcr1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Fetching&lt;/span> &lt;span class="n">openssl&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="mf">1.1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">openssl&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">manifests&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="n">t&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">openssl&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sha256&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">97676&lt;/span>&lt;span class="n">d&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">from&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">pkg&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">containers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">githubusercontent&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ghcr1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Fetching&lt;/span> &lt;span class="n">readline&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">readline&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">manifests&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">8.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">readline&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sha256&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">abe9d3f3e&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">from&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">pkg&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">containers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">githubusercontent&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ghcr1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Fetching&lt;/span> &lt;span class="n">ruby&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ruby&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">manifests&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ruby&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sha256&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">a4ac080688e87&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">from&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">pkg&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">containers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">githubusercontent&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ghcr1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Fetching&lt;/span> &lt;span class="n">cocoapods&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">cocoapods&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">manifests&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.12&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">ghcr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">io&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">homebrew&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">core&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">cocoapods&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sha256&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">11226288&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Downloading&lt;/span> &lt;span class="n">from&lt;/span> &lt;span class="n">https&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="n">pkg&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">containers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">githubusercontent&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ghcr1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">blobs&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">sh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">######################################################################## 100.0%&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Installing&lt;/span> &lt;span class="n">dependencies&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">cocoapods&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">libyaml&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ca&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">certificates&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">openssl&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">readline&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">ruby&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Installing&lt;/span> &lt;span class="n">cocoapods&lt;/span> &lt;span class="n">dependency&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">libyaml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Pouring&lt;/span> &lt;span class="n">libyaml&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="mf">0.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mf">5.&lt;/span>&lt;span class="n">ventura&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bottle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tar&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gz&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">🍺&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">libyaml&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">0.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">10&lt;/span> &lt;span class="n">files&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">330&lt;/span>&lt;span class="n">KB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Installing&lt;/span> &lt;span class="n">cocoapods&lt;/span> &lt;span class="n">dependency&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ca&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">certificates&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Pouring&lt;/span> &lt;span class="n">ca&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">certificates&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="mi">2023&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">01&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">10.&lt;/span>&lt;span class="n">all&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bottle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tar&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gz&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Regenerating&lt;/span> &lt;span class="n">CA&lt;/span> &lt;span class="n">certificate&lt;/span> &lt;span class="n">bundle&lt;/span> &lt;span class="n">from&lt;/span> &lt;span class="n">keychain&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">this&lt;/span> &lt;span class="n">may&lt;/span> &lt;span class="n">take&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="k">while&lt;/span>&lt;span class="o">...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">🍺&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ca&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">certificates&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mi">2023&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">01&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="n">files&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">216.9&lt;/span>&lt;span class="n">KB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Installing&lt;/span> &lt;span class="n">cocoapods&lt;/span> &lt;span class="n">dependency&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">openssl&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="mf">1.1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Pouring&lt;/span> &lt;span class="n">openssl&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ventura&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bottle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tar&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gz&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">🍺&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">openssl&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">101&lt;/span> &lt;span class="n">files&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">18.5&lt;/span>&lt;span class="n">MB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Installing&lt;/span> &lt;span class="n">cocoapods&lt;/span> &lt;span class="n">dependency&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">readline&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Pouring&lt;/span> &lt;span class="n">readline&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="mf">8.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mf">1.&lt;/span>&lt;span class="n">ventura&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bottle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tar&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gz&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">🍺&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">readline&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">8.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">50&lt;/span> &lt;span class="n">files&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.7&lt;/span>&lt;span class="n">MB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Installing&lt;/span> &lt;span class="n">cocoapods&lt;/span> &lt;span class="n">dependency&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ruby&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Pouring&lt;/span> &lt;span class="n">ruby&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mf">2.&lt;/span>&lt;span class="n">ventura&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bottle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tar&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gz&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">🍺&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ruby&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">3.2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">605&lt;/span> &lt;span class="n">files&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">46.3&lt;/span>&lt;span class="n">MB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Installing&lt;/span> &lt;span class="n">cocoapods&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Pouring&lt;/span> &lt;span class="n">cocoapods&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="mf">1.12&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mf">0.&lt;/span>&lt;span class="n">ventura&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bottle&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tar&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gz&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">🍺&lt;/span> &lt;span class="o">/&lt;/span>&lt;span class="n">usr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Cellar&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">cocoapods&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="mf">1.12&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">436&lt;/span> &lt;span class="n">files&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">27.8&lt;/span>&lt;span class="n">MB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">==&amp;gt;&lt;/span> &lt;span class="n">Running&lt;/span> &lt;span class="err">`&lt;/span>&lt;span class="n">brew&lt;/span> &lt;span class="n">cleanup&lt;/span> &lt;span class="n">cocoapods&lt;/span>&lt;span class="err">`&lt;/span>&lt;span class="o">...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Disable&lt;/span> &lt;span class="n">this&lt;/span> &lt;span class="n">behaviour&lt;/span> &lt;span class="n">by&lt;/span> &lt;span class="n">setting&lt;/span> &lt;span class="n">HOMEBREW_NO_INSTALL_CLEANUP&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Hide&lt;/span> &lt;span class="n">these&lt;/span> &lt;span class="n">hints&lt;/span> &lt;span class="n">with&lt;/span> &lt;span class="n">HOMEBREW_NO_ENV_HINTS&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">see&lt;/span> &lt;span class="err">`&lt;/span>&lt;span class="n">man&lt;/span> &lt;span class="n">brew&lt;/span>&lt;span class="err">`&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/details>
&lt;ol start="5">
&lt;li>&lt;code>pod --version&lt;/code> 실행&lt;/li>
&lt;/ol>
&lt;details>
&lt;summary>출력&lt;/summary>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">1.12.0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/details>
&lt;p>일단, 성공적으로 설치된 것 같다.&lt;/p>
&lt;h1 id="참고">참고
&lt;/h1>&lt;ul>
&lt;li>&lt;a class="link" href="https://stackoverflow.com/questions/75755162/installing-cocoapods" target="_blank" rel="noopener"
>Installing &amp;ldquo;CocoaPods&amp;rdquo;&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Salesforce의 SOQL을 이용하여 일별 레코드 생성 수를 가져오는 방법</title><link>http://kenji.blog/ko/p/salesforce%E3%81%AEsoql%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E6%97%A5%E5%88%A5%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%BD%9C%E6%88%90%E6%95%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 09 Apr 2023 02:50:30 +0900</pubDate><guid>http://kenji.blog/ko/p/salesforce%E3%81%AEsoql%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E6%97%A5%E5%88%A5%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%BD%9C%E6%88%90%E6%95%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/salesforce%E3%81%AEsoql%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E6%97%A5%E5%88%A5%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%BD%9C%E6%88%90%E6%95%B0%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Salesforce의 SOQL을 이용하여 일별 레코드 생성 수를 가져오는 방법" />&lt;h1 id="salesforce의-soql을-이용하여-일별-레코드-생성-수를-가져오는-방법">Salesforce의 SOQL을 이용하여 일별 레코드 생성 수를 가져오는 방법
&lt;/h1>&lt;ol>
&lt;li>개발자 콘솔을 엽니다.&lt;/li>
&lt;li>&lt;code>Query Editor&lt;/code> 탭을 엽니다.&lt;/li>
&lt;li>아래의 SOQL을 붙여넣고 실행합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">select&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">day_only&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">createdDate&lt;/span>&lt;span class="p">),&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">createdDate&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">from&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">account&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">group&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">by&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">day_only&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">createdDate&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">order&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">by&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">count&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">createdDate&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">desc&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">limit&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>account&lt;/code>는 가져오고 싶은 임의의 개체 이름으로 변경해서 실행해 주세요.&lt;/p>
&lt;h1 id="참고">참고
&lt;/h1>&lt;ul>
&lt;li>&lt;a class="link" href="https://stackoverflow.com/questions/9187737/is-there-a-way-to-group-by-the-date-portion-of-a-datetime-field-in-soql" target="_blank" rel="noopener"
>Is there a way to group by the date portion of a datetime field in SOQL?&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Python(matplotlib.pyplot)을 사용하여 그래프를 그리는 방법</title><link>http://kenji.blog/ko/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 09 Apr 2023 01:02:19 +0900</pubDate><guid>http://kenji.blog/ko/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Python(matplotlib.pyplot)을 사용하여 그래프를 그리는 방법" />&lt;p>&lt;img src="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="1200"
height="288"
srcset="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hue3f23818eeeec9c43d6452cc0f61fb52_43864_480x0_resize_box_3.png 480w, http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hue3f23818eeeec9c43d6452cc0f61fb52_43864_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="416"
data-flex-basis="1000px"
>&lt;/p>
&lt;h1 id="필요한-것">필요한 것
&lt;/h1>&lt;ul>
&lt;li>Google 계정&lt;/li>
&lt;/ul>
&lt;h1 id="순서">순서
&lt;/h1>&lt;ol>
&lt;li>&lt;a class="link" href="https://colab.research.google.com/" target="_blank" rel="noopener"
>https://colab.research.google.com/&lt;/a> 에 접속&lt;/li>
&lt;li>&amp;lsquo;파일&amp;rsquo; → &amp;lsquo;새 노트&amp;rsquo; 선택&lt;/li>
&lt;li>아래의 코드를 붙여넣고 실행&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">matplotlib.pyplot&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">plt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">linspace&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">pi&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">500&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">label&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;sin curve&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">plot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cos&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">label&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;cos curve&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">legend&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="c1"># 범례 표시&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">show&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h1 id="실행-결과">실행 결과
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png"
width="568"
height="413"
srcset="http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hucdb24ab588d845f9f7a56ef99be2c709_27745_480x0_resize_box_3.png 480w, http://kenji.blog/p/pythonmatplotlib.pyplot%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hucdb24ab588d845f9f7a56ef99be2c709_27745_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="137"
data-flex-basis="330px"
>&lt;/p>
&lt;h1 id="참고">참고
&lt;/h1>&lt;ul>
&lt;li>&lt;a class="link" href="https://matplotlib.org/3.5.3/api/_as_gen/matplotlib.pyplot.html" target="_blank" rel="noopener"
>matplotlib.pyplot — Matplotlib 3.5.3 documentation&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'Twitter API와 Google Colaboratory를 사용하여 트윗하는 방법'</title><link>http://kenji.blog/ko/p/twitter-api%E3%81%A8google-colaboratory%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6tweet%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 08 Apr 2023 18:48:32 +0900</pubDate><guid>http://kenji.blog/ko/p/twitter-api%E3%81%A8google-colaboratory%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6tweet%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/twitter-api%E3%81%A8google-colaboratory%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6tweet%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'Twitter API와 Google Colaboratory를 사용하여 트윗하는 방법'" />&lt;h1 id="필요한-것">필요한 것
&lt;/h1>&lt;ul>
&lt;li>Twitter API&lt;/li>
&lt;li>Twitter API SECRET&lt;/li>
&lt;li>Twitter ACCESS TOKEN&lt;/li>
&lt;li>Twitter ACCESS TOKEN SECRET&lt;/li>
&lt;li>Google 계정&lt;/li>
&lt;/ul>
&lt;p>Twitter API 취득 방법은 참고 사이트를 참조해 주세요.&lt;/p>
&lt;h1 id="api를-사용하여-트윗하는-순서">API를 사용하여 트윗하는 순서
&lt;/h1>&lt;ol>
&lt;li>&lt;a class="link" href="https://colab.research.google.com/" target="_blank" rel="noopener"
>https://colab.research.google.com/&lt;/a> 에 접속&lt;/li>
&lt;li>「파일」→「새 노트 만들기」를 선택&lt;/li>
&lt;li>아래의 코드를 붙여넣고 실행 (실제 각 값은 직접 취득한 것을 사용해 주세요)&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">API_KEY = &amp;#39;9Smu2f2RoLqbVQHQq6n79Z2JW&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">API_SECRET = &amp;#39;uGVRIkLL2l8sRyPv2Lr4mXxXppnQF1isMoRnvktcXCtFgAK2R8&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ACCESS_TOKEN = &amp;#39;0367292979164670705-7hSErDoQbO6fkFtnn5UY0vqpvecy0O&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ACCESS_TOKEN_SECRET = &amp;#39;pUv81U9GVzZirz5g4AxZPHAJ4GpSXnBo8GUcZ1egtjw9q&amp;#39;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="3">
&lt;li>아래의 코드를 붙여넣고 실행&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">import tweepy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="4">
&lt;li>아래의 코드를 붙여넣고 실행 (API v1.1)&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">api = tweepy.API(auth)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">api.update_status(&amp;#34;hello&amp;#34;)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>→&lt;code>hello&lt;/code>라는 트윗이 게시됨&lt;/p>
&lt;ol start="5">
&lt;li>아래의 코드를 붙여넣고 실행 (API v2.0)&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">client = tweepy.Client(consumer_key=API_KEY, consumer_secret=API_SECRET, access_token=ACCESS_TOKEN, access_token_secret=ACCESS_TOKEN_SECRET)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">client.create_tweet(text=&amp;#39;hello v2&amp;#39;)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>→&lt;code>hello v2&lt;/code>라는 트윗이 게시됨&lt;/p>
&lt;p>이상&lt;/p>
&lt;h1 id="참고">참고
&lt;/h1>&lt;ul>
&lt;li>&lt;a class="link" href="https://bloomtectec.com/twitter-api-application-procedure/" target="_blank" rel="noopener"
>【2021년 4월 기준】 Twitter API 이용 신청을 사용 용도 예문과 스크린샷으로 철저하게 해설&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://bloomtectec.com/use-twitter-api-in-google-colab/" target="_blank" rel="noopener"
>【번거로운 설정 불필요!】 Twitter API 테스트 환경이라면 Google Colaboratory를 추천 【소스 코드도 공유합니다】&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://3pysci.com/tweepy-28/" target="_blank" rel="noopener"
>【Tweepy】 Twitter API v2: 트윗, 답글(리플라이), 투표 포함 트윗, 미디어 포함 트윗 (v1.1) [Python]&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'Windows에서 OpenSSL 빌드하는 방법'</title><link>http://kenji.blog/ko/p/windows-%E3%81%A7-openssl-%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Fri, 07 Apr 2023 21:06:32 +0900</pubDate><guid>http://kenji.blog/ko/p/windows-%E3%81%A7-openssl-%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/windows-%E3%81%A7-openssl-%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'Windows에서 OpenSSL 빌드하는 방법'" />&lt;h1 id="openssl이란">OpenSSL이란
&lt;/h1>&lt;p>암호화 통신을 수행하는 데 필요한 처리를 제공하는 오픈 소스 라이브러리입니다.&lt;/p>
&lt;p>프로그램에서 사용하려면 C언어 소스 코드가 공개되어 있으므로, 빌드하여 라이브러리를 생성해야 합니다.&lt;/p>
&lt;p>아래에서는 빌드 절차를 소개합니다.&lt;/p>
&lt;h1 id="빌드-환경-준비">빌드 환경 준비
&lt;/h1>&lt;ul>
&lt;li>
&lt;p>&lt;strong>Perl&lt;/strong>&lt;/p>
&lt;p>&lt;a class="link" href="https://strawberryperl.com/" target="_blank" rel="noopener"
>https://strawberryperl.com/&lt;/a>에서 &lt;code>strawberry-perl-5.32.1.1-64bit.msi&lt;/code>를 다운로드합니다. 버전은 최신 버전이어도 무방합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NASM&lt;/strong>&lt;/p>
&lt;p>&lt;a class="link" href="https://www.nasm.us/" target="_blank" rel="noopener"
>https://www.nasm.us/&lt;/a>의 &lt;code>Download&lt;/code>에서 &lt;code>2.16.01/nasm-2.16.01-win64.zip&lt;/code>을 다운로드합니다. 버전은 rc가 아닌 최신 버전이어도 무방합니다.
설치 후에는 NASM이 설치된 폴더를 환경 변수 PATH에 등록해야 합니다.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Visual Studio 2022 ** 또는 ** Build Tools for Visual Studio 2022&lt;/strong>&lt;/p>
&lt;p>&lt;a class="link" href="https://visualstudio.microsoft.com/ja/downloads/" target="_blank" rel="noopener"
>https://visualstudio.microsoft.com/ja/downloads/&lt;/a>에서 &lt;code>Visual Studio 2022 Community&lt;/code> 또는 &lt;code>Build Tools for Visual Studio 2022&lt;/code>를 설치합니다.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h1 id="windows에서의-openssl-빌드-절차">Windows에서의 OpenSSL 빌드 절차
&lt;/h1>&lt;ol>
&lt;li>&lt;a class="link" href="https://www.openssl.org/source/" target="_blank" rel="noopener"
>https://www.openssl.org/source/&lt;/a>에서 &lt;code>openssl-3.1.0.tar.gz&lt;/code>를 다운로드하여 압축을 풉니다. 압축을 풀 수 없는 경우, 명령 프롬프트에서 &lt;code>tar -xzf openssl-3.1.0.tar.gz&lt;/code>를 실행합니다.&lt;/li>
&lt;li>&lt;strong>관리자 권한으로&lt;/strong> 명령 프롬프트를 실행합니다.&lt;/li>
&lt;li>압축을 푼 폴더를 엽니다.&lt;/li>
&lt;li>아래 명령을 실행합니다. ※&lt;code>Community&lt;/code> 부분은 설치한 Visual Studio의 버전에 맞게 변경합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="s2">&amp;#34;C:\Program Files\Microsoft Visual Studio&lt;/span>&lt;span class="se">\202&lt;/span>&lt;span class="s2">2\Community\VC\Auxiliary\Build&lt;/span>&lt;span class="se">\v&lt;/span>&lt;span class="s2">cvarsall.bat&amp;#34;&lt;/span> &lt;span class="n">x64&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="5">
&lt;li>아래 명령을 실행합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">perl Configure VC-WIN64A
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="6">
&lt;li>아래 명령을 실행합니다. (시간이 꽤 걸립니다.)&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">nmake
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="7">
&lt;li>아래 명령을 실행합니다. (시간이 꽤 걸립니다.)&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">nmake test
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="8">
&lt;li>아래 명령을 실행합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">nmake install
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>성공한 경우 &lt;code>C:\Program Files\OpenSSL&lt;/code>에 OpenSSL이 설치됩니다.&lt;/p>
&lt;p>이상&lt;/p>
&lt;h1 id="참고">참고
&lt;/h1>&lt;p>&lt;a class="link" href="https://ja.wikipedia.org/wiki/OpenSSL" target="_blank" rel="noopener"
>https://ja.wikipedia.org/wiki/OpenSSL&lt;/a>&lt;/p></description></item><item><title>'i18n이란?'</title><link>http://kenji.blog/ko/p/i18n%E3%81%A8%E3%81%AF/</link><pubDate>Fri, 07 Apr 2023 00:42:02 +0900</pubDate><guid>http://kenji.blog/ko/p/i18n%E3%81%A8%E3%81%AF/</guid><description>&lt;img src="http://kenji.blog/p/i18n%E3%81%A8%E3%81%AF/img.png" alt="Featured image of post 'i18n이란?'" />&lt;h1 id="i18n이란">i18n이란?
&lt;/h1>&lt;p>&lt;code>i18n&lt;/code>이란, &lt;code>Internationalization&lt;/code>의 약자로, 국제화라는 의미입니다. &lt;code>Internationalization&lt;/code>은 너무 길기 때문에,
첫 번째 &lt;code>i&lt;/code>와 마지막 &lt;code>n&lt;/code> 사이에 18글자가 포함되어 있다는 의미로 &lt;code>i18n&lt;/code>이라고 생략해서 표기됩니다.&lt;/p>
&lt;p>소프트웨어에서의 국제화 대응이라는 문맥에서 사용되기도 합니다.&lt;/p>
&lt;p>국제화에서의 주요 대상 항목으로는 다음이 있습니다.&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;ul>
&lt;li>문자 집합 (표준 문자 코드 등)&lt;/li>
&lt;li>문자의 방향 (왼쪽에서 오른쪽으로, 오른쪽에서 왼쪽으로, 왼쪽을 향해 위에서 아래로, 기타)&lt;/li>
&lt;li>문구&lt;/li>
&lt;li>폰트&lt;/li>
&lt;li>서식
&lt;ul>
&lt;li>수치 (소수점 문자, 자릿수 구분 문자, 구분하는 자릿수 등)&lt;/li>
&lt;li>일시 (연월일 표기 방법, 이슬람력/그레고리력/유대력/일본력 등 사용하는 달력의 차이, 기타)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>일시 정보의 시차&lt;/li>
&lt;li>통화 정보&lt;/li>
&lt;/ul>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>&lt;a class="link" href="https://ko.wikipedia.org/wiki/%EA%B5%AD%EC%A0%9C%ED%99%94%EC%99%80_%EC%A7%80%EC%97%AD%ED%99%94" target="_blank" rel="noopener"
>국제화와 지역화 - 위키백과&lt;/a>&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>HTML로 프레젠테이션 자료를 만드는 방법 (reveal.js)</title><link>http://kenji.blog/ko/p/html%E3%81%A7%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95reveal.js/</link><pubDate>Thu, 06 Apr 2023 23:23:46 +0900</pubDate><guid>http://kenji.blog/ko/p/html%E3%81%A7%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95reveal.js/</guid><description>&lt;img src="http://kenji.blog/p/html%E3%81%A7%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E8%B3%87%E6%96%99%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95reveal.js/img.png" alt="Featured image of post HTML로 프레젠테이션 자료를 만드는 방법 (reveal.js)" />&lt;h1 id="html로-프레젠테이션-자료를-만드는-방법">HTML로 프레젠테이션 자료를 만드는 방법
&lt;/h1>&lt;p>reveal.js는 HTML과 Markdown을 사용한 프레젠테이션 작성 도구로, 다음과 같은 기능이 있습니다.&lt;/p>
&lt;ul>
&lt;li>수식, 애니메이션, 스와이프 조작 등 다양한 프레젠테이션 기능&lt;/li>
&lt;li>테마 및 레이아웃 커스터마이즈 가능&lt;/li>
&lt;li>마우스, 키보드, 터치패드 등 여러 디바이스를 지원하는 내비게이션 기능&lt;/li>
&lt;li>슬라이드 자동 재생 및 비디오 포함 등 고급 기능 제공&lt;/li>
&lt;li>PDF 형식으로 내보내기 가능&lt;/li>
&lt;/ul>
&lt;p>이러한 기능을 통해 사용자는 쉽게 인터랙티브하고 매력적인 프레젠테이션을 만들 수 있습니다.&lt;/p>
&lt;h1 id="revealjs-설치-및-사용법">reveal.js 설치 및 사용법
&lt;/h1>&lt;p>가장 간단한 사용법은 다음 페이지에서 ZIP 파일을 통째로 다운로드하여 압축을 푸는 것입니다.&lt;/p>
&lt;ol>
&lt;li>&lt;a class="link" href="https://revealjs.com/installation" target="_blank" rel="noopener"
>https://revealjs.com/installation&lt;/a>을 열고, 링크에서 &lt;code>master.zip&lt;/code>을 다운로드한다&lt;/li>
&lt;li>압축을 푼 폴더 내의 index.html을 브라우저로 연다&lt;/li>
&lt;li>index.html을 수정하여 자신의 프레젠테이션 자료를 만든다&lt;/li>
&lt;/ol>
&lt;p>※demo.html에 데모용 HTML 코드가 작성되어 있으므로 참고할 수 있습니다.&lt;/p>
&lt;h1 id="활용-방법">활용 방법
&lt;/h1>&lt;p>만든 프레젠테이션 자료는 그대로 웹 페이지로 공개하거나, PDF로 내보낼 수 있습니다.
또한, 프레젠테이션 소스가 텍스트이므로 버전 관리 시스템으로 관리하기가 용이합니다.&lt;/p>
&lt;p>마크다운 형식으로 프레젠테이션 자료를 작성하는 것도 가능한 것 같습니다.&lt;/p>
&lt;h1 id="참고">참고
&lt;/h1>&lt;ul>
&lt;li>&lt;a class="link" href="https://qiita.com/Targityen/items/40ae4795e2cb77c1adc6" target="_blank" rel="noopener"
>앞으로 프레젠테이션 자료는 reveal.js를 사용하자&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://qiita.com/jkjoluvjlajelljicvjzojieoaid/items/01cd7ff819bc2e69b652" target="_blank" rel="noopener"
>Markdown 표기법 샘플 목록&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'AI(StableDiffusion)를 사용하여 일러스트 이미지를 생성하는 방법'</title><link>http://kenji.blog/ko/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Thu, 06 Apr 2023 00:43:19 +0900</pubDate><guid>http://kenji.blog/ko/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'AI(StableDiffusion)를 사용하여 일러스트 이미지를 생성하는 방법'" />&lt;h1 id="stable-diffusion이란">Stable diffusion이란
&lt;/h1>&lt;p>Stable diffusion은 독일 뮌헨 대학교의 연구팀이 개발한, 입력된 텍스트 정보로부터 이미지를 생성하는 AI입니다.
다양한 이미지를 학습시킴으로써 실사부터 일러스트까지 다양한 이미지를 생성할 수 있습니다.&lt;/p>
&lt;p>이번에는 Stable diffusion의 학습된 데이터를 사용하여 일러스트 이미지를 생성하는 방법을 소개합니다.&lt;/p>
&lt;h1 id="준비물">준비물
&lt;/h1>&lt;ul>
&lt;li>Google 계정&lt;/li>
&lt;/ul>
&lt;p>이 전부입니다.&lt;/p>
&lt;h1 id="생성-절차">생성 절차
&lt;/h1>&lt;ol>
&lt;li>&lt;a class="link" href="https://colab.research.google.com" target="_blank" rel="noopener"
>https://colab.research.google.com&lt;/a> 을 엽니다.&lt;/li>
&lt;li>왼쪽 상단의 &lt;code>파일&lt;/code>에서 &lt;code>새 노트 만들기&lt;/code>를 선택합니다.&lt;/li>
&lt;li>&lt;code>수정&lt;/code>에서 &lt;code>노트 설정&lt;/code>을 선택합니다.&lt;/li>
&lt;li>&lt;code>하드웨어 가속기&lt;/code>를 &lt;code>GPU&lt;/code>로 변경합니다.
&lt;img src="http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png"
width="627"
height="324"
srcset="http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hud7bbdf6a24e33b2b36528d9e25b016c8_23961_480x0_resize_box_3.png 480w, http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hud7bbdf6a24e33b2b36528d9e25b016c8_23961_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="193"
data-flex-basis="464px"
>&lt;/li>
&lt;li>아래의 코드를 붙여넣고 실행합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">!pip install diffusers==0.8.0 transformers
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="6">
&lt;li>아래의 코드를 붙여넣고 실행합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">from diffusers import StableDiffusionPipeline
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="7">
&lt;li>아래의 코드를 붙여넣고 실행합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">pipe = StableDiffusionPipeline.from_pretrained(&amp;#34;gsdf/Counterfeit-V2.5&amp;#34;)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">pipe.to(&amp;#34;cuda&amp;#34;)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="8">
&lt;li>아래의 코드를 붙여넣고 실행합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">prompt = &amp;#34;((masterpiece,best quality)),1girl, solo, animal ears, rabbit, barefoot, knees up, dress, sitting, rabbit ears, short sleeves, looking at viewer, grass, short hair, smile, white hair, puffy sleeves, outdoors, puffy short sleeves, bangs, on ground, full body, animal, white dress, sunlight, brown eyes, dappled sunlight, day, depth of field&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">n_prompt = &amp;#34;EasyNegative, extra fingers,fewer fingers&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">image = pipe(prompt, negative_prompt = n_prompt).images[0]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">image
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>여기서 사용한 &lt;code>Prompt&lt;/code>는 &lt;a class="link" href="https://huggingface.co/gsdf/Counterfeit-V2.5" target="_blank" rel="noopener"
>https://huggingface.co/gsdf/Counterfeit-V2.5&lt;/a>의 &lt;code>Prompt&lt;/code>를 참고했습니다.&lt;/p>
&lt;h2 id="생성-결과-일부">생성 결과 (일부)
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="512"
height="512"
srcset="http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu1ec19e515fd7538067cc14f2c3c8bddf_594392_480x0_resize_box_3.png 480w, http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hu1ec19e515fd7538067cc14f2c3c8bddf_594392_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3.png"
width="512"
height="512"
srcset="http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hu67e673668e1b02812ead4fb15912ac36_533749_480x0_resize_box_3.png 480w, http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hu67e673668e1b02812ead4fb15912ac36_533749_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4.png"
width="512"
height="512"
srcset="http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4_hu2b826ec3ad4d7685d995efaa40aac0c5_597506_480x0_resize_box_3.png 480w, http://kenji.blog/p/aistablediffusion%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E7%94%BB%E5%83%8F%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_4_hu2b826ec3ad4d7685d995efaa40aac0c5_597506_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://huggingface.co/gsdf/Counterfeit-V2.5" target="_blank" rel="noopener"
>https://huggingface.co/gsdf/Counterfeit-V2.5&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.youtube.com/watch?v=l8-fVSM2PVQ" target="_blank" rel="noopener"
>인공지능(AI)을 사용한 이미지 생성 프로그램을 15분 만에 만들어 보았다【실황 프로그래밍】&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>실행 파일(exe)의 내용을 분석하는 도구</title><link>http://kenji.blog/ko/p/%EC%8B%A4%ED%96%89-%ED%8C%8C%EC%9D%BCexe%EC%9D%98-%EB%82%B4%EC%9A%A9%EC%9D%84-%EB%B6%84%EC%84%9D%ED%95%98%EB%8A%94-%EB%8F%84%EA%B5%AC/</link><pubDate>Wed, 05 Apr 2023 23:31:06 +0900</pubDate><guid>http://kenji.blog/ko/p/%EC%8B%A4%ED%96%89-%ED%8C%8C%EC%9D%BCexe%EC%9D%98-%EB%82%B4%EC%9A%A9%EC%9D%84-%EB%B6%84%EC%84%9D%ED%95%98%EB%8A%94-%EB%8F%84%EA%B5%AC/</guid><description>&lt;img src="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_1.png" alt="Featured image of post 실행 파일(exe)의 내용을 분석하는 도구" />&lt;h1 id="실행-파일exe이란">실행 파일(exe)이란?
&lt;/h1>&lt;p>Windows상에서 실행 가능한 파일. 기본적으로는 PE 포맷이라고 불리는 형식으로 작성되어 있다.
실행하기 위한 기계어 코드나 아이콘, 이미지 등의 리소스가 포함되어 있다.&lt;/p>
&lt;p>실행 파일을 분석하기 위한 도구가 몇 가지 있으므로 이번에는 그것들을 소개한다.&lt;/p>
&lt;h2 id="7-zip">7-Zip
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img.png"
width="297"
height="170"
srcset="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_hu9085a5feff69a2c6829ff5c46ff00393_6059_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_hu9085a5feff69a2c6829ff5c46ff00393_6059_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="174"
data-flex-basis="419px"
>&lt;/p>
&lt;p>EXE 파일은 그대로는 크기가 커지기 쉽기 때문에 파일 압축을 해서 생성되는 경우가 있습니다. 이 경우, 파일 압축 및 해제 소프트웨어인 7-Zip을 사용하여 실행 파일을 해제하고 내용을 조사할 수 있습니다. 동일하게 해제할 수 있는 도구로 WinRAR라는 것도 있습니다.&lt;/p>
&lt;h2 id="resource-hacker">Resource Hacker
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_2.png"
width="186"
height="186"
srcset="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_2_hu79aaf5f76ad7c56f4d42723e7059a469_60178_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_2_hu79aaf5f76ad7c56f4d42723e7059a469_60178_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;p>EXE 파일 내에 있는 리소스(아이콘, 비트맵, 대화 상자, 문자열 등)를 추출할 수 있습니다. 또한, 바이너리 에디터로도 기능하기 때문에 EXE 파일의 내용을 편집하여 다시 작성할 수도 있습니다.&lt;/p>
&lt;h2 id="pe-explorer">PE Explorer
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_3.png"
width="186"
height="186"
srcset="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_3_hueb15d1af1c62b25c13fb3d7dc03fc6df_64201_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_3_hueb15d1af1c62b25c13fb3d7dc03fc6df_64201_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;p>Windows용 PE 파일(EXE, DLL, OCX, SYS, 드라이버)을 분석할 수 있습니다. PE Explorer는 파일 구조 표시, 파일 헤더 표시, 디렉터리 항목 표시, 내보낸 함수 및 심볼 표시 등 다양한 분석 기능을 제공합니다.&lt;/p>
&lt;h2 id="dependency-walker">Dependency Walker
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_4.png"
width="200"
height="200"
srcset="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_4_hub63c69aff9d8b5946247e847a7ad1fc0_3219_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_4_hub63c69aff9d8b5946247e847a7ad1fc0_3219_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;p>EXE 파일이 의존하는 DLL 파일을 조사하고, 그것들이 올바르게 로드되어 있는지 여부를 확인할 수 있습니다. 또한, DLL 파일의 함수 호출을 추적할 수도 있습니다.&lt;/p>
&lt;h2 id="ghidra">Ghidra
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_5.png"
width="498"
height="337"
srcset="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_5_hu5dc3fee7c4c873ff8adc099ca0ffbefc_53940_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_5_hu5dc3fee7c4c873ff8adc099ca0ffbefc_53940_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="147"
data-flex-basis="354px"
>&lt;/p>
&lt;p>NSA(미국 국가안보국)가 개발하여 오픈소스로 무료 공개하고 있는 강력한 리버스 엔지니어링 도구입니다. EXE 파일의 디스어셈블(어셈블리 언어로의 변환)뿐만 아니라, C 언어에 가까운 형태로의 디컴파일 기능도 갖추고 있어 매우 인기가 있습니다.&lt;/p>
&lt;h2 id="ida-free--ida-pro">IDA Free / IDA Pro
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_6.png"
width="256"
height="256"
srcset="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_6_hu960ac9a27bf840a560548c99c16556b4_3581_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_6_hu960ac9a27bf840a560548c99c16556b4_3581_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;p>악성코드 분석이나 리버스 엔지니어링에 있어서 세계적인 업계 표준이 되고 있는 고기능 디스어셈블러 및 디컴파일러입니다. Pro 버전은 매우 비싸지만, 개인이나 비상업적 목적이라면 기능 제한 버전인 「IDA Free」를 무료로 이용할 수 있습니다.&lt;/p>
&lt;h2 id="x64dbg-x32dbg">x64dbg (x32dbg)
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_7.png"
width="479"
height="430"
srcset="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_7_hube21c1a0d75785c568f5805ce2a13d30_21845_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_7_hube21c1a0d75785c568f5805ce2a13d30_21845_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_7.png"
class="gallery-image"
data-flex-grow="111"
data-flex-basis="267px"
>&lt;/p>
&lt;p>Windows용 오픈소스 디버거입니다. 실행 파일을 실행하면서 내용이나 메모리의 상태를 단계별로 실행하여 분석하는 「동적 분석」에 특화되어 있으며, 크랙미(분석용 과제 프로그램) 해독이나 악성코드 동작 조사에 자주 사용됩니다.&lt;/p>
&lt;h2 id="ilspy--dotpeek">ILSpy / dotPeek
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_8.png"
width="256"
height="256"
srcset="http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_8_hu85c069d4379e159e6158cf86ba41fdc9_34476_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%ABexe%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB/img_8_hu85c069d4379e159e6158cf86ba41fdc9_34476_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_8.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;p>만약 대상 EXE 파일이 C# 등의 .NET 계열 언어로 만들어져 있다면, 이 도구들을 사용하여 원래의 소스 코드와 거의 동일한 상태로 역컴파일(디컴파일)하여 내용을 완전히 파악할 수 있습니다.&lt;/p>
&lt;p>이러한 도구들은 EXE 파일의 내용을 조사하는 데 유용하지만, 주의가 필요합니다. 파일을 편집하거나 부정당한 용도로 이용하는 것은 저작권법이나 보안상 문제를 일으킬 가능성이 있기 때문에 충분히 이해한 후 사용해 주세요.&lt;/p></description></item><item><title>Mac에서 Windows처럼 (Alt+Tab) 애플리케이션 전환하는 방법</title><link>http://kenji.blog/ko/p/mac%E3%81%A7windows%E3%83%A9%E3%82%A4%E3%82%AFalt-tab%E3%81%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Wed, 05 Apr 2023 02:20:12 +0900</pubDate><guid>http://kenji.blog/ko/p/mac%E3%81%A7windows%E3%83%A9%E3%82%A4%E3%82%AFalt-tab%E3%81%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/mac%E3%81%A7windows%E3%83%A9%E3%82%A4%E3%82%AFalt-tab%E3%81%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Mac에서 Windows처럼 (Alt+Tab) 애플리케이션 전환하는 방법" />&lt;h1 id="소개">소개
&lt;/h1>&lt;p>Mac에서 Windows처럼 (Alt+Tab) 애플리케이션을 전환하는 방법을 소개합니다.&lt;/p>
&lt;p>이것은 기본 설정을 변경하는 방법으로는 구현하기 어렵기 때문에 애플리케이션을 설치하는 방법입니다.&lt;/p>
&lt;h1 id="동작-이미지">동작 이미지
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/mac%E3%81%A7windows%E3%83%A9%E3%82%A4%E3%82%AFalt-tab%E3%81%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/animation.gif"
width="640"
height="200"
srcset="http://kenji.blog/p/mac%E3%81%A7windows%E3%83%A9%E3%82%A4%E3%82%AFalt-tab%E3%81%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/animation_hu0429bb2e6c44af4c82057c8719de4732_563361_480x0_resize_box_1.gif 480w, http://kenji.blog/p/mac%E3%81%A7windows%E3%83%A9%E3%82%A4%E3%82%AFalt-tab%E3%81%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/animation_hu0429bb2e6c44af4c82057c8719de4732_563361_1024x0_resize_box_1.gif 1024w"
loading="lazy"
alt="animation.gif"
class="gallery-image"
data-flex-grow="320"
data-flex-basis="768px"
>&lt;/p>
&lt;h1 id="설정-방법-macos-ventura">설정 방법 (macOS Ventura)
&lt;/h1>&lt;ol>
&lt;li>&lt;a class="link" href="https://alt-tab-macos.netlify.app" target="_blank" rel="noopener"
>https://alt-tab-macos.netlify.app&lt;/a>을 엽니다.&lt;/li>
&lt;li>&lt;code>Download the latest release&lt;/code>를 클릭합니다.&lt;/li>
&lt;li>다운로드된 애플리케이션을 엽니다.&lt;/li>
&lt;li>나머지는 절차에 따라 설치합니다.&lt;/li>
&lt;/ol>
&lt;p>이제 Windows와 마찬가지로 Alt+Tab을 사용하여 애플리케이션을 전환할 수 있습니다.&lt;/p>
&lt;p>이상&lt;/p></description></item><item><title>'Mac에서 복사 및 붙여넣기 단축키를 Windows와 맞추는 방법'</title><link>http://kenji.blog/ko/p/mac%E3%81%A7%E3%82%B3%E3%83%94%E3%83%BC%E3%83%9A%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92windows%E3%81%A8%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Wed, 05 Apr 2023 00:49:02 +0900</pubDate><guid>http://kenji.blog/ko/p/mac%E3%81%A7%E3%82%B3%E3%83%94%E3%83%BC%E3%83%9A%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92windows%E3%81%A8%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/mac%E3%81%A7%E3%82%B3%E3%83%94%E3%83%BC%E3%83%9A%E3%83%BC%E3%82%B9%E3%83%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92windows%E3%81%A8%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'Mac에서 복사 및 붙여넣기 단축키를 Windows와 맞추는 방법'" />&lt;h1 id="소개">소개
&lt;/h1>&lt;p>Windows와 Mac을 번갈아 사용할 경우, 키보드 단축키로 자주 사용하는 복사, 붙여넣기, 실행 취소 등의 키가 다르기 때문에,
이를 맞추는 방법을 소개합니다.&lt;/p>
&lt;h1 id="설정-방법-macos-ventura">설정 방법 (macOS Ventura)
&lt;/h1>&lt;ol>
&lt;li>시스템 설정을 엽니다.&lt;/li>
&lt;li>키보드를 선택합니다.&lt;/li>
&lt;li>키보드 단축키를 선택합니다.&lt;/li>
&lt;li>보조 키를 선택합니다.&lt;/li>
&lt;li>Control(^) 키를 「⌘ Command」에 할당합니다.&lt;/li>
&lt;li>Command(⌘) 키를 「^ Control」에 할당합니다.&lt;/li>
&lt;li>완료를 클릭합니다.&lt;/li>
&lt;/ol>
&lt;p>이상&lt;/p></description></item><item><title>Mac에서 일본어⇔영어 입력 전환 단축키 변경하는 방법</title><link>http://kenji.blog/ko/p/mac%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%8B%B1%E8%AA%9E%E5%85%A5%E5%8A%9B%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Tue, 04 Apr 2023 23:02:12 +0900</pubDate><guid>http://kenji.blog/ko/p/mac%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%8B%B1%E8%AA%9E%E5%85%A5%E5%8A%9B%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/mac%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%8B%B1%E8%AA%9E%E5%85%A5%E5%8A%9B%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E3%82%AD%E3%83%BC%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Mac에서 일본어⇔영어 입력 전환 단축키 변경하는 방법" />&lt;h1 id="시작하며">시작하며
&lt;/h1>&lt;p>저는 US 키보드를 사용하고 있어서, Windows에서는 &lt;code>Alt + `&lt;/code>로 일본어 입력을 전환하는데
mac에서도 같은 키로 전환하고 싶어서 찾아보니 설정에서 변경할 수 있다는 것을 알았습니다.&lt;/p>
&lt;h1 id="설정-방법-macos-ventura">설정 방법 (macOS Ventura)
&lt;/h1>&lt;ol>
&lt;li>시스템 설정을 엽니다.&lt;/li>
&lt;li>키보드를 선택합니다.&lt;/li>
&lt;li>키보드 단축키를 선택합니다.&lt;/li>
&lt;li>입력 소스를 선택합니다.&lt;/li>
&lt;li>&amp;lsquo;입력 메뉴에서 다음 소스 선택&amp;rsquo; 오른쪽의 단축키 표기를 더블 클릭합니다.&lt;/li>
&lt;li>&lt;code>Alt + `&lt;/code>를 입력합니다.&lt;/li>
&lt;li>완료를 클릭합니다.&lt;/li>
&lt;/ol>
&lt;p>이제 영어 ⇔ 일본어를 &lt;code>Alt + `&lt;/code>로 전환할 수 있게 됩니다.
다만, 기본 설정으로는 전환 중에 가타카나가 포함되어 버리므로, 아래 절차에 따라 입력 소스에서 가타카나를 삭제했습니다.&lt;/p>
&lt;ol>
&lt;li>시스템 설정을 엽니다.&lt;/li>
&lt;li>키보드를 선택합니다.&lt;/li>
&lt;li>입력 소스 중 &amp;lsquo;일본어 - 로마자 입력&amp;rsquo; 오른쪽의 편집을 클릭합니다.&lt;/li>
&lt;li>&amp;lsquo;일본어 - 로마자 입력&amp;rsquo;을 클릭합니다.&lt;/li>
&lt;li>입력 모드 중 가타카나의 체크를 해제합니다.&lt;/li>
&lt;li>완료를 클릭합니다.&lt;/li>
&lt;/ol>
&lt;p>이상&lt;/p></description></item><item><title>Windows에서 환경 변수 경로가 설정된 실행 파일의 위치를 찾는 방법</title><link>http://kenji.blog/ko/p/windows-%E3%81%A7%E3%83%91%E3%82%B9%E3%81%AE%E9%80%9A%E3%81%A3%E3%81%9F%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%A0%B4%E6%89%80%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Mon, 03 Apr 2023 00:02:55 +0900</pubDate><guid>http://kenji.blog/ko/p/windows-%E3%81%A7%E3%83%91%E3%82%B9%E3%81%AE%E9%80%9A%E3%81%A3%E3%81%9F%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%A0%B4%E6%89%80%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/windows-%E3%81%A7%E3%83%91%E3%82%B9%E3%81%AE%E9%80%9A%E3%81%A3%E3%81%9F%E5%AE%9F%E8%A1%8C%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%A0%B4%E6%89%80%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Windows에서 환경 변수 경로가 설정된 실행 파일의 위치를 찾는 방법" />&lt;h1 id="windows에서-환경-변수-경로가-설정된-실행-파일의-위치를-찾는-방법">Windows에서 환경 변수 경로가 설정된 실행 파일의 위치를 찾는 방법
&lt;/h1>&lt;p>실행 파일을 지정하여 명령을 실행할 때, 그 실행 파일이 어디에 있는지 알고 싶을 때가 있습니다. 그럴 때는 다음 명령어로 실행 파일의 위치를 확인할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">where &lt;/span>&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="n">실행&lt;/span> &lt;span class="n">파일명&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>예를 들어, 그림판(mspaint.exe)의 위치를 알고 싶을 때는 다음과 같이 합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">where &lt;/span>&lt;span class="n">mspaint&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">exe&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h1 id="참고">참고
&lt;/h1>&lt;ul>
&lt;li>&lt;a class="link" href="https://superuser.com/questions/49104/how-do-i-find-the-location-of-an-executable-in-windows" target="_blank" rel="noopener"
>How do I find the location of an executable in Windows?&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'mac mini(2018) 구매'</title><link>http://kenji.blog/ko/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/</link><pubDate>Sun, 02 Apr 2023 18:05:30 +0900</pubDate><guid>http://kenji.blog/ko/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/</guid><description>&lt;img src="http://kenji.blog/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/img.png" alt="Featured image of post 'mac mini(2018) 구매'" />&lt;h1 id="mac-mini2018-구매">mac mini(2018) 구매
&lt;/h1>&lt;p>메루카리에서 구형 중고 mac mini(2018)를 구매했다. 스펙은 다음과 같다.&lt;/p>
&lt;ul>
&lt;li>CPU: 3.2GHz 6코어 Intel Core i7&lt;/li>
&lt;li>메모리: 32GB&lt;/li>
&lt;li>스토리지: 1TB SSD&lt;/li>
&lt;/ul>
&lt;p>가격은 ￥ 77,000&lt;/p>
&lt;h1 id="구매하게-된-이유">구매하게 된 이유
&lt;/h1>&lt;ul>
&lt;li>회사에서 거의 같은 스펙의 mac mini를 사용하여 스마트폰 앱 개발을 하고 있는데, 집에서도 개발 환경(특히 xcode 실행 환경)을 갖추고 싶었다.&lt;/li>
&lt;li>macbook pro를 가지고 있지만, 9년 전에 구매한 것이라 동작이 꽤 느려서 거의 사용하지 않고 있다.&lt;/li>
&lt;li>개인적으로 iOS 앱 개발을 하고 싶었다.&lt;/li>
&lt;/ul>
&lt;h1 id="바로-xcode와-intellij-idea를-설치">바로 xcode와 IntelliJ IDEA를 설치
&lt;/h1>&lt;p>xcode는 버전이 Version 14.3 (14E222b)
&lt;img src="http://kenji.blog/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/img_1.png"
width="642"
height="331"
srcset="http://kenji.blog/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/img_1_hu62db0034d30abaeb581954f95aa17251_77271_480x0_resize_box_3.png 480w, http://kenji.blog/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/img_1_hu62db0034d30abaeb581954f95aa17251_77271_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="193"
data-flex-basis="465px"
>&lt;/p>
&lt;p>IntelliJ IDEA는 버전이 2023.1
&lt;img src="http://kenji.blog/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/img_2.png"
width="570"
height="386"
srcset="http://kenji.blog/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/img_2_hud92d5f30e3391929dea80140d8f5dfb2_79324_480x0_resize_box_3.png 480w, http://kenji.blog/p/mac-mini2018%E3%82%92%E8%B3%BC%E5%85%A5/img_2_hud92d5f30e3391929dea80140d8f5dfb2_79324_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="147"
data-flex-basis="354px"
>&lt;/p>
&lt;p>자! 개발해 보자!&lt;/p></description></item><item><title>블로그에서 사용할 수 있는 사진 소재 사이트 \"Unsplash\"에 대하여</title><link>http://kenji.blog/ko/p/%E3%83%96%E3%83%AD%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E5%86%99%E7%9C%9F%E7%B4%A0%E6%9D%90%E3%82%B5%E3%82%A4%E3%83%88unsplash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</link><pubDate>Sun, 02 Apr 2023 14:44:17 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%96%E3%83%AD%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E5%86%99%E7%9C%9F%E7%B4%A0%E6%9D%90%E3%82%B5%E3%82%A4%E3%83%88unsplash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%96%E3%83%AD%E3%82%B0%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E5%86%99%E7%9C%9F%E7%B4%A0%E6%9D%90%E3%82%B5%E3%82%A4%E3%83%88unsplash%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/img_1.png" alt="Featured image of post 블로그에서 사용할 수 있는 사진 소재 사이트 \"Unsplash\"에 대하여" />&lt;h2 id="unsplash에-대하여">&amp;ldquo;Unsplash&amp;quot;에 대하여
&lt;/h2>&lt;p>&lt;a class="link" href="https://unsplash.com/ko/" target="_blank" rel="noopener"
>https://unsplash.com/ko/&lt;/a>&lt;/p>
&lt;p>사진 소재 사이트 &amp;ldquo;Unsplash&amp;quot;를 요약하면 다음과 같습니다.&lt;/p>
&lt;ul>
&lt;li>모든 이미지를 무료로 사용할 수 있음&lt;/li>
&lt;li>상업적 이용 가능&lt;/li>
&lt;li>이미지 가공 가능&lt;/li>
&lt;li>사용 허가 불필요&lt;/li>
&lt;li>출처(크레딧) 표기 불필요&lt;/li>
&lt;/ul>
&lt;p>블로그 글을 쓸 때 매우 유용하므로, 꼭 사용해 보시기 바랍니다.&lt;/p>
&lt;p>※ 라이선스에 대해서는 아래의 &amp;ldquo;각주&amp;quot;를 참조해 주세요.&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/p>
&lt;p>이 사이트에서도 적극 활용할 예정입니다.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>&lt;a class="link" href="https://unsplash.com/ko/license" target="_blank" rel="noopener"
>Unsplash 라이선스&lt;/a>&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>'egui에서 일본어를 표시하는 방법'</title><link>http://kenji.blog/ko/p/egui%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 01 Apr 2023 03:17:52 +0900</pubDate><guid>http://kenji.blog/ko/p/egui%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/egui%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'egui에서 일본어를 표시하는 방법'" />&lt;h2 id="egui-샘플-가져오기">egui 샘플 가져오기
&lt;/h2>&lt;p>아래 명령어로 egui 샘플을 실행할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">git clone https://github.com/emilk/eframe_template/ egui_test
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cd egui_test
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cargo run
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="일본어-지원-폰트-불러오기">일본어 지원 폰트 불러오기
&lt;/h2>&lt;p>일본어를 표시하려면 일본어 지원 폰트를 불러와야 합니다.&lt;/p>
&lt;p>&lt;code>src/app.rs&lt;/code>의 &lt;code>pub fn new&lt;/code> 메서드 안에 다음 줄을 추가합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-rust" data-lang="rust">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// 일본어 지원 폰트 불러오기
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">mut&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">fonts&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">egui&lt;/span>::&lt;span class="n">FontDefinitions&lt;/span>::&lt;span class="n">default&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">fonts&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">font_data&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;Meiryo&amp;#34;&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">to_owned&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">egui&lt;/span>::&lt;span class="n">FontData&lt;/span>::&lt;span class="n">from_static&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="fm">include_bytes!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;C:/Windows/Fonts/Meiryo.ttc&amp;#34;&lt;/span>&lt;span class="p">)),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">fonts&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">families&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">entry&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">egui&lt;/span>::&lt;span class="n">FontFamily&lt;/span>::&lt;span class="n">Proportional&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">or_default&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">insert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;Meiryo&amp;#34;&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">to_owned&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">cc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">egui_ctx&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">set_fonts&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">fonts&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="이제-일본어를-표시할-수-있습니다">이제 일본어를 표시할 수 있습니다.
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/egui%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png"
width="279"
height="120"
srcset="http://kenji.blog/p/egui%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu6798dc327f7454fc6cd8b8de1315ab03_5786_480x0_resize_box_3.png 480w, http://kenji.blog/p/egui%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_hu6798dc327f7454fc6cd8b8de1315ab03_5786_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="232"
data-flex-basis="558px"
>&lt;/p></description></item><item><title>'hugo에서 KaTeX(LaTeX 스타일 수식 표시) 활성화하는 방법'</title><link>http://kenji.blog/ko/p/hugo%E3%81%A7katexlatex%E9%A2%A8%E6%95%B0%E5%BC%8F%E8%A1%A8%E7%A4%BA%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Fri, 31 Mar 2023 23:11:26 +0900</pubDate><guid>http://kenji.blog/ko/p/hugo%E3%81%A7katexlatex%E9%A2%A8%E6%95%B0%E5%BC%8F%E8%A1%A8%E7%A4%BA%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/hugo%E3%81%A7katexlatex%E9%A2%A8%E6%95%B0%E5%BC%8F%E8%A1%A8%E7%A4%BA%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 'hugo에서 KaTeX(LaTeX 스타일 수식 표시) 활성화하는 방법'" />&lt;h1 id="katex란">KaTeX란?
&lt;/h1>&lt;p>KaTeX는 LaTeX 스타일의 수식을 HTML로 표시하기 위한 javascript 라이브러리입니다.&lt;/p>
&lt;p>구체적으로는 아래와 같은 수식을 표시할 수 있습니다.&lt;/p>
$$f(x) = x^2 + x + 41$$
&lt;p>그 외에도 LaTeX 스타일의 수식 표시 라이브러리도 있는 것 같습니다만, KaTeX는 심플하고 빠르다는 정평이 나 있습니다.&lt;/p>
&lt;h1 id="hugo에-도입하는-방법">hugo에 도입하는 방법
&lt;/h1>&lt;ol>
&lt;li>hugo의 폴더 계층에서 &lt;code>layouts/partials/math.html&lt;/code>을 새로 작성합니다.&lt;/li>
&lt;/ol>
&lt;p>내용은 아래와 같이 작성해 주세요.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">&amp;lt;link rel=&amp;#34;stylesheet&amp;#34; href=&amp;#34;https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.css&amp;#34; integrity=&amp;#34;sha384-vKruj+a13U8yHIkAyGgK1J3ArTLzrFGBbBc0tDp4ad/EyewESeXE/Iv67Aj8gKZ0&amp;#34; crossorigin=&amp;#34;anonymous&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;script defer src=&amp;#34;https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.js&amp;#34; integrity=&amp;#34;sha384-PwRUT/YqbnEjkZO0zZxNqcxACrXe+j766U2amXcgMg5457rve2Y7I6ZJSm2A0mS4&amp;#34; crossorigin=&amp;#34;anonymous&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;script defer src=&amp;#34;https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/contrib/auto-render.min.js&amp;#34; integrity=&amp;#34;sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05&amp;#34; crossorigin=&amp;#34;anonymous&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;script&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">document.addEventListener(&amp;#34;DOMContentLoaded&amp;#34;, function() {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> renderMathInElement(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> document.body,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> delimiters: [
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {left: &amp;#34;$$&amp;#34;, right: &amp;#34;$$&amp;#34;, display: true},
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {left: &amp;#34;\\[&amp;#34;, right: &amp;#34;\\]&amp;#34;, display: true},
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {left: &amp;#34;$&amp;#34;, right: &amp;#34;$&amp;#34;, display: false},
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {left: &amp;#34;\\(&amp;#34;, right: &amp;#34;\\)&amp;#34;, display: false}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> });
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> });
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;/script&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="2">
&lt;li>다음으로 기존 파일 &lt;code>layouts/partials/extend_head.html&lt;/code>에 아래의 코드를 추가합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{ if or .Params.math .Site.Params.math }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{ partial &amp;#34;math.html&amp;#34; . }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{{ end }}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="3">
&lt;li>이것으로 KaTeX를 사용할 준비가 완료되었습니다.&lt;/li>
&lt;/ol>
&lt;p>페이지의 front matter에 &lt;code>math: true&lt;/code>를 추가함으로써, KaTeX를 활성화할 수 있습니다.&lt;/p>
&lt;ol start="4">
&lt;li>이제 페이지 본문에 수식을 LaTeX 스타일로 작성하기만 하면 됩니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">$$ e^{i \pi} = -1 $$
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>위와 같이 작성하면, 아래와 같이 표시됩니다.&lt;/p>
$$ e^{i \pi} = -1 $$
&lt;h1 id="참고">참고
&lt;/h1>&lt;ul>
&lt;li>&lt;a class="link" href="https://reorx.github.io/hugo-PaperModX/docs/math-typesetting/" target="_blank" rel="noopener"
>Math Typesetting | PaperModX&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://katex.org/docs/autorender.html" target="_blank" rel="noopener"
>KaTex Auto-render Extension&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://www.storange.jp/2017/02/katex.html" target="_blank" rel="noopener"
>KaTeX 도입 | The Strange Storage&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'추천 비즈니스 서적'</title><link>http://kenji.blog/ko/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/</link><pubDate>Sun, 19 Mar 2023 18:13:14 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/</guid><description>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img.png" alt="Featured image of post '추천 비즈니스 서적'" />&lt;h2 id="사람을-움직이는-법">사람을 움직이는 법
&lt;/h2>&lt;p>&lt;a class="link" href="https://amzn.to/3YTv0Dr" target="_blank" rel="noopener"
>https://amzn.to/3YTv0Dr&lt;/a>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_1.png"
width="158"
height="218"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_1_hu0b4e8b3b2e8876499a2f9254f3b03b70_47860_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_1_hu0b4e8b3b2e8876499a2f9254f3b03b70_47860_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="72"
data-flex-basis="173px"
>&lt;/p>
&lt;h2 id="미움받을-용기">미움받을 용기
&lt;/h2>&lt;p>&lt;a class="link" href="https://amzn.to/3n3SVCQ" target="_blank" rel="noopener"
>https://amzn.to/3n3SVCQ&lt;/a>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_4.png"
width="154"
height="218"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_4_huda24c6b40e214f1b3d7c78666e957c42_67528_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_4_huda24c6b40e214f1b3d7c78666e957c42_67528_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/p>
&lt;h2 id="life-shift-100세-시대의-인생-전략">LIFE SHIFT 100세 시대의 인생 전략
&lt;/h2>&lt;p>&lt;a class="link" href="https://amzn.to/3TtKUDf" target="_blank" rel="noopener"
>https://amzn.to/3TtKUDf&lt;/a>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_3.png"
width="163"
height="218"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_3_hu8ca572c69f660691f78f4503d6e98a90_44702_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_3_hu8ca572c69f660691f78f4503d6e98a90_44702_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="74"
data-flex-basis="179px"
>&lt;/p>
&lt;h2 id="7가지-습관">7가지 습관
&lt;/h2>&lt;p>&lt;a class="link" href="https://amzn.to/3TqfjSO" target="_blank" rel="noopener"
>https://amzn.to/3TqfjSO&lt;/a>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_2.png"
width="140"
height="218"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_2_hu532c5c80cffe57a2c6e7fc7e8a9fb9dc_33323_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E6%9B%B8/img_2_hu532c5c80cffe57a2c6e7fc7e8a9fb9dc_33323_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="64"
data-flex-basis="154px"
>&lt;/p></description></item><item><title>'추천하는 Chrome 확장 프로그램'</title><link>http://kenji.blog/ko/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/</link><pubDate>Sun, 19 Mar 2023 02:54:30 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/</guid><description>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_4.png" alt="Featured image of post '추천하는 Chrome 확장 프로그램'" />&lt;h1 id="추천하는-chrome-확장-프로그램">추천하는 Chrome 확장 프로그램
&lt;/h1>&lt;p>현재 사용 중인 Chrome 확장 프로그램을 소개합니다. Chrome이라고는 하지만 Microsoft Edge에서도 사용할 수 있습니다.&lt;/p>
&lt;h2 id="1-simplegestures">1. simpleGestures
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_2.png"
width="640"
height="400"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_2_hu4bcd797593a745b5f9b4cb285de52b24_52497_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_2_hu4bcd797593a745b5f9b4cb285de52b24_52497_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="160"
data-flex-basis="384px"
>&lt;/p>
&lt;p>마우스 제스처를 사용할 수 있게 해주는 확장 프로그램입니다.
키보드를 사용하거나 툴바의 버튼에 맞추지 않아도 브라우저를 조작할 수 있습니다.&lt;/p>
&lt;p>예를 들어, 마우스 오른쪽 버튼을 누른 채로 마우스를 왼쪽으로 슬라이드하면 뒤로 가기, 마우스 오른쪽 버튼을 누른 채로 마우스를 오른쪽으로 슬라이드하면 앞으로 가기 등의 조작이 가능합니다.&lt;/p>
&lt;p>이 역시 오픈 소스이기 때문에 신뢰성이 높습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://chrome.google.com/webstore/detail/simplegestures/flfminafiamnggnldfpilnfnmbgmiegn" target="_blank" rel="noopener"
>simpleGestures&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/RyutaKojima/simpleGestures" target="_blank" rel="noopener"
>github&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="2-ublock-origin">2. uBlock Origin
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_3.png"
width="100"
height="100"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_3_hu67a45412a01a15e955f073af8a67274e_3982_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_3_hu67a45412a01a15e955f073af8a67274e_3982_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;p>광고를 차단하는 확장 프로그램입니다. 오픈 소스이기 때문에 신뢰성이 높습니다. 또한, CPU나 메모리 사용량도 적어 쾌적하게 동작합니다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak" target="_blank" rel="noopener"
>uBlock Origin&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/gorhill/uBlock/" target="_blank" rel="noopener"
>github&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="3-deepl-번역">3. DeepL 번역
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img.png"
width="640"
height="400"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_hub3c737317700497686769948a4bd0d5d_91291_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_hub3c737317700497686769948a4bd0d5d_91291_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="160"
data-flex-basis="384px"
>&lt;/p>
&lt;p>세계적으로 유명한 번역 서비스 DeepL을 사용하여 페이지 내를 번역할 수 있는 Chrome 확장 프로그램입니다. 브라우저에서 번역하고 싶은 문장을 선택하면 DeepL 아이콘이 표시되며, 클릭하면 자동 번역됩니다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://chrome.google.com/webstore/detail/deepl-translate-reading-w/cofdbpoegempjloogbagkncekinflcnj?hl=ja" target="_blank" rel="noopener"
>DeepL Translator&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="4-chatgpt-sidebar">4. ChatGPT Sidebar
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_5.png"
width="640"
height="400"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_5_hu10d1b065dcac4fe890e2b430c09f6a86_129788_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_5_hu10d1b065dcac4fe890e2b430c09f6a86_129788_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="160"
data-flex-basis="384px"
>&lt;/p>
&lt;p>ChatGPT를 슬라이드 바에서 사용할 수 있게 해주는 확장 프로그램입니다. Ctrl+P를 눌러 슬라이드 바를 표시할 수 있으며, 바로 AI에게 질문할 수 있습니다.
페이지 내에서 선택된 문자열이 있으면 그대로 질문 문장으로 복사되기 때문에 Ctrl+Enter로 바로 질문할 수 있습니다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://chrome.google.com/webstore/detail/chatgpt-sidebar-support-g/difoiogjjojoaoomphldepapgpbgkhkb" target="_blank" rel="noopener"
>ChatGPT Sidebar&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="5-salesforce-devtools">5. Salesforce DevTools
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_1.png"
width="640"
height="400"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_1_hue339a6462b95e183512b6c5779072273_131133_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AE-chorme-%E6%8B%A1%E5%BC%B5/img_1_hue339a6462b95e183512b6c5779072273_131133_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="160"
data-flex-basis="384px"
>&lt;/p>
&lt;p>Salesforce 개발에 유용한 기능을 추가하는 확장 프로그램입니다.
Salesforce를 사용하지 않는 분들에게는 필요 없을 것이라 생각합니다.&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://chrome.google.com/webstore/detail/salesforce-devtools/ehgmhinnhggigkogkbhnbodhbfjgncjf" target="_blank" rel="noopener"
>Salesforce DevTools&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'egui 사용해보기'</title><link>http://kenji.blog/ko/p/egui%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/</link><pubDate>Sat, 18 Mar 2023 10:27:02 +0900</pubDate><guid>http://kenji.blog/ko/p/egui%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/egui%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/demo.gif" alt="Featured image of post 'egui 사용해보기'" />&lt;h1 id="egui란">egui란
&lt;/h1>&lt;p>Rust에서 사용할 수 있는 GUI 라이브러리입니다.&lt;/p>
&lt;h1 id="egui-사용해보기">egui 사용해보기
&lt;/h1>&lt;p>다음 명령어로 egui 샘플을 실행할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">git clone https://github.com/emilk/eframe_template/ egui_test
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cd egui_test
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cargo run
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이제 샘플 코드를 만지면서 여러 가지를 테스트해 볼 수 있습니다.&lt;/p>
&lt;h1 id="참고">참고
&lt;/h1>&lt;p>&lt;a class="link" href="https://github.com/emilk/egui" target="_blank" rel="noopener"
>공식 github&lt;/a>&lt;/p></description></item><item><title>rustc를 업데이트하는 방법</title><link>http://kenji.blog/ko/p/rustc%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 18 Mar 2023 10:27:02 +0900</pubDate><guid>http://kenji.blog/ko/p/rustc%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/rustc%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post rustc를 업데이트하는 방법" />&lt;h1 id="rustc를-업데이트하는-방법">rustc를 업데이트하는 방법
&lt;/h1>&lt;p>아래의 한 줄을 명령어로 실행하기만 하면 됩니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">rustup update
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h1 id="출력-참고">출력 참고
&lt;/h1>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">rustup&lt;/span> &lt;span class="n">update&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">syncing&lt;/span> &lt;span class="n">channel&lt;/span> &lt;span class="n">updates&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="s1">&amp;#39;stable-x86_64-pc-windows-msvc&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">warning&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Signature&lt;/span> &lt;span class="n">verification&lt;/span> &lt;span class="n">failed&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="s1">&amp;#39;https://static.rust-lang.org/dist/channel-rust-stable.toml&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">latest&lt;/span> &lt;span class="n">update&lt;/span> &lt;span class="n">on&lt;/span> &lt;span class="mi">2023&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">03&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">09&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rust&lt;/span> &lt;span class="n">version&lt;/span> &lt;span class="mf">1.68&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="n">c8cc3432&lt;/span> &lt;span class="mi">2023&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">03&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">06&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">downloading&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rust-src&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">downloading&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;cargo&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">downloading&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;clippy&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">downloading&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rust-docs&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">downloading&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rust-std&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">downloading&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rustc&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mf">63.9&lt;/span> &lt;span class="n">MiB&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="mf">63.9&lt;/span> &lt;span class="n">MiB&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">100&lt;/span> &lt;span class="o">%&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="mf">37.5&lt;/span> &lt;span class="n">MiB&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="n">ETA&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">s&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">downloading&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rustfmt&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">removing&lt;/span> &lt;span class="n">previous&lt;/span> &lt;span class="n">version&lt;/span> &lt;span class="n">of&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rust-src&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">removing&lt;/span> &lt;span class="n">previous&lt;/span> &lt;span class="n">version&lt;/span> &lt;span class="n">of&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;cargo&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">removing&lt;/span> &lt;span class="n">previous&lt;/span> &lt;span class="n">version&lt;/span> &lt;span class="n">of&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;clippy&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">removing&lt;/span> &lt;span class="n">previous&lt;/span> &lt;span class="n">version&lt;/span> &lt;span class="n">of&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rust-docs&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">removing&lt;/span> &lt;span class="n">previous&lt;/span> &lt;span class="n">version&lt;/span> &lt;span class="n">of&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rust-std&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">removing&lt;/span> &lt;span class="n">previous&lt;/span> &lt;span class="n">version&lt;/span> &lt;span class="n">of&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rustc&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">removing&lt;/span> &lt;span class="n">previous&lt;/span> &lt;span class="n">version&lt;/span> &lt;span class="n">of&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rustfmt&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">installing&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rust-src&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">installing&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;cargo&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">installing&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;clippy&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">installing&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rust-docs&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mf">19.4&lt;/span> &lt;span class="n">MiB&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="mf">19.4&lt;/span> &lt;span class="n">MiB&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">100&lt;/span> &lt;span class="o">%&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="mf">2.4&lt;/span> &lt;span class="n">MiB&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="n">ETA&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">s&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">installing&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rust-std&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mf">27.6&lt;/span> &lt;span class="n">MiB&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="mf">27.6&lt;/span> &lt;span class="n">MiB&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">100&lt;/span> &lt;span class="o">%&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="mf">12.7&lt;/span> &lt;span class="n">MiB&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="n">ETA&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">s&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">installing&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rustc&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mf">63.9&lt;/span> &lt;span class="n">MiB&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="mf">63.9&lt;/span> &lt;span class="n">MiB&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">100&lt;/span> &lt;span class="o">%&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="mf">13.8&lt;/span> &lt;span class="n">MiB&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="n">s&lt;/span> &lt;span class="n">ETA&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">s&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">installing&lt;/span> &lt;span class="n">component&lt;/span> &lt;span class="s1">&amp;#39;rustfmt&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">checking&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">updates&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">downloading&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">update&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">stable&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">x86_64&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">pc&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">windows&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">msvc&lt;/span> &lt;span class="n">updated&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">rustc&lt;/span> &lt;span class="mf">1.68&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="n">c8cc3432&lt;/span> &lt;span class="mi">2023&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">03&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">06&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">from&lt;/span> &lt;span class="n">rustc&lt;/span> &lt;span class="mf">1.64&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">a55dd71d5&lt;/span> &lt;span class="mi">2022&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">09&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">19&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">info&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">cleaning&lt;/span> &lt;span class="n">up&lt;/span> &lt;span class="n">downloads&lt;/span> &lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">tmp&lt;/span> &lt;span class="n">directories&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>AG03 노이즈 해결 방법</title><link>http://kenji.blog/ko/p/ag03%E3%83%8E%E3%82%A4%E3%82%BA%E8%A7%A3%E6%B6%88%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 18 Mar 2023 01:17:10 +0900</pubDate><guid>http://kenji.blog/ko/p/ag03%E3%83%8E%E3%82%A4%E3%82%BA%E8%A7%A3%E6%B6%88%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/ag03%E3%83%8E%E3%82%A4%E3%82%BA%E8%A7%A3%E6%B6%88%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post AG03 노이즈 해결 방법" />&lt;h1 id="yamaha-ag03-노이즈-해결-방법">YAMAHA AG03 노이즈 해결 방법
&lt;/h1>&lt;p>AG03 모니터로 PC 소리를 듣다 보면 정기적으로 (1분에서 3분 정도에 1번) 지직거리는 노이즈가 발생해서,
알아보니 AG03 노이즈 대책으로 다음과 같은 방법이 있는 것 같습니다.&lt;/p>
&lt;p>&lt;a class="link" href="https://jp.yamaha.com/support/updates/yamaha_steinberg_usb_driver_for_win.html" target="_blank" rel="noopener"
>https://jp.yamaha.com/support/updates/yamaha_steinberg_usb_driver_for_win.html&lt;/a>&lt;/p>
&lt;p>위 사이트에서 Yamaha Steinberg USB Driver를 다운로드하여 설치하니 노이즈가 해결되었습니다.&lt;/p>
&lt;div style="background:#fff;width:120px;height:215px;box-sizing:border-box;border:1px solid #ccc;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;">&lt;div style="line-height:0;">&lt;img src="https://static.jp.mercari.com/assets/img/common/jp/logo_horizontal.png" width="105">&lt;/div>&lt;a href="https://jp.mercari.com/item/m10570024971?afid=1916658352" style="width:100px;height:100px;background:#eee;" target="_self">&lt;img src="https://ambassador-system.mercari.com/v1/i?id=m10570024971&amp;svc=m" style="line-height:0;width:100px;height:100px;object-fit:contain;"/>&lt;/a>&lt;div style="padding:12px 0;width:100%;text-align:center;">&lt;a href="https://jp.mercari.com/item/m10570024971?afid=1916658352" style="width:100px;height:32px;background-color:#E32B36;border-radius:4px;line-height:14px;text-align:center;color:#fff;font-weight:bold;border:0;font-size:12px;display:inline-flex;justify-content:center;align-items:center;" target="_self">지금 바로 구매&lt;/a>&lt;/div>&lt;/div>
&lt;h1 id="참고">참고
&lt;/h1>&lt;p>&lt;a class="link" href="https://web.archive.org/web/20201003230738/http://yamaha.custhelp.com/app/answers/detail/a_id/7202" target="_blank" rel="noopener"
>https://web.archive.org/web/20201003230738/http://yamaha.custhelp.com/app/answers/detail/a_id/7202&lt;/a>&lt;/p></description></item><item><title>'추천하는 PC 주변기기'</title><link>http://kenji.blog/ko/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEpc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8/</link><pubDate>Tue, 28 Feb 2023 00:51:49 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEpc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8/</guid><description>&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEpc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8/img.png" alt="Featured image of post '추천하는 PC 주변기기'" />&lt;h1 id="현역-엔지니어가-추천하는--갖고-싶은-pc-주변기기">현역 엔지니어가 추천하는 &amp;amp; 갖고 싶은 PC 주변기기
&lt;/h1>&lt;h2 id="키보드">키보드
&lt;/h2>&lt;p>뭐니 뭐니 해도 키보드는 고장 나기 어려운 정전용량 무접점 방식을 추천합니다.
저는 거의 10년 이상 &lt;a class="link" href="https://amzn.to/3IzOOFO" target="_blank" rel="noopener"
>RealForce&lt;/a>를 가지고 있는데, 아직도 현역으로 잘 사용하고 있습니다.
사용하고 있는 타입은 영어 배열의 저소음 모델입니다.&lt;/p>
&lt;p>다만, 최근에는 &lt;a class="link" href="https://amzn.to/3Z5skmR" target="_blank" rel="noopener"
>Logitech MX Keys&lt;/a>라는 키보드도 관심이 갑니다.&lt;/p>
&lt;h2 id="트랙볼">트랙볼
&lt;/h2>&lt;p>포인팅 디바이스는 마우스보다 피로를 줄일 수 있는 트랙볼을 추천합니다.&lt;/p>
&lt;p>사용하고 있는 것은 &lt;a class="link" href="https://amzn.to/3IYOwtf" target="_blank" rel="noopener"
>Logitech MX Ergo&lt;/a>입니다. 이것은 1만 엔 이상하는 고가품이지만, 그 이상의 가치가 있다고 생각합니다.&lt;/p>
&lt;p>볼이 큰 타입으로 집게손가락·가운뎃손가락으로 조작하는 &lt;a class="link" href="https://amzn.to/3Zu5tB8" target="_blank" rel="noopener"
>DEFT PRO(M-DPT1MRXBK)&lt;/a>도 관심이 갑니다.
&lt;img src="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEpc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8/img_1.png"
width="700"
height="680"
srcset="http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEpc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8/img_1_hu930fae58f4873e2ed261c55e6b025235_528450_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%81%AEpc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8/img_1_hu930fae58f4873e2ed261c55e6b025235_528450_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="102"
data-flex-basis="247px"
>&lt;/p>
&lt;h2 id="디스플레이">디스플레이
&lt;/h2>&lt;p>어떤 것이든 좋지만, 해상도가 높은 4K 디스플레이를 추천합니다.&lt;/p>
&lt;p>현재는 &lt;a class="link" href="https://amzn.to/3y0ViIW" target="_blank" rel="noopener"
>DELL의 4K 디스플레이&lt;/a>를 사용하고 있습니다.&lt;/p>
&lt;p>지금은 와이드 디스플레이인 &lt;a class="link" href="https://amzn.to/3kz7BZH" target="_blank" rel="noopener"
>EIZO의 디스플레이&lt;/a> 또는 &lt;a class="link" href="https://amzn.to/3xZleo1" target="_blank" rel="noopener"
>DELL의 디스플레이&lt;/a>를 갖고 싶다고 생각합니다.&lt;/p></description></item><item><title>fontplus.jp에 대하여</title><link>http://kenji.blog/ko/p/fontplus.jp/</link><pubDate>Tue, 07 Feb 2023 20:59:01 +0900</pubDate><guid>http://kenji.blog/ko/p/fontplus.jp/</guid><description>&lt;img src="http://kenji.blog/p/fontplus.jp/img.png" alt="Featured image of post fontplus.jp에 대하여" />&lt;h1 id="유료-웹-폰트를-사용하기-위한-서비스-fontplusjp">유료 웹 폰트를 사용하기 위한 서비스 fontplus.jp
&lt;/h1>&lt;p>&lt;a class="link" href="https://fontplus.jp/" target="_blank" rel="noopener"
>https://fontplus.jp/&lt;/a>&lt;/p>
&lt;p>월 1,100엔으로 모든 폰트를 사용할 수 있으며, 여러 사이트에서의 사용도 지원합니다.&lt;/p></description></item><item><title>HUGO에서 HTML 태그 사용하기</title><link>http://kenji.blog/ko/p/hugo%E3%81%A7html%E3%82%BF%E3%82%B0%E3%82%92%E4%BD%BF%E3%81%86/</link><pubDate>Tue, 17 Jan 2023 19:20:32 +0900</pubDate><guid>http://kenji.blog/ko/p/hugo%E3%81%A7html%E3%82%BF%E3%82%B0%E3%82%92%E4%BD%BF%E3%81%86/</guid><description>&lt;img src="http://kenji.blog/p/hugo%E3%81%A7html%E3%82%BF%E3%82%B0%E3%82%92%E4%BD%BF%E3%81%86/img.png" alt="Featured image of post HUGO에서 HTML 태그 사용하기" />&lt;p>HUGO의 기본 설정에서는 게시물 내에 HTML 태그를 사용할 수 없게 되어 있지만, config.toml에 아래와 같이 기재하면 사용할 수 있게 됩니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-toml" data-lang="toml">&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="nx">markup&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">goldmark&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">renderer&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">unsafe&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="kc">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>참고: &lt;a class="link" href="https://gohugo.io/getting-started/configuration-markup" target="_blank" rel="noopener"
>Configure Markup&lt;/a>&lt;/p></description></item><item><title>'GitHub 스폰서 모집'</title><link>http://kenji.blog/ko/p/github%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B5%E3%83%BC%E5%8B%9F%E9%9B%86/</link><pubDate>Tue, 17 Jan 2023 18:13:56 +0900</pubDate><guid>http://kenji.blog/ko/p/github%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B5%E3%83%BC%E5%8B%9F%E9%9B%86/</guid><description>&lt;img src="http://kenji.blog/p/github%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B5%E3%83%BC%E5%8B%9F%E9%9B%86/img.png" alt="Featured image of post 'GitHub 스폰서 모집'" />&lt;h1 id="github-스폰서-모집">GitHub 스폰서 모집
&lt;/h1>&lt;p>아래 버튼을 통해 GitHub 스폰서가 되어 주시면 감사하겠습니다.&lt;/p>
&lt;iframe src="https://github.com/sponsors/kenjinote/button" title="Sponsor kenjinote" height="35" width="116" style="border: 0;">&lt;/iframe>
&lt;p>도구 개발 등에 유용하게 사용하겠습니다.&lt;/p>
&lt;p>코드 서명 인증서를 발급받을 수 있을 때까지 열심히 하겠습니다!&lt;/p></description></item><item><title>버튼에 대하여</title><link>http://kenji.blog/ko/p/%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A4%E3%81%84%E3%81%A6/</link><pubDate>Sat, 14 Jan 2023 20:24:00 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A4%E3%81%84%E3%81%A6/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A4%E3%81%84%E3%81%A6/img.png" alt="Featured image of post 버튼에 대하여" />&lt;h1 id="버튼이란">버튼이란
&lt;/h1>&lt;p>버튼은 GUI 컨트롤 중 하나로 Windows 표준 API를 통해 구현할 수 있습니다.
화면 상의 영역을 클릭(마우스 왼쪽 버튼 다운, 마우스 왼쪽 버튼 업)하면,
프로그램에서 지정한 처리를 실행할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">// 버튼 생성
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">CreateWindow(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> TEXT(&amp;#34;BUTTON&amp;#34;),
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> TEXT(&amp;#34;Close&amp;#34;),
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> WS_CHILD|WS_VISIBLE,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 10,10,128,30,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> hWnd,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (HMENU)ID_BUTTON1,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ((LPCREATESTRUCT)lParam)-&amp;gt;hInstance,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 0);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> // 클릭되었을 때 OS에서 윈도우로 WM_COMMAND 메시지가 전송됩니다.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> case WM_COMMAND:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> switch(LOWORD(wParam))
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> case ID_BUTTON1:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> SendMessage(hWnd,WM_CLOSE,0,0);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> break;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> break;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>샘플 코드는 아래에 게재되어 있습니다.
&lt;a class="link" href="https://github.com/kenjinote/button" target="_blank" rel="noopener"
>button&lt;/a>&lt;/p></description></item><item><title>'ThinkPad(중고)를 샀다'</title><link>http://kenji.blog/ko/p/thinkpad%E4%B8%AD%E5%8F%A4%E3%82%92%E8%B2%B7%E3%81%A3%E3%81%9F/</link><pubDate>Fri, 13 Jan 2023 19:07:00 +0900</pubDate><guid>http://kenji.blog/ko/p/thinkpad%E4%B8%AD%E5%8F%A4%E3%82%92%E8%B2%B7%E3%81%A3%E3%81%9F/</guid><description>&lt;img src="http://kenji.blog/p/thinkpad%E4%B8%AD%E5%8F%A4%E3%82%92%E8%B2%B7%E3%81%A3%E3%81%9F/img.png" alt="Featured image of post 'ThinkPad(중고)를 샀다'" />&lt;h1 id="노트북-thinkpad중고를-샀다">노트북 ThinkPad(중고)를 샀다
&lt;/h1>&lt;p>노트북 작업은 거의 원격 데스크톱 연결로 다른 단말기에 들어가서 작업하고 있기 때문에 고사양 PC는 필요 없어서 크롬북이어도 괜찮았지만, 좋은 디자인이나 고해상도 제품이 없어서 ThinkPad를 샀습니다.&lt;/p>
&lt;p>사양은 아래와 같고, 가격은 여러 가지 포인트를 사용하여 5만 5천엔대였습니다.&lt;/p>
&lt;h2 id="thinkpad-t470s">ThinkPad T470s
&lt;/h2>&lt;ul>
&lt;li>CPU: Intel Core i7 7600U&lt;/li>
&lt;li>RAM: 24GB&lt;/li>
&lt;li>SSD: 512GB&lt;/li>
&lt;li>OS: Windows 10 Pro 64bit&lt;/li>
&lt;li>화면: 14.0형 와이드 (논글레어 패널)&lt;/li>
&lt;li>해상도: WQHD 액정 2560×1440&lt;/li>
&lt;li>무게: 약 1.32kg&lt;/li>
&lt;li>비고: 영문 키보드&lt;/li>
&lt;/ul>
&lt;p>중고라서 사용감이나 흠집이 있을까 생각했지만, 전혀 문제없어서 좋았습니다.
배터리도 현재 문제없이 사용하고 있습니다.&lt;/p>
&lt;h2 id="현재-생각나는-불만점">현재 생각나는 불만점
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Pause&lt;/code> 키와 &lt;code>App&lt;/code> 키가 없다. &lt;code>Pause&lt;/code> 키는 시스템 설정을 여는 단축키로 사용하고 있었다. 또한, &lt;code>App&lt;/code> 키는 팝업 메뉴를 열 때 사용하고 있었으므로 없으면 불편하다.&lt;/li>
&lt;li>키보드의 화살표 키 바로 곁에 &lt;code>PageUp&lt;/code> 키와 &lt;code>PageDown&lt;/code> 키가 있어서 자주 잘못 누른다. 이것은 익숙해지는 것일지도 모른다.&lt;/li>
&lt;/ul>
&lt;h2 id="그-밖에-검토했지만-사지-않은-pc">그 밖에 검토했지만 사지 않은 PC
&lt;/h2>&lt;ul>
&lt;li>ASUS Chromebook Flip C436FA (C436FA-ENG)&lt;/li>
&lt;li>HP 노트북 HP15s-fq&lt;/li>
&lt;/ul>
&lt;p>참고 자료: &lt;a class="link" href="https://www.lenovojp.com/business/product/note/pdf/thinkpad_t470s.pdf" target="_blank" rel="noopener"
>ThinkPad T470s&lt;/a>&lt;/p></description></item><item><title>TeamViewer로 간단한 원격 연결</title><link>http://kenji.blog/ko/p/teamviewer%E3%81%A7%E7%B0%A1%E5%8D%98%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E6%8E%A5%E7%B6%9A/</link><pubDate>Fri, 13 Jan 2023 01:45:00 +0900</pubDate><guid>http://kenji.blog/ko/p/teamviewer%E3%81%A7%E7%B0%A1%E5%8D%98%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E6%8E%A5%E7%B6%9A/</guid><description>&lt;img src="http://kenji.blog/p/teamviewer%E3%81%A7%E7%B0%A1%E5%8D%98%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E6%8E%A5%E7%B6%9A/img.png" alt="Featured image of post TeamViewer로 간단한 원격 연결" />&lt;h1 id="teamviewer로-간단한-원격-연결">TeamViewer로 간단한 원격 연결
&lt;/h1>&lt;p>TeamViewer를 사용하면 원격 데스크톱 연결을 간단하게 할 수 있습니다.&lt;/p>
&lt;p>원격 대상과 원격 주체에서 TeamViewer를 실행하고,
원격 주체에서 원격 대상의 ID와 비밀번호를 입력하면 원격 연결이 가능합니다.&lt;/p>
&lt;p>명령줄에서 원격 연결을 할 경우에는 다음과 같이 합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">%ProgramFiles%\TeamViewer\TeamViewer.exe -i &amp;lt;ID&amp;gt; -P &amp;lt;Password&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>&amp;lt;ID&amp;gt;&lt;/code>에는 원격 대상의 ID를, &lt;code>&amp;lt;Password&amp;gt;&lt;/code>에는 원격 대상의 비밀번호를 입력합니다.&lt;/p>
&lt;p>위의 명령어로 바로가기 파일을 만들어 두면, ID/PW 입력을 생략할 수 있어 편리합니다.&lt;/p>
&lt;p>참고 사이트: &lt;a class="link" href="https://community.teamviewer.com/English/kb/articles/34447-command-line-parameters" target="_blank" rel="noopener"
>Command line parameters&lt;/a>&lt;/p></description></item><item><title>'명언집'</title><link>http://kenji.blog/ko/p/%E5%90%8D%E8%A8%80%E9%9B%86/</link><pubDate>Sat, 15 Oct 2022 17:00:43 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%90%8D%E8%A8%80%E9%9B%86/</guid><description>&lt;img src="http://kenji.blog/p/%E5%90%8D%E8%A8%80%E9%9B%86/img.png" alt="Featured image of post '명언집'" />&lt;blockquote>
&lt;p>어리석은 자는 경험에서 배우고, 현명한 자는 역사에서 배운다 (폰 비스마르크)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>물고기를 주지 말고, 낚시하는 법을 가르쳐라 (노자)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>갈망하라, 우직하게 (스티브 잡스)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>완벽을 목표로 하기보다 일단 해내라 (마크 저커버그)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>단순함을 유지하라 (제임스 고슬링)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>나를 싫어하는 사람들을 신경 쓸 시간이 없다. 나를 사랑하는 사람들을 사랑하기에도 너무 바쁘다. (스누피)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>인간에게 있어 가장 큰 행복은 『자신의 능력을 살릴 수 있는 일을 만나는 것』 (카를 마르크스)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>어설픈 지식이 위험하다고 한들, 그 위험에서 벗어날 만큼 충분한 지식을 가진 사람이 과연 어디 있을까. (토머스 헉슬리 1877)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>트위들디가 덧붙여 말했다. &amp;ldquo;거꾸로 말해서, 만약 그렇다면 그럴지도 모르지. 만약 그랬다면, 그렇게 되었을 거야. 하지만 그렇지 않으니까 그렇지도 않아. 그것이 바로 논리라는 거지.&amp;rdquo; (루이스 캐럴 『거울 나라의 앨리스』 1872)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>클로드 섀넌이 정보화 시대의 아버지이며, 그의 학문적 성과가 20세기 최고 수준이라고 해도 과언이 아니다. (미국 수학회 평가)&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>기호 대수 이론의 현 상황을 아는 사람들은, 이 해석 과정의 타당성이 사용된 기호의 해석에 의존하는 것이 아니라, 기호를 조합하는 법칙에만 근거한다는 것을 안다. (조지 불, 저서 『논리학의 수학적 분석』 서두에서 1847)&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="http://kenji.blog/p/%E5%90%8D%E8%A8%80%E9%9B%86/img_1.png"
width="621"
height="799"
srcset="http://kenji.blog/p/%E5%90%8D%E8%A8%80%E9%9B%86/img_1_hu404afed9786080ce0c01fe76d3eb48b9_374719_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%90%8D%E8%A8%80%E9%9B%86/img_1_hu404afed9786080ce0c01fe76d3eb48b9_374719_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="77"
data-flex-basis="186px"
>&lt;/p></description></item><item><title>그래프 에디터</title><link>http://kenji.blog/ko/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/</link><pubDate>Thu, 13 Oct 2022 23:31:11 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/img.png" alt="Featured image of post 그래프 에디터" />&lt;h1 id="그래프-에디터">그래프 에디터
&lt;/h1>&lt;p>간단한 그래프를 생성할 수 있는 웹 페이지를 소개합니다.&lt;/p>
&lt;p>&lt;a class="link" href="https://csacademy.com/app/graph_editor/" target="_blank" rel="noopener"
>https://csacademy.com/app/graph_editor/&lt;/a>&lt;/p>
&lt;p>숫자를 입력하여 그래프를 생성할 수 있습니다.
또한, 마우스로 요소를 이동하는 것도 가능합니다.&lt;/p>
&lt;p>&lt;code>Directed&lt;/code>를 클릭하면 방향 그래프(유향 그래프)도 생성할 수 있습니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/img_1.png"
width="300"
height="300"
srcset="http://kenji.blog/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/img_1_hu8da2a7e6049b3e95e8ba3eb3a30bc8ba_14422_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF/img_1_hu8da2a7e6049b3e95e8ba3eb3a30bc8ba_14422_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;p>생성된 그래프는 &lt;code>Download as PNG&lt;/code>를 통해 이미지로 저장할 수 있습니다.&lt;/p></description></item><item><title>Mathematica로 순회 외판원 문제 풀기</title><link>http://kenji.blog/ko/p/mathematica%E3%81%A7%E5%B7%A1%E5%9B%9E%E3%82%BB%E3%83%BC%E3%83%AB%E3%82%B9%E3%83%9E%E3%83%B3%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E3%81%8F/</link><pubDate>Wed, 12 Oct 2022 19:05:58 +0900</pubDate><guid>http://kenji.blog/ko/p/mathematica%E3%81%A7%E5%B7%A1%E5%9B%9E%E3%82%BB%E3%83%BC%E3%83%AB%E3%82%B9%E3%83%9E%E3%83%B3%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E3%81%8F/</guid><description>&lt;img src="http://kenji.blog/p/mathematica%E3%81%A7%E5%B7%A1%E5%9B%9E%E3%82%BB%E3%83%BC%E3%83%AB%E3%82%B9%E3%83%9E%E3%83%B3%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E3%81%8F/img.png" alt="Featured image of post Mathematica로 순회 외판원 문제 풀기" />&lt;h1 id="mathematica로-순회-외판원-문제-풀기">Mathematica로 순회 외판원 문제 풀기
&lt;/h1>&lt;h2 id="문제">문제
&lt;/h2>&lt;blockquote class="twitter-tweet">&lt;p lang="ja" dir="ltr">電車でこんな広告を見かけました😁📸 &lt;a href="https://t.co/iXEgvtXrpL">pic.twitter.com/iXEgvtXrpL&lt;/a>&lt;/p>&amp;mdash; 早稲田大学 早水桃子研究室 (@hayamizu_lab) &lt;a href="https://x.com/hayamizu_lab/status/1579806418982825984?ref_src=twsrc%5Etfw">October 11, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.x.com/widgets.js" charset="utf-8">&lt;/script>
&lt;h2 id="해법">해법
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">d=SparseArray[{{1,2}-&amp;gt;10,{2,1}-&amp;gt;10,{1,5}-&amp;gt;15,{5,1}-&amp;gt;15,{1,4}-&amp;gt;12,{4,1}-&amp;gt;12,{1,3}-&amp;gt;20,{3,1}-&amp;gt;20,{2,5}-&amp;gt;10,{5,2}-&amp;gt;10,{3,4}-&amp;gt;10,{4,3}-&amp;gt;10,{3,8}-&amp;gt;30,{8,3}-&amp;gt;30,{3,7}-&amp;gt;20,{7,3}-&amp;gt;20,{3,6}-&amp;gt;25,{6,3}-&amp;gt;25,{4,5}-&amp;gt;15,{5,4}-&amp;gt;15,{4,8}-&amp;gt;20,{8,4}-&amp;gt;20,{5,9}-&amp;gt;18,{9,5}-&amp;gt;18,{5,8}-&amp;gt;15,{8,5}-&amp;gt;15,{6,7}-&amp;gt;5,{7,6}-&amp;gt;5,{7,8}-&amp;gt;35,{8,7}-&amp;gt;35,{8,9}-&amp;gt;12,{9,8}-&amp;gt;12},{9,9},Infinity];
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>SparseArray 함수로 행렬을 만듭니다. 각각의 요소는 그 요소의 행과 열의 도시 간 거리를 나타냅니다. 예를 들어, 첫 번째 요소 &lt;code>{1,2}-&amp;gt;10&lt;/code>은 1과 2의 거리가 10이라는 의미입니다. 끝에서 두 번째 요소 &lt;code>{9,9}&lt;/code>는 행렬의 크기를 나타내며, 마지막 요소 &lt;code>Infinity&lt;/code>는 지정하지 않은 도시 간 길의 길이가 무한, 즉 길이 없음을 의미합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{len,tour}=FindShortestTour[{1,2,3,4,5,6,7,8,9},DistanceFunction-&amp;gt;(d[[#1,#2]]&amp;amp;)]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>FindShortestTour 함수로 간단하게 순회 외판원 문제를 풀 수 있습니다. &lt;code>{1,2,3,4,5,6,7,8,9}&lt;/code>는 도시의 번호를 나타냅니다. &lt;code>DistanceFunction-&amp;gt;(d[[#1,#2]]&amp;amp;)&lt;/code>는 도시 간의 거리를 나타내는 행렬 d를 전달하고 있습니다.&lt;/p>
&lt;h2 id="출력">출력
&lt;/h2>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{137, {1, 2, 5, 9, 8, 7, 6, 3, 4}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력은 최단 거리와 그때의 순회로입니다. 최단 거리는 &lt;code>137&lt;/code>, 순회로는 &lt;code>1→2→5→9→8→7→6→3→4→1&lt;/code>이 됩니다. ABC 순서로 고치면 &lt;code>A, B, E, I, H, G, F, C, D&lt;/code>가 됩니다.&lt;/p></description></item><item><title>Web페이지 내의 모든 체크박스를 전체 체크하기</title><link>http://kenji.blog/ko/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E5%86%85%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E5%85%A8%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B/</link><pubDate>Wed, 05 Oct 2022 20:07:06 +0900</pubDate><guid>http://kenji.blog/ko/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E5%86%85%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E5%85%A8%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/web%E3%83%9A%E3%83%BC%E3%82%B8%E5%86%85%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E5%85%A8%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B/img.png" alt="Featured image of post Web페이지 내의 모든 체크박스를 전체 체크하기" />&lt;p>Web페이지 내의 체크박스를 전체 체크하려면, F12로 DevTools를 열고, 콘솔에 다음 코드를 붙여넣어 실행합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-js" data-lang="js">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">let&lt;/span> &lt;span class="nx">boxes&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">querySelectorAll&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;input[type=&amp;#34;checkbox&amp;#34;]&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kd">let&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="nx">boxes&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">length&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="nx">i&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="nx">boxes&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">i&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">disabled&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">boxes&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="nx">i&lt;/span>&lt;span class="p">].&lt;/span>&lt;span class="nx">checked&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="kc">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>또는,&lt;/p>
&lt;p>새로 북마크를 생성하고, 등록할 주소(보통 https://&amp;hellip;라고 입력하는 부분)에 다음 코드를 붙여넣어 등록합니다.
체크하고 싶은 Web페이지를 표시하고, 생성한 북마크를 클릭하면 모든 체크박스가 체크됩니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">javascript:(function(){let boxes=document.querySelectorAll(&amp;#39;input[type=&amp;#34;checkbox&amp;#34;]&amp;#39;);for(let i=0;i&amp;lt;boxes.length;i++){if(!boxes[i].disabled){boxes[i].checked=true;}}})();
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>전체 해제할 경우에는, 위 스크립트의 &lt;code>boxes[i].checked = true;&lt;/code> 부분을 &lt;code>boxes[i].checked = false;&lt;/code>로 변경해 주세요.&lt;/p></description></item><item><title>좋아하는 수식</title><link>http://kenji.blog/ko/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%95%B0%E5%BC%8F/</link><pubDate>Wed, 05 Oct 2022 13:24:50 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%95%B0%E5%BC%8F/</guid><description>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E6%95%B0%E5%BC%8F/img.png" alt="Featured image of post 좋아하는 수식" />&lt;h2 id="윌슨의-정리">윌슨의 정리
&lt;/h2>&lt;p>$p$ 가 소수일 때, $(p−1)!≡−1 \pmod p$ 가 성립한다.&lt;/p>
&lt;h2 id="오일러의-공식">오일러의 공식
&lt;/h2>&lt;p>$e^{iπ}+1=0$&lt;/p>
&lt;h2 id="페르마의-마지막-정리">페르마의 마지막 정리
&lt;/h2>&lt;p>$n≥3$ 인 정수 $n$ 에 대해, $x^n+y^n=z^n$ 을 만족하는 양의 정수 쌍 $x, y, z$ 는 존재하지 않는다.&lt;/p>
&lt;h2 id="바젤-문제">바젤 문제
&lt;/h2>&lt;p>$1/1^2+1/2^2+1/3^2+1/4^2+...=π^2/6$&lt;/p>
&lt;h2 id="오일러의-소수-생성식">오일러의 소수 생성식
&lt;/h2>&lt;p>$n^2+n+41$ 은 $n$ 이 $0$ 이상 $39$ 이하의 정수일 때, 모두 소수가 된다.&lt;/p></description></item><item><title>WinGet을 사용하여 명령어로 앱 설치하기</title><link>http://kenji.blog/ko/p/winget-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/</link><pubDate>Wed, 05 Oct 2022 12:15:20 +0900</pubDate><guid>http://kenji.blog/ko/p/winget-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/winget-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/img.png" alt="Featured image of post WinGet을 사용하여 명령어로 앱 설치하기" />&lt;h2 id="전제-조건">전제 조건
&lt;/h2>&lt;p>Windows 11 일 것&lt;/p>
&lt;h2 id="순서">순서
&lt;/h2>&lt;ol>
&lt;li>Microsoft Store에서 &lt;code>앱 인스톨러&lt;/code>를 설치한다
&lt;a class="link" href="https://www.microsoft.com/store/productId/9NBLGGH4NNS1" target="_blank" rel="noopener"
>https://www.microsoft.com/store/productId/9NBLGGH4NNS1&lt;/a>&lt;/li>
&lt;li>명령 프롬프트에서 앱을 설치한다
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">winget&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">Google&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Chrome&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="설치할-수-있는-주요-앱">설치할 수 있는 주요 앱
&lt;/h2>&lt;ul>
&lt;li>Google Chrome (명령어 &lt;code>winget install Google.Chrome&lt;/code>)&lt;/li>
&lt;li>Microsoft Edge (명령어 &lt;code>winget install Microsoft.Edge&lt;/code>)&lt;/li>
&lt;li>Microsoft Teams (명령어 &lt;code>winget install Microsoft.Teams&lt;/code>)&lt;/li>
&lt;li>Microsoft Office (명령어 &lt;code>winget install Microsoft.Office&lt;/code>)&lt;/li>
&lt;li>Visual Studio Code (명령어 &lt;code>winget install vscode&lt;/code>)&lt;/li>
&lt;li>Slack (명령어 &lt;code>winget install SlackTechnologies.Slack&lt;/code>)&lt;/li>
&lt;li>Discord (명령어 &lt;code>winget install Discord.Discord&lt;/code>)&lt;/li>
&lt;li>Docker Desktop (명령어 &lt;code>winget install Docker.DockerDesktop&lt;/code>)&lt;/li>
&lt;li>Git (명령어 &lt;code>winget install Git&lt;/code>)&lt;/li>
&lt;li>7zip (명령어 &lt;code>winget install 7zip&lt;/code>)&lt;/li>
&lt;li>VLC (명령어 &lt;code>winget install VideoLAN.VLC&lt;/code>)&lt;/li>
&lt;/ul>
&lt;h2 id="참고">참고
&lt;/h2>&lt;p>&lt;a class="link" href="https://learn.microsoft.com/ja-jp/windows/package-manager/winget/" target="_blank" rel="noopener"
>winget 도구를 사용한 애플리케이션 설치 및 관리&lt;/a>&lt;/p>
&lt;h3 id="여담">여담
&lt;/h3>&lt;p>Paint.Net도 설치할 수 있을까 생각했는데, 설치할 수 없었다.&lt;/p>
&lt;p>&lt;a class="link" href="https://forums.getpaint.net/topic/118574-please-add-paintnet-to-the-available-packages-for-windows-package-manager-winget/" target="_blank" rel="noopener"
>https://forums.getpaint.net/topic/118574-please-add-paintnet-to-the-available-packages-for-windows-package-manager-winget/&lt;/a>&lt;/p></description></item><item><title>'Rust의 특징'</title><link>http://kenji.blog/ko/p/rust%E3%81%AE%E7%89%B9%E5%BE%B4/</link><pubDate>Mon, 03 Oct 2022 22:47:20 +0900</pubDate><guid>http://kenji.blog/ko/p/rust%E3%81%AE%E7%89%B9%E5%BE%B4/</guid><description>&lt;img src="http://kenji.blog/p/rust%E3%81%AE%E7%89%B9%E5%BE%B4/img.png" alt="Featured image of post 'Rust의 특징'" />&lt;h1 id="rust러스트의-특징">Rust(러스트)의 특징
&lt;/h1>&lt;ul>
&lt;li>Mozilla가 개발하고 있는 비교적 새로운 오픈 소스 프로그래밍 언어&lt;/li>
&lt;li>가비지 컬렉션이 없으며, 빠르고 시스템 프로그래밍에 특화된 언어&lt;/li>
&lt;li>소유권과 차용이라는 독특한 메커니즘을 언어 사양으로 가지며, 메모리 안전성을 보장한다&lt;/li>
&lt;li>크로스 플랫폼에서 동작한다&lt;/li>
&lt;li>Cargo라는 우수한 패키지 매니저를 표준으로 갖추고 있다&lt;/li>
&lt;/ul></description></item><item><title>GitHub Actions에서 동적으로 변수 설정하기</title><link>http://kenji.blog/ko/p/github-actions%E3%81%A7%E5%8B%95%E7%9A%84%E3%81%AB%E5%A4%89%E6%95%B0%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/</link><pubDate>Sun, 02 Oct 2022 02:33:35 +0900</pubDate><guid>http://kenji.blog/ko/p/github-actions%E3%81%A7%E5%8B%95%E7%9A%84%E3%81%AB%E5%A4%89%E6%95%B0%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/github-actions%E3%81%A7%E5%8B%95%E7%9A%84%E3%81%AB%E5%A4%89%E6%95%B0%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/img_1.png" alt="Featured image of post GitHub Actions에서 동적으로 변수 설정하기" />&lt;p>GitHub Actions에서 동적으로 변수를 설정하려면, 아래와 같이 &lt;code>$env:GITHUB_ENV&lt;/code>에 추가로 기록하면 됩니다.&lt;/p>
&lt;p>【Windows의 경우】&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-mysql" data-lang="mysql">&lt;span class="line">&lt;span class="cl">&lt;span class="n">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Rust&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">push&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">branches&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;master&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">pull_request&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">branches&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;master&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">CARGO_TERM_COLOR&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">always&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">jobs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">build&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">runs&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="k">on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">ubuntu&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">latest&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">steps&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">actions&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">checkout&lt;/span>&lt;span class="o">@&lt;/span>&lt;span class="n">v3&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Get&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Environment&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">echo&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;VERSION=1.0.0&amp;#39;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">$&lt;/span>&lt;span class="n">GITHUB_ENV&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">echo&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;NAME=1.0.0&amp;#39;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">$&lt;/span>&lt;span class="n">GITHUB_ENV&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Display&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Environment&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">echo&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">$&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">VERSION&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">echo&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">$&lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">NAME&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">Create&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">Release&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">create_release&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">actions&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">create&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="k">release&lt;/span>&lt;span class="o">@&lt;/span>&lt;span class="n">v1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">GITHUB_TOKEN&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">${{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">secrets&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">GITHUB_TOKEN&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">}}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">with&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">tag_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">${{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">VERSION&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">}}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">release_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">${{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">VERSION&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">}}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">draft&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">prerelease&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Upload&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">Release&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Asset&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">upload&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="k">release&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">asset&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">actions&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">upload&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="k">release&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">asset&lt;/span>&lt;span class="o">@&lt;/span>&lt;span class="n">v1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">GITHUB_TOKEN&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">${{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">secrets&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">GITHUB_TOKEN&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">}}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">with&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">upload_url&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">${{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">steps&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">create_release&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">outputs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">upload_url&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">}}&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c1"># This pulls from the CREATE RELEASE step above, referencing it&amp;#39;s ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">asset_path&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">target&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="k">release&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="err">${{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">NAME&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">}}&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">exe&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">asset_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">${{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">env&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">NAME&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="err">}}&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">exe&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">asset_content_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">application&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">octet&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">stream&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>【Linux의 경우】&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">name: Rust
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">on:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> push:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> branches: [ &amp;#34;main&amp;#34; ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> pull_request:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> branches: [ &amp;#34;main&amp;#34; ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">env:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> CARGO_TERM_COLOR: always
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">jobs:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> build:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> runs-on: ubuntu-latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> steps:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - uses: actions/checkout@v3
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - name: Get Environment
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> run: |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> echo &amp;#39;VERSION=1.0.0&amp;#39; &amp;gt;&amp;gt; $GITHUB_ENV
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> echo &amp;#39;NAME=hello&amp;#39; &amp;gt;&amp;gt; $GITHUB_ENV
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - name: Display Environment
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> run: |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> echo ${{ env.VERSION }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> echo ${{ env.NAME }}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>'git에서 태그 삭제하기'</title><link>http://kenji.blog/ko/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/</link><pubDate>Sun, 02 Oct 2022 02:18:04 +0900</pubDate><guid>http://kenji.blog/ko/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/</guid><description>&lt;img src="http://kenji.blog/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/img.png" alt="Featured image of post 'git에서 태그 삭제하기'" />&lt;h1 id="로컬-태그-삭제하기">로컬 태그 삭제하기
&lt;/h1>&lt;ol>
&lt;li>&lt;code>git tag&lt;/code> 로 로컬에 존재하는 태그를 확인한다.&lt;/li>
&lt;li>&lt;code>git tag -d v0.1.0&lt;/code> 으로 태그를 삭제한다. (&lt;code>v0.1.0&lt;/code> 부분에는 삭제하고 싶은 태그를 지정한다)&lt;/li>
&lt;/ol>
&lt;h1 id="원격-태그-삭제하기">원격 태그 삭제하기
&lt;/h1>&lt;ol>
&lt;li>&lt;code>git ls-remote --tags&lt;/code> 로 원격에 존재하는 태그를 확인한다.&lt;/li>
&lt;li>&lt;code>git push origin --delete v0.1.0&lt;/code> 으로 원격에 존재하는 태그를 삭제한다. (&lt;code>v0.1.0&lt;/code> 부분에는 삭제하고 싶은 태그를 지정한다)&lt;/li>
&lt;/ol>
&lt;h2 id="참고">참고
&lt;/h2>&lt;p>&lt;a class="link" href="https://qumeru.com/magazine/528" target="_blank" rel="noopener"
>git에서 tag를 원격과 로컬에서 삭제하는 방법！&lt;/a>&lt;/p></description></item><item><title>'Rust에서 간단한 창 표시하기'</title><link>http://kenji.blog/ko/p/rust%E3%81%A7%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/</link><pubDate>Sat, 01 Oct 2022 19:08:58 +0900</pubDate><guid>http://kenji.blog/ko/p/rust%E3%81%A7%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/rust%E3%81%A7%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/images/rust_logo.png" alt="Featured image of post 'Rust에서 간단한 창 표시하기'" />&lt;p>Rust에서 간단한 창 표시하기&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-Cargo.toml" data-lang="Cargo.toml">&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="nx">package&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">name&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;win&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">version&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;0.1.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">edition&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;2021&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="nx">dependencies&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">winapi&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">version&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;0.3&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">features&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;winuser&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>소스는 다음과 같습니다&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;span class="lnt">67
&lt;/span>&lt;span class="lnt">68
&lt;/span>&lt;span class="lnt">69
&lt;/span>&lt;span class="lnt">70
&lt;/span>&lt;span class="lnt">71
&lt;/span>&lt;span class="lnt">72
&lt;/span>&lt;span class="lnt">73
&lt;/span>&lt;span class="lnt">74
&lt;/span>&lt;span class="lnt">75
&lt;/span>&lt;span class="lnt">76
&lt;/span>&lt;span class="lnt">77
&lt;/span>&lt;span class="lnt">78
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-main.rs" data-lang="main.rs">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#![windows_subsystem = &lt;/span>&lt;span class="s">&amp;#34;windows&amp;#34;&lt;/span>&lt;span class="cp">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">use&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">winapi&lt;/span>::&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">um&lt;/span>::&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">winuser&lt;/span>::&lt;span class="p">{&lt;/span>&lt;span class="n">RegisterClassW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">WNDCLASSW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">CS_HREDRAW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">CS_VREDRAW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">LoadIconW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">IDI_APPLICATION&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">LoadCursorW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">IDC_ARROW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">CreateWindowExW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">ShowWindow&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">SW_NORMAL&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">UpdateWindow&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">GetMessageW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">TranslateMessage&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">DispatchMessageW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">MSG&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="no">WM_DESTROY&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PostQuitMessage&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">DefWindowProcW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">WS_OVERLAPPEDWINDOW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="no">CW_USEDEFAULT&lt;/span>&lt;span class="p">},&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">wingdi&lt;/span>::&lt;span class="p">{&lt;/span>&lt;span class="n">GetStockObject&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">WHITE_BRUSH&lt;/span>&lt;span class="p">},&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">},&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">shared&lt;/span>::&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">windef&lt;/span>::&lt;span class="p">{&lt;/span>&lt;span class="no">HWND&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">HBRUSH&lt;/span>&lt;span class="p">},&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">minwindef&lt;/span>::&lt;span class="p">{&lt;/span>&lt;span class="no">UINT&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">WPARAM&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">LPARAM&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">LRESULT&lt;/span>&lt;span class="p">},&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">},&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">};&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">use&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">std&lt;/span>::&lt;span class="n">ptr&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">use&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">std&lt;/span>::&lt;span class="n">mem&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">fn&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">unsafe&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">class_name&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;my_window_class_name&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">register_wndclass&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">class_name&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">hwnd&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">create_window&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">class_name&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">hwnd&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">is_null&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">ShowWindow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hwnd&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">SW_NORMAL&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">UpdateWindow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hwnd&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">mut&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">mem&lt;/span>::&lt;span class="n">uninitialized&lt;/span>::&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="no">MSG&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">loop&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">GetMessageW&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="k">mut&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">ptr&lt;/span>::&lt;span class="n">null_mut&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">==&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">TranslateMessage&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="k">mut&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">DispatchMessageW&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="k">mut&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">fn&lt;/span> &lt;span class="nf">encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">source&lt;/span>: &lt;span class="kp">&amp;amp;&lt;/span>&lt;span class="kt">str&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>-&amp;gt; &lt;span class="nb">Vec&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">u16&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">source&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">encode_utf16&lt;/span>&lt;span class="p">().&lt;/span>&lt;span class="n">chain&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">Some&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)).&lt;/span>&lt;span class="n">collect&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">unsafe&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">fn&lt;/span> &lt;span class="nf">register_wndclass&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">class_name&lt;/span>: &lt;span class="kp">&amp;amp;&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="kt">u16&lt;/span>&lt;span class="p">])&lt;/span>&lt;span class="w"> &lt;/span>-&amp;gt; &lt;span class="kt">bool&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">mut&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">winc&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">mem&lt;/span>::&lt;span class="n">zeroed&lt;/span>::&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="no">WNDCLASSW&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">winc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">style&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">CS_HREDRAW&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">CS_VREDRAW&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">winc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">lpfnWndProc&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nb">Some&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">win_proc&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">winc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">hIcon&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">LoadIconW&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ptr&lt;/span>::&lt;span class="n">null_mut&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">IDI_APPLICATION&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">winc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">hCursor&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">LoadCursorW&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ptr&lt;/span>::&lt;span class="n">null_mut&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">IDC_ARROW&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">winc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">hbrBackground&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">GetStockObject&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="no">WHITE_BRUSH&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">as&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">i32&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">as&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">HBRUSH&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">winc&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">lpszClassName&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">class_name&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">as_ptr&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">RegisterClassW&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">winc&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">unsafe&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">fn&lt;/span> &lt;span class="nf">create_window&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">class_name&lt;/span>: &lt;span class="kp">&amp;amp;&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="kt">u16&lt;/span>&lt;span class="p">])&lt;/span>&lt;span class="w"> &lt;/span>-&amp;gt; &lt;span class="nc">HWND&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">CreateWindowExW&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">class_name&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">as_ptr&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">encode&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Hello, World!&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">as_ptr&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="no">WS_OVERLAPPEDWINDOW&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="no">CW_USEDEFAULT&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">CW_USEDEFAULT&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">ptr&lt;/span>::&lt;span class="n">null_mut&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">ptr&lt;/span>::&lt;span class="n">null_mut&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">ptr&lt;/span>::&lt;span class="n">null_mut&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">ptr&lt;/span>::&lt;span class="n">null_mut&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">unsafe&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">extern&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;system&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">fn&lt;/span> &lt;span class="nf">win_proc&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hwnd&lt;/span>: &lt;span class="nc">HWND&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">msg&lt;/span>: &lt;span class="nc">UINT&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">w_param&lt;/span>: &lt;span class="nc">WPARAM&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">l_param&lt;/span>: &lt;span class="nc">LPARAM&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>-&amp;gt; &lt;span class="nc">LRESULT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">match&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="no">WM_DESTROY&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PostQuitMessage&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">_&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">DefWindowProcW&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hwnd&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">msg&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">w_param&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">l_param&lt;/span>&lt;span class="p">),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">};&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="참고">참고
&lt;/h2>&lt;p>&lt;a class="link" href="https://qiita.com/benki/items/c01f7da1e1a71cc91d11" target="_blank" rel="noopener"
>Rust에서 Windows 프로그래밍 - CreateWindow편&lt;/a>&lt;/p></description></item><item><title>'Rust에서 테스트 작성하기'</title><link>http://kenji.blog/ko/p/rust%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F/</link><pubDate>Sat, 01 Oct 2022 02:00:59 +0900</pubDate><guid>http://kenji.blog/ko/p/rust%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F/</guid><description>&lt;img src="http://kenji.blog/p/rust%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F/images/rust_logo.png" alt="Featured image of post 'Rust에서 테스트 작성하기'" />&lt;p>Rust에서 테스트를 작성하려면, 테스트 함수 정의 한 줄 위에 &lt;code>#[test]&lt;/code> 속성을 붙여 함수를 생성합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-rust" data-lang="rust">&lt;span class="line">&lt;span class="cl">&lt;span class="k">fn&lt;/span> &lt;span class="nf">plus&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>:&lt;span class="kt">i32&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">b&lt;/span>:&lt;span class="kt">i32&lt;/span>&lt;span class="p">)&lt;/span>-&amp;gt;&lt;span class="kt">i32&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="cp">#[test]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">fn&lt;/span> &lt;span class="nf">plus_test&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="fm">assert_eq!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plus&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">),&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>테스트 코드는 &lt;code>cargo test&lt;/code>로 실행할 수 있습니다. 테스트가 성공하면 &lt;code>ok&lt;/code>가 출력됩니다.
실패하면 &lt;code>FAILED&lt;/code>가 출력됩니다.&lt;/p>
&lt;p>성공한 경우&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">C:&lt;span class="se">\U&lt;/span>sers&lt;span class="se">\a&lt;/span>dmin&lt;span class="se">\D&lt;/span>esktop&lt;span class="se">\t&lt;/span>est1&amp;gt;cargo &lt;span class="nb">test&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Compiling test1 v0.1.0 &lt;span class="o">(&lt;/span>C:&lt;span class="se">\U&lt;/span>sers&lt;span class="se">\a&lt;/span>dmin&lt;span class="se">\D&lt;/span>esktop&lt;span class="se">\t&lt;/span>est1&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Finished &lt;span class="nb">test&lt;/span> &lt;span class="o">[&lt;/span>unoptimized + debuginfo&lt;span class="o">]&lt;/span> target&lt;span class="o">(&lt;/span>s&lt;span class="o">)&lt;/span> in 0.35s
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Running unittests src&lt;span class="se">\m&lt;/span>ain.rs &lt;span class="o">(&lt;/span>target&lt;span class="se">\d&lt;/span>ebug&lt;span class="se">\d&lt;/span>eps&lt;span class="se">\t&lt;/span>est1-be5d3118bc52cb3a.exe&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">running &lt;span class="m">1&lt;/span> &lt;span class="nb">test&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">test&lt;/span> plus_test ... ok
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">test&lt;/span> result: ok. &lt;span class="m">1&lt;/span> passed&lt;span class="p">;&lt;/span> &lt;span class="m">0&lt;/span> failed&lt;span class="p">;&lt;/span> &lt;span class="m">0&lt;/span> ignored&lt;span class="p">;&lt;/span> &lt;span class="m">0&lt;/span> measured&lt;span class="p">;&lt;/span> &lt;span class="m">0&lt;/span> filtered out&lt;span class="p">;&lt;/span> finished in 0.00s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>실패한 경우&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">C:&lt;span class="se">\U&lt;/span>sers&lt;span class="se">\a&lt;/span>dmin&lt;span class="se">\D&lt;/span>esktop&lt;span class="se">\t&lt;/span>est1&amp;gt;cargo &lt;span class="nb">test&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Compiling test1 v0.1.0 &lt;span class="o">(&lt;/span>C:&lt;span class="se">\U&lt;/span>sers&lt;span class="se">\a&lt;/span>dmin&lt;span class="se">\D&lt;/span>esktop&lt;span class="se">\t&lt;/span>est1&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Finished &lt;span class="nb">test&lt;/span> &lt;span class="o">[&lt;/span>unoptimized + debuginfo&lt;span class="o">]&lt;/span> target&lt;span class="o">(&lt;/span>s&lt;span class="o">)&lt;/span> in 0.33s
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Running unittests src&lt;span class="se">\m&lt;/span>ain.rs &lt;span class="o">(&lt;/span>target&lt;span class="se">\d&lt;/span>ebug&lt;span class="se">\d&lt;/span>eps&lt;span class="se">\t&lt;/span>est1-be5d3118bc52cb3a.exe&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">running &lt;span class="m">1&lt;/span> &lt;span class="nb">test&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">test&lt;/span> plus_test ... FAILED
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">failures:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---- plus_test stdout ----
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">thread &lt;span class="s1">&amp;#39;plus_test&amp;#39;&lt;/span> panicked at &lt;span class="s1">&amp;#39;assertion failed: `(left == right)`
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> left: `2`,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1"> right: `3`&amp;#39;&lt;/span>, src&lt;span class="se">\m&lt;/span>ain.rs:7:5
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">note: run with &lt;span class="sb">`&lt;/span>&lt;span class="nv">RUST_BACKTRACE&lt;/span>&lt;span class="o">=&lt;/span>1&lt;span class="sb">`&lt;/span> environment variable to display a backtrace
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">failures:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> plus_test
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">test&lt;/span> result: FAILED. &lt;span class="m">0&lt;/span> passed&lt;span class="p">;&lt;/span> &lt;span class="m">1&lt;/span> failed&lt;span class="p">;&lt;/span> &lt;span class="m">0&lt;/span> ignored&lt;span class="p">;&lt;/span> &lt;span class="m">0&lt;/span> measured&lt;span class="p">;&lt;/span> &lt;span class="m">0&lt;/span> filtered out&lt;span class="p">;&lt;/span> finished in 0.00s
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">error: &lt;span class="nb">test&lt;/span> failed, to rerun pass &lt;span class="s1">&amp;#39;--bin test1&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>'Rust에서 MessageBox 표시하기'</title><link>http://kenji.blog/ko/p/rust%E3%81%A7messagebox%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/</link><pubDate>Fri, 30 Sep 2022 23:54:31 +0900</pubDate><guid>http://kenji.blog/ko/p/rust%E3%81%A7messagebox%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/rust%E3%81%A7messagebox%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/images/rust_logo.png" alt="Featured image of post 'Rust에서 MessageBox 표시하기'" />&lt;p>다음 절차에 따라 Rust에서 MessageBox를 표시할 수 있습니다.&lt;/p>
&lt;ol>
&lt;li>Rust를 설치합니다. &lt;a class="link" href="https://kenji.blog/posts/rust%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%8B%E3%81%9F/" target="_blank" rel="noopener"
>Rust 시작하기&lt;/a> 참조&lt;/li>
&lt;li>명령 프롬프트에서 &lt;code>cargo new --bin MessageBox&lt;/code>를 실행합니다.&lt;/li>
&lt;li>&lt;code>MessageBox&lt;/code> 디렉터리로 이동합니다.&lt;/li>
&lt;li>&lt;code>Cargo.toml&lt;/code>을 열고 다음과 같이 수정합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-toml" data-lang="toml">&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="nx">package&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">name&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;hello_world&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">version&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;0.1.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">edition&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;2021&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="nx">dependencies&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">winapi&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;0.2.7&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">user32-sys&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;0.2.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="5">
&lt;li>&lt;code>src\main.rs&lt;/code>를 열고 다음과 같이 수정합니다.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-main.rs" data-lang="main.rs">&lt;span class="line">&lt;span class="cl">&lt;span class="k">extern&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">crate&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">user32&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">extern&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">crate&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">winapi&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">use&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">std&lt;/span>::&lt;span class="n">ffi&lt;/span>::&lt;span class="n">CString&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">use&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">user32&lt;/span>::&lt;span class="n">MessageBoxA&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">use&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">winapi&lt;/span>::&lt;span class="n">winuser&lt;/span>::&lt;span class="p">{&lt;/span>&lt;span class="no">MB_OK&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">MB_ICONINFORMATION&lt;/span>&lt;span class="p">};&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">fn&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">lp_text&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">CString&lt;/span>::&lt;span class="n">new&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Hello, world!&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">unwrap&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">lp_caption&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">CString&lt;/span>::&lt;span class="n">new&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;MessageBox Example&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">unwrap&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">unsafe&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">MessageBoxA&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">std&lt;/span>::&lt;span class="n">ptr&lt;/span>::&lt;span class="n">null_mut&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">lp_text&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">as_ptr&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">lp_caption&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">as_ptr&lt;/span>&lt;span class="p">(),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="no">MB_OK&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="no">MB_ICONINFORMATION&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ol start="6">
&lt;li>
&lt;p>명령 프롬프트에서 &lt;code>cargo run&lt;/code>을 실행합니다.
&lt;img src="http://kenji.blog/p/rust%E3%81%A7messagebox%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/img.png"
width="160"
height="152"
srcset="http://kenji.blog/p/rust%E3%81%A7messagebox%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/img_hu634f1117052e2b61756baa5f3866eef5_4266_480x0_resize_box_3.png 480w, http://kenji.blog/p/rust%E3%81%A7messagebox%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B/img_hu634f1117052e2b61756baa5f3866eef5_4266_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="105"
data-flex-basis="252px"
>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>릴리스 빌드를 하려면 &lt;code>cargo build --release&lt;/code>를 실행합니다.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h1 id="참고">참고
&lt;/h1>&lt;p>&lt;a class="link" href="https://wesleywiser.github.io/post/rust-windows-messagebox-hello-world/" target="_blank" rel="noopener"
>Hello World MesssageBox example in Rust&lt;/a>&lt;/p></description></item><item><title>안다는 것은 무엇일까?</title><link>http://kenji.blog/ko/p/%E3%82%8F%E3%81%8B%E3%82%8B%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/</link><pubDate>Sat, 24 Sep 2022 02:38:18 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%8F%E3%81%8B%E3%82%8B%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%8F%E3%81%8B%E3%82%8B%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/img.png" alt="Featured image of post 안다는 것은 무엇일까?" />&lt;h1 id="안다는-것은-무엇일까">안다는 것은 무엇일까?
&lt;/h1>&lt;p>안녕하세요!&lt;/p>
&lt;p>오늘은 &amp;ldquo;안다는 것은, 무엇일까?&amp;ldquo;라는 주제에 대해 이야기해 볼까 합니다.&lt;/p>
&lt;hr>
&lt;h2 id="안다는-것은-사실-모호하다">&amp;ldquo;안다&amp;quot;는 것은 사실 모호하다?
&lt;/h2>&lt;p>일상생활에서 &amp;ldquo;알았다!&amp;ldquo;라고 느끼는 순간이 있지요. 하지만, 잘 생각해보면 그 &amp;ldquo;안다&amp;quot;는 것이 정말 완전한 이해일까요?&lt;/p>
&lt;p>예를 들어, 자동차 운전. 엑셀을 밟으면 나아가고, 브레이크를 밟으면 멈춥니다. 이것은 &amp;ldquo;알고 있다&amp;quot;고 할 수 있을지도 모릅니다. 하지만, 엔진 내부에서 무슨 일이 일어나고 있는지 자세히 설명할 수 있는 사람은 적지 않을까요?&lt;/p>
&lt;hr>
&lt;h2 id="완전한-이해가-필요할까">완전한 이해가 필요할까?
&lt;/h2>&lt;p>사실, 모든 것을 완전히 이해하지 못해도 일상생활에는 지장이 없는 경우가 많습니다. 스마트폰의 내부 구조를 몰라도 전화를 걸거나 메시지를 보낼 수 있지요.&lt;/p>
&lt;p>그렇다고 해서, &amp;ldquo;아는&amp;rdquo; 것을 경시해도 좋다는 것은 아닙니다. 이해가 깊어지면 새로운 발견이나 깨달음이 생기기도 합니다.&lt;/p>
&lt;hr>
&lt;h2 id="모르는-것도-많이-있다">모르는 것도 많이 있다
&lt;/h2>&lt;p>세상에는 아직 해명되지 않은 것들이 많이 있습니다. 예를 들어, 인간의 감정이나 의식의 구조, 우주의 기원 등. 이것들은 과학이 진보했음에도 불구하고 여전히 완전히 &amp;ldquo;알지 못하는&amp;rdquo; 분야입니다.&lt;/p>
&lt;p>수학의 세계에서도 &amp;ldquo;골드바흐의 추측&amp;quot;처럼 단순한 문제이면서도 미해결인 것들이 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="아는-것의-가치">&amp;ldquo;아는&amp;rdquo; 것의 가치
&lt;/h2>&lt;p>&amp;ldquo;아는&amp;rdquo; 것이 늘어나면, 자신 있게 설명할 수 있거나, 타인과 효과적으로 소통할 수 있습니다. 또한, 지식이 있음으로써 잘못된 정보에 현혹되기 어려워진다는 이점도 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="겸허한-자세가-중요하다">겸허한 자세가 중요하다
&lt;/h2>&lt;p>자신이 &amp;ldquo;알지 못한다&amp;quot;는 것을 인식하는 것은 겸손함으로 이어집니다. 그리고 그 인식이 있기 때문에 계속 배우려는 의욕이 생겨납니다.&lt;/p>
&lt;hr>
&lt;p>그렇기 때문에, &amp;ldquo;아는&amp;rdquo; 것은 중요하지만, 모든 것을 완전히 이해하는 것은 어려운 일입니다. 중요한 것은, 자신의 이해의 한계를 알고 계속 배우려는 자세를 가지는 것이 아닐까요?&lt;/p></description></item><item><title>왜 수학이나 컴퓨터를 좋아하는 걸까</title><link>http://kenji.blog/ko/p/%E3%81%AA%E3%81%9C%E6%95%B0%E5%AD%A6%E3%82%84%E8%A8%88%E7%AE%97%E6%A9%9F%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/</link><pubDate>Fri, 23 Sep 2022 01:56:52 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%81%AA%E3%81%9C%E6%95%B0%E5%AD%A6%E3%82%84%E8%A8%88%E7%AE%97%E6%A9%9F%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/</guid><description>&lt;img src="http://kenji.blog/p/%E3%81%AA%E3%81%9C%E6%95%B0%E5%AD%A6%E3%82%84%E8%A8%88%E7%AE%97%E6%A9%9F%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86/img.png" alt="Featured image of post 왜 수학이나 컴퓨터를 좋아하는 걸까" />&lt;h2 id="왜-수학이나-컴퓨터를-좋아하는-걸까-생각해보았습니다">왜 수학이나 컴퓨터를 좋아하는 걸까 생각해보았습니다
&lt;/h2>&lt;h3 id="모든-사람에게-평등하다">모든 사람에게 평등하다
&lt;/h3>&lt;p>사람이나 입장, 장소를 가리지 않고 같은 인풋에 대해 항상 같은 아웃풋을 반환한다.&lt;/p>
&lt;h3 id="규칙이-명확하다">규칙이 명확하다
&lt;/h3>&lt;p>규칙이 명확하게 정해져 있어서, 부조리나 불의가 없다는 것.&lt;/p>
&lt;h3 id="도출해낸-답이나-이론은-영원히-옳다">도출해낸 답이나 이론은 영원히 옳다
&lt;/h3>&lt;p>한 번 도출해낸 답이 나중에 바뀔 걱정이 없다.&lt;/p>
&lt;h3 id="적당한-어려움이-있다">적당한 어려움이 있다
&lt;/h3>&lt;p>항상 미해결 문제가 있어서, 언제든지 과제 해결에 도전할 수 있다.&lt;/p></description></item><item><title>커뮤니티에 필요한 것</title><link>http://kenji.blog/ko/p/%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%93%E3%81%A8/</link><pubDate>Fri, 23 Sep 2022 01:37:43 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%93%E3%81%A8/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%93%E3%81%A8/img.png" alt="Featured image of post 커뮤니티에 필요한 것" />&lt;h1 id="커뮤니티에-필요한-것">커뮤니티에 필요한 것
&lt;/h1>&lt;p>스크래치의 커뮤니티 가이드라인이 매우 세련되고 좋다고 느꼈습니다.
다음과 같은 내용이 적혀 있었습니다.&lt;/p>
&lt;blockquote>
&lt;p>누구에게나 존중하는 마음으로 대할 것.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>안전을 유지할 것: 개인 정보나 연락처를 공개하지 마세요.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>도움이 되는 댓글을 달 것.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>리믹스 문화를 이해할 것.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>성실할 것.&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>사이트를 편안한 장소로 만들 것.&lt;/p>
&lt;/blockquote>
&lt;p>이러한 관점은 어느 커뮤니티에나 통용되는 것이라고 생각합니다.&lt;/p>
&lt;p>&lt;a class="link" href="https://ja.scratch-wiki.info/wiki/%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BC%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3" target="_blank" rel="noopener"
>https://ja.scratch-wiki.info/wiki/%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BC%E3%82%AC%E3%82%A4%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3&lt;/a>&lt;/p></description></item><item><title>'수학의 위인들'</title><link>http://kenji.blog/ko/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/</link><pubDate>Thu, 22 Sep 2022 23:06:37 +0900</pubDate><guid>http://kenji.blog/ko/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/</guid><description>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/img.png" alt="Featured image of post '수학의 위인들'" />&lt;h3 id="페르마-p-de-fermat-1601-1665">페르마 (P. de Fermat, 1601-1665)
&lt;/h3>&lt;p>17세기를 대표하는 프랑스의 수학자. 해석기하, 확률론, 미분법 등의 기초를 다졌다. 또한 정수론의 시조이기도 하다.&lt;/p>
&lt;h3 id="디오판토스-diophantus-207경-291경">디오판토스 (Diophantus, 207경-291경)
&lt;/h3>&lt;p>그리스의 수학자. 기호법의 도입, 유리수 해의 연구로 유명하다. 저서 『산술』이 대표작이다. 방정식의 유리수 해를 구하는 분야를 디오판토스 해석이라고 부른다.&lt;/p>
&lt;h3 id="오일러-l-euler-1707-1783">오일러 (L. Euler, 1707-1783)
&lt;/h3>&lt;p>스위스가 낳은 수학왕. 온갖 수학 분야에서 업적을 남겼다. 논문 700편 이상, 저서 45편이 남아 있다.&lt;/p>
&lt;h3 id="르장드르-a-m-legendre-1752-1833">르장드르 (A. M. Legendre, 1752-1833)
&lt;/h3>&lt;p>프랑스의 수학자. 정수론, 타원적분, 인력 문제 등에서 다수의 업적을 남겼다. &amp;lsquo;정수론&amp;rsquo;이라는 말은 그의 주저 『정수론』에서 유래했다.&lt;/p>
&lt;h3 id="쿠머-e-e-kummer-1810-1893">쿠머 (E. E. Kummer, 1810-1893)
&lt;/h3>&lt;p>독일의 수학자. 원분체의 정수론을 페르마의 마지막 정리에 응용하여 큰 성과를 거두었다.&lt;/p>
&lt;h3 id="데카르트-r-descartes-1596-1650">데카르트 (R. Descartes, 1596-1650)
&lt;/h3>&lt;p>프랑스의 독창적인 철학자. 대표적인 저작으로 『방법서설』, 『기하학』, 『우주론』 등이 있다.&lt;/p>
&lt;h3 id="파스칼-b-pascal-1623-1662">파스칼 (B. Pascal, 1623-1662)
&lt;/h3>&lt;p>확률론과 유체 연구로 알려진 프랑스의 철학자. 나중에 얀센파에 소속되어 종교 활동에 종사했다. 『팡세』는 그때의 저작이다.&lt;/p>
&lt;h3 id="바셰-c-g-bachet-1581-1638">바셰 (C. G. Bachet, 1581-1638)
&lt;/h3>&lt;p>프랑스의 귀족으로, 취미로 수 퍼즐을 연구했다. 디오판토스의 『산술』 라틴어 번역을 간행하고, 여기에 자신의 연구를 주석으로 게재했다.&lt;/p>
&lt;h3 id="월리스-j-wallis-1616-1703">월리스 (J. Wallis, 1616-1703)
&lt;/h3>&lt;p>영국의 수학자. 주저 『무한의 산술』에서 극한의 개념에 수학적인 형식을 부여하여, 미적분학의 기초를 다지는 데 공헌했다.&lt;/p>
&lt;h3 id="브룽커-w-brouncker-1620-1684">브룽커 (W. Brouncker, 1620-1684)
&lt;/h3>&lt;p>아일랜드의 귀족. 왕립학회(영국 학사원)의 초대 회장. 수학 애호가로, 월리스 등과 교류가 있었다.&lt;/p>
&lt;h3 id="라그랑주-j-l-lagrange-1736-1813">라그랑주 (J. L. Lagrange, 1736-1813)
&lt;/h3>&lt;p>이탈리아 태생의 프랑스 수학자. 오일러의 후임으로 베를린 학사원 수학부장을 지냈다. 정수론, 해석역학 등에서 큰 업적을 남겼다.&lt;/p>
&lt;h3 id="지겔-c-l-siegel-1896-1981">지겔 (C. L. Siegel, 1896-1981)
&lt;/h3>&lt;p>독일의 정수론 학자. 수의 해석적 이론에서 수많은 공헌을 했다.&lt;/p>
&lt;h3 id="피보나치-l-fibonacci-1175경-1250경">피보나치 (L. Fibonacci, 1175경-1250경)
&lt;/h3>&lt;p>이탈리아의 수학자. 주저 『산반서』에서 인도-아라비아 숫자를 사용하여 보급에 힘썼다. 또한 『제곱의 서』에서 합동수를 논했다.&lt;/p>
&lt;h3 id="베이커-a-baker-1939-">베이커 (A. Baker, 1939-)
&lt;/h3>&lt;p>영국의 정수론 학자. 초월수론에서의 공헌으로 히로나카 헤이스케와 함께 필즈상을 수상했다.&lt;/p>
&lt;h3 id="푸앵카레-j-poincare-1854-1912">푸앵카레 (J. Poincare, 1854-1912)
&lt;/h3>&lt;p>최후의 만능 수학자라 불린 프랑스의 수학자. 보형함수론, 비유클리드 기하학, 미분방정식, 천체역학, 전기역학 등을 비롯해 과학적 평론에서도 탁월한 저작을 남겼다.&lt;/p>
&lt;h3 id="모델-l-j-mordell-1888-1972">모델 (L. J. Mordell, 1888-1972)
&lt;/h3>&lt;p>미국 태생의 수학자. 부모는 리투아니아 출신의 이민자이다. 부정방정식론에서 수많은 논문이 있지만, 타원곡선론에서의 모델의 정리는 특히 유명하다. 베유가 이를 일반 대수곡선의 경우로 확장하여, 산술적 대수기하학은 여기서부터 폭발적인 발전을 이루게 된다.&lt;/p>
&lt;h3 id="베유-a-weil-1906-">베유 (A. Weil, 1906-)
&lt;/h3>&lt;p>유대계 프랑스 수학자. 젊은 시절 페르마 문제에 관심을 가지고 정수론에 응용할 목적으로 대수기하학을 근본적으로 재검토하여 엄격하게 기초를 다졌다. 수학사 저작으로도 알려져 있다.&lt;/p>
&lt;h3 id="메르센-m-mersenne-1588-1648">메르센 (M. Mersenne, 1588-1648)
&lt;/h3>&lt;p>프랑스 미님회의 신부. 각지의 수학자들의 왕복 서한을 중재했다. 메르센 수라는 이름의 수도 실은 페르마가 고안한 수이다.&lt;/p>
&lt;h3 id="로베르발-g-p-de-roberval-1602-1675">로베르발 (G. P. de Roberval, 1602-1675)
&lt;/h3>&lt;p>프랑스의 수학자. 당시 수학자로서 교수직을 얻고 있던 거의 유일한 사람으로, 사이클로이드 연구 등으로 알려져 있다.&lt;/p>
&lt;h3 id="아벨-n-h-abel-1802-1829">아벨 (N. H. Abel, 1802-1829)
&lt;/h3>&lt;p>노르웨이의 수학자. 일반 5차 방정식의 불가해성, 타원함수론, 아벨 적분론 등 뛰어난 업적을 남겼으나 젊은 나이에 세상을 떠났다.&lt;/p>
&lt;h3 id="야코비-k-g-jacob-1804-1851">야코비 (K. G. Jacob, 1804-1851)
&lt;/h3>&lt;p>유대계 독일 수학자. 타원함수론, 세타함수론, 미분방정식, 변분학 등에서 큰 업적을 남겼다. 아벨의 업적을 세상에 소개했다. 과학의 목적을 &amp;lsquo;인간 정신의 명예&amp;rsquo;를 위한 것이라 하며 실용주의를 배격한 것으로도 알려져 있다.&lt;/p>
&lt;h3 id="가우스-c-f-gauss-1777-1855">가우스 (C. F. Gauss, 1777-1855)
&lt;/h3>&lt;p>독일이 낳은 수학왕. 정수론, 비유클리드 기하학, 측지학, 초기하급수, 곡면론, 지자기 연구 등으로 알려져 있다. 완벽주의자여서, 발판이 보이지 않을 정도로 완성도가 높지 않으면 성과를 공표하지 않았다고 한다. 주저 『산술연구』 등.&lt;/p>
&lt;h3 id="라메-g-lame-1795-1870">라메 (G. Lame, 1795-1870)
&lt;/h3>&lt;p>프랑스의 수학자. 탄성역학, 열전도론 등에 공헌했다.&lt;/p>
&lt;h3 id="리우빌-j-liouville-1809-1882">리우빌 (J. Liouville, 1809-1882)
&lt;/h3>&lt;p>프랑스의 수학자. 미분방정식, 초월정수론, 함수론에 공헌했다.&lt;/p>
&lt;h3 id="코시-a-l-cauchy-1789-1857">코시 (A. L. Cauchy, 1789-1857)
&lt;/h3>&lt;p>프랑스의 수학자. 다작을 했으며 이론물리학, 수학에 업적이 많다. 프랑스에서는 가우스에 필적할 정도로 존경받고 있다고 한다.&lt;/p>
&lt;h3 id="갈루아-e-galois-1811-1832">갈루아 (E. Galois, 1811-1832)
&lt;/h3>&lt;p>프랑스의 수학자. 5차 이상의 방정식은 일반적으로 대수적으로 풀 수 없다는 아벨의 정리를 군이라는 개념을 도입하여 해명했다. 젊은 나이에 결투로 쓰러졌는데, 하찮은 여자 문제가 계기였다는 것이 현재는 알려져 있다.&lt;/p>
&lt;h3 id="헨젤-k-hensel-1861-1941">헨젤 (K. Hensel, 1861-1941)
&lt;/h3>&lt;p>독일의 수학자. 크로네커의 제자. 함수론적 수법을 응용하여 정수론에 p진법(p진 해석)이라는 이론을 도입했다.&lt;/p>
&lt;h3 id="하세-h-hesse-1898-1979">하세 (H. Hesse, 1898-1979)
&lt;/h3>&lt;p>독일의 수학자. 헨젤의 제자로, p진 해석의 기초를 다지고 그 응용에 공헌했다. 유체론의 정비, 타원곡선의 L 함수 연구 등.&lt;/p>
&lt;h3 id="크로네커-l-kronecker-1823-1891">크로네커 (L. Kronecker, 1823-1891)
&lt;/h3>&lt;p>유대계 독일 수학자. 타원함수론, 정수론 등에 공헌. 수학의 산술적 기초를 제창한 것으로도 알려져 있으나, 주관성이 강한 성격으로 베를린 대학의 동료 바이어슈트라스에 대해 불합리한 비판을 하거나 칸토어의 취직을 방해한 것은 그의 생애에 부정적인 이미지를 주고 있다.&lt;/p>
&lt;h3 id="힐베르트-d-hilbert-1862-1943">힐베르트 (D. Hilbert, 1862-1943)
&lt;/h3>&lt;p>독일의 수학자. 불변식론, 대수적 정수론, 수학기초론을 비롯해 수학의 모든 분야에 거대한 발자취를 남겼다. 파리 국제수학자회의(1900)에서 제창한 23개의 문제는 수학 발전에 큰 영향을 미쳤다.&lt;/p>
&lt;h3 id="리만-b-riemann-1826-1866">리만 (B. Riemann, 1826-1866)
&lt;/h3>&lt;p>독일의 수학자. 복소함수론에서의 리만 면의 개념, 리만 기하학 등 수학의 근본과 관련된 큰 업적을 남겼다.&lt;/p>
&lt;h3 id="팔팅스-g-faltings-1954-">팔팅스 (G. Faltings, 1954-)
&lt;/h3>&lt;p>독일의 수학자. 1983년에 모델 추측을 해결했다.&lt;/p>
&lt;h3 id="와일즈-a-wiles-1953-">와일즈 (A. Wiles, 1953-)
&lt;/h3>&lt;p>영국 태생의 수학자. 이와사와 주추측, 버치-스위너턴다이어 추측 등의 연구에서 큰 공헌을 한 이 분야의 1인자이다.&lt;/p>
&lt;h3 id="참고문헌">참고문헌
&lt;/h3>&lt;p>페르마의 마지막 정리가 풀렸다! 오일러부터 와일즈의 증명까지 고단샤&lt;/p></description></item><item><title>'윈도우 타이틀 열거'</title><link>http://kenji.blog/ko/p/%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%AE%E5%88%97%E6%8C%99/</link><pubDate>Tue, 20 Sep 2022 17:03:15 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%AE%E5%88%97%E6%8C%99/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB%E3%81%AE%E5%88%97%E6%8C%99/img.png" alt="Featured image of post '윈도우 타이틀 열거'" />&lt;h1 id="윈도우-타이틀-열거">윈도우 타이틀 열거
&lt;/h1>&lt;p>PowerShell을 사용하여 현재 열려 있는 윈도우의 타이틀을 열거하는 방법입니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Get-Process&lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="n">where&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nv">$_&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">mainWindowTItle&lt;/span>&lt;span class="p">}|&lt;/span>&lt;span class="nb">Select-Object&lt;/span> &lt;span class="n">MainWindowTitle&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>출력 샘플&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">MainWindowTitle
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">---------------
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Windows PowerShell
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Internet Explorer
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">제목 없음 - 그림판
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">제목 없음 - 메모장
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">작업 관리자
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Windows 입력 환경
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">문서 - 워드패드
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>'큰 폴더를 고속 일괄 삭제'</title><link>http://kenji.blog/ko/p/%E5%A4%A7%E3%81%8D%E3%81%AA%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%82%92%E9%AB%98%E9%80%9F%E4%B8%80%E6%8B%AC%E5%89%8A%E9%99%A4/</link><pubDate>Tue, 20 Sep 2022 16:04:02 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%A4%A7%E3%81%8D%E3%81%AA%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%82%92%E9%AB%98%E9%80%9F%E4%B8%80%E6%8B%AC%E5%89%8A%E9%99%A4/</guid><description>&lt;img src="http://kenji.blog/p/%E5%A4%A7%E3%81%8D%E3%81%AA%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%82%92%E9%AB%98%E9%80%9F%E4%B8%80%E6%8B%AC%E5%89%8A%E9%99%A4/img.png" alt="Featured image of post '큰 폴더를 고속 일괄 삭제'" />&lt;h2 id="큰-폴더를-고속-일괄-삭제">큰 폴더를 고속 일괄 삭제
&lt;/h2>&lt;p>탐색기에서 큰 폴더를 삭제할 경우, 폴더의 내용을 모두 탐색한 후에 삭제가 실행되기 때문에 속도가 느립니다.
아래와 같이 명령어로 삭제하면 탐색과 삭제가 동시에 실행되므로 큰 폴더를 고속으로 삭제할 수 있습니다.&lt;/p>
&lt;ol>
&lt;li>명령 프롬프트에서 대상 폴더의 경로로 이동합니다.&lt;/li>
&lt;li>&lt;code>DEL /F /Q /S 폴더명 &amp;gt; NUL&lt;/code>을 실행합니다.&lt;/li>
&lt;li>&lt;code>RMDIR /Q /S 폴더명&lt;/code>을 실행합니다.&lt;/li>
&lt;/ol></description></item><item><title>'Salesforce Chatter 전체 삭제 명령어'</title><link>http://kenji.blog/ko/p/salesforce%E3%83%81%E3%83%A3%E3%83%83%E3%82%BF%E3%83%BC%E5%85%A8%E6%B6%88%E3%81%97%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/</link><pubDate>Mon, 19 Sep 2022 21:59:14 +0900</pubDate><guid>http://kenji.blog/ko/p/salesforce%E3%83%81%E3%83%A3%E3%83%83%E3%82%BF%E3%83%BC%E5%85%A8%E6%B6%88%E3%81%97%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/</guid><description>&lt;img src="http://kenji.blog/p/salesforce%E3%83%81%E3%83%A3%E3%83%83%E3%82%BF%E3%83%BC%E5%85%A8%E6%B6%88%E3%81%97%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img_1.png" alt="Featured image of post 'Salesforce Chatter 전체 삭제 명령어'" />&lt;h1 id="salesforce-chatter-전체-삭제-명령어">Salesforce Chatter 전체 삭제 명령어
&lt;/h1>&lt;p>Salesforce의 Chatter에서 모든 게시글과 첨부 파일을 전체 삭제하는 명령어입니다.
개발자 콘솔을 열고, Debug 메뉴의 「Open Execute Anonymous Window」를 선택한 후, 아래의 코드를 붙여넣고 실행해 주세요.
개인적으로 조직의 용량이 부족해졌을 때 사용하고 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">delete [select id from FeedItem];
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">delete [select id from FeedAttachment];
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">delete [select id from ContentDocument];
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">// 휴지통 삭제
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">database.emptyRecycleBin([select id from ContentDocument where IsDeleted = true ALL ROWS]);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Windows 단축키・팁 모음</title><link>http://kenji.blog/ko/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/</link><pubDate>Sun, 18 Sep 2022 23:49:29 +0900</pubDate><guid>http://kenji.blog/ko/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/</guid><description>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img.png" alt="Featured image of post Windows 단축키・팁 모음" />&lt;p>Windows에서 평소 사용하는 소소한 팁 모음입니다. Windows를 처음 사용하시는 분들이 읽어주시면 좋겠습니다.
Windows 11을 가정하고 있지만, 대부분 Windows 10에서도 사용할 수 있을 것입니다.&lt;/p>
&lt;h2 id="창-닫기">창 닫기
&lt;/h2>&lt;ul>
&lt;li>창이 활성화된 상태에서 &lt;code>Alt + F4&lt;/code>&lt;/li>
&lt;li>창이 활성화된 상태에서 &lt;code>Ctrl + W&lt;/code>. 탭 또는 창을 닫기(지원하는 애플리케이션만)&lt;/li>
&lt;li>창의 제목 표시줄 왼쪽 아이콘을 더블 클릭하기&lt;/li>
&lt;li>창의 제목 표시줄의 &lt;code>×&lt;/code>를 클릭하기&lt;/li>
&lt;/ul>
&lt;h2 id="바탕-화면-표시">바탕 화면 표시
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + D&lt;/code>. 2번 누르면 원래 창 상태로 돌아갑니다. 아주 잠깐 바탕 화면을 표시하고 싶을 때 유용합니다.&lt;/li>
&lt;li>&lt;code>Win + M&lt;/code>. 모든 앱 최소화. 2번 눌러도 원래대로 돌아오지 않습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="음성-입력">음성 입력
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + H&lt;/code>. 음성 입력을 시작합니다. 음성 입력을 종료하려면 &lt;code>Esc&lt;/code> 또는 다시 &lt;code>Win + H&lt;/code>를 누릅니다.&lt;/li>
&lt;/ul>
&lt;h2 id="파일-탐색기에서-기존-우클릭-메뉴-표시하기">파일 탐색기에서 기존 우클릭 메뉴 표시하기
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Shift + F10&lt;/code> 또는 애플리케이션 키를 누릅니다. 애플리케이션 키는 키보드 우측 하단에 있는 키입니다.&lt;/li>
&lt;/ul>
&lt;h2 id="범위를-선택하여-화면-캡처">범위를 선택하여 화면 캡처
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + Shift + S&lt;/code>로 범위를 선택하여 화면을 캡처할 수 있습니다.&lt;/li>
&lt;li>&lt;code>Win + Print Screen&lt;/code> 또는 단순히 &lt;code>Print Screen&lt;/code>으로 전체 화면을 캡처할 수 있습니다.
(&lt;code>Win&lt;/code>을 붙인 경우에는 &lt;code>C:\Users\사용자이름\Pictures\Screenshots&lt;/code>에 캡처 이미지가 출력됩니다.)&lt;/li>
&lt;li>&lt;code>Alt + Print Screen&lt;/code>으로 현재 창을 캡처할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="작업-표시줄에-등록된-앱-실행">작업 표시줄에 등록된 앱 실행
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + 숫자 키&lt;/code>로 작업 표시줄에 등록된 앱을 실행할 수 있습니다.&lt;br>
예를 들어 &lt;code>Win + 1&lt;/code>을 누르면 작업 표시줄의 가장 왼쪽 앱이 실행됩니다.&lt;/li>
&lt;li>&lt;code>Win + T&lt;/code>로 작업 표시줄 아이콘으로 포커스를 이동할 수 있으며, 이어서 여러 번 &lt;code>Win + T&lt;/code>를 누르거나,
&lt;code>←&lt;/code> 또는 &lt;code>→&lt;/code>로 선택을 이동시키고 &lt;code>Enter&lt;/code> 키로 선택된 앱을 실행할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="확대축소">확대/축소
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + +&lt;/code>로 Windows 돋보기가 실행됩니다. 추가로 &lt;code>Win + + or -&lt;/code>로 화면을 확대/축소할 수 있습니다.&lt;/li>
&lt;li>메모장이나 브라우저 등 &lt;code>Ctrl + + or -&lt;/code>로 확대/축소할 수 있습니다. (지원하는 앱만)&lt;/li>
&lt;/ul>
&lt;h2 id="windows-잠금">Windows 잠금
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + L&lt;/code>&lt;/li>
&lt;li>&lt;code>Ctrl + Alt + Del&lt;/code> → &lt;code>Space&lt;/code> or &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="windows-종료셧다운">Windows 종료(셧다운)
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + M&lt;/code>이나 &lt;code>Win + D&lt;/code>로 바탕 화면을 표시한 상태 또는 &lt;code>Win + T&lt;/code>나 &lt;code>Win + B&lt;/code>로 작업 표시줄이 활성화된 상태에서 &lt;code>Alt + F4&lt;/code>를 누르면 아래와 같은 대화 상자가 표시되므로 &amp;ldquo;시스템 종료&amp;quot;가 선택된 것을 확인하고 &lt;code>Enter&lt;/code>
&lt;code>Win + R&lt;/code> → &lt;code>Alt + F4&lt;/code> → &lt;code>Alt + F4&lt;/code>도 가능.
&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_20.png"
width="482"
height="278"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_20_hu3f12d2ce7faedc7d3b710fa8f12c5de2_12927_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_20_hu3f12d2ce7faedc7d3b710fa8f12c5de2_12927_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_20.png"
class="gallery-image"
data-flex-grow="173"
data-flex-basis="416px"
>&lt;/li>
&lt;li>&lt;code>Win + X&lt;/code> → &lt;code>U&lt;/code> → &lt;code>U&lt;/code>로 종료할 수 있습니다.&lt;/li>
&lt;li>명령 프롬프트나 &lt;code>Win + R&lt;/code>의 &amp;ldquo;실행&amp;quot;에서 &lt;code>shutdown /s /t 0&lt;/code>을 입력하면 종료할 수 있습니다. 추가로 &lt;code>/f&lt;/code>를 붙이면 강제 종료가 됩니다.&lt;/li>
&lt;/ul>
&lt;h2 id="windows-다시-시작">Windows 다시 시작
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + M&lt;/code>이나 &lt;code>Win + D&lt;/code>로 바탕 화면을 표시한 상태 또는 &lt;code>Win + T&lt;/code>나 &lt;code>Win + B&lt;/code>로 작업 표시줄이 활성화된 상태에서 &lt;code>Alt + F4&lt;/code>를 누르면 아래와 같은 대화 상자가 표시되므로 1번 &lt;code>↓&lt;/code>를 눌러 &amp;ldquo;다시 시작&amp;quot;을 선택하고 &lt;code>Enter&lt;/code>
　&lt;code>Win + R&lt;/code> → &lt;code>Alt + F4&lt;/code> → &lt;code>Alt + F4&lt;/code>도 가능.
&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_21.png"
width="482"
height="278"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_21_hu7c3e02e460e465bf24597063ff70f70a_13423_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_21_hu7c3e02e460e465bf24597063ff70f70a_13423_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_21.png"
class="gallery-image"
data-flex-grow="173"
data-flex-basis="416px"
>&lt;/li>
&lt;li>&lt;code>Win + X&lt;/code> → &lt;code>U&lt;/code> → &lt;code>R&lt;/code>로 다시 시작할 수 있습니다.&lt;/li>
&lt;li>&lt;code>shutdown /r /t 0&lt;/code>으로 다시 시작할 수 있습니다. 추가로 &lt;code>/f&lt;/code>를 붙이면 강제 다시 시작이 됩니다.&lt;/li>
&lt;/ul>
&lt;h2 id="windows-절전-모드">Windows 절전 모드
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + M&lt;/code>이나 &lt;code>Win + D&lt;/code>로 바탕 화면을 표시한 상태 또는 &lt;code>Win + T&lt;/code>나 &lt;code>Win + B&lt;/code>로 작업 표시줄이 활성화된 상태에서 &lt;code>Alt + F4&lt;/code>를 누르면 아래와 같은 대화 상자가 표시되므로 1번 &lt;code>↑&lt;/code>를 눌러 &amp;ldquo;절전&amp;quot;을 선택하고 &lt;code>Enter&lt;/code>
&lt;code>Win + R&lt;/code> → &lt;code>Alt + F4&lt;/code> → &lt;code>Alt + F4&lt;/code>도 가능.
&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_23.png"
width="482"
height="278"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_23_hub63f427cb79a50e4f112143a1cf4a9d1_14945_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_23_hub63f427cb79a50e4f112143a1cf4a9d1_14945_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_23.png"
class="gallery-image"
data-flex-grow="173"
data-flex-basis="416px"
>&lt;/li>
&lt;li>&lt;code>Win + R&lt;/code> → 또는 명령 프롬프트에서 &lt;code>rundll32.exe powrprof.dll,SetSuspendState&lt;/code>를 입력하면 최대 절전 모드로 전환할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="windows-로그아웃">Windows 로그아웃
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + M&lt;/code>이나 &lt;code>Win + D&lt;/code>로 바탕 화면을 표시한 상태 또는 &lt;code>Win + T&lt;/code>나 &lt;code>Win + B&lt;/code>로 작업 표시줄이 활성화된 상태에서 &lt;code>Alt + F4&lt;/code>를 누르면 아래와 같은 대화 상자가 표시되므로 2번 &lt;code>↑&lt;/code>를 눌러 &amp;ldquo;로그아웃&amp;quot;을 선택하고 &lt;code>Enter&lt;/code>
&lt;code>Win + R&lt;/code> → &lt;code>Alt + F4&lt;/code> → &lt;code>Alt + F4&lt;/code>도 가능.
&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_22.png"
width="482"
height="278"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_22_hu6a4b716975acad63f398b15e49c71e3e_12765_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_22_hu6a4b716975acad63f398b15e49c71e3e_12765_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_22.png"
class="gallery-image"
data-flex-grow="173"
data-flex-basis="416px"
>&lt;/li>
&lt;li>&lt;code>Win + X&lt;/code> → &lt;code>U&lt;/code> → &lt;code>I&lt;/code>&lt;/li>
&lt;li>&lt;code>Ctrl + Alt + Del&lt;/code> → 2번 &lt;code>Tab&lt;/code> or 2번 &lt;code>↓&lt;/code> → &lt;code>Enter&lt;/code> or &lt;code>Space&lt;/code>&lt;/li>
&lt;li>&lt;code>logoff&lt;/code>로 로그아웃할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="키보드로-창-이동">키보드로 창 이동
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + ←&lt;/code> : 왼쪽으로 이동&lt;/li>
&lt;li>&lt;code>Win + →&lt;/code> : 오른쪽으로 이동&lt;/li>
&lt;li>&lt;code>Win + ↑&lt;/code> : 위로 이동/최대화&lt;/li>
&lt;li>&lt;code>Win + ↓&lt;/code> : 아래로 이동/최소화&lt;/li>
&lt;li>&lt;code>Win + Shift + ← or →&lt;/code> : 멀티 모니터 간 이동&lt;/li>
&lt;li>&lt;code>Win + Alt + ← or → or ↑ or ↓&lt;/code> : 최대화·최소화하지 않고 창 이동&lt;/li>
&lt;li>최소화되지 않은 상태에서 &lt;code>Alt + Space&lt;/code> 후에 &lt;code>M&lt;/code> 그 후, 화살표 키로 이동.&lt;br>
※ 마우스 커서에 창이 따라오는 상태가 되므로, 화면 밖으로 창이 표시된 상태에서도 구출할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="작업-관리자에서-프로세스-종료">작업 관리자에서 프로세스 종료
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_24.png"
width="256"
height="192"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_24_hud914f1b692d77f8e130a72e443261168_30639_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_24_hud914f1b692d77f8e130a72e443261168_30639_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_24.png"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="320px"
>&lt;/p>
&lt;ol>
&lt;li>&lt;code>Ctrl + Shift + Esc&lt;/code>로 작업 관리자를 실행할 수 있습니다.&lt;/li>
&lt;li>&lt;code>Ctrl + Tab&lt;/code>으로 탭을 전환할 수 있습니다.&lt;/li>
&lt;li>&lt;code>세부 정보&lt;/code> 탭에서 &lt;code>Tab&lt;/code>을 누른 후, 키보드 영숫자 입력으로 프로세스를 전방 일치 검색할 수 있습니다.&lt;/li>
&lt;li>프로세스 이름이 선택된 상태에서 &lt;code>Delete&lt;/code> 키, 이어서 &lt;code>Enter&lt;/code> 키를 누르면 프로세스를 종료할 수 있습니다.&lt;/li>
&lt;/ol>
&lt;h2 id="명령어로-프로세스-이름을-지정하여-종료">명령어로 프로세스 이름을 지정하여 종료
&lt;/h2>&lt;ul>
&lt;li>&lt;code>taskkill /f /im 프로세스이름&lt;/code>으로 프로세스를 종료할 수 있습니다.
예를 들어, &lt;code>taskkill /f /im explorer.exe&lt;/code>로 파일 탐색기를 종료할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="작업-표시줄의-아이콘에서-같은-프로그램-여러-개-실행">작업 표시줄의 아이콘에서 같은 프로그램 여러 개 실행
&lt;/h2>&lt;ul>
&lt;li>작업 표시줄에서 &lt;code>Shift&lt;/code> 키를 누른 채로 마우스 왼쪽 클릭을 하면, 여러 개의 같은 프로그램을 실행할 수 있습니다. (다중 실행을 지원하는 앱만)&lt;/li>
&lt;/ul>
&lt;h2 id="관리자-권한으로-프로그램-실행">관리자 권한으로 프로그램 실행
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Ctrl + Shift&lt;/code>를 누른 채로 프로그램을 실행하면 관리자 권한으로 프로그램을 실행할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="파일-탐색기-실행">파일 탐색기 실행
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + E&lt;/code>로 파일 탐색기를 실행할 수 있습니다.&lt;/li>
&lt;li>&lt;code>Win + R&lt;/code>로 &amp;ldquo;실행&amp;quot;을 표시하고 &lt;code>explorer&lt;/code>를 입력한 후 &lt;code>Enter&lt;/code>&lt;/li>
&lt;li>&lt;code>Ctrl + Shift + N&lt;/code>으로 새 폴더를 만들 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="파일-탐색기에서-열려-있는-위치에서-명령-프롬프트-열기">파일 탐색기에서 열려 있는 위치에서 명령 프롬프트 열기
&lt;/h2>&lt;ul>
&lt;li>Windows 11의 경우 우클릭 메뉴의 &amp;ldquo;터미널&amp;quot;에서 명령 프롬프트를 실행할 수 있습니다.&lt;/li>
&lt;li>또한, 주소 표시줄에 &lt;code>cmd&lt;/code>라고 입력하고 &lt;code>Enter&lt;/code> 키를 누르면 명령 프롬프트를 실행할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="클립보드-검색-기록-표시">클립보드 검색 기록 표시
&lt;/h2>&lt;ul>
&lt;li>&lt;code>Win + V&lt;/code>로 클립보드 검색 기록을 표시할 수 있습니다.
과거에 복사한 텍스트나 이미지를 선택하면 다시 복사할 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="실행">실행
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_28.png"
width="399"
height="206"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_28_hu5bd9c2c0efc8db87c1a7be24174584ba_8257_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_28_hu5bd9c2c0efc8db87c1a7be24174584ba_8257_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_28.png"
class="gallery-image"
data-flex-grow="193"
data-flex-basis="464px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>Win + R&lt;/code>로 &amp;ldquo;실행&amp;quot;을 열 수 있습니다.&lt;/li>
&lt;/ul>
&lt;p>다음은 &amp;ldquo;실행&amp;rdquo; 또는 명령 프롬프트에서 실행할 수 있는 명령어 몇 가지를 소개합니다.&lt;/p>
&lt;h2 id="edge-열기">Edge 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_18.png"
width="256"
height="256"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_18_hu2d7f1fd1a05d0eb8d4cb2a622c92fc65_40033_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_18_hu2d7f1fd1a05d0eb8d4cb2a622c92fc65_40033_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_18.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>msedge&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="internet-explorer-11ie11-열기">Internet Explorer 11(IE11) 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_25.png"
width="244"
height="228"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_25_hub8b3dcd80a8b22b84e862a37d10a8d82_67766_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_25_hub8b3dcd80a8b22b84e862a37d10a8d82_67766_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_25.png"
class="gallery-image"
data-flex-grow="107"
data-flex-basis="256px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>powershell.exe -Command &amp;quot;(New-Object -ComObject InternetExplorer.Application).Visible = $true&amp;quot;&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="터미널-열기">터미널 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_19.png"
width="256"
height="192"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_19_huba670cecd7c1e41d044624c4278dce95_12032_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_19_huba670cecd7c1e41d044624c4278dce95_12032_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_19.png"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="320px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>wt&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="제어판-열기">제어판 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_15.png"
width="256"
height="192"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_15_hua164d31c327d40ccd81ec7cd0798a08c_37353_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_15_hua164d31c327d40ccd81ec7cd0798a08c_37353_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_15.png"
class="gallery-image"
data-flex-grow="133"
data-flex-basis="320px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>control&lt;/code>을 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;li>&lt;code>explorer.exe shell:::{26EE0668-A00A-44D7-9371-BEB064C98683}&lt;/code> 로도 열 수 있습니다.&lt;/li>
&lt;/ul>
&lt;h2 id="메모장-실행">메모장 실행
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_4.png"
width="192"
height="256"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_4_hu8fd04f5788375cf1e91ec94379e2e218_17267_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_4_hu8fd04f5788375cf1e91ec94379e2e218_17267_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="75"
data-flex-basis="180px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>notepad&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="계산기-실행">계산기 실행
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_5.png"
width="192"
height="256"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_5_hud38bddc861d08a6c0e618a52fbfadb9d_18242_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_5_hud38bddc861d08a6c0e618a52fbfadb9d_18242_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="75"
data-flex-basis="180px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>calc&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="그림판-실행">그림판 실행
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_6.png"
width="236"
height="246"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_6_huaf13165ac0572566abd830a37f5d0cef_37772_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_6_huaf13165ac0572566abd830a37f5d0cef_37772_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="95"
data-flex-basis="230px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>mspaint&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="powershell-실행">PowerShell 실행
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_7.png"
width="238"
height="180"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_7_huc312ccf5dbdb1b6edae5dc06174466bf_18265_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_7_huc312ccf5dbdb1b6edae5dc06174466bf_18265_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_7.png"
class="gallery-image"
data-flex-grow="132"
data-flex-basis="317px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>powershell&lt;/code>을 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="visual-studio-code-실행">Visual Studio Code 실행
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_8.png"
width="256"
height="256"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_8_hu819451b32a2c272ab10c72dbab15e316_9360_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_8_hu819451b32a2c272ab10c72dbab15e316_9360_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_8.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>code&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="excel-실행">Excel 실행
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_9.png"
width="256"
height="256"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_9_hufe95cb8f1915673ee373611cd0239b90_12403_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_9_hufe95cb8f1915673ee373611cd0239b90_12403_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_9.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>excel&lt;/code>을 입력하고 &lt;code>Enter&lt;/code>&lt;br>
※ Excel이 설치되어 있는 경우에만.&lt;/li>
&lt;/ul>
&lt;h2 id="word-열기">Word 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_10.png"
width="256"
height="256"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_10_hu66f202be8d6fd020b50c8768fa2e6a4c_12479_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_10_hu66f202be8d6fd020b50c8768fa2e6a4c_12479_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_10.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>winword&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;br>
※ Word가 설치되어 있는 경우에만.&lt;/li>
&lt;/ul>
&lt;h2 id="powerpoint-열기">PowerPoint 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_11.png"
width="256"
height="256"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_11_hue1fee55e2f89dec256779909b6e45e73_16603_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_11_hue1fee55e2f89dec256779909b6e45e73_16603_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_11.png"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>powerpnt&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;br>
※ PowerPoint가 설치되어 있는 경우에만.&lt;/li>
&lt;/ul>
&lt;h2 id="시스템-구성-열기">시스템 구성 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_1.png"
width="665"
height="437"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_1_hu9eac5a45f3cec150f6d24f7cc9194bcc_17777_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_1_hu9eac5a45f3cec150f6d24f7cc9194bcc_17777_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="152"
data-flex-basis="365px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>msconfig&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="시스템-속성-열기">시스템 속성 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_2.png"
width="479"
height="533"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_2_hu3929e3da9eca5e07cd9c2d5cc64dbd1e_20161_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_2_hu3929e3da9eca5e07cd9c2d5cc64dbd1e_20161_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="89"
data-flex-basis="215px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>sysdm.cpl&lt;/code>을 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="windows-버전-정보-열기">Windows 버전 정보 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_27.png"
width="536"
height="472"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_27_hue408b4bef2bf493ba35bfd5153ef0069_18050_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_27_hue408b4bef2bf493ba35bfd5153ef0069_18050_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_27.png"
class="gallery-image"
data-flex-grow="113"
data-flex-basis="272px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>winver&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="화상-키보드-열기">화상 키보드 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_14.png"
width="248"
height="197"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_14_hu1a8155193c62d74a0ebaff13a210723b_38736_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_14_hu1a8155193c62d74a0ebaff13a210723b_38736_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_14.png"
class="gallery-image"
data-flex-grow="125"
data-flex-basis="302px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>osk&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="워드패드-열기">워드패드 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_12.png"
width="191"
height="232"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_12_hu6fb1edb2f260aa83d67ca8cca1dd668a_38511_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_12_hu6fb1edb2f260aa83d67ca8cca1dd668a_38511_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_12.png"
class="gallery-image"
data-flex-grow="82"
data-flex-basis="197px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>wordpad&lt;/code> 또는 &lt;code>write&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="레지스트리-편집기-열기">레지스트리 편집기 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_13.png"
width="212"
height="224"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_13_hu32fb6574ff10cc1f2401fc64ed114687_7891_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_13_hu32fb6574ff10cc1f2401fc64ed114687_7891_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_13.png"
class="gallery-image"
data-flex-grow="94"
data-flex-basis="227px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>regedit&lt;/code>을 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="프로그램-및-기능-열기">프로그램 및 기능 열기
&lt;/h2>&lt;ul>
&lt;li>&lt;code>explorer.exe shell:::{7b81be6a-ce2b-4676-a29e-eb907a5126c5}&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="키보드-속성-열기">키보드 속성 열기
&lt;/h2>&lt;ul>
&lt;li>&lt;code>explorer.exe shell:::{725BE8F7-668E-4C7B-8F90-46BDB0936430}&lt;/code>을 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="마우스-속성-열기">마우스 속성 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_16.png"
width="465"
height="518"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_16_hu4b8368d82eda62c47aa07a16e184c48d_28920_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_16_hu4b8368d82eda62c47aa07a16e184c48d_28920_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_16.png"
class="gallery-image"
data-flex-grow="89"
data-flex-basis="215px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>explorer.exe shell:::{6C8EEC18-8D75-41B2-A177-8831D59D2D50}&lt;/code>을 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="소리-열기">소리 열기
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_3.png"
width="465"
height="518"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_3_hu07d343f29d286da7b6e29fffcdf11463_27424_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_3_hu07d343f29d286da7b6e29fffcdf11463_27424_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="89"
data-flex-basis="215px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>explorer.exe shell:::{F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D}&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="사용자-계정-열기">사용자 계정 열기
&lt;/h2>&lt;ul>
&lt;li>&lt;code>explorer.exe shell:::{60632754-c523-4b62-b45c-4172da012619}&lt;/code>를 입력하고 &lt;code>Enter&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="표준-메시지-상자의-문자열-복사">표준 메시지 상자의 문자열 복사
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_26.png"
width="352"
height="134"
srcset="http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_26_hu8464019115eff050aa2f4030d8b469e9_4904_480x0_resize_box_3.png 480w, http://kenji.blog/p/windows-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E5%B0%8F%E6%8A%80%E9%9B%86/img_26_hu8464019115eff050aa2f4030d8b469e9_4904_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_26.png"
class="gallery-image"
data-flex-grow="262"
data-flex-basis="630px"
>&lt;/p>
&lt;ul>
&lt;li>&lt;code>Ctrl + C&lt;/code>로 표준 메시지 상자의 문자열을 복사할 수 있습니다.
위의 메시지 상자를 복사하면 아래 내용이 클립보드에 복사됩니다.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[Window Title]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">워드패드
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[Main Instruction]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">문서에 대한 변경 내용을 저장하시겠습니까?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[저장(S)] [저장 안 함(N)] [취소]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="명령-프롬프트의-출력을-클립보드에-저장">명령 프롬프트의 출력을 클립보드에 저장
&lt;/h2>&lt;p>&lt;code>echo &amp;quot;hello&amp;quot; | clip&lt;/code> 등 명령어 뒤에 &lt;code> | clip&lt;/code>(파이프+clip)을 붙이면 표준 출력을 클립보드에 복사할 수 있습니다.&lt;/p>
&lt;h2 id="폴더-계층을-텍스트로-출력">폴더 계층을 텍스트로 출력
&lt;/h2>&lt;p>명령 프롬프트에서 &lt;code>tree&lt;/code> 명령어로 폴더 계층을 트리 형식으로 출력할 수 있습니다.&lt;/p>
&lt;p>출력 샘플&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">C:.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├─.idea
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └─libraries
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├─binaryeditorbz
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├─blog
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─archetypes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─content
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─layouts
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─static
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └─themes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └─PaperMod
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├─branches
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├─hooks
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├─info
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├─logs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ └─refs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├─heads
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ └─remotes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ └─origin
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├─objects
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├─info
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ └─pack
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └─refs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├─heads
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├─remotes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ └─origin
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └─tags
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─.github
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├─ISSUE_TEMPLATE
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └─workflows
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─assets
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├─css
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├─common
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├─core
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├─extended
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├─hljs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ └─includes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └─js
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─i18n
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─images
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └─layouts
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─partials
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └─templates
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├─shortcodes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └─_default
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └─_markup
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(이하 생략)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="참고">참고
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://support.microsoft.com/ko-kr/windows/windows%EC%9D%98-%ED%82%A4%EB%B3%B4%EB%93%9C-%EB%8B%A8%EC%B6%95%ED%82%A4-dcc61a57-8ff0-cffe-9796-cb9706c75eec" target="_blank" rel="noopener"
>Windows 키보드 단축키&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>paint.net의 매력</title><link>http://kenji.blog/ko/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/</link><pubDate>Wed, 14 Sep 2022 19:33:31 +0900</pubDate><guid>http://kenji.blog/ko/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/</guid><description>&lt;img src="http://kenji.blog/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/img.png" alt="Featured image of post paint.net의 매력" />&lt;p>제가 개발 작업을 하면서 자주 사용하는 이미지 편집 프로그램 paint.net을 소개합니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/img_1.png"
width="986"
height="793"
srcset="http://kenji.blog/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/img_1_hu7b03baa3250c24dbfc5edac442a5c4c7_981205_480x0_resize_box_3.png 480w, http://kenji.blog/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/img_1_hu7b03baa3250c24dbfc5edac442a5c4c7_981205_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="124"
data-flex-basis="298px"
>&lt;/p>
&lt;h1 id="windows-기본-그림판에서는-불가능한-유용한-점">Windows 기본 그림판에서는 불가능한 유용한 점
&lt;/h1>&lt;ul>
&lt;li>투명 및 투과율을 다룰 수 있다&lt;/li>
&lt;li>복잡한 형태의 범위 자동 선택이 가능하다&lt;/li>
&lt;li>레이어를 다룰 수 있다&lt;/li>
&lt;li>레벨 보정, 명도, 대비 등의 조정을 할 수 있다&lt;/li>
&lt;li>다양한 효과(흐림, 왜곡, 노이즈 등)를 적용할 수 있다&lt;/li>
&lt;/ul>
&lt;h1 id="기타-특징">기타 특징
&lt;/h1>&lt;ul>
&lt;li>무료로 사용할 수 있다&lt;/li>
&lt;li>동작이 비교적 가볍다&lt;/li>
&lt;li>직관적으로 사용할 수 있어 다루기 까다롭지 않다&lt;/li>
&lt;li>일본어(다국어 지원)&lt;/li>
&lt;/ul>
&lt;p>고기능이면서도 사용하기 쉬운 프로그램입니다. 저 자신도 아직 모든 기능을 다루지는 못하고 있습니다.&lt;/p>
&lt;h1 id="설치는-이곳에서">설치는 이곳에서
&lt;/h1>&lt;p>&lt;a class="link" href="https://www.getpaint.net/download.html" target="_blank" rel="noopener"
>https://www.getpaint.net/download.html&lt;/a>&lt;/p>
&lt;p>무료 버전을 선택할 경우에는 링크 대상의 아래 빨간 테두리 부분을 클릭해 주세요.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/img_2.png"
width="754"
height="275"
srcset="http://kenji.blog/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/img_2_hu81a3dce724a3d5bbc649f5ff4fffc8aa_30455_480x0_resize_box_3.png 480w, http://kenji.blog/p/paint.net%E3%81%AE%E9%AD%85%E5%8A%9B/img_2_hu81a3dce724a3d5bbc649f5ff4fffc8aa_30455_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="274"
data-flex-basis="658px"
>&lt;/p>
&lt;p>Microsoft Store를 경유하여 설치하면 유료가 되는 대신 자동 업데이트가 가능해지는 것 같습니다.
무료 버전에서도 최신 버전 업데이트 정보를 알려주므로 비교적 원활하게 업데이트할 수 있습니다.&lt;/p></description></item><item><title>'Github 저장소에 커스텀 도메인을 설정하는 방법'</title><link>http://kenji.blog/ko/p/github%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AB%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Tue, 13 Sep 2022 01:16:40 +0900</pubDate><guid>http://kenji.blog/ko/p/github%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AB%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/github%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AB%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/octocat.png" alt="Featured image of post 'Github 저장소에 커스텀 도메인을 설정하는 방법'" />&lt;p>Github 리포지토리에 커스텀 도메인을 설정하려면 도메인의 DNS 설정을 변경해야 합니다.
여기서는
&lt;a href="https://px.a8.net/svt/ejp?a8mat=3TJBXA+BKRHS2+50+2HHVNM" rel="nofollow">お名前.com&lt;/a>
&lt;img border="0" width="1" height="1" src="https://www19.a8.net/0.gif?a8mat=3TJBXA+BKRHS2+50+2HHVNM" alt="">
에서 도메인을 관리하고 있다고 가정하고 설명합니다.
다른 레지스트라에서도 A 레코드를 수정하여 동일한 설정을 할 수 있습니다.&lt;/p>
&lt;h2 id="お名前com에서-dns-설정-변경하기">お名前.com에서 DNS 설정 변경하기
&lt;/h2>&lt;p>도메인의 DNS 설정을 변경하려면,
&lt;a href="https://px.a8.net/svt/ejp?a8mat=3TJBXA+BKRHS2+50+2HHVNM" rel="nofollow">お名前.com&lt;/a>
&lt;img border="0" width="1" height="1" src="https://www19.a8.net/0.gif?a8mat=3TJBXA+BKRHS2+50+2HHVNM" alt="">
의 관리 화면에 로그인합니다.
로그인 후, 도메인 관리 화면으로 이동합니다.
도메인 관리 화면으로 이동했다면 DNS 설정을 변경합니다.
DNS 설정을 변경하려면 다음과 같이 설정합니다.&lt;/p>
&lt;ol>
&lt;li>&lt;a class="link" href="https://www.onamae.com/" target="_blank" rel="noopener"
>https://www.onamae.com/&lt;/a> 에 접속하여 「お名前.com Navi ログイン (onamae.com Navi 로그인)」을 클릭&lt;/li>
&lt;li>「お名前ID（会員ID）(onamae ID (회원 ID))」와 「パスワード (비밀번호)」를 입력하고 로그인 버튼을 클릭&lt;/li>
&lt;li>「ネームサーバーの設定 (네임서버 설정)」을 클릭&lt;/li>
&lt;li>「ドメインのDNS設定 (도메인 DNS 설정)」을 클릭&lt;/li>
&lt;li>설정하려는 도메인을 선택하고 「次へ (다음)」을 클릭&lt;/li>
&lt;li>「DNSレコード設定を利用する (DNS 레코드 설정을 이용한다)」 오른쪽의 「設定する (설정하기)」를 클릭&lt;/li>
&lt;li>TYPE에 A를 선택하고, TTL에 3600, VALUE에 「185.199.108.153」을 입력한 후 「追加 (추가)」를 클릭&lt;/li>
&lt;li>7과 동일하게 「185.199.109.153」, 「185.199.110.153」, 「185.199.111.153」에 대해서도 추가&lt;/li>
&lt;li>「DNSレコード設定用ネームサーバー変更確認 (DNS 레코드 설정용 네임서버 변경 확인)」에 체크되어 있는지 확인하고 「設定画面へ進む (설정 화면으로 이동)」을 클릭&lt;/li>
&lt;li>「意図しないDNS設定変更を防ぐために (의도하지 않은 DNS 설정 변경을 방지하기 위해)」라는 화면이 나타나면 「設定しない (설정하지 않음)」을 클릭 (필요에 따라 선택하세요)&lt;/li>
&lt;li>설정 내용을 확인하고 「設定する (설정하기)」를 클릭
&lt;img src="http://kenji.blog/p/github%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AB%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img.png"
width="656"
height="140"
srcset="http://kenji.blog/p/github%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AB%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_hu4809a0e7ac5f7d8dfe8c6643786c9385_7354_480x0_resize_box_3.png 480w, http://kenji.blog/p/github%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AB%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_hu4809a0e7ac5f7d8dfe8c6643786c9385_7354_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="468"
data-flex-basis="1124px"
>&lt;/li>
&lt;li>이것으로 DNS 설정이 완료되었습니다. 반영되기까지 최대 72시간 정도 걸릴 수 있습니다.&lt;/li>
&lt;li>72시간이 지나도 반영되지 않으면 onamae.com 고객지원에 문의해 보세요.&lt;/li>
&lt;/ol>
&lt;p>로컬 환경에서 설정이 반영되었는지 확인하려면 다음 명령어를 실행해 보세요.
&lt;code>example.com&lt;/code> 부분은 확인하려는 도메인으로 변경해 주세요.&lt;/p>
&lt;h3 id="linux-mac의-경우">Linux, Mac의 경우
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">dig example.com +noall +answer -t A
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>결과가 다음과 같이 나타나면 설정이 반영된 것입니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">example.com. &lt;span class="m">0&lt;/span> IN A 185.199.108.153
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">example.com. &lt;span class="m">0&lt;/span> IN A 185.199.109.153
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">example.com. &lt;span class="m">0&lt;/span> IN A 185.199.110.153
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">example.com. &lt;span class="m">0&lt;/span> IN A 185.199.111.153
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="windows의-경우">Windows의 경우
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">nslookup -q&lt;span class="o">=&lt;/span>a example.com 8.8.8.8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>결과가 다음과 같이 나타나면 설정이 반영된 것입니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">서버: dns.google
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Address: 8.8.8.8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">권한 없는 응답:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">이름: example.com
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Addresses: 185.199.108.153
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 185.199.109.153
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 185.199.110.153
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 185.199.111.153
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="github-저장소에-커스텀-도메인-설정하기">Github 저장소에 커스텀 도메인 설정하기
&lt;/h2>&lt;ol>
&lt;li>저장소 페이지를 열고 Settings를 클릭합니다.&lt;/li>
&lt;li>Pages를 클릭합니다.&lt;/li>
&lt;li>저장소 소스를 그대로 공개하려면 Source에서 「Deploy from a branch」를 선택합니다. HUGO 등 소스를 빌드하는 경우에는 「GitHub Actions」를 선택합니다.&lt;/li>
&lt;li>Branch에서 공개할 브랜치를 선택하고 Save를 클릭합니다.&lt;/li>
&lt;li>Custom domain에 발급받은 도메인을 입력하고 Save를 클릭합니다.&lt;/li>
&lt;li>필요에 따라 「Enforce HTTPS」에 체크하여 HTTPS 통신을 지원하도록 설정합니다.&lt;/li>
&lt;/ol>
&lt;p>[PR]
&lt;a href="https://px.a8.net/svt/ejp?a8mat=3TJBXA+BKRHS2+50+2HQGAP" rel="nofollow">
&lt;img border="0" width="468" height="60" alt="" src="https://www24.a8.net/svt/bgt?aid=231009310700&amp;wid=003&amp;eno=01&amp;mid=s00000000018015072000&amp;mc=1">&lt;/a>
&lt;img border="0" width="1" height="1" src="https://www14.a8.net/0.gif?a8mat=3TJBXA+BKRHS2+50+2HQGAP" alt="">&lt;/p></description></item><item><title>'dotnet 명령어로 .gitignore 생성하기'</title><link>http://kenji.blog/ko/p/dotnet%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7.gitignore%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/</link><pubDate>Tue, 13 Sep 2022 00:25:12 +0900</pubDate><guid>http://kenji.blog/ko/p/dotnet%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7.gitignore%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/dotnet%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7.gitignore%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/img_1.png" alt="Featured image of post 'dotnet 명령어로 .gitignore 생성하기'" />&lt;p>dotnet.exe 명령어를 사용하면 간단한 프로그램의 빌드까지 수행할 수 있으므로 사용할 수 있게 해두면 편리합니다.&lt;/p>
&lt;h2 id="net-sdk-설치">.NET SDK 설치
&lt;/h2>&lt;p>dotnet.exe는 .NET SDK에 포함되어 있으므로, 먼저 .NET SDK를 설치합니다.
관리자 권한으로 cmd.exe를 실행하고, 다음 명령어를 실행합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cmd" data-lang="cmd">&lt;span class="line">&lt;span class="cl">winget install Microsoft.DotNet.SDK.6
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="gitignore-생성하기">.gitignore 생성하기
&lt;/h2>&lt;p>dotnet.exe로 .gitignore를 생성하는 명령어는 다음과 같습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">dotnet new gitignore
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>생성된 .gitignore는 다음과 같습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt"> 10
&lt;/span>&lt;span class="lnt"> 11
&lt;/span>&lt;span class="lnt"> 12
&lt;/span>&lt;span class="lnt"> 13
&lt;/span>&lt;span class="lnt"> 14
&lt;/span>&lt;span class="lnt"> 15
&lt;/span>&lt;span class="lnt"> 16
&lt;/span>&lt;span class="lnt"> 17
&lt;/span>&lt;span class="lnt"> 18
&lt;/span>&lt;span class="lnt"> 19
&lt;/span>&lt;span class="lnt"> 20
&lt;/span>&lt;span class="lnt"> 21
&lt;/span>&lt;span class="lnt"> 22
&lt;/span>&lt;span class="lnt"> 23
&lt;/span>&lt;span class="lnt"> 24
&lt;/span>&lt;span class="lnt"> 25
&lt;/span>&lt;span class="lnt"> 26
&lt;/span>&lt;span class="lnt"> 27
&lt;/span>&lt;span class="lnt"> 28
&lt;/span>&lt;span class="lnt"> 29
&lt;/span>&lt;span class="lnt"> 30
&lt;/span>&lt;span class="lnt"> 31
&lt;/span>&lt;span class="lnt"> 32
&lt;/span>&lt;span class="lnt"> 33
&lt;/span>&lt;span class="lnt"> 34
&lt;/span>&lt;span class="lnt"> 35
&lt;/span>&lt;span class="lnt"> 36
&lt;/span>&lt;span class="lnt"> 37
&lt;/span>&lt;span class="lnt"> 38
&lt;/span>&lt;span class="lnt"> 39
&lt;/span>&lt;span class="lnt"> 40
&lt;/span>&lt;span class="lnt"> 41
&lt;/span>&lt;span class="lnt"> 42
&lt;/span>&lt;span class="lnt"> 43
&lt;/span>&lt;span class="lnt"> 44
&lt;/span>&lt;span class="lnt"> 45
&lt;/span>&lt;span class="lnt"> 46
&lt;/span>&lt;span class="lnt"> 47
&lt;/span>&lt;span class="lnt"> 48
&lt;/span>&lt;span class="lnt"> 49
&lt;/span>&lt;span class="lnt"> 50
&lt;/span>&lt;span class="lnt"> 51
&lt;/span>&lt;span class="lnt"> 52
&lt;/span>&lt;span class="lnt"> 53
&lt;/span>&lt;span class="lnt"> 54
&lt;/span>&lt;span class="lnt"> 55
&lt;/span>&lt;span class="lnt"> 56
&lt;/span>&lt;span class="lnt"> 57
&lt;/span>&lt;span class="lnt"> 58
&lt;/span>&lt;span class="lnt"> 59
&lt;/span>&lt;span class="lnt"> 60
&lt;/span>&lt;span class="lnt"> 61
&lt;/span>&lt;span class="lnt"> 62
&lt;/span>&lt;span class="lnt"> 63
&lt;/span>&lt;span class="lnt"> 64
&lt;/span>&lt;span class="lnt"> 65
&lt;/span>&lt;span class="lnt"> 66
&lt;/span>&lt;span class="lnt"> 67
&lt;/span>&lt;span class="lnt"> 68
&lt;/span>&lt;span class="lnt"> 69
&lt;/span>&lt;span class="lnt"> 70
&lt;/span>&lt;span class="lnt"> 71
&lt;/span>&lt;span class="lnt"> 72
&lt;/span>&lt;span class="lnt"> 73
&lt;/span>&lt;span class="lnt"> 74
&lt;/span>&lt;span class="lnt"> 75
&lt;/span>&lt;span class="lnt"> 76
&lt;/span>&lt;span class="lnt"> 77
&lt;/span>&lt;span class="lnt"> 78
&lt;/span>&lt;span class="lnt"> 79
&lt;/span>&lt;span class="lnt"> 80
&lt;/span>&lt;span class="lnt"> 81
&lt;/span>&lt;span class="lnt"> 82
&lt;/span>&lt;span class="lnt"> 83
&lt;/span>&lt;span class="lnt"> 84
&lt;/span>&lt;span class="lnt"> 85
&lt;/span>&lt;span class="lnt"> 86
&lt;/span>&lt;span class="lnt"> 87
&lt;/span>&lt;span class="lnt"> 88
&lt;/span>&lt;span class="lnt"> 89
&lt;/span>&lt;span class="lnt"> 90
&lt;/span>&lt;span class="lnt"> 91
&lt;/span>&lt;span class="lnt"> 92
&lt;/span>&lt;span class="lnt"> 93
&lt;/span>&lt;span class="lnt"> 94
&lt;/span>&lt;span class="lnt"> 95
&lt;/span>&lt;span class="lnt"> 96
&lt;/span>&lt;span class="lnt"> 97
&lt;/span>&lt;span class="lnt"> 98
&lt;/span>&lt;span class="lnt"> 99
&lt;/span>&lt;span class="lnt">100
&lt;/span>&lt;span class="lnt">101
&lt;/span>&lt;span class="lnt">102
&lt;/span>&lt;span class="lnt">103
&lt;/span>&lt;span class="lnt">104
&lt;/span>&lt;span class="lnt">105
&lt;/span>&lt;span class="lnt">106
&lt;/span>&lt;span class="lnt">107
&lt;/span>&lt;span class="lnt">108
&lt;/span>&lt;span class="lnt">109
&lt;/span>&lt;span class="lnt">110
&lt;/span>&lt;span class="lnt">111
&lt;/span>&lt;span class="lnt">112
&lt;/span>&lt;span class="lnt">113
&lt;/span>&lt;span class="lnt">114
&lt;/span>&lt;span class="lnt">115
&lt;/span>&lt;span class="lnt">116
&lt;/span>&lt;span class="lnt">117
&lt;/span>&lt;span class="lnt">118
&lt;/span>&lt;span class="lnt">119
&lt;/span>&lt;span class="lnt">120
&lt;/span>&lt;span class="lnt">121
&lt;/span>&lt;span class="lnt">122
&lt;/span>&lt;span class="lnt">123
&lt;/span>&lt;span class="lnt">124
&lt;/span>&lt;span class="lnt">125
&lt;/span>&lt;span class="lnt">126
&lt;/span>&lt;span class="lnt">127
&lt;/span>&lt;span class="lnt">128
&lt;/span>&lt;span class="lnt">129
&lt;/span>&lt;span class="lnt">130
&lt;/span>&lt;span class="lnt">131
&lt;/span>&lt;span class="lnt">132
&lt;/span>&lt;span class="lnt">133
&lt;/span>&lt;span class="lnt">134
&lt;/span>&lt;span class="lnt">135
&lt;/span>&lt;span class="lnt">136
&lt;/span>&lt;span class="lnt">137
&lt;/span>&lt;span class="lnt">138
&lt;/span>&lt;span class="lnt">139
&lt;/span>&lt;span class="lnt">140
&lt;/span>&lt;span class="lnt">141
&lt;/span>&lt;span class="lnt">142
&lt;/span>&lt;span class="lnt">143
&lt;/span>&lt;span class="lnt">144
&lt;/span>&lt;span class="lnt">145
&lt;/span>&lt;span class="lnt">146
&lt;/span>&lt;span class="lnt">147
&lt;/span>&lt;span class="lnt">148
&lt;/span>&lt;span class="lnt">149
&lt;/span>&lt;span class="lnt">150
&lt;/span>&lt;span class="lnt">151
&lt;/span>&lt;span class="lnt">152
&lt;/span>&lt;span class="lnt">153
&lt;/span>&lt;span class="lnt">154
&lt;/span>&lt;span class="lnt">155
&lt;/span>&lt;span class="lnt">156
&lt;/span>&lt;span class="lnt">157
&lt;/span>&lt;span class="lnt">158
&lt;/span>&lt;span class="lnt">159
&lt;/span>&lt;span class="lnt">160
&lt;/span>&lt;span class="lnt">161
&lt;/span>&lt;span class="lnt">162
&lt;/span>&lt;span class="lnt">163
&lt;/span>&lt;span class="lnt">164
&lt;/span>&lt;span class="lnt">165
&lt;/span>&lt;span class="lnt">166
&lt;/span>&lt;span class="lnt">167
&lt;/span>&lt;span class="lnt">168
&lt;/span>&lt;span class="lnt">169
&lt;/span>&lt;span class="lnt">170
&lt;/span>&lt;span class="lnt">171
&lt;/span>&lt;span class="lnt">172
&lt;/span>&lt;span class="lnt">173
&lt;/span>&lt;span class="lnt">174
&lt;/span>&lt;span class="lnt">175
&lt;/span>&lt;span class="lnt">176
&lt;/span>&lt;span class="lnt">177
&lt;/span>&lt;span class="lnt">178
&lt;/span>&lt;span class="lnt">179
&lt;/span>&lt;span class="lnt">180
&lt;/span>&lt;span class="lnt">181
&lt;/span>&lt;span class="lnt">182
&lt;/span>&lt;span class="lnt">183
&lt;/span>&lt;span class="lnt">184
&lt;/span>&lt;span class="lnt">185
&lt;/span>&lt;span class="lnt">186
&lt;/span>&lt;span class="lnt">187
&lt;/span>&lt;span class="lnt">188
&lt;/span>&lt;span class="lnt">189
&lt;/span>&lt;span class="lnt">190
&lt;/span>&lt;span class="lnt">191
&lt;/span>&lt;span class="lnt">192
&lt;/span>&lt;span class="lnt">193
&lt;/span>&lt;span class="lnt">194
&lt;/span>&lt;span class="lnt">195
&lt;/span>&lt;span class="lnt">196
&lt;/span>&lt;span class="lnt">197
&lt;/span>&lt;span class="lnt">198
&lt;/span>&lt;span class="lnt">199
&lt;/span>&lt;span class="lnt">200
&lt;/span>&lt;span class="lnt">201
&lt;/span>&lt;span class="lnt">202
&lt;/span>&lt;span class="lnt">203
&lt;/span>&lt;span class="lnt">204
&lt;/span>&lt;span class="lnt">205
&lt;/span>&lt;span class="lnt">206
&lt;/span>&lt;span class="lnt">207
&lt;/span>&lt;span class="lnt">208
&lt;/span>&lt;span class="lnt">209
&lt;/span>&lt;span class="lnt">210
&lt;/span>&lt;span class="lnt">211
&lt;/span>&lt;span class="lnt">212
&lt;/span>&lt;span class="lnt">213
&lt;/span>&lt;span class="lnt">214
&lt;/span>&lt;span class="lnt">215
&lt;/span>&lt;span class="lnt">216
&lt;/span>&lt;span class="lnt">217
&lt;/span>&lt;span class="lnt">218
&lt;/span>&lt;span class="lnt">219
&lt;/span>&lt;span class="lnt">220
&lt;/span>&lt;span class="lnt">221
&lt;/span>&lt;span class="lnt">222
&lt;/span>&lt;span class="lnt">223
&lt;/span>&lt;span class="lnt">224
&lt;/span>&lt;span class="lnt">225
&lt;/span>&lt;span class="lnt">226
&lt;/span>&lt;span class="lnt">227
&lt;/span>&lt;span class="lnt">228
&lt;/span>&lt;span class="lnt">229
&lt;/span>&lt;span class="lnt">230
&lt;/span>&lt;span class="lnt">231
&lt;/span>&lt;span class="lnt">232
&lt;/span>&lt;span class="lnt">233
&lt;/span>&lt;span class="lnt">234
&lt;/span>&lt;span class="lnt">235
&lt;/span>&lt;span class="lnt">236
&lt;/span>&lt;span class="lnt">237
&lt;/span>&lt;span class="lnt">238
&lt;/span>&lt;span class="lnt">239
&lt;/span>&lt;span class="lnt">240
&lt;/span>&lt;span class="lnt">241
&lt;/span>&lt;span class="lnt">242
&lt;/span>&lt;span class="lnt">243
&lt;/span>&lt;span class="lnt">244
&lt;/span>&lt;span class="lnt">245
&lt;/span>&lt;span class="lnt">246
&lt;/span>&lt;span class="lnt">247
&lt;/span>&lt;span class="lnt">248
&lt;/span>&lt;span class="lnt">249
&lt;/span>&lt;span class="lnt">250
&lt;/span>&lt;span class="lnt">251
&lt;/span>&lt;span class="lnt">252
&lt;/span>&lt;span class="lnt">253
&lt;/span>&lt;span class="lnt">254
&lt;/span>&lt;span class="lnt">255
&lt;/span>&lt;span class="lnt">256
&lt;/span>&lt;span class="lnt">257
&lt;/span>&lt;span class="lnt">258
&lt;/span>&lt;span class="lnt">259
&lt;/span>&lt;span class="lnt">260
&lt;/span>&lt;span class="lnt">261
&lt;/span>&lt;span class="lnt">262
&lt;/span>&lt;span class="lnt">263
&lt;/span>&lt;span class="lnt">264
&lt;/span>&lt;span class="lnt">265
&lt;/span>&lt;span class="lnt">266
&lt;/span>&lt;span class="lnt">267
&lt;/span>&lt;span class="lnt">268
&lt;/span>&lt;span class="lnt">269
&lt;/span>&lt;span class="lnt">270
&lt;/span>&lt;span class="lnt">271
&lt;/span>&lt;span class="lnt">272
&lt;/span>&lt;span class="lnt">273
&lt;/span>&lt;span class="lnt">274
&lt;/span>&lt;span class="lnt">275
&lt;/span>&lt;span class="lnt">276
&lt;/span>&lt;span class="lnt">277
&lt;/span>&lt;span class="lnt">278
&lt;/span>&lt;span class="lnt">279
&lt;/span>&lt;span class="lnt">280
&lt;/span>&lt;span class="lnt">281
&lt;/span>&lt;span class="lnt">282
&lt;/span>&lt;span class="lnt">283
&lt;/span>&lt;span class="lnt">284
&lt;/span>&lt;span class="lnt">285
&lt;/span>&lt;span class="lnt">286
&lt;/span>&lt;span class="lnt">287
&lt;/span>&lt;span class="lnt">288
&lt;/span>&lt;span class="lnt">289
&lt;/span>&lt;span class="lnt">290
&lt;/span>&lt;span class="lnt">291
&lt;/span>&lt;span class="lnt">292
&lt;/span>&lt;span class="lnt">293
&lt;/span>&lt;span class="lnt">294
&lt;/span>&lt;span class="lnt">295
&lt;/span>&lt;span class="lnt">296
&lt;/span>&lt;span class="lnt">297
&lt;/span>&lt;span class="lnt">298
&lt;/span>&lt;span class="lnt">299
&lt;/span>&lt;span class="lnt">300
&lt;/span>&lt;span class="lnt">301
&lt;/span>&lt;span class="lnt">302
&lt;/span>&lt;span class="lnt">303
&lt;/span>&lt;span class="lnt">304
&lt;/span>&lt;span class="lnt">305
&lt;/span>&lt;span class="lnt">306
&lt;/span>&lt;span class="lnt">307
&lt;/span>&lt;span class="lnt">308
&lt;/span>&lt;span class="lnt">309
&lt;/span>&lt;span class="lnt">310
&lt;/span>&lt;span class="lnt">311
&lt;/span>&lt;span class="lnt">312
&lt;/span>&lt;span class="lnt">313
&lt;/span>&lt;span class="lnt">314
&lt;/span>&lt;span class="lnt">315
&lt;/span>&lt;span class="lnt">316
&lt;/span>&lt;span class="lnt">317
&lt;/span>&lt;span class="lnt">318
&lt;/span>&lt;span class="lnt">319
&lt;/span>&lt;span class="lnt">320
&lt;/span>&lt;span class="lnt">321
&lt;/span>&lt;span class="lnt">322
&lt;/span>&lt;span class="lnt">323
&lt;/span>&lt;span class="lnt">324
&lt;/span>&lt;span class="lnt">325
&lt;/span>&lt;span class="lnt">326
&lt;/span>&lt;span class="lnt">327
&lt;/span>&lt;span class="lnt">328
&lt;/span>&lt;span class="lnt">329
&lt;/span>&lt;span class="lnt">330
&lt;/span>&lt;span class="lnt">331
&lt;/span>&lt;span class="lnt">332
&lt;/span>&lt;span class="lnt">333
&lt;/span>&lt;span class="lnt">334
&lt;/span>&lt;span class="lnt">335
&lt;/span>&lt;span class="lnt">336
&lt;/span>&lt;span class="lnt">337
&lt;/span>&lt;span class="lnt">338
&lt;/span>&lt;span class="lnt">339
&lt;/span>&lt;span class="lnt">340
&lt;/span>&lt;span class="lnt">341
&lt;/span>&lt;span class="lnt">342
&lt;/span>&lt;span class="lnt">343
&lt;/span>&lt;span class="lnt">344
&lt;/span>&lt;span class="lnt">345
&lt;/span>&lt;span class="lnt">346
&lt;/span>&lt;span class="lnt">347
&lt;/span>&lt;span class="lnt">348
&lt;/span>&lt;span class="lnt">349
&lt;/span>&lt;span class="lnt">350
&lt;/span>&lt;span class="lnt">351
&lt;/span>&lt;span class="lnt">352
&lt;/span>&lt;span class="lnt">353
&lt;/span>&lt;span class="lnt">354
&lt;/span>&lt;span class="lnt">355
&lt;/span>&lt;span class="lnt">356
&lt;/span>&lt;span class="lnt">357
&lt;/span>&lt;span class="lnt">358
&lt;/span>&lt;span class="lnt">359
&lt;/span>&lt;span class="lnt">360
&lt;/span>&lt;span class="lnt">361
&lt;/span>&lt;span class="lnt">362
&lt;/span>&lt;span class="lnt">363
&lt;/span>&lt;span class="lnt">364
&lt;/span>&lt;span class="lnt">365
&lt;/span>&lt;span class="lnt">366
&lt;/span>&lt;span class="lnt">367
&lt;/span>&lt;span class="lnt">368
&lt;/span>&lt;span class="lnt">369
&lt;/span>&lt;span class="lnt">370
&lt;/span>&lt;span class="lnt">371
&lt;/span>&lt;span class="lnt">372
&lt;/span>&lt;span class="lnt">373
&lt;/span>&lt;span class="lnt">374
&lt;/span>&lt;span class="lnt">375
&lt;/span>&lt;span class="lnt">376
&lt;/span>&lt;span class="lnt">377
&lt;/span>&lt;span class="lnt">378
&lt;/span>&lt;span class="lnt">379
&lt;/span>&lt;span class="lnt">380
&lt;/span>&lt;span class="lnt">381
&lt;/span>&lt;span class="lnt">382
&lt;/span>&lt;span class="lnt">383
&lt;/span>&lt;span class="lnt">384
&lt;/span>&lt;span class="lnt">385
&lt;/span>&lt;span class="lnt">386
&lt;/span>&lt;span class="lnt">387
&lt;/span>&lt;span class="lnt">388
&lt;/span>&lt;span class="lnt">389
&lt;/span>&lt;span class="lnt">390
&lt;/span>&lt;span class="lnt">391
&lt;/span>&lt;span class="lnt">392
&lt;/span>&lt;span class="lnt">393
&lt;/span>&lt;span class="lnt">394
&lt;/span>&lt;span class="lnt">395
&lt;/span>&lt;span class="lnt">396
&lt;/span>&lt;span class="lnt">397
&lt;/span>&lt;span class="lnt">398
&lt;/span>&lt;span class="lnt">399
&lt;/span>&lt;span class="lnt">400
&lt;/span>&lt;span class="lnt">401
&lt;/span>&lt;span class="lnt">402
&lt;/span>&lt;span class="lnt">403
&lt;/span>&lt;span class="lnt">404
&lt;/span>&lt;span class="lnt">405
&lt;/span>&lt;span class="lnt">406
&lt;/span>&lt;span class="lnt">407
&lt;/span>&lt;span class="lnt">408
&lt;/span>&lt;span class="lnt">409
&lt;/span>&lt;span class="lnt">410
&lt;/span>&lt;span class="lnt">411
&lt;/span>&lt;span class="lnt">412
&lt;/span>&lt;span class="lnt">413
&lt;/span>&lt;span class="lnt">414
&lt;/span>&lt;span class="lnt">415
&lt;/span>&lt;span class="lnt">416
&lt;/span>&lt;span class="lnt">417
&lt;/span>&lt;span class="lnt">418
&lt;/span>&lt;span class="lnt">419
&lt;/span>&lt;span class="lnt">420
&lt;/span>&lt;span class="lnt">421
&lt;/span>&lt;span class="lnt">422
&lt;/span>&lt;span class="lnt">423
&lt;/span>&lt;span class="lnt">424
&lt;/span>&lt;span class="lnt">425
&lt;/span>&lt;span class="lnt">426
&lt;/span>&lt;span class="lnt">427
&lt;/span>&lt;span class="lnt">428
&lt;/span>&lt;span class="lnt">429
&lt;/span>&lt;span class="lnt">430
&lt;/span>&lt;span class="lnt">431
&lt;/span>&lt;span class="lnt">432
&lt;/span>&lt;span class="lnt">433
&lt;/span>&lt;span class="lnt">434
&lt;/span>&lt;span class="lnt">435
&lt;/span>&lt;span class="lnt">436
&lt;/span>&lt;span class="lnt">437
&lt;/span>&lt;span class="lnt">438
&lt;/span>&lt;span class="lnt">439
&lt;/span>&lt;span class="lnt">440
&lt;/span>&lt;span class="lnt">441
&lt;/span>&lt;span class="lnt">442
&lt;/span>&lt;span class="lnt">443
&lt;/span>&lt;span class="lnt">444
&lt;/span>&lt;span class="lnt">445
&lt;/span>&lt;span class="lnt">446
&lt;/span>&lt;span class="lnt">447
&lt;/span>&lt;span class="lnt">448
&lt;/span>&lt;span class="lnt">449
&lt;/span>&lt;span class="lnt">450
&lt;/span>&lt;span class="lnt">451
&lt;/span>&lt;span class="lnt">452
&lt;/span>&lt;span class="lnt">453
&lt;/span>&lt;span class="lnt">454
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## Ignore Visual Studio temporary files, build results, and&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## files generated by popular Visual Studio add-ons.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># User-specific files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">rsuser&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">suo&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">user&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">userosscache&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">sln&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">docstates&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># User-specific files (MonoDevelop/Xamarin Studio)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">userprefs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Mono auto generated files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">mono_crash&lt;/span>&lt;span class="o">.*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Build results&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Dd&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ebug&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Dd&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ebugPublic&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Rr&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">elease&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Rr&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">eleases&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">x64&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">x86&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Ww&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">Ii&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">Nn&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="mi">32&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Aa&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">Rr&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">Mm&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Aa&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">Rr&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">Mm&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="mi">64&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">bld&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Bb&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="ow">in&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Oo&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">bj&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Ll&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">og&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Ll&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ogs&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio 2015/2017 cache/options directory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">vs&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Uncomment if you have tasks that create the project&amp;#39;s static files in wwwroot&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#wwwroot/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio 2017 auto generated files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Generated&lt;/span>\ &lt;span class="n">Files&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># MSTest test Results&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Tt&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">est&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Rr&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">esult&lt;/span>&lt;span class="o">*/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Bb&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">uild&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Ll&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">og&lt;/span>&lt;span class="o">.*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># NUnit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">VisualState&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">TestResult&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">nunit&lt;/span>&lt;span class="o">-*.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Build Results of an ATL Project&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Dd&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ebugPS&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Rr&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">eleasePS&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dlldata&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">c&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Benchmark Results&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">BenchmarkDotNet&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Artifacts&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># .NET&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">project&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lock&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">project&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fragment&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lock&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">artifacts&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Tye&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">tye&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ASP.NET Scaffolding&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ScaffoldingReadMe&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">txt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># StyleCop&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">StyleCopReport&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Files built by Visual Studio&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*&lt;/span>&lt;span class="n">_i&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">c&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*&lt;/span>&lt;span class="n">_p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">c&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*&lt;/span>&lt;span class="n">_h&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">h&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">ilk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">meta&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">obj&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">iobj&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">pch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">pdb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">ipdb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">pgc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">pgd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">rsp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">sbr&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">tlb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">tli&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">tlh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">tmp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">tmp_proj&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*&lt;/span>&lt;span class="n">_wpftmp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">csproj&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">log&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">vspscc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">vssscc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">builds&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">pidb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">svclog&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">scc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Chutzpah Test files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">_Chutzpah&lt;/span>&lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual C++ cache files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ipch&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">aps&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">ncb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">opendb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">opensdf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">sdf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">cachefile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">VC&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">db&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">VC&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">VC&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">opendb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio profiler&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">psess&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">vsp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">vspx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">sap&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio Trace Files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">e2e&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># TFS 2012 Local Workspace&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">$&lt;/span>&lt;span class="n">tf&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Guidance Automation Toolkit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">gpState&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ReSharper is a .NET coding add-in&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">_ReSharper&lt;/span>&lt;span class="o">*/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Rr&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Ss&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">harper&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">DotSettings&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">user&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># TeamCity is a build add-in&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">_TeamCity&lt;/span>&lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># DotCover is a Code Coverage Tool&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">dotCover&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># AxoCover is a Code Coverage Tool&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">axoCover&lt;/span>&lt;span class="o">/*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">!.&lt;/span>&lt;span class="n">axoCover&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">settings&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Coverlet is a free, cross platform Code Coverage Tool&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">coverage&lt;/span>&lt;span class="o">*.&lt;/span>&lt;span class="n">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">coverage&lt;/span>&lt;span class="o">*.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">coverage&lt;/span>&lt;span class="o">*.&lt;/span>&lt;span class="n">info&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio code coverage results&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">coverage&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">coveragexml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># NCrunch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">_NCrunch_&lt;/span>&lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.*&lt;/span>&lt;span class="n">crunch&lt;/span>&lt;span class="o">*.&lt;/span>&lt;span class="n">local&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">nCrunchTemp_&lt;/span>&lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># MightyMoose&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">mm&lt;/span>&lt;span class="o">.*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">AutoTest&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Net&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Web workbench (sass)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">sass&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">cache&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Installshield output folder&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Ee&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">xpress&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># DocProject is a documentation generator add-in&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DocProject&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">buildhelp&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DocProject&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Help&lt;/span>&lt;span class="o">/*.&lt;/span>&lt;span class="n">HxT&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DocProject&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Help&lt;/span>&lt;span class="o">/*.&lt;/span>&lt;span class="n">HxC&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DocProject&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Help&lt;/span>&lt;span class="o">/*.&lt;/span>&lt;span class="n">hhc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DocProject&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Help&lt;/span>&lt;span class="o">/*.&lt;/span>&lt;span class="n">hhk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DocProject&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Help&lt;/span>&lt;span class="o">/*.&lt;/span>&lt;span class="n">hhp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DocProject&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Help&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Html2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DocProject&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">Help&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">html&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Click-Once directory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">publish&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Publish Web Output&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Pp&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ublish&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">azurePubxml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Note: Comment the next line if you want to checkin your web deploy settings,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># but database connection strings (with potential passwords) will be unencrypted&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">pubxml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">publishproj&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Microsoft Azure Web App publish settings. Comment the next line if you want to&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># checkin your Azure Web App publish settings, but sensitive information contained&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># in these scripts will be unencrypted&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">PublishScripts&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># NuGet Packages&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">nupkg&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># NuGet Symbol Packages&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">snupkg&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># The packages folder can be ignored because of Package Restore&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">**/&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Pp&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ackages&lt;/span>&lt;span class="o">/*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># except build/, which is used as an MSBuild target.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">!**/&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Pp&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ackages&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">build&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Uncomment if necessary however generally it will be regenerated when needed&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#!**/[Pp]ackages/repositories.config&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># NuGet v3&amp;#39;s project.json files produces more ignorable files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">nuget&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">props&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">nuget&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">targets&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Microsoft Azure Build Output&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">csx&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">build&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">csdef&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Microsoft Azure Emulator&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ecf&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rcf&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Windows Store app package directories and files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">AppPackages&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">BundleArtifacts&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Package&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">StoreAssociation&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">_pkginfo&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">txt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">appx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">appxbundle&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">appxupload&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio cache files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># files ending in .cache can be ignored&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Cc&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ache&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># but keep track of directories ending in .cache&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">!&lt;/span>&lt;span class="err">?&lt;/span>&lt;span class="o">*.&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Cc&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ache&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Others&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ClientBin&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">~$*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*~&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">dbmdl&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">dbproj&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">schemaview&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">jfm&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">pfx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">publishsettings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">orleans&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">codegen&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Including strong name files can present a security risk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># (https://github.com/github/gitignore/pull/2483#issue-259490424)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#*.snk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Since there are multiple workflows, uncomment next line to ignore bower_components&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#bower_components/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># RIA/Silverlight projects&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Generated_Code&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Backup &amp;amp; report files from converting an old project file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># to a newer Visual Studio version. Backup files are not needed,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># because we have git ;-)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">_UpgradeReport_Files&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Backup&lt;/span>&lt;span class="o">*/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">UpgradeLog&lt;/span>&lt;span class="o">*.&lt;/span>&lt;span class="n">XML&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">UpgradeLog&lt;/span>&lt;span class="o">*.&lt;/span>&lt;span class="n">htm&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ServiceFabricBackup&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">rptproj&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">bak&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># SQL Server files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">mdf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">ldf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">ndf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Business Intelligence projects&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">rdl&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">data&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">bim&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">layout&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">bim_&lt;/span>&lt;span class="o">*.&lt;/span>&lt;span class="n">settings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">rptproj&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rsuser&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*-&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">Bb&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ackup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rdl&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*-&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">Bb&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ackup&lt;/span> &lt;span class="p">([&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">9&lt;/span>&lt;span class="p">])&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rdl&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*-&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">Bb&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">ackup&lt;/span> &lt;span class="p">([&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">9&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">9&lt;/span>&lt;span class="p">])&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rdl&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Microsoft Fakes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">FakesAssemblies&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># GhostDoc plugin setting file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">GhostDoc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Node.js Tools for Visual Studio&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">ntvs_analysis&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dat&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">node_modules&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio 6 build log&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">plg&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio 6 workspace options file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">opt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio 6 auto-generated workspace file (contains which files were open etc.)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">vbw&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Visual Studio LightSwitch build output&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">**/*.&lt;/span>&lt;span class="n">HTMLClient&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">GeneratedArtifacts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">**/*.&lt;/span>&lt;span class="n">DesktopClient&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">GeneratedArtifacts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">**/*.&lt;/span>&lt;span class="n">DesktopClient&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ModelManifest&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">**/*.&lt;/span>&lt;span class="n">Server&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">GeneratedArtifacts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">**/*.&lt;/span>&lt;span class="n">Server&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">ModelManifest&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">_Pvt_Extensions&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Paket dependency manager&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">paket&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">paket&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">exe&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">paket&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">files&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># FAKE - F# Make&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">fake&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># CodeRush personal settings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">cr&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">personal&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Python Tools for Visual Studio (PTVS)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">__pycache__&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">pyc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Cake - Uncomment if you are using it&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># tools/**&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># !tools/packages.config&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Tabs Studio&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">tss&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Telerik&amp;#39;s JustMock configuration file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">jmconfig&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># BizTalk build output&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">btp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">btm&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">odx&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">xsd&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># OpenCover UI analysis results&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">OpenCover&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Azure Stream Analytics local run output&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ASALocalRun&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># MSBuild Binary and Structured Log&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">binlog&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># NVidia Nsight GPU debugger configuration file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">nvuser&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># MFractors (Xamarin productivity tool) working folder&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">mfractor&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Local History for Visual Studio&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">localhistory&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># BeatPulse healthcheck temp database&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">healthchecksdb&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Backup folder for Package Reference Convert tool in Visual Studio 2017&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">MigrationBackup&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ionide (cross platform F# VS Code tools) working folder&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">ionide&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Fody - auto-generated XML schema&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">FodyWeavers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">xsd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## Visual studio for Mac&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># globs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Makefile&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="ow">in&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">userprefs&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">usertasks&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">config&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">make&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">config&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">status&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">aclocal&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">m4&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">install&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">sh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">autom4te&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cache&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">tar&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gz&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">tarballs&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">test&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">results&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Mac bundle stuff&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">dmg&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">app&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># General&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">DS_Store&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">AppleDouble&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">LSOverride&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Icon must end with two \r&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Icon&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Thumbnails&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">_&lt;/span>&lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Files that might appear in the root of a volume&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">DocumentRevisions&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">V100&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">fseventsd&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">Spotlight&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">V100&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">TemporaryItems&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">Trashes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">VolumeIcon&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">icns&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">apple&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">timemachine&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">donotpresent&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Directories potentially created on remote AFP share&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">AppleDB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">AppleDesktop&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Network&lt;/span> &lt;span class="n">Trash&lt;/span> &lt;span class="n">Folder&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Temporary&lt;/span> &lt;span class="n">Items&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">apdisk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Windows thumbnail cache files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Thumbs&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">db&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ehthumbs&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">db&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ehthumbs_vista&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">db&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Dump file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">stackdump&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Folder config file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">[&lt;/span>&lt;span class="n">Dd&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="n">esktop&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ini&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Recycle Bin used on file shares&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">$&lt;/span>&lt;span class="n">RECYCLE&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">BIN&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Windows Installer files&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">cab&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">msi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">msix&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">msm&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">msp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Windows shortcuts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">lnk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># JetBrains Rider&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">idea&lt;/span>&lt;span class="o">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">*.&lt;/span>&lt;span class="n">sln&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">iml&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">## Visual Studio Code&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">##&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">.&lt;/span>&lt;span class="n">vscode&lt;/span>&lt;span class="o">/*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">!.&lt;/span>&lt;span class="n">vscode&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">settings&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">!.&lt;/span>&lt;span class="n">vscode&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">tasks&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">!.&lt;/span>&lt;span class="n">vscode&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">launch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">!.&lt;/span>&lt;span class="n">vscode&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">extensions&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Visual Studio용 파일이 많지만, mac의 &amp;lsquo;.DS_Store&amp;rsquo; 등 일반적으로 git 상에서 관리가 필요 없는 것들도 포함되어 있습니다.&lt;/p>
&lt;h2 id="참고-사이트">참고 사이트
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://docs.microsoft.com/ja-jp/dotnet/core/install/windows?tabs=net60" target="_blank" rel="noopener"
>Windows에 .NET 설치하기&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>'좋아하는 게임 11선'</title><link>http://kenji.blog/ko/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/</link><pubDate>Mon, 12 Sep 2022 19:28:50 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/</guid><description>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_12.png" alt="Featured image of post '좋아하는 게임 11선'" />&lt;p>좋아하는 게임을 떠올려보니 명예의 전당에 오를 법한 게임들뿐이네요.
오래된 게임이 많으니 아직 해보지 않으셨다면 꼭 한 번 즐겨보시기 바랍니다.&lt;/p>
&lt;h2 id="게임보이">게임보이
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_1.png"
width="300"
height="365"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_1_hu3e93850260927d2ca0508aaabeb65e85_100200_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_1_hu3e93850260927d2ca0508aaabeb65e85_100200_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="82"
data-flex-basis="197px"
>
초대 게임보이는 1989년 닌텐도에서 발매한 휴대용 게임기입니다.
이후 게임보이 컬러와 게임보이 어드밴스 등 후속 기종이 발매되었습니다.&lt;/p>
&lt;h3 id="saga2-비보전설">①Sa・Ga2 비보전설
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_2.png"
width="300"
height="419"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_2_hu43aa9545e862274f62403fd117d11c30_247115_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_2_hu43aa9545e862274f62403fd117d11c30_247115_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="71"
data-flex-basis="171px"
>
1990년 스퀘어(현 스퀘어 에닉스)에서 발매한 RPG 게임입니다.
다양한 스테이지에서 비보라 불리는 보물을 오로지 모으는 스토리로,
제가 처음으로 플레이한 RPG 게임입니다.&lt;/p>
&lt;h3 id="별의-커비">②별의 커비
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_3.png"
width="300"
height="350"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_3_hu0e2b5ac71ca0bd227f71e503dbe94bc6_170917_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_3_hu0e2b5ac71ca0bd227f71e503dbe94bc6_170917_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="85"
data-flex-basis="205px"
>
1992년 닌텐도에서 발매한 액션 게임입니다. 개발사는 HAL 연구소입니다.
적을 빨아들이거나 공기를 마셔 공중에 떠서 진행하는 게임입니다.
음악과 효과음도 꽤 잘 만들어져 리드미컬하게 즐길 수 있는 작품입니다.&lt;/p>
&lt;h3 id="포켓몬스터-적녹">③포켓몬스터 적·녹
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_4.png"
width="600"
height="338"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_4_hu7ba0e1f65107e5c20a30c245d9f58ae1_369551_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_4_hu7ba0e1f65107e5c20a30c245d9f58ae1_369551_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
>
1996년 닌텐도에서 발매한 RPG 게임입니다. 개발사는 닌텐도 정보개발본부, 게임 프리크, 크리처스입니다.
이후 애니메이션으로 제작되고 폭발적인 인기를 끌었지만, 저는 이 1세대밖에 해보지 못했습니다.&lt;/p>
&lt;h2 id="슈퍼-패미컴">슈퍼 패미컴
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_5.png"
width="600"
height="266"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_5_huad11a387bc527c77f3dc50722dcbe71e_95134_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_5_huad11a387bc527c77f3dc50722dcbe71e_95134_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="225"
data-flex-basis="541px"
>
1990년 닌텐도에서 발매한 가정용 게임기입니다. 해외에서는 SNES(Super Nintendo Entertainment System)라고도 불립니다.&lt;/p>
&lt;h3 id="슈퍼-마리오-카트">④슈퍼 마리오 카트
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_6.png"
width="273"
height="500"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_6_hufd407ac1367cf89272f19478255c8fb8_345614_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_6_hufd407ac1367cf89272f19478255c8fb8_345614_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="54"
data-flex-basis="131px"
>
1992년 닌텐도에서 발매한 슈퍼 패미컴용 소프트입니다.
아이템인 등껍질이나 바나나를 던지는 등 상대를 방해하며 순위를 겨루는 레이싱 게임입니다.
가족이나 친구들과 함께 즐겼던 기억이 납니다.&lt;/p>
&lt;h3 id="드래곤-퀘스트-v-천공의-신부">⑤드래곤 퀘스트 V 천공의 신부
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_7.png"
width="300"
height="511"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_7_hua74c1fb9d68b702d91ef66bdb2d5d98b_299824_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_7_hua74c1fb9d68b702d91ef66bdb2d5d98b_299824_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_7.png"
class="gallery-image"
data-flex-grow="58"
data-flex-basis="140px"
>
1992년 에닉스에서 발매한 RPG 게임입니다.
결혼 상대를 선택하는 요소나 쓰러뜨린 몬스터를 동료로 만들 수 있는 요소도 있는 게임입니다.
외톨이 메탈을 여러 마리 동료로 만들 때까지 파고들었습니다.&lt;/p>
&lt;h3 id="파이널-판타지-v">⑥파이널 판타지 V
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_8.png"
width="300"
height="168"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_8_hu436060f51fbe2bacd7e14a949683aa78_79328_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_8_hu436060f51fbe2bacd7e14a949683aa78_79328_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_8.png"
class="gallery-image"
data-flex-grow="178"
data-flex-basis="428px"
>
1992년 스퀘어에서 발매한 RPG 게임입니다.
직업을 선택하고 스킬을 마스터하는 파고들기 요소가 있습니다.
드래곤 퀘스트와 마찬가지로 오로지 동굴에서 레벨을 올렸던 기억이 납니다.&lt;/p>
&lt;h3 id="톨네코의-대모험-이상한-던전">⑦톨네코의 대모험 이상한 던전
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_9.png"
width="300"
height="547"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_9_huf53b606ed61f5c15f0df49ad13e49ec8_318133_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_9_huf53b606ed61f5c15f0df49ad13e49ec8_318133_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_9.png"
class="gallery-image"
data-flex-grow="54"
data-flex-basis="131px"
>
1993년 춘소프트에서 발매한 로그라이크 게임입니다.
이상한 던전 시리즈의 전신입니다.
매번 랜덤하게 던전의 형태가 바뀌는 것이 특징입니다.
캐치프레이즈는 &amp;ldquo;1000번 놀 수 있는 RPG&amp;quot;입니다.&lt;/p>
&lt;h3 id="이상한-던전-2-풍래의-시렌">⑧이상한 던전 2 풍래의 시렌
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_15.png"
width="300"
height="538"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_15_hu20d7e1ac46b9aa246626c2316c605072_252589_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_15_hu20d7e1ac46b9aa246626c2316c605072_252589_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_15.png"
class="gallery-image"
data-flex-grow="55"
data-flex-basis="133px"
>
1995년 춘소프트에서 발매한 로그라이크 게임입니다.
이상한 던전 시리즈 &amp;lsquo;톨네코의 대모험&amp;rsquo;의 속편입니다.
던전 내에 상점이 있어 아이템을 구매할 수 있습니다.
(구매하지 않고 상점에서 나가면 주인이 쫓아옵니다.)&lt;/p>
&lt;h3 id="mother2">⑨MOTHER2
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_11.png"
width="277"
height="500"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_11_huc9569cdf9793ce314b2038283529730d_132246_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_11_huc9569cdf9793ce314b2038283529730d_132246_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_11.png"
class="gallery-image"
data-flex-grow="55"
data-flex-basis="132px"
>
1994년 닌텐도에서 발매한 MOTHER 시리즈 두 번째 작품입니다. 개발사는 에이프와 HAL 연구소입니다.
이후 2006년에 MOTHER3가 발매되었습니다. 이토이 시게사토 씨가 프로듀싱한 작품으로,
독특한 세계관과 철학적인 말들이 곳곳에 박혀 있습니다.&lt;/p>
&lt;h3 id="젤다의-전설-신들의-트라이포스">⑩젤다의 전설 신들의 트라이포스
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_14.png"
width="276"
height="498"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_14_hu224d656baa1b4164cdd4a067c6d88d26_298137_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_14_hu224d656baa1b4164cdd4a067c6d88d26_298137_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_14.png"
class="gallery-image"
data-flex-grow="55"
data-flex-basis="133px"
>
1991년 닌텐도에서 발매한 액션 어드벤처 게임입니다.
다양한 아이템을 모아 소소한 수수께끼를 풀며 진행하는 게임입니다.
이후 다양한 속편이 발매되었습니다.(&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E3%82%BC%E3%83%AB%E3%83%80%E3%81%AE%E4%BC%9D%E8%AA%AC%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%E3%81%AE%E4%BD%9C%E5%93%81%E3%83%BB%E9%96%A2%E9%80%A3%E4%BD%9C%E5%93%81%E3%81%AE%E4%B8%80%E8%A6%A7" target="_blank" rel="noopener"
>참고&lt;/a>)&lt;/p>
&lt;h2 id="닌텐도-스위치">닌텐도 스위치
&lt;/h2>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_13.png"
width="600"
height="324"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_13_huf5d97a9af892bf0a7a6a5b9a9eb646da_154207_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_13_huf5d97a9af892bf0a7a6a5b9a9eb646da_154207_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_13.png"
class="gallery-image"
data-flex-grow="185"
data-flex-basis="444px"
>
2017년 닌텐도에서 발매한 가정용 게임기입니다.&lt;/p>
&lt;h3 id="스플래툰-2">⑪스플래툰 2
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_12.png"
width="340"
height="550"
srcset="http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_12_hu03b5dadc912359ffea73dab76258d285_471079_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%B2%E3%83%BC%E3%83%A011%E9%81%B8/img_12_hu03b5dadc912359ffea73dab76258d285_471079_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_12.png"
class="gallery-image"
data-flex-grow="61"
data-flex-basis="148px"
>
2017년 닌텐도에서 발매한 액션 슈팅 게임입니다.
잉크를 사용해 진영을 확보하거나 상대를 쓰러뜨려 승리를 노리는 게임입니다.
2022년에는 속편인 스플래툰 3가 발매되었습니다.&lt;/p></description></item><item><title>macOS에서 .DS_Store를 자동 생성하지 않도록 하는 명령어</title><link>http://kenji.blog/ko/p/macos%E3%81%A7.ds_store%E3%82%92%E8%87%AA%E5%8B%95%E7%94%9F%E6%88%90%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/</link><pubDate>Mon, 12 Sep 2022 16:03:42 +0900</pubDate><guid>http://kenji.blog/ko/p/macos%E3%81%A7.ds_store%E3%82%92%E8%87%AA%E5%8B%95%E7%94%9F%E6%88%90%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/</guid><description>&lt;img src="http://kenji.blog/p/macos%E3%81%A7.ds_store%E3%82%92%E8%87%AA%E5%8B%95%E7%94%9F%E6%88%90%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/img.png" alt="Featured image of post macOS에서 .DS_Store를 자동 생성하지 않도록 하는 명령어" />&lt;p>macOS에서 .DS_Store를 자동 생성하지 않도록 하는 명령어는 다음과 같습니다.
터미널에서 실행해 주세요.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">defaults write com.apple.desktopservices DSDontWriteNetworkStores &lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>명령어를 실행한 후 Finder를 재시작합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">killall Finder
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>설정을 원래대로 되돌리려면 다음 명령어를 실행해 주세요.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">defaults delete com.apple.desktopservices DSDontWriteNetworkStores &lt;span class="nb">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>위와 마찬가지로 설정을 변경한 후에는 Finder를 재시작합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">killall Finder
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>PowerShell에서 .DS_Store 일괄 삭제하기</title><link>http://kenji.blog/ko/p/powershell%E3%81%A7.ds_store%E3%82%92%E4%B8%80%E6%8B%AC%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B/</link><pubDate>Mon, 12 Sep 2022 10:11:42 +0900</pubDate><guid>http://kenji.blog/ko/p/powershell%E3%81%A7.ds_store%E3%82%92%E4%B8%80%E6%8B%AC%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/powershell%E3%81%A7.ds_store%E3%82%92%E4%B8%80%E6%8B%AC%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B/img.png" alt="Featured image of post PowerShell에서 .DS_Store 일괄 삭제하기" />&lt;p>현재 디렉토리를 대상 폴더로 이동한 후, 다음 명령어를 실행하면 하위 폴더를 포함하여 .DS_Store를 일괄 삭제할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Get-ChildItem&lt;/span> &lt;span class="p">.&lt;/span> &lt;span class="n">-include&lt;/span> &lt;span class="s1">&amp;#39;.DS_Store&amp;#39;&lt;/span> &lt;span class="n">-Recurse&lt;/span> &lt;span class="n">-Force&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="nb">Remove-Item&lt;/span> &lt;span class="n">-Force&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>'HUGO에서 사용할 수 있는 쇼트코드'</title><link>http://kenji.blog/ko/p/hugo%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89/</link><pubDate>Sun, 11 Sep 2022 22:59:52 +0900</pubDate><guid>http://kenji.blog/ko/p/hugo%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89/</guid><description>&lt;img src="http://kenji.blog/p/hugo%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89/img.png" alt="Featured image of post 'HUGO에서 사용할 수 있는 쇼트코드'" />&lt;h1 id="hugo에서-사용할-수-있는-쇼트코드">HUGO에서 사용할 수 있는 쇼트코드
&lt;/h1>&lt;h2 id="youtube">YouTube
&lt;/h2>&lt;p>&lt;code>{{&amp;lt;youtube 123456abc&amp;gt;}}&lt;/code>&lt;/p>
&lt;h2 id="twitter">Twitter
&lt;/h2>&lt;p>&lt;code>{{&amp;lt;twitter 123456abc&amp;gt;}}&lt;/code>&lt;/p>
&lt;h2 id="instagram">Instagram
&lt;/h2>&lt;p>&lt;code>{{&amp;lt;instagram 123456abc&amp;gt;}}&lt;/code>&lt;/p>
&lt;h2 id="flickr">Flickr
&lt;/h2>&lt;p>&lt;code>{{&amp;lt;flickr 123456abc&amp;gt;}}&lt;/code>&lt;/p>
&lt;h2 id="vimeo">Vimeo
&lt;/h2>&lt;p>&lt;code>{{&amp;lt;vimeo 123456abc&amp;gt;}}&lt;/code>&lt;/p>
&lt;h2 id="기타">기타
&lt;/h2>&lt;p>&lt;a class="link" href="https://gohugo.io/content-management/shortcodes/" target="_blank" rel="noopener"
>Shortcodes&lt;/a>&lt;/p>
&lt;h2 id="여담">여담
&lt;/h2>&lt;p>사이트 상에서 &lt;code>{{&amp;lt; foo &amp;gt;}}&lt;/code>라고 표현하고 싶은 경우에는, &lt;code>{{&amp;lt;/* foo */&amp;gt;}}&lt;/code>라고 작성해야 합니다.&lt;/p></description></item><item><title>'PaperMod 이미지 배치 변경'</title><link>http://kenji.blog/ko/p/papermod%E3%81%AE%E7%94%BB%E5%83%8F%E3%81%AE%E9%85%8D%E7%BD%AE%E5%A4%89%E6%9B%B4/</link><pubDate>Sun, 11 Sep 2022 18:50:40 +0900</pubDate><guid>http://kenji.blog/ko/p/papermod%E3%81%AE%E7%94%BB%E5%83%8F%E3%81%AE%E9%85%8D%E7%BD%AE%E5%A4%89%E6%9B%B4/</guid><description>&lt;img src="http://kenji.blog/p/papermod%E3%81%AE%E7%94%BB%E5%83%8F%E3%81%AE%E9%85%8D%E7%BD%AE%E5%A4%89%E6%9B%B4/images/img.png" alt="Featured image of post 'PaperMod 이미지 배치 변경'" />&lt;p>기본 레이아웃은 이미지가 중앙에 가로폭 100%로 배치되어 있지만,
조금 크다고 느껴질 때가 있어서, 이미지를 제목 아래에 둘러싸이게 하고,
가로폭을 150px 정도로 변경해 보았습니다.&lt;/p>
&lt;p>파일의 변경 사항은 다음과 같습니다.&lt;/p>
&lt;h2 id="blankcss">blank.css
&lt;/h2>&lt;p>여백이나 이미지 크기, 텍스트 표시 줄 수를 변경하기 위해, blank.css에 다음 내용을 추가합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css:blank.css" data-lang="css:blank.css">&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">entry-content&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kp">-webkit-&lt;/span>&lt;span class="n">line-clamp&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">entry-footer&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">text-align&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">right&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">entry-cover&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">margin-bottom&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">initial&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">text-align&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">center&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">entry-cover&lt;/span> &lt;span class="nt">img&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">border-radius&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">display&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">inline&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">max-width&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">100&lt;/span>&lt;span class="kt">%&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">post-meta&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">display&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">block&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">text-align&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">right&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="post-entrycss">post-entry.css
&lt;/h2>&lt;p>blank.css 쪽에서 정의를 삭제할 수 없었기 때문에, post-entry.css에서 아래의 1줄을 삭제합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css:post-entry.css" data-lang="css:post-entry.css">&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">entry-cover&lt;/span> &lt;span class="nt">img&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">border-radius&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">var&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="n">radius&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pointer-events&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">none&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">/* width: 100%; */&lt;/span> &lt;span class="err">←&lt;/span> &lt;span class="err">이&lt;/span> &lt;span class="err">줄을&lt;/span> &lt;span class="err">삭제&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">height&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">auto&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="listhtml">list.html
&lt;/h2>&lt;p>이미지 배치를 변경하기 위해, list.html의 다음 부분을 변경했습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html:list.html" data-lang="html:list.html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">article&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;{{ $class }}&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- {{- $isHidden := (site.Params.cover.hidden | default site.Params.cover.hiddenInList) }} --&amp;gt;&amp;lt;!-- 아래로 이동 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- {{- partial &amp;#34;cover.html&amp;#34; (dict &amp;#34;cxt&amp;#34; . &amp;#34;IsHome&amp;#34; true &amp;#34;isHidden&amp;#34; $isHidden) }} --&amp;gt;&amp;lt;!-- 아래로 이동 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">header&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;entry-header&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">h2&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{- .Title }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{- if .Draft }}&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">sup&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;&lt;/span>&lt;span class="nt">span&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;entry-isdraft&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="ni">&amp;amp;nbsp;&amp;amp;nbsp;&lt;/span>[draft]&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">span&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">sup&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>{{- end }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">h2&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">header&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">style&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;display:flex;&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="c">&amp;lt;!-- 추가 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">style&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;max-width:150px;margin:11px 15px 0px 0px;&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="c">&amp;lt;!-- 추가 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{- $isHidden := (site.Params.cover.hidden | default site.Params.cover.hiddenInList) }}&lt;span class="c">&amp;lt;!-- 위에서 이동 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{- partial &amp;#34;cover.html&amp;#34; (dict &amp;#34;cxt&amp;#34; . &amp;#34;IsHome&amp;#34; true &amp;#34;isHidden&amp;#34; $isHidden) }}&lt;span class="c">&amp;lt;!-- 위에서 이동 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="c">&amp;lt;!-- 추가 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">style&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;width:100%;&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="c">&amp;lt;!-- 추가 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{- if (ne (.Param &amp;#34;hideSummary&amp;#34;) true) }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;entry-content&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">p&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>{{ .Summary | plainify | htmlUnescape }}{{ if .Truncated }}...{{ end }}&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">p&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{- end }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{- if not (.Param &amp;#34;hideMeta&amp;#34;) }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">footer&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;entry-footer&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{- partial &amp;#34;post_meta.html&amp;#34; . -}}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">footer&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {{- end }}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">a&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;entry-link&amp;#34;&lt;/span> &lt;span class="na">aria-label&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;post link to {{ .Title | plainify }}&amp;#34;&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;{{ .Permalink }}&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&amp;lt;/&lt;/span>&lt;span class="nt">a&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="c">&amp;lt;!-- 추가 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="c">&amp;lt;!-- 추가 --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">article&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>비슷한 요구 사항이 적지 않게 있는 것 같습니다.&lt;/p>
&lt;p>&lt;a class="link" href="https://github.com/adityatelange/hugo-PaperMod/discussions/159#discussioncomment-247844" target="_blank" rel="noopener"
>https://github.com/adityatelange/hugo-PaperMod/discussions/159#discussioncomment-247844&lt;/a>&lt;/p>
&lt;p>본가(공식) 쪽에서도 지원해 주면 좋겠네요.&lt;/p></description></item><item><title>'PaperMod에서 Twitter Card를 설정하는 방법'</title><link>http://kenji.blog/ko/p/papermod%E3%81%A7twitter-card%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 10 Sep 2022 18:41:22 +0900</pubDate><guid>http://kenji.blog/ko/p/papermod%E3%81%A7twitter-card%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/papermod%E3%81%A7twitter-card%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img.png" alt="Featured image of post 'PaperMod에서 Twitter Card를 설정하는 방법'" />&lt;h1 id="시작하며">시작하며
&lt;/h1>&lt;p>PaperMod 테마는 Twitter Card를 지원합니다.
단, Twitter Card 설정은 &lt;code>config.toml&lt;/code> 또는 각 게시물의 &lt;code>*.md&lt;/code> 헤더 정보에 작성해야 합니다.
각 게시물과 &lt;code>config.toml&lt;/code> 양쪽에 설정한 경우에는, 각 게시물의 헤더 정보가 우선됩니다.&lt;/p>
&lt;h1 id="설정-방법">설정 방법
&lt;/h1>&lt;h2 id="configtoml">config.toml
&lt;/h2>&lt;p>&lt;code>config.toml&lt;/code>에는 &lt;code>[params]&lt;/code> 아래에 &lt;code>images&lt;/code>라는 항목을 추가합니다.
&lt;code>images&lt;/code>에는 Twitter Card에 표시할 이미지의 경로를 작성합니다.
이미지를 &lt;code>static&lt;/code> 폴더에 배치할 경우에는 파일 이름만 지정하면 됩니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[params]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> images = [&amp;#34;twitter_card.jpg&amp;#34;]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>폴더 구성&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">root
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ config.toml (여기에 작성)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├─content
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └─posts
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └─게시물 폴더
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ index.md (여기에 작성)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └─images
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ cover.png (여기에 배치)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└─static
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> twitter_card.jpg (여기에 배치)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="각-게시물의-헤더-정보">각 게시물의 헤더 정보
&lt;/h2>&lt;p>각 게시물의 헤더 정보에는 &lt;code>cover&lt;/code> 아래에 &lt;code>image&lt;/code>라는 항목을 추가합니다.
&lt;code>relative&lt;/code>를 &lt;code>true&lt;/code>로 하면, 게시물의 &lt;code>*.md&lt;/code>로부터의 상대 경로로 지정할 수 있습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">cover:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> image: &amp;#34;images/cover.jpg&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> relative: true
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="게시물-상단에는-표시하고-싶지-않은-경우">게시물 상단에는 표시하고 싶지 않은 경우
&lt;/h3>&lt;p>게시물 상단에 커버 이미지를 표시하고 싶지 않은 경우에는 &lt;code>cover&lt;/code> 아래에 &lt;code>hidden&lt;/code>이라는 항목을 추가하고 &lt;code>true&lt;/code>로 설정합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">cover:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> image: &amp;#34;images/cover.jpg&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> relative: true
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> hidden: true
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h1 id="이미지-크기에-대하여">이미지 크기에 대하여
&lt;/h1>&lt;p>현재 PaperMod의 사양상 Twitter Card의 크기는 &lt;code>summary_large_image&lt;/code>만 지원하는 것 같습니다.
&lt;code>summary_large_image&lt;/code>의 적절한 크기(해상도)는 여러 의견이 있지만 &lt;code>800 x 418&lt;/code>(이미지 비율 1.91:1) 정도가 좋을 것 같습니다.&lt;/p>
&lt;p>&lt;a class="link" href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/summary-card-with-large-image" target="_blank" rel="noopener"
>참고 사이트1&lt;/a>
&lt;a class="link" href="https://developers.facebook.com/docs/sharing/best-practices" target="_blank" rel="noopener"
>참고 사이트2&lt;/a>&lt;/p>
&lt;p>가능하다면, 이미지 크기를 리사이징하여 게시하는 것을 추천합니다.&lt;/p>
&lt;h1 id="설정-확인-방법">설정 확인 방법
&lt;/h1>&lt;p>Twitter Card의 설정을 확인하려면 &lt;a class="link" href="https://cards-dev.twittercom/validator" target="_blank" rel="noopener"
>Twitter Card Validator&lt;/a>를 이용합니다.
단, 제 환경에서는 미리보기가 잘 표시되지 않았기 때문에, 만약 미리보기가 표시되지 않는다면 비공개 계정 등을 이용해 게시 전에 한번 확인해 보는 것을 추천합니다.&lt;/p></description></item><item><title>IntelliJ IDEA에서 GitHub Copilot 사용하기</title><link>http://kenji.blog/ko/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/</link><pubDate>Sat, 10 Sep 2022 09:44:55 +0900</pubDate><guid>http://kenji.blog/ko/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/</guid><description>&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img.png" alt="Featured image of post IntelliJ IDEA에서 GitHub Copilot 사용하기" />&lt;h1 id="소개">소개
&lt;/h1>&lt;p>GitHub Copilot은 GitHub가 개발한 AI 기반 코드 자동 완성 도구입니다.
개발 환경인 IntelliJ IDEA에 GitHub Copilot 플러그인을 설치하면 IntelliJ IDEA에서도 GitHub Copilot을 사용할 수 있습니다.
활성화하려면 GitHub 계정이 필요합니다.&lt;/p>
&lt;h1 id="설치-방법">설치 방법
&lt;/h1>&lt;ol>
&lt;li>IntelliJ IDEA의 메뉴에서 File을 클릭하고 Settings를 선택합니다.&lt;/li>
&lt;li>Plugins를 선택하고 검색창에서 &amp;lsquo;GitHub Copilot&amp;rsquo;을 검색합니다.
&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_0.png"
width="984"
height="713"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_0_hu1a17f06d84f4c3bc905993428da2585e_52443_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_0_hu1a17f06d84f4c3bc905993428da2585e_52443_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="138"
data-flex-basis="331px"
>&lt;/li>
&lt;li>Install 버튼을 눌러 설치합니다.
&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_1.png"
width="440"
height="288"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_1_hu760c08385147deb656e4c3f97738e20a_11542_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_1_hu760c08385147deb656e4c3f97738e20a_11542_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="152"
data-flex-basis="366px"
>&lt;/li>
&lt;li>Restart IDE 버튼을 눌러 IntelliJ IDEA를 재시작합니다.
&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_2.png"
width="984"
height="713"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_2_hue7ac4db80b402fe88ff676c2505b2e26_63613_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_2_hue7ac4db80b402fe88ff676c2505b2e26_63613_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="138"
data-flex-basis="331px"
>
&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_3.png"
width="370"
height="128"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_3_huf684fa748633ae887c193539a3f1f778_4849_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_3_huf684fa748633ae887c193539a3f1f778_4849_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="289"
data-flex-basis="693px"
>
IntelliJ IDEA를 재시작하면 설치가 완료됩니다.&lt;/li>
&lt;/ol>
&lt;h1 id="활성화">활성화
&lt;/h1>&lt;ol>
&lt;li>우측 하단의 아이콘을 클릭합니다.&lt;/li>
&lt;li>Login to Github을 클릭합니다.
&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_4.png"
width="179"
height="97"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_4_huda05efd9621c0a19fb78fc4f90866e22_2661_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_4_huda05efd9621c0a19fb78fc4f90866e22_2661_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_4.png"
class="gallery-image"
data-flex-grow="184"
data-flex-basis="442px"
>&lt;/li>
&lt;li>Copy and Open 버튼을 클릭합니다.
&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_6.png"
width="422"
height="199"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_6_hua124fecdd3632e6b95f8259e5e606e1a_8284_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_6_hua124fecdd3632e6b95f8259e5e606e1a_8284_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="212"
data-flex-basis="508px"
>&lt;/li>
&lt;li>브라우저가 열립니다. GitHub에 로그인되어 있지 않다면 로그인한 후, Ctrl+V로 코드를 붙여넣고 Continue 버튼을 클릭합니다.
&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_7.png"
width="579"
height="530"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_7_hub4e276df82537681adc4331944f40166_19231_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_7_hub4e276df82537681adc4331944f40166_19231_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_7.png"
class="gallery-image"
data-flex-grow="109"
data-flex-basis="262px"
>&lt;/li>
&lt;li>Authorize GitHub Copilot Plugin 버튼을 클릭합니다.
&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_8.png"
width="546"
height="689"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_8_hu1e48fa0fb5989dc3e0616b0ee84b6476_33153_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_8_hu1e48fa0fb5989dc3e0616b0ee84b6476_33153_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_8.png"
class="gallery-image"
data-flex-grow="79"
data-flex-basis="190px"
>
&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_9.png"
width="454"
height="337"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_9_hu73bf5cd6f6a7ddf7aa8e1b63387b9c7d_7965_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_9_hu73bf5cd6f6a7ddf7aa8e1b63387b9c7d_7965_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_9.png"
class="gallery-image"
data-flex-grow="134"
data-flex-basis="323px"
>
위 화면이 표시되면 활성화가 완료된 것입니다.&lt;/li>
&lt;/ol>
&lt;h1 id="사용해보기">사용해보기
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_10.png"
width="330"
height="136"
srcset="http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_10_hu25143f366631b8ce9af8689b387ca520_6039_480x0_resize_box_3.png 480w, http://kenji.blog/p/intellij-idea%E3%81%A7github-copilot%E3%82%92%E4%BD%BF%E3%81%86/images/img_10_hu25143f366631b8ce9af8689b387ca520_6039_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_10.png"
class="gallery-image"
data-flex-grow="242"
data-flex-basis="582px"
>
IntelliJ IDEA의 에디터에서 문자 몇 개를 입력하면 GitHub Copilot이 코드의 다음 부분을 제안해 줍니다.
그럼 AI의 강력한 자동 완성 기능을 즐겨보세요!&lt;/p></description></item><item><title>'Go를 설치하는 방법'</title><link>http://kenji.blog/ko/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sat, 10 Sep 2022 00:48:17 +0900</pubDate><guid>http://kenji.blog/ko/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/cover.png" alt="Featured image of post 'Go를 설치하는 방법'" />&lt;h1 id="시작하며">시작하며
&lt;/h1>&lt;p>Go는 Google이 2009년에 공개한 비교적 새로운 프로그래밍 언어입니다.
Go의 컴파일러, 도구, 라이브러리는 오픈 소스로 공개되어 있습니다.
또한, Go는 C 언어나 Java와 같은 정적 타입 언어이지만, C 언어와 같은 포인터를 사용하지 않는 언어입니다.&lt;/p>
&lt;h1 id="설치-방법">설치 방법
&lt;/h1>&lt;p>&lt;a class="link" href="https://go.dev/dl/" target="_blank" rel="noopener"
>Go 설치&lt;/a>&lt;/p>
&lt;p>위 사이트에서 각 플랫폼용 설치 프로그램이 공개되어 있습니다.&lt;/p>
&lt;p>화면에 따라 설치를 진행합니다.
&lt;img src="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img.png"
width="495"
height="387"
srcset="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_hudec02a4f1dfaca9415d58a56d502b14f_18782_480x0_resize_box_3.png 480w, http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_hudec02a4f1dfaca9415d58a56d502b14f_18782_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="127"
data-flex-basis="306px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_1.png"
width="495"
height="387"
srcset="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_1_hu803f0fb268a2cf0fa74e4e36a5b3a765_20314_480x0_resize_box_3.png 480w, http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_1_hu803f0fb268a2cf0fa74e4e36a5b3a765_20314_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="127"
data-flex-basis="306px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_2.png"
width="495"
height="387"
srcset="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_2_hu05fb3923212918b7539badd0200ea75c_11067_480x0_resize_box_3.png 480w, http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_2_hu05fb3923212918b7539badd0200ea75c_11067_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="127"
data-flex-basis="306px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_3.png"
width="495"
height="387"
srcset="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_3_hu316d63501ec24e1e74dc3cb674d4cc1f_11612_480x0_resize_box_3.png 480w, http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_3_hu316d63501ec24e1e74dc3cb674d4cc1f_11612_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="127"
data-flex-basis="306px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_5.png"
width="495"
height="387"
srcset="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_5_hu8bb188f8700bed3c70acaed6e511012d_14167_480x0_resize_box_3.png 480w, http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_5_hu8bb188f8700bed3c70acaed6e511012d_14167_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_5.png"
class="gallery-image"
data-flex-grow="127"
data-flex-basis="306px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_6.png"
width="495"
height="387"
srcset="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_6_hu0a1b7e9cf2cb725ed5a7ea7685880608_16796_480x0_resize_box_3.png 480w, http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_6_hu0a1b7e9cf2cb725ed5a7ea7685880608_16796_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_6.png"
class="gallery-image"
data-flex-grow="127"
data-flex-basis="306px"
>&lt;/p>
&lt;p>설치가 완료되었습니다. 간단하죠.&lt;/p>
&lt;h1 id="첫-번째-프로그램">첫 번째 프로그램
&lt;/h1>&lt;p>다음 프로그램을 &lt;code>hello.go&lt;/code>로 저장합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">package&lt;/span> &lt;span class="nx">main&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="s">&amp;#34;fmt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kd">func&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fmt&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Hello World\n&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>명령 프롬프트나 터미널에서 &lt;code>go run hello.go&lt;/code>를 실행하면 &lt;code>Hello, world!&lt;/code>가 출력됩니다.&lt;/p>
&lt;p>컴파일할 경우에는 &lt;code>go build hello.go&lt;/code>를 실행하면 &lt;code>hello.exe&lt;/code>가 생성됩니다.
&lt;code>hello.exe&lt;/code>를 실행하면 &lt;code>Hello, world!&lt;/code>가 출력됩니다.&lt;/p>
&lt;h1 id="웹-페이지에서-코드를-실행할-수도-있습니다">웹 페이지에서 코드를 실행할 수도 있습니다
&lt;/h1>&lt;p>&lt;a class="link" href="https://go.dev/play/" target="_blank" rel="noopener"
>https://go.dev/play/&lt;/a>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_7.png"
width="793"
height="668"
srcset="http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_7_hu4549f097b6cd8fd929d9562692076ffb_15605_480x0_resize_box_3.png 480w, http://kenji.blog/p/go%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/images/img_7_hu4549f097b6cd8fd929d9562692076ffb_15605_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_7.png"
class="gallery-image"
data-flex-grow="118"
data-flex-basis="284px"
>&lt;/p>
&lt;h1 id="일본어-문서">일본어 문서
&lt;/h1>&lt;p>&lt;a class="link" href="http://go.shibu.jp/" target="_blank" rel="noopener"
>http://go.shibu.jp/&lt;/a>&lt;/p>
&lt;p>Go를 배우는 데 필요한 설명은 위 링크(일본어 번역판)에 모여 있습니다.
Go와 관련된 기술은 오픈되어 있어서 종이 교재를 구입할 필요가 없을 정도로 충실합니다.&lt;/p>
&lt;p>그럼 즐거운 Go 라이프를!&lt;/p></description></item><item><title>헤겔의 변증법</title><link>http://kenji.blog/ko/p/%E3%83%98%E3%83%BC%E3%82%B2%E3%83%AB%E3%81%AE%E5%BC%81%E8%A8%BC%E6%B3%95/</link><pubDate>Fri, 09 Sep 2022 23:13:19 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%98%E3%83%BC%E3%82%B2%E3%83%AB%E3%81%AE%E5%BC%81%E8%A8%BC%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%98%E3%83%BC%E3%82%B2%E3%83%AB%E3%81%AE%E5%BC%81%E8%A8%BC%E6%B3%95/images/img.png" alt="Featured image of post 헤겔의 변증법" />&lt;h2 id="헤겔의-변증법이란">헤겔의 변증법이란
&lt;/h2>&lt;blockquote>
&lt;p>헤겔은 이성이 빠지는 모순의 적극적인 의의를 포착하여, 일반적으로 유한한 것은 모두 자기에게 내재하는 모순을 동인으로 하여 대립물을 낳고, 그것을 매개로 하여 함께 보다 고차원적인 단계로 지양된다고 주장하고, 이것을 현실 세계의 일체의 운동의 원리로 삼았다.
(코토뱅크에서)&lt;/p>
&lt;/blockquote>
&lt;p>나의 해석은, 현실 세계의 모든 주의 주장이나 생각은, 그저 일변도로 올바르다는 것이 아니라,
내부에 반드시 모순을 내포하고 있어서, 그 대립하는 구조를 이해하거나 받아들이는 가운데,
보다 높은 수준으로 인식이 발전해 나간다는 것.&lt;/p>
&lt;p>이것은, 사람의 사고방식 뿐만이 아니라, 자연계의 모든 현상에도 해당된다고 생각한다.&lt;/p>
&lt;p>모든 물질은 작용이 일어 나면 반작용이 일어 나고, 모든 물건이 움직이면 마찰이 일어나며, 인력은 태양이나 지구뿐만 아니라 모든 물질끼리 서로 영향을 주고받고 있다.
강물의 흐름도 바람의 흐름도, 한 방향으로만 흐르는 것이 아니라, 여러가지 힘을 받아, 찰나에 흐름이 변화해 간다.&lt;/p>
&lt;p>기술적인 이야기로 말하자면, 컴퓨터 프로그램도 내부에 반드시 버그를 내포하고 있고, 그것을 제거함으로써 보다 수준 높은 프로그램이 되어 간다.
버그가 없는 프로그램은 발전하지 않은 재미없는 프로그램이라고 할 수 있을 것이다. 그것은 언젠가 쇠퇴해 갈 것이다.&lt;/p>
&lt;p>주변 환경은 시대와 함께 계속 변화하고 있습니다. 자기모순을 무시하거나 이상하게 정당화하거나, 사고방식을 고정화하는 것이 아니라,
항상 자신의 사고방식, 사물을 파악하는 방식을 항상 재검토하고, 유연하게 사고를 바꾸어 나가고 싶네요.&lt;/p></description></item><item><title>'몇 년 만의 카무쿠라(라멘)'</title><link>http://kenji.blog/ko/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/</link><pubDate>Fri, 09 Sep 2022 21:45:19 +0900</pubDate><guid>http://kenji.blog/ko/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/</guid><description>&lt;img src="http://kenji.blog/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/images/img2.jpg" alt="Featured image of post '몇 년 만의 카무쿠라(라멘)'" />&lt;p>몇 년 만에 카무쿠라(라멘)에 다녀왔습니다.&lt;/p>
&lt;p>&lt;strong>파김치 라멘&lt;/strong>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/images/img1.jpg"
width="595"
height="603"
srcset="http://kenji.blog/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/images/img1_hufe42115e5b5ea70b27ae9218e3ddeca1_358776_480x0_resize_q75_box.jpg 480w, http://kenji.blog/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/images/img1_hufe42115e5b5ea70b27ae9218e3ddeca1_358776_1024x0_resize_q75_box.jpg 1024w"
loading="lazy"
alt="img1.jpg"
class="gallery-image"
data-flex-grow="98"
data-flex-basis="236px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/images/img2.jpg"
width="593"
height="646"
srcset="http://kenji.blog/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/images/img2_hu5b1c55ddd3b998ef9e1e7da203dc1109_434676_480x0_resize_q75_box.jpg 480w, http://kenji.blog/p/%E4%BD%95%E5%B9%B4%E3%81%8B%E3%81%B6%E3%82%8A%E3%81%AE%E7%A5%9E%E5%BA%A7%E3%81%8B%E3%82%80%E3%81%8F%E3%82%89%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3/images/img2_hu5b1c55ddd3b998ef9e1e7da203dc1109_434676_1024x0_resize_q75_box.jpg 1024w"
loading="lazy"
alt="img2.png"
class="gallery-image"
data-flex-grow="91"
data-flex-basis="220px"
>&lt;/p>
&lt;p>맛있었습니다. 가끔 먹고 싶어지는 맛이네요.&lt;/p></description></item><item><title>Rust에서 소수 나열하기</title><link>http://kenji.blog/ko/p/rust%E3%81%A7%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B/</link><pubDate>Fri, 09 Sep 2022 07:08:49 +0900</pubDate><guid>http://kenji.blog/ko/p/rust%E3%81%A7%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/rust%E3%81%A7%E7%B4%A0%E6%95%B0%E3%82%92%E5%88%97%E6%8C%99%E3%81%99%E3%82%8B/images/img.png" alt="Featured image of post Rust에서 소수 나열하기" />&lt;p>Rust로 소수를 나열하는 프로그램을 작성해 보았습니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-rust" data-lang="rust">&lt;span class="line">&lt;span class="cl">&lt;span class="k">fn&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">max&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">1000&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">mut&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">primes&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="fm">vec!&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">];&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">mut&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">loop&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">let&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">mut&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">is_prime&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">for&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">in&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">primes&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">%&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">==&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">is_prime&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">is_prime&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">primes&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">push&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">+=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">max&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">for&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">in&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">primes&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="fm">println!&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>'차분한 재즈'</title><link>http://kenji.blog/ko/p/%E8%90%BD%E3%81%A1%E7%9D%80%E3%81%84%E3%81%9F%E3%82%B8%E3%83%A3%E3%82%BA/</link><pubDate>Thu, 08 Sep 2022 17:40:26 +0900</pubDate><guid>http://kenji.blog/ko/p/%E8%90%BD%E3%81%A1%E7%9D%80%E3%81%84%E3%81%9F%E3%82%B8%E3%83%A3%E3%82%BA/</guid><description>&lt;img src="http://kenji.blog/p/%E8%90%BD%E3%81%A1%E7%9D%80%E3%81%84%E3%81%9F%E3%82%B8%E3%83%A3%E3%82%BA/images/img.png" alt="Featured image of post '차분한 재즈'" />&lt;p>&lt;strong>차분한 재즈 플레이리스트&lt;/strong>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/hOJ76cZEt08"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/p></description></item><item><title>'카페 음악'</title><link>http://kenji.blog/ko/p/%E3%82%AB%E3%83%95%E3%82%A7%E9%9F%B3%E6%A5%BD/</link><pubDate>Thu, 08 Sep 2022 08:39:03 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%AB%E3%83%95%E3%82%A7%E9%9F%B3%E6%A5%BD/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%AB%E3%83%95%E3%82%A7%E9%9F%B3%E6%A5%BD/images/img.png" alt="Featured image of post '카페 음악'" />&lt;p>&lt;strong>업템포&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Electro Swing Collection&lt;/strong>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/bQXCx1F7nhs"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/p>
&lt;p>&lt;strong>Electro Swing Mix 2019 Vol.3&lt;/strong>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/1hY8f20tqlI"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/p>
&lt;p>&lt;strong>lofi hip hop radio(Live)&lt;/strong>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/jfKfPfyJRdk"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/p>
&lt;p>&lt;strong>LoFi 재즈&lt;/strong>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/bz5q5gl2uZA"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/p>
&lt;p>&lt;strong>이것이 매일 열심히 공부하는 동기입니다 | 5 hour lofi hip hop / study / work / chill beats&lt;/strong>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/fWX8zsaTeTc"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;/p></description></item><item><title>동기 부여를 해주는 동영상</title><link>http://kenji.blog/ko/p/%E3%83%A2%E3%83%81%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%B8%8A%E3%81%92%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B%E5%8B%95%E7%94%BB/</link><pubDate>Thu, 08 Sep 2022 02:22:52 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%A2%E3%83%81%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%B8%8A%E3%81%92%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B%E5%8B%95%E7%94%BB/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%A2%E3%83%81%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%B8%8A%E3%81%92%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B%E5%8B%95%E7%94%BB/images/img.png" alt="Featured image of post 동기 부여를 해주는 동영상" />&lt;h2 id="노력이-인정받지-못해도-괜찮잖아">노력이 인정받지 못해도 괜찮잖아
&lt;/h2>&lt;blockquote class="twitter-tweet">&lt;p lang="ja" dir="ltr">45年の人生で手に入れた。ぐずぐずした時、いつも背中を押してくれる言葉たち。 &lt;a href="https://t.co/EQgmujOSpg">pic.twitter.com/EQgmujOSpg&lt;/a>&lt;/p>&amp;mdash; いれぶん (@eleven_s_s) &lt;a href="https://x.com/eleven_s_s/status/1567256455836737544?ref_src=twsrc%5Etfw">September 6, 2022&lt;/a>&lt;/blockquote>
&lt;script async src="https://platform.x.com/widgets.js" charset="utf-8">&lt;/script>
&lt;h2 id="가치관은-훨씬-더-다양하다">가치관은 훨씬 더 다양하다
&lt;/h2>&lt;p>나리타 유스케 「인간이 안고 있는 불행 중」&lt;/p>
&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/5WTldFIQ7E4"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;h2 id="자신의-행동이-그대로-반영된다">자신의 행동이 그대로 반영된다
&lt;/h2>&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/8ewxptSV66M"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div>
&lt;h2 id="미야자키-하야오의-사고">미야자키 하야오의 사고
&lt;/h2>&lt;div class="video-wrapper">
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/9-2YFldnWzg"
allowfullscreen
title="YouTube Video"
>
&lt;/iframe>
&lt;/div></description></item><item><title>현재 메인 PC 사양</title><link>http://kenji.blog/ko/p/%E4%BB%8A%E3%81%AE%E3%83%A1%E3%82%A4%E3%83%B3pc%E3%82%B9%E3%83%9A%E3%83%83%E3%82%AF/</link><pubDate>Thu, 08 Sep 2022 01:55:00 +0900</pubDate><guid>http://kenji.blog/ko/p/%E4%BB%8A%E3%81%AE%E3%83%A1%E3%82%A4%E3%83%B3pc%E3%82%B9%E3%83%9A%E3%83%83%E3%82%AF/</guid><description>&lt;img src="http://kenji.blog/p/%E4%BB%8A%E3%81%AE%E3%83%A1%E3%82%A4%E3%83%B3pc%E3%82%B9%E3%83%9A%E3%83%83%E3%82%AF/images/img.png" alt="Featured image of post 현재 메인 PC 사양" />&lt;p>메인 PC의 사양을 적어둡니다.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>항목명&lt;/th>
&lt;th>값&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>프로세서&lt;/td>
&lt;td>Intel Core i7-8700K CPU @ 3.70GHz 3.70 GHz&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>메모리&lt;/td>
&lt;td>32.0 GB&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>시스템 종류&lt;/td>
&lt;td>64비트 운영 체제, x64 기반 프로세서&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OS&lt;/td>
&lt;td>Windows 11 Enterprise (버전 21H2, 빌드 22000.856)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>제조사&lt;/td>
&lt;td>주식회사 마우스컴퓨터&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>'심플한 아이콘 모음 사이트'</title><link>http://kenji.blog/ko/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/</link><pubDate>Wed, 07 Sep 2022 16:46:56 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_2.png" alt="Featured image of post '심플한 아이콘 모음 사이트'" />&lt;h2 id="google-material-symbols-and-icons">Google Material Symbols and Icons
&lt;/h2>&lt;p>&lt;a class="link" href="https://fonts.google.com/icons" target="_blank" rel="noopener"
>https://fonts.google.com/icons&lt;/a>
&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img.png"
width="630"
height="447"
srcset="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_hu2e790b3adfba32854ad71745e7545591_74194_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_hu2e790b3adfba32854ad71745e7545591_74194_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="140"
data-flex-basis="338px"
>&lt;/p>
&lt;h2 id="github-octicons">GitHub Octicons
&lt;/h2>&lt;p>&lt;a class="link" href="https://primer.style/octicons/" target="_blank" rel="noopener"
>https://primer.style/octicons/&lt;/a>
&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_4.png"
width="629"
height="458"
srcset="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_4_huac9afc30a59605ec9b88aeb00e9ca35a_16251_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_4_huac9afc30a59605ec9b88aeb00e9ca35a_16251_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="137"
data-flex-basis="329px"
>&lt;/p>
&lt;h2 id="sargam-icons">Sargam Icons
&lt;/h2>&lt;p>&lt;a class="link" href="https://sargamicons.com/" target="_blank" rel="noopener"
>https://sargamicons.com/&lt;/a>
&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_3.png"
width="630"
height="394"
srcset="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_3_hu0066a2e8d1a9197597bb942dc0458191_124040_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_3_hu0066a2e8d1a9197597bb942dc0458191_124040_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="159"
data-flex-basis="383px"
>&lt;/p>
&lt;h2 id="thousands-of-free-icons">Thousands of free icons
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://icon-icons.com/" target="_blank" rel="noopener"
>https://icon-icons.com/&lt;/a>
&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img.png"
width="630"
height="458"
srcset="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_hud4e59f23b65e922f3b125a8a3404b846_60034_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_hud4e59f23b65e922f3b125a8a3404b846_60034_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="137"
data-flex-basis="330px"
>&lt;/li>
&lt;/ul>
&lt;h2 id="flaticon">flaticon
&lt;/h2>&lt;p>&lt;a class="link" href="https://www.flaticon.com/" target="_blank" rel="noopener"
>https://www.flaticon.com/&lt;/a>
&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_1.png"
width="632"
height="457"
srcset="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_1_hudb7d87f05c11753d254c7b78aaefffc2_54756_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_1_hudb7d87f05c11753d254c7b78aaefffc2_54756_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="138"
data-flex-basis="331px"
>&lt;/p>
&lt;h2 id="iconfinder">ICONFINDER
&lt;/h2>&lt;p>&lt;a class="link" href="https://www.iconfinder.com/" target="_blank" rel="noopener"
>https://www.iconfinder.com/&lt;/a>
&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_2.png"
width="629"
height="457"
srcset="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_2_hu0dc800a470d49e22764252e0fa03fc17_23662_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_2_hu0dc800a470d49e22764252e0fa03fc17_23662_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="137"
data-flex-basis="330px"
>&lt;/p>
&lt;h2 id="iconfont">iconfont
&lt;/h2>&lt;p>&lt;a class="link" href="https://www.iconfont.cn/" target="_blank" rel="noopener"
>https://www.iconfont.cn/&lt;/a>
&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_3.png"
width="635"
height="460"
srcset="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_3_hu295bfcef20bd429ddd55b7aef56dd01b_108321_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/images/img_3_hu295bfcef20bd429ddd55b7aef56dd01b_108321_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="138"
data-flex-basis="331px"
>&lt;/p>
&lt;h2 id="open-iconic">open-iconic
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://github.com/iconic/open-iconic" target="_blank" rel="noopener"
>https://github.com/iconic/open-iconic&lt;/a>
&lt;img src="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_1.png"
width="630"
height="429"
srcset="http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_1_hu1d827bbc120ad9c667c26a03c4813010_114951_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E9%9B%86%E3%82%B5%E3%82%A4%E3%83%88/img_1_hu1d827bbc120ad9c667c26a03c4813010_114951_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="146"
data-flex-basis="352px"
>&lt;/li>
&lt;/ul></description></item><item><title>'PaperMod 색상 변경'</title><link>http://kenji.blog/ko/p/papermod%E3%81%AE%E9%85%8D%E8%89%B2%E5%A4%89%E6%9B%B4/</link><pubDate>Wed, 07 Sep 2022 15:30:21 +0900</pubDate><guid>http://kenji.blog/ko/p/papermod%E3%81%AE%E9%85%8D%E8%89%B2%E5%A4%89%E6%9B%B4/</guid><description>&lt;img src="http://kenji.blog/p/papermod%E3%81%AE%E9%85%8D%E8%89%B2%E5%A4%89%E6%9B%B4/img.png" alt="Featured image of post 'PaperMod 색상 변경'" />&lt;p>PaperMod 테마의 색상을 변경했습니다. 변경 방법은 아래를 참고했습니다.&lt;/p>
&lt;p>&lt;a class="link" href="https://github.com/adityatelange/hugo-PaperMod/discussions/645" target="_blank" rel="noopener"
>https://github.com/adityatelange/hugo-PaperMod/discussions/645&lt;/a>&lt;/p>
&lt;p>CSS 경로는 아래와 같습니다.&lt;/p>
&lt;p>&lt;code>themes/PaperMod/assets/css/extended/blank.css&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="cl">&lt;span class="p">:&lt;/span>&lt;span class="nd">root&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--entry&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#fbf7ef&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--primary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">rgba&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">113&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">103&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">91&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.00&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--secondary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">rgba&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">113&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">103&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">91&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.95&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--tertiary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">rgba&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">113&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">103&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">91&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.50&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--content&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">rgba&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">113&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">103&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">91&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.85&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--hljs-bg&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#34231B&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--code-bg&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#ebe4d7&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--border&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#fdfaf5&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--theme&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#fbf7ef&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">dark&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>다크 모드는 일단 변경하지 않았습니다.&lt;/p></description></item><item><title>아이의 배려</title><link>http://kenji.blog/ko/p/%E5%AD%90%E4%BE%9B%E3%81%AE%E3%81%9D%E3%82%93%E3%81%9F%E3%81%8F/</link><pubDate>Wed, 07 Sep 2022 04:40:52 +0900</pubDate><guid>http://kenji.blog/ko/p/%E5%AD%90%E4%BE%9B%E3%81%AE%E3%81%9D%E3%82%93%E3%81%9F%E3%81%8F/</guid><description>&lt;img src="http://kenji.blog/p/%E5%AD%90%E4%BE%9B%E3%81%AE%E3%81%9D%E3%82%93%E3%81%9F%E3%81%8F/images/img.png" alt="Featured image of post 아이의 배려" />&lt;p>엄마가 몸이 안 좋아 누워 계실 때,
저녁 준비나 목욕 준비로 &amp;ldquo;이거, 엄마한테 부탁할까?&amp;ldquo;라고 딸(2살)에게 물어보니
&amp;ldquo;안 돼, 코 자고 있으니까!&amp;ldquo;라고 말해서 아이 나름대로 배려하고 있구나 하고 생각했다.&lt;/p>
&lt;p>남을 배려할 줄 아는 사람으로 자라주고 있는 것 같아서 다행이다.&lt;/p></description></item><item><title>'경영자 메모'</title><link>http://kenji.blog/ko/p/%E7%B5%8C%E5%96%B6%E8%80%85%E3%83%A1%E3%83%A2/</link><pubDate>Wed, 07 Sep 2022 02:36:11 +0900</pubDate><guid>http://kenji.blog/ko/p/%E7%B5%8C%E5%96%B6%E8%80%85%E3%83%A1%E3%83%A2/</guid><description>&lt;img src="http://kenji.blog/p/%E7%B5%8C%E5%96%B6%E8%80%85%E3%83%A1%E3%83%A2/images/img.png" alt="Featured image of post '경영자 메모'" />&lt;h1 id="유행하기-시작하는-사업-찾기">유행하기 시작하는 사업 찾기
&lt;/h1>&lt;ul>
&lt;li>유행하기 시작하는 사업은 핫페퍼 관계자나 세무사에게 물어본다&lt;/li>
&lt;li>강자들이 모여 있어 이미 포화 상태에 있는 사업에는 진출하지 않는다&lt;/li>
&lt;li>집객할 수 있다는 확신이 드는 사업에만 진출한다 (특수한 집객 방법(모방할 수 없는 방법)을 사용하는 기존 사업자가 있는 사업에는 진출하지 않는다)&lt;/li>
&lt;/ul>
&lt;h1 id="철저하게-모방하기">철저하게 모방하기
&lt;/h1>&lt;ul>
&lt;li>진출하기 전에 어떤 비즈니스 로직인지 연구한다&lt;/li>
&lt;li>철저하게 모방한다&lt;/li>
&lt;li>그 바탕 위에서 개량한다&lt;/li>
&lt;/ul>
&lt;h1 id="시스템화하기">시스템화하기
&lt;/h1>&lt;ul>
&lt;li>누구나 노력하지 않아도 할 수 있도록 모든 것을 매뉴얼화한다&lt;/li>
&lt;li>매출(고객 수 UP, 고객 단가) 상승, 경비(인건비, 광고비) 절감의 아이디어를 고안하여 시스템화한다&lt;/li>
&lt;/ul>
&lt;h1 id="경영자의-이념">경영자의 이념
&lt;/h1>&lt;ul>
&lt;li>경영자의 이념은 「기업의 이익을 최대화하는 것」이며 그 이상도 이하도 아니다&lt;/li>
&lt;li>사회 공헌이나 종업원에게 호감을 얻는 것을 경영자의 이념으로 하는 것은 NG (그것들은 나중에 자연스럽게 따라온다고 생각한다)&lt;/li>
&lt;/ul>
&lt;!--
via https://www.youtube.com/watch?v=2TALYTLAke0
--></description></item><item><title>'일본에 대해 생각하는 것'</title><link>http://kenji.blog/ko/p/%E6%97%A5%E6%9C%AC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D%E3%81%86%E3%81%93%E3%81%A8/</link><pubDate>Tue, 06 Sep 2022 02:24:11 +0900</pubDate><guid>http://kenji.blog/ko/p/%E6%97%A5%E6%9C%AC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D%E3%81%86%E3%81%93%E3%81%A8/</guid><description>&lt;img src="http://kenji.blog/p/%E6%97%A5%E6%9C%AC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E6%80%9D%E3%81%86%E3%81%93%E3%81%A8/images/img.png" alt="Featured image of post '일본에 대해 생각하는 것'" />&lt;p>제가 일본 사회에 대해 이상하다고 생각하는 것, 생각하고 있는 것을 정리해 보려고 합니다.&lt;/p>
&lt;h1 id="장학금에-대하여">장학금에 대하여
&lt;/h1>&lt;p>일본의 장학금이라고 하면, 대부분은 이자가 있어 갚아야 하는 것으로 되어 있습니다.
또한, 대학의 학비는 1950년부터 계속 증가하고 있으며, 수급률도 증가하는 추세에 있습니다.&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/images/japanese_tuition_fee.png"
loading="lazy"
alt="학비의 추이"
>
&lt;img src="http://kenji.blog/images/receipt_rate.png"
loading="lazy"
alt="장학금 수급률의 추이"
>&lt;/p>
&lt;p>한편으로 최근의 평균 차입 총액은 324만 엔에 달하는 것 같습니다.&lt;/p>
&lt;blockquote>
&lt;p>일본학생지원기구의 장학금 이용자에 있어서, 평균 차입 총액은 324만 3,000엔. &lt;a class="link" href="https://magazine.aruhi-corp.co.jp/0000-5086/#:~:text=%E5%80%9F%E5%85%A5%E7%B7%8F%E9%A1%8D%E3%81%AA%E3%81%A9%E3%81%AE%E5%B9%B3%E5%9D%87%E9%A1%8D%E3%81%AF&amp;amp;text=%E6%97%A5%E6%9C%AC%E5%AD%A6%E7%94%9F%E6%94%AF%E6%8F%B4%E6%A9%9F%E6%A7%8B%E3%81%AE%E5%A5%A8%E5%AD%A6%E9%87%91%E5%88%A9%E7%94%A8%E8%80%85%E3%81%AB%E3%81%8A%E3%81%84%E3%81%A6,%E4%BB%A5%E4%B8%8A%E3%82%92%E5%8D%A0%E3%82%81%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82" target="_blank" rel="noopener"
>참고&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>대학을 졸업하는 22세의 단계에서 300만 엔이나 되는 빚을 짊어지고 있다면, 당연히 결혼 시기도 늦어질 것이고, 아이도 낳기 어려워지는 것은 당연하며, 일본의 저출산 문제의 한 원인이 되고 있다고 생각합니다.&lt;/p>
&lt;h1 id="만연하는-자기책임론">만연하는 자기책임론
&lt;/h1>&lt;p>이것은 감각적인 부분이 되겠지만 &amp;lsquo;남은 남&amp;rsquo;이라는 차가운 세상의 시선이 있다고 생각합니다.
이렇게 수십 년 동안 불경기가 계속되면 그렇게 되는 경향도 어쩔 수 없는 것일지도 모르겠지만,
위의 장학금 문제라고 해도 사회 전체의 문제로 파악하지 않고, 선거에서 표 수가 적은 젊은이나 소수의 목소리는 무시되고 있는 것처럼 느껴집니다.
사실 장기적으로 보면 일본 전체에 있어서 매우 중요한 문제임에도 불구하고 말입니다.&lt;/p>
&lt;p>과당한 경쟁으로 향하는 것이 아니라, 어려움을 겪고 있는 사람이나 세대, 그룹이 있다면 다함께 돕자는 정신이 국가에 있어서는 매우 중요한 일이라고 생각합니다.
(단, 국가가 &amp;lsquo;자조・공조&amp;rsquo;라고 주장하는 것에는 위화감이 있습니다. 주체적으로 약자 구제에 나서주었으면 합니다.)&lt;/p>
&lt;p>(이 기사는 수시로 업데이트하겠습니다.)&lt;/p>
&lt;h2 id="ai가-보는-일본인의-특징">AI가 보는 일본인의 특징
&lt;/h2>&lt;p>네, 일본인의 특징에 대해 설명하겠습니다.&lt;/p>
&lt;p>【좋은 면】&lt;/p>
&lt;ul>
&lt;li>일본인은 예의가 바르고, 타인에 대한 존경이나 응대에 신경을 쓰는 문화가 있습니다.&lt;/li>
&lt;li>시간 엄수가 철저하며, 시간을 지키는 것이 존중받고 있습니다.&lt;/li>
&lt;li>집단주의적인 사고방식이 강하여, 팀워크나 협조성이 중시되고 있습니다.&lt;/li>
&lt;li>청결을 중요하게 여기며, 공공장소에서의 매너나 청소에 열심인 경향이 있습니다.&lt;/li>
&lt;li>선물이나 기념품을 소중히 여기며, 감사를 표하는 문화가 널리 침투해 있습니다.&lt;/li>
&lt;/ul>
&lt;p>【나쁜 면】&lt;/p>
&lt;ul>
&lt;li>개인의 의견을 주장하는 것에 서툰 경우가 있어, 의견 충돌을 피하는 경향이 있습니다.&lt;/li>
&lt;li>매우 엄격한 근로 문화로, 잔업이나 과로사가 문제시되는 경우도 있습니다.&lt;/li>
&lt;li>외국인에 대한 차별이나 배제 문제가 남아있어, 국제사회와의 조화가 논란이 되는 경우가 있습니다.&lt;/li>
&lt;li>권위주의적인 경향이 있어, 상사나 연장자의 의견을 무조건적으로 받아들이는 경우가 많다고 지적받기도 합니다.&lt;/li>
&lt;li>폐쇄적인 사회로, 외부의 문화나 가치관을 받아들이기 어려운 경향이 있다고 비판받기도 합니다.&lt;/li>
&lt;/ul></description></item><item><title>'Rust 시작하기'</title><link>http://kenji.blog/ko/p/rust%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%8B%E3%81%9F/</link><pubDate>Tue, 06 Sep 2022 00:12:36 +0900</pubDate><guid>http://kenji.blog/ko/p/rust%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%8B%E3%81%9F/</guid><description>&lt;img src="http://kenji.blog/p/rust%E3%81%AE%E3%81%AF%E3%81%98%E3%82%81%E3%81%8B%E3%81%9F/images/rust_logo.png" alt="Featured image of post 'Rust 시작하기'" />&lt;h1 id="시작하며">시작하며
&lt;/h1>&lt;p>Rust는 빠르고 메모리 효율이 높은 모듈을 모던한 표기법으로 작성할 수 있는 비교적 새로운 프로그래밍 언어입니다.
멀티 플랫폼을 지원하며, WebAssembly나 임베디드 환경에서도 사용되고 있습니다.
유명한 곳으로는 Firefox나 DropBox, Cloudflare에서도 채택하고 있습니다.&lt;/p>
&lt;p>C++의 대체 언어로도 주목받고 있습니다.&lt;/p>
&lt;h1 id="설치-방법">설치 방법
&lt;/h1>&lt;p>&lt;a class="link" href="https://www.rust-lang.org/ja/tools/install" target="_blank" rel="noopener"
>Rust 설치&lt;/a>&lt;/p>
&lt;p>위 사이트에서 각 플랫폼을 위한 설치 방법을 제공하고 있습니다.&lt;/p>
&lt;h1 id="첫-프로그램">첫 프로그램
&lt;/h1>&lt;p>다음 프로그램을 &lt;code>main.rs&lt;/code>로 저장합니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">fn main() {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> println!(&amp;#34;Hello, world!&amp;#34;);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>명령 프롬프트 또는 터미널에서 &lt;code>rustc main.rs&lt;/code>를 실행하면,
컴파일이 진행되며, &lt;code>./main&lt;/code>(Windows의 경우 &lt;code>main.exe&lt;/code>)을 실행하면 &lt;code>Hello, world!&lt;/code>가 출력됩니다.&lt;/p>
&lt;h1 id="일본어-문서">일본어 문서
&lt;/h1>&lt;p>&lt;a class="link" href="https://doc.rust-jp.rs/book-ja/" target="_blank" rel="noopener"
>The Rust Programming Language 일본어판&lt;/a>&lt;/p>
&lt;p>Rust를 배우는 데 필요한 설명은 위 링크(일본어 번역판)에 모여 있습니다.
Rust 교재를 구입할 필요가 없을 정도로 충실하게 구성되어 있습니다.&lt;/p>
&lt;h1 id="web에서-실행해-보고-싶은-경우">Web에서 실행해 보고 싶은 경우
&lt;/h1>&lt;p>컴파일러를 설치하지 않고 Web에서 실행해 보고 싶은 경우에는 &lt;a class="link" href="https://play.rust-lang.org/" target="_blank" rel="noopener"
>The Rust Playground&lt;/a>를 사용할 수 있습니다.
코드를 입력하고 「실행 버튼」을 누르면, Web 상에서 컴파일되어 실행됩니다.&lt;/p></description></item><item><title>인터넷 환경을 플렛츠 광→J:COM으로 변경했다</title><link>http://kenji.blog/ko/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/</link><pubDate>Mon, 05 Sep 2022 22:48:51 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/jcom.png" alt="Featured image of post 인터넷 환경을 플렛츠 광→J:COM으로 변경했다" />&lt;h1 id="자택의-인터넷-환경을-플렛츠-광에서-jcom으로-변경">자택의 인터넷 환경을 플렛츠 광에서 J:COM으로 변경
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/flets_hikari.png"
width="410"
height="123"
srcset="http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/flets_hikari_hu82dfae18127e227d3385a12e919dd77c_4214_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/flets_hikari_hu82dfae18127e227d3385a12e919dd77c_4214_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="333"
data-flex-basis="800px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/jcom.png"
width="380"
height="120"
srcset="http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/jcom_hub0ec31ac66f5927be8b28fe767bbeebb_3349_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/jcom_hub0ec31ac66f5927be8b28fe767bbeebb_3349_1024x0_resize_box_3.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="316"
data-flex-basis="760px"
>&lt;/p>
&lt;p>지인의 소개도 있어서, 자택의 인터넷 회선을 플렛츠 광에서 J:COM으로 바꿨습니다. 이유는,&lt;/p>
&lt;ol>
&lt;li>매월 요금이 저렴해진다. 3,619엔→2,180엔&lt;/li>
&lt;li>인터넷 속도가 100MBps에서 320MBps로 올라간다&lt;/li>
&lt;/ol>
&lt;p>라는 점.&lt;/p>
&lt;h1 id="사용해-본-감상">사용해 본 감상
&lt;/h1>&lt;p>전환한 지 1주일 정도 지났습니다만, 현재로서는 거의 문제는 없습니다. 아래에 조금 신경 쓰였던 부분을 기재합니다.&lt;/p>
&lt;p>실제로 변경하고 깨달았지만 다운로드 속도에 대해서는 확실히 빨라져서 60MBps였던 것이 320MBps 조금 안되게 나오게 되었습니다. 하지만,
업로드 속도에 대해서는, 플렛츠 광일 때는 40MBps는 나왔던 것이 10MBps 정도로 떨어졌습니다. 이것은 아무래도 J:COM 측의 사양인 것 같습니다.
현재로서는 방송을 하거나 대량의 데이터를 업로드할 일은 없기 때문에, 상태를 지켜보겠습니다.&lt;/p>
&lt;p>그리고, 최근에는 가족도 재택근무가 메인이지만, 오늘 처음으로 수십 분 정도 인터넷이 불통되었습니다. 자동으로 복구되었습니다만,
운이 별로 좋지 않을지도 모릅니다. 아직, 전환한 지 1주일이 지나지 않았지만&amp;hellip;&lt;/p>
&lt;p>여담이지만, J:COM은 P2P 통신을 규제하고 있기도 해서 P2P 앱의 속도는 나오지 않는 것 같습니다. P2P를 사용하시는 분은 주의하는 것이 좋습니다.&lt;/p>
&lt;h1 id="서비스에-대해서">서비스에 대해서
&lt;/h1>&lt;p>계약 시에, Netflix나 Disney+에 가입하면 4만 엔 분의 QUO 카드를 받을 수 있고, 각각의 서비스 계약료와 상계되어 조금이나마 매월 요금이
평균적으로 저렴해진다고 해서, 계약과 동시에 서비스 계약을 했습니다. Netflix는 1년 계약, Disney+는 반년 계약으로 스스로 해지 수속을 밟을 필요가 있는 것 같습니다.&lt;/p>
&lt;p>아직 전환한 지 얼마 되지 않아서, 사용감이나 감상이 추가로 생기면 다시 기사를 갱신하고자 합니다. 그럼,&lt;/p>
&lt;h1 id="0906-인터넷-연결이-어려워졌다">09/06 인터넷 연결이 어려워졌다
&lt;/h1>&lt;ul>
&lt;li>2022/09/06 13:13경 3분에서 5분 정도&lt;/li>
&lt;li>2022/09/06 13:30경 3분에서 5분 정도&lt;/li>
&lt;li>그 후 몇 번인가&amp;hellip;&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/trouble_shooting.png"
width="571"
height="440"
srcset="http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/trouble_shooting_hue0af70687972260feb3e86c327d1e005_17559_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%83%8D%E3%83%83%E3%83%88%E7%92%B0%E5%A2%83%E3%82%92%E3%83%95%E3%83%AC%E3%83%83%E3%83%84%E5%85%89jcom%E3%81%AB%E5%A4%89%E3%81%88%E3%81%9F/trouble_shooting_hue0af70687972260feb3e86c327d1e005_17559_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="네트워크 진단"
class="gallery-image"
data-flex-grow="129"
data-flex-basis="311px"
>&lt;/p>
&lt;p>DNS가 문제인 것 같아서, &lt;a class="link" href="https://internet.watch.impress.co.jp/docs/column/shimizu/1367271.html" target="_blank" rel="noopener"
>여기&lt;/a>를 참고하여 DNS 서버를 설정했습니다.
이걸로 어떻게 될지&amp;hellip; DNS 설정으로도 접속할 수 없는 상태에 빠져서, 지원팀에 문의를 했더니, 긴급 유지보수를 하고 있다는 것&amp;hellip;. 문의 직후부터 접속 상태가 좋아져서 뭔가 대책을 세워주었다고 생각합니다.&lt;/p></description></item><item><title>'【HUGO】로컬 환경에서 표시 프리뷰'</title><link>http://kenji.blog/ko/p/hugo%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E7%92%B0%E5%A2%83%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC/</link><pubDate>Mon, 05 Sep 2022 12:28:01 +0900</pubDate><guid>http://kenji.blog/ko/p/hugo%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E7%92%B0%E5%A2%83%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC/</guid><description>&lt;img src="http://kenji.blog/p/hugo%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E7%92%B0%E5%A2%83%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC/img.png" alt="Featured image of post '【HUGO】로컬 환경에서 표시 프리뷰'" />&lt;h1 id="hugo-설치">HUGO 설치
&lt;/h1>&lt;h2 id="다운로드">다운로드
&lt;/h2>&lt;p>&lt;a class="link" href="https://github.com/gohugoio/hugo/releases" target="_blank" rel="noopener"
>HUGO 다운로드&lt;/a>&lt;/p>
&lt;p>위 사이트에서 환경에 맞는 Windows 모듈을 다운로드하여 압축을 풉니다.
제 경우에는 &amp;ldquo;hugo_0.102.3_Windows-64bit.zip&amp;quot;을 다운로드했습니다.&lt;/p>
&lt;h2 id="압축-풀기">압축 풀기
&lt;/h2>&lt;p>다운로드한 zip 파일의 압축을 풀고 그 안의 hugo.exe를 예를 들어 C:\bin 등 폴더를 만들어 그곳에 복사합니다.&lt;/p>
&lt;h2 id="환경-변수-등록">환경 변수 등록
&lt;/h2>&lt;p>아무 위치에서나 hugo.exe를 실행하기 위해 환경 변수에 등록합니다.
Windows 11에서의 조작이지만 다음과 같은 절차로 등록할 수 있을 것입니다.&lt;/p>
&lt;ol>
&lt;li>Win+Pause 버튼을 눌러 버전 정보 열기&lt;/li>
&lt;li>시스템 고급 설정 클릭&lt;/li>
&lt;li>환경 변수 클릭&lt;/li>
&lt;li>Path를 선택하고 편집 클릭&lt;/li>
&lt;li>새로 만들기를 클릭하고 새 줄에 &amp;ldquo;C:\bin&amp;quot;을 입력한 후 확인을 눌러 대화 상자 닫기&lt;/li>
&lt;/ol>
&lt;h1 id="블로그-프리뷰하기">블로그 프리뷰하기
&lt;/h1>&lt;p>명령 프롬프트에서 HUGO 블로그 폴더로 이동하여 아래 명령을 실행합니다.&lt;/p>
&lt;p>&lt;code>hugo server -D&lt;/code>&lt;/p>
&lt;p>실행 결과는 아래와 같습니다. (-D는 임시 글을 표시하는 옵션입니다.)&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">C:\Users\win11\IdeaProjects\kenji.blog&amp;gt;hugo server -D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Start building sites …
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">hugo v0.102.3-b76146b129d7caa52417f8e914fc5b9271bf56fc windows/amd64 BuildDate=2022-09-01T10:16:19Z VendorInfo=gohugoio
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> | JA
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-------------------+-----
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Pages | 39
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Paginator pages | 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Non-page files | 7
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Static files | 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Processed images | 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Aliases | 13
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sitemaps | 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Cleaned | 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Built in 161 ms
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Watching for changes in C:\Users\win11\IdeaProjects\kenji.blog\{archetypes,content,themes}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Watching for config changes in C:\Users\win11\IdeaProjects\kenji.blog\config.toml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Environment: &amp;#34;development&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Serving pages from memory
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Web Server is available at http://localhost:1313/ (bind address 127.0.0.1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Press Ctrl+C to stop
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>주소는 실행 시 출력되므로 (위 예에서는 &lt;code>http://localhost:1313/&lt;/code>), 브라우저에 주소를 복사합니다.
프리뷰는 파일이 저장될 때마다 자동 업데이트됩니다.
프리뷰를 마치려면 명령 프롬프트에서 Ctrl+C를 입력합니다.&lt;/p></description></item><item><title>'수학자가 등장하는 영화'</title><link>http://kenji.blog/ko/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/</link><pubDate>Mon, 05 Sep 2022 10:41:00 +0900</pubDate><guid>http://kenji.blog/ko/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/</guid><description>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/images/img.png" alt="Featured image of post '수학자가 등장하는 영화'" />&lt;p>수학자 주인공이 등장하는 제가 추천하는 영화 3선입니다.&lt;/p>
&lt;h1 id="뷰티풀-마인드">뷰티풀 마인드
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/images/beautiful_mind.jpg"
loading="lazy"
>&lt;br>
실존하는 미국의 천재 수학자의 반생을 그린 작품. 마지막에는 놀라운 전개가.
주연인 러셀 크로우가 매력적인 연기를 보여줍니다.&lt;/p>
&lt;h1 id="이니그마">이니그마
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/images/enigma.jpg"
loading="lazy"
>&lt;/p>
&lt;blockquote>
&lt;p>로버트 해리스의 소설 『암호기 이니그마를 향한 도전』을 영화화하여 2001년 개봉한 영화.
wikipedia 발췌&lt;/p>
&lt;/blockquote>
&lt;p>이니그마 암호기라는 독일이 만들어낸 암호를 해독하는 이야기.&lt;/p>
&lt;h1 id="이미테이션-게임">이미테이션 게임
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/images/imitation_game.jpg"
loading="lazy"
>&lt;/p>
&lt;p>이 작품 역시 이니그마를 다룬 암호 해독 이야기. 당시의 세계관을 좋아합니다.&lt;/p>
&lt;h1 id="기적이-내려준-수식">기적이 내려준 수식
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img.png"
width="566"
height="800"
srcset="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_hu224d39544ca0af082720aacd7902fd19_1089949_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_hu224d39544ca0af082720aacd7902fd19_1089949_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="70"
data-flex-basis="169px"
>&lt;/p>
&lt;p>케임브리지 대학의 수학자 하디와 인도의 수학자 라마누잔의 교류를 그린 작품. 수학의 아름다움을 느낄 수 있습니다.&lt;/p>
&lt;h1 id="박사와-그녀의-이론">박사와 그녀의 이론
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_1.png"
width="800"
height="459"
srcset="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_1_hubfe00de5360673c8281820134bf7a309_739706_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_1_hubfe00de5360673c8281820134bf7a309_739706_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="174"
data-flex-basis="418px"
>&lt;/p>
&lt;p>호킹 박사의 반생을 그린 작품.&lt;/p>
&lt;h1 id="파티클-피버">파티클 피버
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_2.png"
width="640"
height="960"
srcset="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_2_hu18abd37eefb70a17a04950b9cdaa7d84_902746_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E8%80%85%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E6%98%A0%E7%94%BB/img_2_hu18abd37eefb70a17a04950b9cdaa7d84_902746_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="66"
data-flex-basis="160px"
>&lt;/p></description></item><item><title>'오늘의 작업 환경'</title><link>http://kenji.blog/ko/p/%E4%BB%8A%E6%97%A5%E3%81%AE%E4%BD%9C%E6%A5%AD%E7%92%B0%E5%A2%83/</link><pubDate>Sun, 04 Sep 2022 14:29:09 +0900</pubDate><guid>http://kenji.blog/ko/p/%E4%BB%8A%E6%97%A5%E3%81%AE%E4%BD%9C%E6%A5%AD%E7%92%B0%E5%A2%83/</guid><description>&lt;img src="http://kenji.blog/p/%E4%BB%8A%E6%97%A5%E3%81%AE%E4%BD%9C%E6%A5%AD%E7%92%B0%E5%A2%83/images/today_workplase.jpg" alt="Featured image of post '오늘의 작업 환경'" />&lt;h1 id="아이의-책상">아이의 책상
&lt;/h1>&lt;p>아이가 자는 시간이 작업에 몰두할 수 있는 시간입니다. 낮잠이 끝나면 공원에 놀러 가자.
아이패드에서 라이트닝을 HDMI로 변환하는 어댑터가 있으면 오른쪽 책상에서 작업할 수 있을 텐데～&lt;/p></description></item><item><title>IntelliJ IDEA에서 날짜를 삽입하는 명령 추가하기</title><link>http://kenji.blog/ko/p/intellij-idea%E3%81%A7%E6%97%A5%E4%BB%98%E3%82%92%E8%B2%BC%E3%82%8A%E4%BB%98%E3%81%91%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/</link><pubDate>Sun, 04 Sep 2022 05:59:04 +0900</pubDate><guid>http://kenji.blog/ko/p/intellij-idea%E3%81%A7%E6%97%A5%E4%BB%98%E3%82%92%E8%B2%BC%E3%82%8A%E4%BB%98%E3%81%91%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/intellij-idea%E3%81%A7%E6%97%A5%E4%BB%98%E3%82%92%E8%B2%BC%E3%82%8A%E4%BB%98%E3%81%91%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/images/IntelliJ_logo.png" alt="Featured image of post IntelliJ IDEA에서 날짜를 삽입하는 명령 추가하기" />&lt;h1 id="머리말">머리말
&lt;/h1>&lt;p>이 블로그를 작성할 때는 IntelliJ IDEA를 사용하고 있습니다. Git과의 호환성도 좋고, 마크다운의 프리뷰를 표시해 주기 때문에 편리합니다.
매번 블로그를 작성할 때 md의 헤더에 date를 작성해야 하는데, 해당 날짜 삽입 단축키가 없는 것 같아 아래 사이트를 참고하여
날짜를 삽입하는 명령을 만들어 보았습니다. 도움이 되었으면 좋겠습니다.&lt;/p>
&lt;p>&lt;a class="link" href="https://stackoverflow.com/questions/8714779/is-there-a-shortcut-for-inserting-date-time-in-intellij-idea" target="_blank" rel="noopener"
>Is there a shortcut for inserting date/time in IntelliJ IDEA?&lt;/a>&lt;/p>
&lt;h1 id="설정-절차">설정 절차
&lt;/h1>&lt;ol>
&lt;li>메뉴의 「File」 &amp;gt; 「Settings&amp;hellip;」를 엽니다.&lt;br>
&lt;img src="http://kenji.blog/images/settings.png"
loading="lazy"
alt="settings"
>&lt;/li>
&lt;li>「Editor」 &amp;gt; 「Live Template」 &amp;gt; 「HTML/XML」을 선택한 상태에서 「+」를 클릭합니다.&lt;/li>
&lt;li>Live Template을 선택합니다.&lt;/li>
&lt;li>Abbreviation에 「date」를 입력합니다.&lt;/li>
&lt;li>Description에 「날짜 및 시간을 삽입하다」를 입력합니다.&lt;/li>
&lt;li>Template Text에 「$date$」를 입력합니다.&lt;/li>
&lt;li>Edit Variables 버튼을 클릭합니다.&lt;br>
&lt;img src="http://kenji.blog/images/edit_template_variables.png"
loading="lazy"
alt="edit_template_variables"
>&lt;/li>
&lt;li>Name에 「date」를 입력합니다.&lt;/li>
&lt;li>Expression에 &lt;code>date(&amp;quot;yyyy-MM-dd'T'HH:mm:ss'+09:00'&amp;quot;)&lt;/code>라고 입력합니다.&lt;/li>
&lt;li>OK로 대화상자를 닫습니다.&lt;/li>
&lt;li>Define 또는 Change를 눌러 「Everywhere」에 체크합니다.&lt;/li>
&lt;li>OK로 대화상자를 닫습니다.&lt;/li>
&lt;li>코드 에디터에서 「date」를 입력하고 Enter를 눌러 「2022-09-04T05:59:04+09:00」 날짜가 삽입되면 설정 완료!&lt;/li>
&lt;/ol>
&lt;p>이상입니다.&lt;/p>
&lt;h1 id="맺음말">맺음말
&lt;/h1>&lt;p>IntelliJ IDEA의 소소한 팁을 발견하면 또 공개하도록 하겠습니다!&lt;/p></description></item><item><title>'블로그, 시작해 보았습니다'</title><link>http://kenji.blog/ko/p/%E3%83%96%E3%83%AD%E3%82%B0%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F/</link><pubDate>Fri, 02 Sep 2022 07:23:00 +0900</pubDate><guid>http://kenji.blog/ko/p/%E3%83%96%E3%83%AD%E3%82%B0%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%96%E3%83%AD%E3%82%B0%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F/images/komeda.jpeg" alt="Featured image of post '블로그, 시작해 보았습니다'" />&lt;h2 id="블로그-시작해-보았습니다">블로그, 시작해 보았습니다
&lt;/h2>&lt;p>&lt;img src="https://user-images.githubusercontent.com/2605401/187252583-63ef83f4-99c1-4eaf-a5b8-3b5ac1439860.gif"
loading="lazy"
>
불꽃놀이 같은 것, 코드는 &lt;a class="link" href="https://github.com/kenjinote/Fireworks" title="코드로 이동"
target="_blank" rel="noopener"
>여기&lt;/a>&lt;/p>
&lt;p>안녕하세요.
어쩌다 보니 블로그를 시작해 보게 되었습니다.&lt;/p>
&lt;p>특별히 &amp;ldquo;이걸 발신하고 싶다!&amp;rdquo; 같은 거창한 목적은 없고,
기술에 대한 것이나 일상적인 것, 생각난 것을 그대로 적을 수 있는 장소가 있었으면 좋겠다고 생각해서요.&lt;/p>
&lt;p>너무 무리하지 않고, 메모장 같은 느낌으로 해 나가려고 합니다.&lt;/p>
&lt;hr>
&lt;h2 id="hugo라는-녀석으로-만들고-있습니다">Hugo라는 녀석으로 만들고 있습니다
&lt;/h2>&lt;p>이 블로그는 &amp;ldquo;Hugo&amp;quot;라는 정적 사이트 생성기로 만들고 있습니다.
괜찮은 테마를 찾아서 기세로 도입해 보았습니다.
(테마 고르는 데 2시간 정도 걸린 건 비밀입니다)&lt;/p>
&lt;p>코드에 관한 것이나 관심 있는 도구 등도,
가볍게 메모해 나갈 생각입니다.&lt;/p>
&lt;hr>
&lt;h2 id="아침-코메다-이야기">아침 코메다 이야기
&lt;/h2>&lt;p>참고로 오늘 아침에는 조금 일찍 일어나서, 코메다 커피에 다녀왔습니다.
8시 반에 출발해서, 아침 공기를 마시며 터벅터벅.&lt;/p>
&lt;p>미니 시로느와르와 카페오레 A모닝 세트를 주문.
아마 800엔 정도였나? (기억 안 남)&lt;/p>
&lt;p>아침의 카페, 좋네요.
일하기 전에 잠시 멍 때리는 시간이 있으면, 왠지 하루가 잘 풀릴 것 같은 기분이 듭니다.&lt;/p>
&lt;hr>
&lt;p>그런 느낌으로, 앞으로 느슨하게 써 나가겠습니다.
기술적인 이야기도, 일상적인 일도, 섞어가며 할 예정입니다.&lt;/p>
&lt;p>잘 부탁드립니다!&lt;/p></description></item><item><title>Salesforce 추천 Chrome 확장 프로그램</title><link>http://kenji.blog/ko/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/</link><pubDate>Mon, 02 May 2022 10:39:36 +0900</pubDate><guid>http://kenji.blog/ko/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/</guid><description>&lt;img src="http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img.png" alt="Featured image of post Salesforce 추천 Chrome 확장 프로그램" />&lt;h3 id="salesforce-devtools">Salesforce DevTools
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_1.png"
width="454"
height="361"
srcset="http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_1_huf57bbbba5c728384e7ba6fa16d7a54c4_18951_480x0_resize_box_3.png 480w, http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_1_huf57bbbba5c728384e7ba6fa16d7a54c4_18951_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="125"
data-flex-basis="301px"
>&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_2.png"
width="448"
height="909"
srcset="http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_2_huf368a70f31f9534fa7902adae2b30e6e_26924_480x0_resize_box_3.png 480w, http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_2_huf368a70f31f9534fa7902adae2b30e6e_26924_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="49"
data-flex-basis="118px"
>&lt;/p>
&lt;p>사용자 정의 필드를 검색하거나, 사용자 정의 객체의 필드를 일괄적으로 출력할 수 있습니다.&lt;/p>
&lt;p>그 자리에서 SOQL을 작성할 수 있는 것도 편리합니다.&lt;/p>
&lt;p>&lt;a class="link" href="https://chrome.google.com/webstore/detail/salesforce-devtools/ehgmhinnhggigkogkbhnbodhbfjgncjf" target="_blank" rel="noopener"
>Salesforce DevTools&lt;/a>&lt;/p>
&lt;h3 id="salesforce-advanced-code-searcher">Salesforce advanced Code searcher
&lt;/h3>&lt;p>&lt;img src="http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img.png"
width="257"
height="261"
srcset="http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_huc75a5c8c4d45e738551ca5afb26f380b_13227_480x0_resize_box_3.png 480w, http://kenji.blog/p/salesforce%E3%81%8A%E3%81%99%E3%81%99%E3%82%81chrome%E6%8B%A1%E5%BC%B5/img_huc75a5c8c4d45e738551ca5afb26f380b_13227_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img.png"
class="gallery-image"
data-flex-grow="98"
data-flex-basis="236px"
>&lt;/p>
&lt;p>Salesforce 코드를 검색할 때 편리합니다.&lt;/p>
&lt;p>&lt;a class="link" href="https://chrome.google.com/webstore/detail/salesforce-advanced-code/lnkgcmpjkkkeffambkllliefdpjdklmi" target="_blank" rel="noopener"
>Salesforce advanced Code searcher&lt;/a>&lt;/p></description></item><item><title>아카이브</title><link>http://kenji.blog/ko/archives/</link><pubDate>Tue, 28 May 2019 00:00:00 +0000</pubDate><guid>http://kenji.blog/ko/archives/</guid><description/></item><item><title>[수학적 고찰] 왜 암호 해독 알고리즘 'GNFS'는 양자 컴퓨터 시대의 Shor 알고리즘에 패배하는가?</title><link>http://kenji.blog/ko/p/gnfs-to-shors-algorithm-math-deepdive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://kenji.blog/ko/p/gnfs-to-shors-algorithm-math-deepdive/</guid><description>&lt;img src="http://kenji.blog/p/gnfs-to-shors-algorithm-math-deepdive/quantum_vs_gnfs_eyecatch_1788616101508.jpg" alt="Featured image of post [수학적 고찰] 왜 암호 해독 알고리즘 'GNFS'는 양자 컴퓨터 시대의 Shor 알고리즘에 패배하는가?" />&lt;p>현대 인터넷 사회의 정보 보안은 RSA 암호를 비롯한 공개키 암호 방식에 의해 보호받고 있습니다. RSA 암호의 안전성 근거는, &lt;strong>&amp;lsquo;거대한 합성수의 소인수분해는 계산량적으로 극히 어렵다&amp;rsquo;&lt;/strong> 는 사실에 의존하고 있습니다.&lt;/p>
&lt;p>이 글에서는 고전 컴퓨터에서 최강의 소인수분해 알고리즘인 &lt;strong>&amp;lsquo;일반 수체 체(General Number Field Sieve, GNFS)&amp;rsquo;&lt;/strong> 의 수학적 메커니즘을 파헤치고, 그것이 왜 피터 쇼어(Peter Shor)가 발견한 &lt;strong>&amp;lsquo;쇼어 알고리즘(Shor&amp;rsquo;s Algorithm)&amp;rsquo;&lt;/strong> 에 의해 완전히 무너지는지, 그 패러다임 시프트를 수식과 개념도를 이용해 철저히 깊이 있게 다룹니다.&lt;/p>
&lt;hr>
&lt;h2 id="1-고전-계산에서의-소인수분해-접근법-페르마의-소인수분해법으로부터의-발전">1. 고전 계산에서의 소인수분해 접근법: 페르마의 소인수분해법으로부터의 발전
&lt;/h2>&lt;p>소인수분해 문제란, 주어진 합성수 $N$에 대하여 $N = p \times q$가 되는 소수 $p, q$를 찾는 문제입니다.&lt;/p>
&lt;p>기본적인 아이디어는 다음 합동식을 만족하는 자명하지 않은 $x, y$를 찾는 것으로 귀결됩니다.&lt;/p>
$$ x^2 \equiv y^2 \pmod N $$
&lt;p>이를 변형하면,&lt;/p>
$$ x^2 - y^2 \equiv 0 \pmod N $$
$$ (x - y)(x + y) \equiv 0 \pmod N $$
&lt;p>여기서 $x \not\equiv \pm y \pmod N$ 이라면, $\gcd(x-y, N)$ 또는 $\gcd(x+y, N)$을 계산함으로써 $N$의 자명하지 않은 인수를 얻을 수 있습니다. 이 사실이 GNFS 등 근대적인 소인수분해 알고리즘의 기초가 됩니다.&lt;/p>
&lt;hr>
&lt;h2 id="2-고전-최강의-알고리즘-일반-수체-체gnfs의-심연">2. 고전 최강의 알고리즘: &amp;lsquo;일반 수체 체(GNFS)&amp;lsquo;의 심연
&lt;/h2>&lt;p>&lt;strong>&amp;lsquo;GNFS&amp;rsquo;&lt;/strong> 는 오늘날 알려진 고전 컴퓨터용 소인수분해 알고리즘 중에서 가장 빠른 것입니다. 그 시간 복잡도는 준지수 함수적(Sub-exponential)인 시간을 필요로 합니다.&lt;/p>
&lt;h3 id="gnfs의-계산량">GNFS의 계산량
&lt;/h3>&lt;p>수 $N$의 자릿수를 $b = \log_2 N$이라고 할 때, GNFS의 계산량은 다음과 같이 표현됩니다.&lt;/p>
$$ O\left( \exp \left( \left(\frac{64}{9} b\right)^{1/3} (\log b)^{2/3} \right) \right) $$
&lt;p>이 식에서 알 수 있듯이, 계산량은 다항식 시간이 아니라 지수 함수보다는 약간 느린 &lt;strong>&amp;lsquo;준지수 시간&amp;rsquo;&lt;/strong> 이 됩니다. 그럼에도 자릿수가 늘어나면 계산 시간은 천문학적으로 증대합니다.&lt;/p>
&lt;h3 id="gnfs의-수학적-메커니즘">GNFS의 수학적 메커니즘
&lt;/h3>&lt;p>GNFS는 크게 4개의 단계로 구성됩니다.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>다항식 선택 (Polynomial Selection)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>체질 (Sieving)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>행렬의 간소화 (Matrix Reduction)&lt;/strong>&lt;/li>
&lt;li>&lt;strong>제곱근 계산 (Square Root)&lt;/strong>&lt;/li>
&lt;/ol>
&lt;h4 id="21-다항식-선택과-대수체">2.1. 다항식 선택과 대수체
&lt;/h4>&lt;p>먼저, 정수를 계수로 하는 기약 다항식 $f(x)$와 $g(x)$를 선택합니다. 이들은 공통의 근 $m$을 modulo $N$으로 가지도록 설정됩니다. 즉,&lt;/p>
$$ f(m) \equiv 0 \pmod N $$
$$ g(m) \equiv 0 \pmod N $$
&lt;p>일반적으로 $g(x)$는 일차 다항식 $g(x) = x - m$으로 선택됩니다. $f(x)$의 근을 $\alpha$라고 두면, $\mathbb{Q}(\alpha)$라는 &lt;strong>&amp;lsquo;대수체&amp;rsquo;&lt;/strong>(Number Field)가 구성됩니다. $\mathbb{Q}(\alpha)$의 환에서의 연산과 일반적인 정수환 $\mathbb{Z}$의 연산을 준동형 사상 $\phi: \alpha \mapsto m$을 통해 비교합니다.&lt;/p>
&lt;h4 id="22-체질-sieving">2.2. 체질 (Sieving)
&lt;/h4>&lt;p>다음으로 서로소인 정수 쌍 $(a, b)$를 대량으로 탐색합니다. 목적은 다음 두 값이 각각 &lt;strong>&amp;lsquo;B-smooth&amp;rsquo;&lt;/strong>(비교적 작은 소인수로만 구성됨)가 되는 쌍을 찾는 것입니다.&lt;/p>
&lt;ol>
&lt;li>$a - bm$ (정수환 위에서의 값)&lt;/li>
&lt;li>$b^d f(a/b)$ (대수체 위에서의 노름 $N(a - b\alpha)$에 대응)&lt;/li>
&lt;/ol>
&lt;p>여기서 &lt;strong>&amp;lsquo;체&amp;rsquo;&lt;/strong>(Sieve)라고 불리는 고속 탐색 기법이 사용됩니다. 이를 통해 방대한 후보 중에서 조건을 만족하는 $(a, b)$ 쌍을 효율적으로 추출합니다.&lt;/p>
&lt;h4 id="23-행렬의-간소화-linear-algebra-over-gf2">2.3. 행렬의 간소화 (Linear Algebra over GF(2))
&lt;/h4>&lt;p>수집한 쌍 $(a, b)$로부터 지수 벡터를 구성하고, 거대한 희소 행렬의 왼쪽 영공간(Left Null Space)을 $\mathbb{F}_2$(요소가 0과 1뿐인 체) 위에서 구합니다.&lt;/p>
&lt;p>관계식 $ \prod (a_i - b_i m) $ 와 $ \prod (a_i - b_i \alpha) $ 가 각각 제곱원이 되도록 벡터 $v$를 해로 찾습니다. 이는,&lt;/p>
$$ M \mathbf{x} \equiv \mathbf{0} \pmod 2 $$
&lt;p>라는 선형 방정식계를 푸는 것과 다름없습니다. 여기서 블록 란초스 알고리즘(Block Lanczos Algorithm)이나 블록 위데만 알고리즘(Block Wiedemann Algorithm) 등의 고도화된 수치 계산 알고리즘이 활용됩니다.&lt;/p>
&lt;h4 id="24-제곱근-계산">2.4. 제곱근 계산
&lt;/h4>&lt;p>마지막으로 대수체와 정수환 양쪽에서 제곱근을 취하고, $x^2 \equiv y^2 \pmod N$이라는 관계식을 도출해 냅니다. 그리고 $\gcd(x-y, N)$을 계산하여 인수를 얻습니다.&lt;/p>
&lt;hr>
&lt;h2 id="3-양자-계산에-의한-혁신-쇼어-알고리즘">3. 양자 계산에 의한 혁신: &amp;lsquo;쇼어 알고리즘&amp;rsquo;
&lt;/h2>&lt;p>GNFS가 준지수 함수적인 시간을 필요로 하는 반면, 1994년 피터 쇼어가 발표한 &lt;strong>&amp;lsquo;쇼어 알고리즘&amp;rsquo;&lt;/strong> 은 양자 컴퓨터를 사용하여 이 문제를 &lt;strong>&amp;lsquo;다항식 시간&amp;rsquo;&lt;/strong> 에 풀 수 있습니다.&lt;/p>
&lt;h3 id="쇼어-알고리즘의-계산량">쇼어 알고리즘의 계산량
&lt;/h3>&lt;p>양자 비트 수를 $O(\log N)$이라고 할 때, 시간 복잡도는 다음과 같습니다.&lt;/p>
$$ O((\log N)^3) $$
&lt;p>이는 비트 수에 대해 지수 함수적인 폭발을 일으키지 않음을 의미합니다. &lt;strong>&amp;lsquo;고전 계산&amp;rsquo;&lt;/strong> 의 계산량이 우주의 수명을 초과할 만한 거대한 합성수라도, &lt;strong>&amp;lsquo;양자 계산&amp;rsquo;&lt;/strong> 에서는 몇 시간～며칠 만에 해독 가능해진다는 경이로운 결과입니다.&lt;/p>
&lt;h3 id="쇼어-알고리즘의-전체상-주기-찾기-문제로의-귀결">쇼어 알고리즘의 전체상: 주기 찾기 문제로의 귀결
&lt;/h3>&lt;p>쇼어 알고리즘은 소인수분해 문제를 &lt;strong>&amp;lsquo;주기 찾기 문제&amp;rsquo;&lt;/strong> 로 교묘하게 귀결시킵니다.&lt;/p>
&lt;ol>
&lt;li>$N$과 서로소인 무작위 정수 $a$를 선택합니다 ($1 &lt; a &lt; N$).&lt;/li>
&lt;li>함수 $f(x) = a^x \bmod N$을 정의합니다.&lt;/li>
&lt;li>$f(x)$의 주기 $r$, 즉 $a^r \equiv 1 \pmod N$이 되는 최소의 양의 정수 $r$을 찾습니다.&lt;/li>
&lt;li>$r$이 짝수이면, $a^{r/2} \not\equiv -1 \pmod N$인지 확인하고, $\gcd(a^{r/2} \pm 1, N)$을 계산하여 소인수를 얻습니다.&lt;/li>
&lt;/ol>
&lt;p>이 3단계의 &lt;strong>&amp;lsquo;주기 $r$의 발견&amp;rsquo;&lt;/strong> 이야말로 고전 컴퓨터에서는 지수 함수적 시간을 필요로 하는 병목 현상이지만, 양자 컴퓨터는 &lt;strong>&amp;lsquo;양자 중첩&amp;rsquo;&lt;/strong> 과 &lt;strong>&amp;lsquo;양자 푸리에 변환&amp;rsquo;&lt;/strong>(QFT)을 사용하여 이를 순식간에 해결합니다.&lt;/p>
&lt;hr>
&lt;h2 id="4-양자-푸리에-변환qft과-주기의-추출">4. 양자 푸리에 변환(QFT)과 주기의 추출
&lt;/h2>&lt;p>쇼어 알고리즘의 핵심인 양자 상태의 조작에 대해 수식으로 자세히 살펴보겠습니다.&lt;/p>
&lt;h3 id="41-양자-중첩의-생성">4.1. 양자 중첩의 생성
&lt;/h3>&lt;p>먼저 2개의 양자 레지스터를 준비합니다. 레지스터 1은 입력 $x$의 중첩 상태를 유지하고, 레지스터 2는 함수의 계산 결과 $f(x)$를 유지합니다. 초기 상태 $|0\rangle |0\rangle$에 아다마르 변환(Hadamard Transform)을 적용하여 가능한 모든 $x$의 중첩을 만들어 냅니다.&lt;/p>
$$ |\psi_1\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle |0\rangle $$
&lt;p>
(여기서 $Q$는 $N^2 \le Q &lt; 2N^2$을 만족하는 2의 거듭제곱)&lt;/p>
&lt;p>다음으로 양자 오라클 $U_f$를 사용하여 $f(x) = a^x \bmod N$을 계산하고 레지스터 2에 저장합니다.&lt;/p>
$$ |\psi_2\rangle = U_f |\psi_1\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle |a^x \bmod N\rangle $$
&lt;p>여기서 레지스터 2를 측정했다고 가정해 봅시다 (실제로 측정하지 않아도 수학적 구조는 동일합니다). 어떤 값 $y = a^{x_0} \bmod N$이 관측되었다고 하면, 레지스터 1의 상태는 $f(x) = y$가 되는 모든 $x$의 중첩으로 수축합니다. 주기를 $r$이라고 하면, 그러한 $x$는 $x_0, x_0 + r, x_0 + 2r, \dots$가 됩니다.&lt;/p>
$$ |\psi_3\rangle = \frac{1}{\sqrt{M}} \sum_{k=0}^{M-1} |x_0 + kr\rangle $$
&lt;p>
(여기서 $M \approx Q/r$은 항의 수)&lt;/p>
&lt;p>이 상태는 주기 $r$의 정보를 내포하고 있지만, 직접 측정해도 무작위한 $x_0 + kr$이 얻어질 뿐, 주기 $r$은 알 수 없습니다. 여기서 QFT가 등장합니다.&lt;/p>
&lt;h3 id="42-양자-푸리에-변환-quantum-fourier-transform-의-적용">4.2. 양자 푸리에 변환 (Quantum Fourier Transform) 의 적용
&lt;/h3>&lt;p>QFT는 양자 상태의 진폭에 대해 이산 푸리에 변환을 수행하는 조작입니다. 상태 $|x\rangle$에 대한 QFT의 작용은 다음과 같이 정의됩니다.&lt;/p>
$$ \text{QFT} |x\rangle = \frac{1}{\sqrt{Q}} \sum_{y=0}^{Q-1} e^{2\pi i \frac{xy}{Q}} |y\rangle $$
&lt;p>이것을 $|\psi_3\rangle$에 적용하면, 위상의 간섭(양자 간섭)이 일어납니다.&lt;/p>
$$ |\psi_4\rangle = \text{QFT} |\psi_3\rangle = \frac{1}{\sqrt{MQ}} \sum_{y=0}^{Q-1} \sum_{k=0}^{M-1} e^{2\pi i \frac{(x_0 + kr)y}{Q}} |y\rangle $$
&lt;p>이 식의 합을 전개하면,&lt;/p>
$$ \sum_{k=0}^{M-1} e^{2\pi i \frac{kry}{Q}} $$
&lt;p>라는 부분이 나타납니다. 이 기하급수의 합은 $ry/Q$가 정수에 가까울 때에만 보강 간섭(Constructive Interference)이 일어나고, 그 외의 경우에는 상쇄 간섭(Destructive Interference)이 일어납니다.&lt;/p>
&lt;p>따라서 높은 확률로 측정되는 상태 $|y\rangle$는,&lt;/p>
$$ \frac{y}{Q} \approx \frac{c}{r} $$
&lt;p>이라는 조건을 만족하는 정수 $y$가 됩니다 ($c$는 어떤 정수).&lt;/p>
&lt;h3 id="43-연분수-전개에-의한-주기-특정">4.3. 연분수 전개에 의한 주기 특정
&lt;/h3>&lt;p>측정을 통해 $y$를 얻은 후, 고전 컴퓨터를 이용하여 $y/Q$를 &lt;strong>&amp;lsquo;연분수 전개&amp;rsquo;&lt;/strong>(Continued Fraction Expansion)합니다. 이를 통해 $y/Q$의 근사 분수 $c/r$을 계산하고, 분모로부터 주기 $r$의 후보를 고효율로 추출할 수 있습니다.&lt;/p>
&lt;hr>
&lt;h2 id="5-개념-모델의-비교와-패러다임-시프트">5. 개념 모델의 비교와 패러다임 시프트
&lt;/h2>&lt;p>GNFS와 쇼어 알고리즘의 차이를 직관적으로 이해하기 위해, Mermaid 기법을 사용한 개념도를 제시합니다.&lt;/p>
&lt;h3 id="양자-회로에-의한-쇼어-알고리즘의-개념도">양자 회로에 의한 쇼어 알고리즘의 개념도
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">graph TD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A[초기 상태: 0...0] --&amp;gt; B[아다마르 변환으로 모든 상태의 중첩]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt; C[모듈러 거듭제곱 연산 a^x mod N]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|양자 얽힘| D[주기성을 가지는 상태로의 수축]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> D --&amp;gt; E[양자 푸리에 변환 QFT]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> E --&amp;gt;|간섭에 의한 확률 증폭| F[측정: y를 얻음]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F --&amp;gt; G[고전 처리: 연분수 전개]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt; H[주기 r 발견]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> H --&amp;gt; I[N의 소인수 산출]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> style A fill:#f9f,stroke:#333,stroke-width:2px
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> style E fill:#bbf,stroke:#333,stroke-width:2px
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> style I fill:#bfb,stroke:#333,stroke-width:2px
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="패러다임-시프트의-본질">패러다임 시프트의 본질
&lt;/h3>&lt;p>GNFS는 &lt;strong>&amp;lsquo;수학적인 공간(대수체) 안에서 관계식을 탐색한다&amp;rsquo;&lt;/strong> 라는 접근 방식을 취합니다. 하지만 탐색 공간은 자릿수에 대해 지수 함수적으로 확대되기 때문에, 고전 컴퓨터의 계산 능력(병렬화를 포함하더라도)으로는 키 길이가 2048비트 등을 초과하면 사실상 해독이 불가능해집니다.&lt;/p>
&lt;p>반면, 쇼어 알고리즘은 &lt;strong>&amp;lsquo;양자 간섭에 의한 파동의 성질&amp;rsquo;&lt;/strong> 을 이용합니다. 중첩 상태에 있는 모든 계산 경로를 동시에 평가하고, QFT에 의해 불필요한 답을 상쇄(약화)시키고, 정답이 되는 주기의 확률 진폭만을 증폭(강화)시킵니다. 이를 통해 공간을 탐색하는 것이 아니라, &lt;strong>&amp;lsquo;정답 그 자체를 떠오르게 한다&amp;rsquo;&lt;/strong> 는 전혀 다른 차원의 접근 방식을 실현하고 있는 것입니다.&lt;/p>
&lt;h2 id="6-요약">6. 요약
&lt;/h2>&lt;p>이 글에서는 고전 한계의 끝판왕인 &lt;strong>&amp;lsquo;GNFS&amp;rsquo;&lt;/strong> 와 양자 계산의 힘을 보여주는 &lt;strong>&amp;lsquo;쇼어 알고리즘&amp;rsquo;&lt;/strong> 에 대해, 각각의 수학적 배경과 알고리즘의 구조를 깊이 비교했습니다.&lt;/p>
&lt;p>GNFS가 다항식의 선택이나 거대한 행렬의 계산 등 수학적 기교를 부려 준지수 시간으로 계산량을 끌어내린 반면, 쇼어 알고리즘은 양자 역학의 기본 원리인 중첩과 간섭을 수학적 도구(QFT)와 융합시켜 단숨에 다항식 시간으로의 혁신을 이루어냈습니다.&lt;/p>
&lt;p>현재 시점에서는 실용적인 규모(수천 양자 비트)로 쇼어 알고리즘을 실행할 수 있는 결함 허용 양자 컴퓨터(FTQC)는 존재하지 않습니다. 하지만 이 수학적·이론적인 패러다임 시프트의 존재야말로, 현재 전 세계적으로 양자 내성 암호(PQC: Post-Quantum Cryptography)로의 이행이 시급해진 가장 큰 이유입니다.&lt;/p></description></item><item><title>검색</title><link>http://kenji.blog/ko/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://kenji.blog/ko/search/</guid><description/></item><item><title>링크</title><link>http://kenji.blog/ko/%EB%A7%81%ED%81%AC/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://kenji.blog/ko/%EB%A7%81%ED%81%AC/</guid><description/></item></channel></rss>