<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on grrru.log</title><link>https://grrru.github.io/</link><description>Recent content in Home on grrru.log</description><generator>Hugo</generator><language>ko-KR</language><lastBuildDate>Wed, 05 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://grrru.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Linux stat command</title><link>https://grrru.github.io/posts/linux-stat-command/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/linux-stat-command/</guid><description>&lt;p&gt;간단하게 자주 쓸 것 같은 Linux machine stat 관련 커맨드 정리&lt;/p&gt;
&lt;h2 id="1-os--커널"&gt;
 1. OS / 커널
&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;명령어&lt;/th&gt;
 &lt;th&gt;용도&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;uname -a&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;커널 버전, 아키텍처 한 줄 요약&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cat /etc/os-release&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;배포판 이름·버전&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;hostnamectl&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;hostname, Machine ID, OS, Kernel, Arch 등&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;uptime&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;부팅 후 경과 시간, load average&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="2-cpu"&gt;
 2. CPU
&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;명령어&lt;/th&gt;
 &lt;th&gt;용도&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lscpu&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Architecture, Caches 등의 CPU 상세 정보&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nproc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;논리 코어 개수&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cat /proc/cpuinfo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;코어별 raw 정보&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;mpstat&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;CPU 사용률&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="3-메모리"&gt;
 3. 메모리
&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;명령어&lt;/th&gt;
 &lt;th&gt;용도&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;free -h&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;총량/사용/available&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cat /proc/meminfo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;상세 (Dirty, Slab, HugePages 등)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;vmstat&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;memory, swap, io 정보&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ps aux --sort=-%mem | head&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;메모리 많이 먹는 프로세스 top&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="4-디스크--스토리지"&gt;
 4. 디스크 / 스토리지
&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;명령어&lt;/th&gt;
 &lt;th&gt;용도&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;df -h&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;마운트별 용량&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lsblk&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;블록 디바이스 트리 구조&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>OverTheWire Leviathan</title><link>https://grrru.github.io/posts/overthewire-leviathan/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/overthewire-leviathan/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://overthewire.org/wargames/leviathan/"&gt;https://overthewire.org/wargames/leviathan/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To login to the first level use:&lt;/p&gt;
&lt;p&gt;Username: leviathan0
Password: leviathan0&lt;/p&gt;
&lt;p&gt;Leviathan은 Level0 password만 알려주고 그 뒤로는 아무런 정보를 주지 않는다.&lt;/p&gt;
&lt;h2 id="1-level-0"&gt;
 1. Level 0
&lt;/h2&gt;
&lt;div class="codeblock"&gt;
 &lt;div class="codeblock-actions"&gt;
 &lt;button type="button"
 class="codeblock-action codeblock-action--wrap"
 data-wrap-toggle
 data-icon-button
 aria-pressed="false"
 title="자동 줄바꿈 켜기"
 data-wrap-title="자동 줄바꿈 켜기"
 data-nowrap-title="자동 줄바꿈 끄기"&gt;
 &lt;svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M4 6h16M4 10h12a4 4 0 0 1 0 8h-2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/&gt;
 &lt;path d="M14 18l-2-2m2 2l-2 2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/&gt;
 &lt;/svg&gt;
 &lt;/button&gt;

 &lt;button type="button"
 class="codeblock-action codeblock-action--copy"
 data-copy-code
 data-icon-button
 title="코드 복사"
 data-copied-title="COPIED"&gt;
 &lt;svg class="icon-copy" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2" stroke="currentColor" stroke-width="2" fill="none"&gt;&lt;/rect&gt;
 &lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;svg class="icon-check" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;/button&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;leviathan0@leviathan:~$ ll
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;total &lt;span class="m"&gt;24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x &lt;span class="m"&gt;3&lt;/span&gt; root root &lt;span class="m"&gt;4096&lt;/span&gt; Jun &lt;span class="m"&gt;24&lt;/span&gt; 15:00 ./
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x &lt;span class="m"&gt;150&lt;/span&gt; root root &lt;span class="m"&gt;4096&lt;/span&gt; Jun &lt;span class="m"&gt;24&lt;/span&gt; 15:02 ../
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-x--- &lt;span class="m"&gt;2&lt;/span&gt; leviathan1 leviathan0 &lt;span class="m"&gt;4096&lt;/span&gt; Jun &lt;span class="m"&gt;24&lt;/span&gt; 15:00 .backup/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- &lt;span class="m"&gt;1&lt;/span&gt; root root &lt;span class="m"&gt;220&lt;/span&gt; Feb &lt;span class="m"&gt;13&lt;/span&gt; 12:16 .bash_logout
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- &lt;span class="m"&gt;1&lt;/span&gt; root root &lt;span class="m"&gt;3851&lt;/span&gt; Jun &lt;span class="m"&gt;24&lt;/span&gt; 14:50 .bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- &lt;span class="m"&gt;1&lt;/span&gt; root root &lt;span class="m"&gt;807&lt;/span&gt; Feb &lt;span class="m"&gt;13&lt;/span&gt; 12:16 .profile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;.backup&lt;/code&gt;이라는 dir이 있다. group이 leviathan0이어서 읽을 수 있다.&lt;/p&gt;</description></item><item><title>HMAC</title><link>https://grrru.github.io/posts/hmac/</link><pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/hmac/</guid><description>&lt;h2 id="hmac"&gt;
 HMAC
&lt;/h2&gt;
&lt;p&gt;HMAC은 메시지가 중간에 변조되지 않았는지 확인하기 위한 Hash-based Message Authentication Code다.&lt;/p&gt;
&lt;p&gt;메시지 원문은 그대로 전송하고, 다만 송신/수신처만 알고 있는 secret key로 HMAC 검증값을 만들어서 메시지와 함께 보낸다.&lt;/p&gt;</description></item><item><title>go env 역할/ mise</title><link>https://grrru.github.io/posts/go-env-%EC%97%AD%ED%95%A0/-mise/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/go-env-%EC%97%AD%ED%95%A0/-mise/</guid><description>&lt;h2 id="goroot--gopath--gobin"&gt;
 GOROOT / GOPATH / GOBIN
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GOROOT&lt;/code&gt; — Go SDK 자체가 설치되는 위치.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GOPATH&lt;/code&gt; — 작업공간 루트. 모듈 캐시(&lt;code&gt;pkg/mod&lt;/code&gt;)와 &lt;code&gt;go install&lt;/code&gt; 바이너리 기본 위치(&lt;code&gt;bin/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GOBIN&lt;/code&gt; — &lt;code&gt;go install&lt;/code&gt; 결과물 출력 경로. 미설정 시 &lt;code&gt;GOPATH/bin&lt;/code&gt;으로 fallback&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;go build vs go install&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>base64</title><link>https://grrru.github.io/posts/base64/</link><pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/base64/</guid><description>&lt;h2 id="base64"&gt;
 base64
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;바이너리 데이터를 ASCII 문자(A-Z, a-z, 0-9, +, /)만으로 표현하는 인코딩 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="원리"&gt;
 원리
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;3바이트(24 bit)를 6비트씩 4개로 쪼갠다.&lt;/li&gt;
&lt;li&gt;각 6비트(0~ 63)를 64개 문자 중 하나로 매핑한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ex)&lt;/p&gt;</description></item><item><title>git 잡기술</title><link>https://grrru.github.io/posts/git-%EC%9E%A1%EA%B8%B0%EC%88%A0/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/git-%EC%9E%A1%EA%B8%B0%EC%88%A0/</guid><description>&lt;blockquote&gt;
&lt;p&gt;일할 때 유용했던 git 잡기술 정리&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="1-tag"&gt;
 1. tag
&lt;/h2&gt;
&lt;h3 id="tag-생성"&gt;
 tag 생성
&lt;/h3&gt;
&lt;div class="codeblock"&gt;
 &lt;div class="codeblock-actions"&gt;
 &lt;button type="button"
 class="codeblock-action codeblock-action--wrap"
 data-wrap-toggle
 data-icon-button
 aria-pressed="false"
 title="자동 줄바꿈 켜기"
 data-wrap-title="자동 줄바꿈 켜기"
 data-nowrap-title="자동 줄바꿈 끄기"&gt;
 &lt;svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M4 6h16M4 10h12a4 4 0 0 1 0 8h-2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/&gt;
 &lt;path d="M14 18l-2-2m2 2l-2 2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/&gt;
 &lt;/svg&gt;
 &lt;/button&gt;

 &lt;button type="button"
 class="codeblock-action codeblock-action--copy"
 data-copy-code
 data-icon-button
 title="코드 복사"
 data-copied-title="COPIED"&gt;
 &lt;svg class="icon-copy" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2" stroke="currentColor" stroke-width="2" fill="none"&gt;&lt;/rect&gt;
 &lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;svg class="icon-check" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;/button&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git tag -l &lt;span class="c1"&gt;# tag list 보기&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git tag v1.2.0 &lt;span class="c1"&gt;# tag 생성&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git push origin v1.2.0 &lt;span class="c1"&gt;# 생성한 tag push&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id="tag-덮어쓰기"&gt;
 tag 덮어쓰기
&lt;/h3&gt;
&lt;div class="codeblock"&gt;
 &lt;div class="codeblock-actions"&gt;
 &lt;button type="button"
 class="codeblock-action codeblock-action--wrap"
 data-wrap-toggle
 data-icon-button
 aria-pressed="false"
 title="자동 줄바꿈 켜기"
 data-wrap-title="자동 줄바꿈 켜기"
 data-nowrap-title="자동 줄바꿈 끄기"&gt;
 &lt;svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M4 6h16M4 10h12a4 4 0 0 1 0 8h-2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/&gt;
 &lt;path d="M14 18l-2-2m2 2l-2 2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/&gt;
 &lt;/svg&gt;
 &lt;/button&gt;

 &lt;button type="button"
 class="codeblock-action codeblock-action--copy"
 data-copy-code
 data-icon-button
 title="코드 복사"
 data-copied-title="COPIED"&gt;
 &lt;svg class="icon-copy" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2" stroke="currentColor" stroke-width="2" fill="none"&gt;&lt;/rect&gt;
 &lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;svg class="icon-check" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;/button&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git tag -f v1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git push origin v1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id="prune"&gt;
 prune
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fetch prune-tags&lt;/code&gt;는 remote에서 제거된 tag를 local에서 자동으로 제거해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="codeblock"&gt;
 &lt;div class="codeblock-actions"&gt;
 &lt;button type="button"
 class="codeblock-action codeblock-action--wrap"
 data-wrap-toggle
 data-icon-button
 aria-pressed="false"
 title="자동 줄바꿈 켜기"
 data-wrap-title="자동 줄바꿈 켜기"
 data-nowrap-title="자동 줄바꿈 끄기"&gt;
 &lt;svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M4 6h16M4 10h12a4 4 0 0 1 0 8h-2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/&gt;
 &lt;path d="M14 18l-2-2m2 2l-2 2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/&gt;
 &lt;/svg&gt;
 &lt;/button&gt;

 &lt;button type="button"
 class="codeblock-action codeblock-action--copy"
 data-copy-code
 data-icon-button
 title="코드 복사"
 data-copied-title="COPIED"&gt;
 &lt;svg class="icon-copy" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2" stroke="currentColor" stroke-width="2" fill="none"&gt;&lt;/rect&gt;
 &lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;svg class="icon-check" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;/button&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git fetch --prune-tags&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;local에만 있던 tag도 remote에 없으면 제거될 수 있으니 주의.&lt;/p&gt;</description></item><item><title>RabbitMQ</title><link>https://grrru.github.io/posts/rabbitmq/</link><pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/rabbitmq/</guid><description>&lt;h1 id="rabbitmq-개념-정리"&gt;
 RabbitMQ 개념 정리
&lt;/h1&gt;
&lt;h2 id="1-rabbitmq란"&gt;
 1. RabbitMQ란?
&lt;/h2&gt;
&lt;p&gt;RabbitMQ는 AMQP(Advanced Message Queuing Protocol) 기반의 오픈소스 메시지 브로커다. Producer가 메시지를 보내면 RabbitMQ가 이를 큐에 저장하고, Consumer가 큐에서 메시지를 꺼내 처리하는 구조다.&lt;/p&gt;</description></item><item><title>MCP (Model Context Protocol)</title><link>https://grrru.github.io/posts/mcp-model-context-protocol/</link><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/mcp-model-context-protocol/</guid><description>&lt;blockquote&gt;
&lt;p&gt;claude-4.6-opus 작성한 글입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="0-들어가며"&gt;
 0. 들어가며
&lt;/h2&gt;
&lt;p&gt;2022년 말 ChatGPT가 세상에 등장했을 때, 사람들은 AI가 마치 사람처럼 대화할 수 있다는 사실에 놀랐다. 하지만 곧 한계가 드러났다. LLM(Large Language Model)은 본질적으로 &lt;strong&gt;텍스트를 생성하는 모델&lt;/strong&gt;일 뿐이었다. 최신 날씨를 알 수 없고, 데이터베이스를 조회할 수 없으며, 이메일을 보낼 수도 없었다. 학습 데이터의 시점에 갇힌, 똑똑하지만 고립된 존재였다.&lt;/p&gt;</description></item><item><title>JSON RPC</title><link>https://grrru.github.io/posts/json-rpc/</link><pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/json-rpc/</guid><description>&lt;h2 id="1-json"&gt;
 1. JSON
&lt;/h2&gt;
&lt;p&gt;JavaScript Object Notation의 약자로, &lt;code&gt;key-value&lt;/code&gt; 쌍의 집합.&lt;/p&gt;
&lt;div class="codeblock"&gt;
 &lt;div class="codeblock-actions"&gt;
 &lt;button type="button"
 class="codeblock-action codeblock-action--wrap"
 data-wrap-toggle
 data-icon-button
 aria-pressed="false"
 title="자동 줄바꿈 켜기"
 data-wrap-title="자동 줄바꿈 켜기"
 data-nowrap-title="자동 줄바꿈 끄기"&gt;
 &lt;svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M4 6h16M4 10h12a4 4 0 0 1 0 8h-2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/&gt;
 &lt;path d="M14 18l-2-2m2 2l-2 2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/&gt;
 &lt;/svg&gt;
 &lt;/button&gt;

 &lt;button type="button"
 class="codeblock-action codeblock-action--copy"
 data-copy-code
 data-icon-button
 title="코드 복사"
 data-copied-title="COPIED"&gt;
 &lt;svg class="icon-copy" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2" stroke="currentColor" stroke-width="2" fill="none"&gt;&lt;/rect&gt;
 &lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;svg class="icon-check" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;/button&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;이름&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;홍길동&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;나이&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;성별&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;남성&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;직업&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;학생&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;취미&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;독서&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;영화&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;운동&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;JSON은 구문이 간결하고 XML보다 빠르게 파싱된다.&lt;/p&gt;</description></item><item><title>OverTheWire Bandit (4)</title><link>https://grrru.github.io/posts/overthewire-bandit-4/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/overthewire-bandit-4/</guid><description>&lt;h2 id="1-level-28"&gt;
 1. Level 28
&lt;/h2&gt;
&lt;p&gt;There is a git repository at &lt;code&gt;ssh://bandit28-git@bandit.labs.overthewire.org/home/bandit28-git/repo&lt;/code&gt; via the port &lt;code&gt;2220&lt;/code&gt;. The password for the user &lt;code&gt;bandit28-git&lt;/code&gt; is the same as for the user &lt;code&gt;bandit28&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>OverTheWire Bandit (3)</title><link>https://grrru.github.io/posts/overthewire-bandit-3/</link><pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/overthewire-bandit-3/</guid><description>&lt;h2 id="1-level-21"&gt;
 1. Level 21
&lt;/h2&gt;
&lt;p&gt;A program is running automatically at regular intervals from &lt;strong&gt;cron&lt;/strong&gt;, the time-based job scheduler. Look in &lt;strong&gt;/etc/cron.d/&lt;/strong&gt; for the configuration and see what command is being executed.&lt;/p&gt;</description></item><item><title>OverTheWire Bandit (2)</title><link>https://grrru.github.io/posts/overthewire-bandit-2/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/overthewire-bandit-2/</guid><description>&lt;h2 id="0-level-12부터"&gt;
 0. Level 12부터
&lt;/h2&gt;
&lt;hr&gt;
&lt;h2 id="1-level-12"&gt;
 1. level 12
&lt;/h2&gt;
&lt;p&gt;The password for the next level is stored in the file &lt;strong&gt;data.txt&lt;/strong&gt;, which is a hexdump of a file that has been repeatedly compressed. For this level it may be useful to create a directory under /tmp in which you can work. Use mkdir with a hard to guess directory name. Or better, use the command “mktemp -d”. Then copy the datafile using cp, and rename it using mv (read the manpages!)&lt;/p&gt;</description></item><item><title>OverTheWire Bandit (1)</title><link>https://grrru.github.io/posts/overthewire-bandit-1/</link><pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/overthewire-bandit-1/</guid><description>&lt;h2 id="0-overthewire-bandit"&gt;
 0. OverTheWire Bandit
&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://overthewire.org/wargames/bandit/"&gt;OverTheWire: Bandit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;리눅스 연습!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;각 단계에서 얻은 password로 다음 레벨의 아이디(e.g. &lt;code&gt;bandit1&lt;/code&gt;)에 접속할 수 있다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-level-0"&gt;
 1. level 0
&lt;/h2&gt;
&lt;p&gt;The password for the next level is stored in a file called &lt;strong&gt;readme&lt;/strong&gt; located in the home directory. Use this password to log into bandit1 using SSH. Whenever you find a password for a level, use SSH (on port 2220) to log into that level and continue the game.&lt;/p&gt;</description></item><item><title>scp</title><link>https://grrru.github.io/posts/scp/</link><pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate><guid>https://grrru.github.io/posts/scp/</guid><description>&lt;h2 id="현재-조건-정리"&gt;
 현재 조건 정리
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;server1 -&amp;gt; server2 : ssh private key O&lt;/li&gt;
&lt;li&gt;server2 -&amp;gt; server1 : ssh private key X&lt;/li&gt;
&lt;li&gt;목표: server2의 파일을 server1로 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="scp"&gt;
 scp
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;server1에서 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="codeblock"&gt;
 &lt;div class="codeblock-actions"&gt;
 &lt;button type="button"
 class="codeblock-action codeblock-action--wrap"
 data-wrap-toggle
 data-icon-button
 aria-pressed="false"
 title="자동 줄바꿈 켜기"
 data-wrap-title="자동 줄바꿈 켜기"
 data-nowrap-title="자동 줄바꿈 끄기"&gt;
 &lt;svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M4 6h16M4 10h12a4 4 0 0 1 0 8h-2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/&gt;
 &lt;path d="M14 18l-2-2m2 2l-2 2" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/&gt;
 &lt;/svg&gt;
 &lt;/button&gt;

 &lt;button type="button"
 class="codeblock-action codeblock-action--copy"
 data-copy-code
 data-icon-button
 title="코드 복사"
 data-copied-title="COPIED"&gt;
 &lt;svg class="icon-copy" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2" stroke="currentColor" stroke-width="2" fill="none"&gt;&lt;/rect&gt;
 &lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;svg class="icon-check" viewBox="0 0 24 24" aria-hidden="true" focusable="false"&gt;
 &lt;path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;/path&gt;
 &lt;/svg&gt;
 &lt;/button&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp user2@server2:/src/file /dst/ &lt;span class="c1"&gt;# file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp -r user2@server2:/src/dir /dst/ &lt;span class="c1"&gt;# directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rsync -av user2@server2:/src/ /dst/ &lt;span class="c1"&gt;# 대용량 -&amp;gt; test는 안해봄&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>NamSeok Kim</title><link>https://grrru.github.io/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://grrru.github.io/about/</guid><description>&lt;section class="about-section" aria-labelledby="experience-title"&gt;
 &lt;header class="about-section-heading"&gt;
 &lt;h2 id="experience-title"&gt;Work Experience&lt;/h2&gt;
 &lt;/header&gt;
 &lt;div class="about-timeline"&gt;
 &lt;article class="about-entry"&gt;
 &lt;div class="about-entry-meta"&gt;
 &lt;p class="about-period"&gt;Jul 2025 — Present&lt;/p&gt;
 &lt;p class="about-location"&gt;South Korea&lt;/p&gt;
 &lt;/div&gt;
 &lt;div class="about-entry-content"&gt;
 &lt;header class="about-entry-heading"&gt;
 &lt;div&gt;
 &lt;h3&gt;&lt;a href="https://www.navercorp.com/en/main" target="_blank" rel="noopener noreferrer"&gt;NAVER ↗&lt;/a&gt;&lt;/h3&gt;
 &lt;p class="about-role"&gt;Lens Dev · Backend Developer&lt;/p&gt;
 &lt;/div&gt;
 &lt;/header&gt;
 &lt;ul class="about-work-list"&gt;
 &lt;li&gt;Develop and operate backend services for Smart Lens.&lt;/li&gt;
 &lt;li&gt;Implemented an asynchronous image deletion workflow using RabbitMQ.&lt;/li&gt;
 &lt;li&gt;Built production runtime diagnostics with Go's &lt;code&gt;runtime/trace.FlightRecorder&lt;/code&gt;.&lt;/li&gt;
 &lt;li&gt;Built reusable automation for dependency security remediation and CI failure triage.&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
 &lt;/article&gt;
 &lt;article class="about-entry"&gt;
 &lt;div class="about-entry-meta"&gt;
 &lt;p class="about-period"&gt;Aug 2024 — Jun 2025&lt;/p&gt;</description></item><item><title>NamSeok Kim</title><link>https://grrru.github.io/kr/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://grrru.github.io/kr/about/</guid><description>&lt;section class="about-section" aria-labelledby="experience-title"&gt;
 &lt;header class="about-section-heading"&gt;
 &lt;h2 id="experience-title"&gt;Work Experience&lt;/h2&gt;
 &lt;/header&gt;
 &lt;div class="about-timeline"&gt;
 &lt;article class="about-entry"&gt;
 &lt;div class="about-entry-meta"&gt;
 &lt;p class="about-period"&gt;Jul 2025 — Present&lt;/p&gt;
 &lt;p class="about-location"&gt;South Korea&lt;/p&gt;
 &lt;/div&gt;
 &lt;div class="about-entry-content"&gt;
 &lt;header class="about-entry-heading"&gt;
 &lt;div&gt;
 &lt;h3&gt;&lt;a href="https://www.navercorp.com/en/main" target="_blank" rel="noopener noreferrer"&gt;NAVER ↗&lt;/a&gt;&lt;/h3&gt;
 &lt;p class="about-role"&gt;Lens Dev · Backend Developer&lt;/p&gt;
 &lt;/div&gt;
 &lt;/header&gt;
 &lt;ul class="about-work-list"&gt;
 &lt;li&gt;Smart Lens 백엔드 서비스 개발 및 운영&lt;/li&gt;
 &lt;li&gt;RabbitMQ 기반 비동기 이미지 삭제 처리 흐름 구현&lt;/li&gt;
 &lt;li&gt;Go의 &lt;code&gt;runtime/trace.FlightRecorder&lt;/code&gt;를 활용한 운영 환경 런타임 진단 기능 구축&lt;/li&gt;
 &lt;li&gt;Dependency 보안 취약점 수정 및 CI 실패 원인 분석 자동화 도구 개발&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/div&gt;
 &lt;/article&gt;
 &lt;article class="about-entry"&gt;
 &lt;div class="about-entry-meta"&gt;
 &lt;p class="about-period"&gt;Aug 2024 — Jun 2025&lt;/p&gt;</description></item></channel></rss>