<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>psvm203</title><description>blog</description><link>https://psvm203.github.io/</link><language>ko</language><item><title>깃허브 블로그 댓글 시스템 추가하기</title><link>https://psvm203.github.io/posts/blog-comments/</link><guid isPermaLink="true">https://psvm203.github.io/posts/blog-comments/</guid><description>정적 댓글 시스템 Disqus, utterances, giscus 비교 + giscus 설치법</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;댓글 시스템 비교&lt;/h2&gt;
&lt;h3&gt;Disqus&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://disqus.com&quot;&gt;Disqus&lt;/a&gt;는 웹 사이트에 손쉽게 댓글 기능을 추가할 수 있는 플랫폼이다. 코드 몇 줄만 넣으면 댓글 시스템을 추가할 수 있어 블로그 같은 정적 사이트에 많이 쓰인다.&lt;/p&gt;
&lt;p&gt;다만 무료 플랜에서는 광고가 삽입되고 방문자 데이터가 수집된다는 단점이 있다. 이를 대체하고자 등장한 것이 utterances다.&lt;/p&gt;
&lt;h3&gt;utterances&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/utterance/utterances&quot;&gt;utterances&lt;/a&gt;는 깃허브 issues를 사용하는 댓글 시스템이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/utterance&quot;&gt;Open source&lt;/a&gt;. 🙌&lt;/li&gt;
&lt;li&gt;No tracking, no ads, always free. 📡🚫&lt;/li&gt;
&lt;li&gt;No lock-in. All data stored in GitHub issues. 🔓&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;다분히 Disqus를 저격하는 듯한 설명이 눈에 띈다.&lt;/p&gt;
&lt;h3&gt;giscus&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/giscus/giscus&quot;&gt;giscus&lt;/a&gt;는 utterances에서 영감을 받은 댓글 시스템이다. 깃허브 Issues 대신 Discussions를 기반으로 작동한다.&lt;/p&gt;
&lt;p&gt;Issues는 본래 버그 리포트나 작업 관리를 위한 기능이다. 이를 댓글 용도로 쓰면 레포지토리의 Issues 목록이 댓글로 가득 차 본래 목적을 살리기 어려워진다. 반면 Discussions는 대화를 위한 기능이라 용도에 더 잘 맞으며, 반응이나 중첩 답글처럼 댓글 시스템에 적합한 기능도 제공한다.&lt;/p&gt;
&lt;h2&gt;giscus 설치하기&lt;/h2&gt;
&lt;h3&gt;giscus 앱 추가&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;images/app.png&quot; alt=&quot;382&quot; /&gt;&lt;/p&gt;
&lt;p&gt;https://github.com/apps/giscus 에 접속해 giscus 깃허브 앱을 설치하고, 댓글 시스템을 적용할 레포지토리로 설정한다.&lt;/p&gt;
&lt;h3&gt;깃허브 Discussions 활성화&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;images/discussions.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;깃허브 레포지토리 설정에 들어가 Discussions를 활성화한다.&lt;/p&gt;
&lt;p&gt;&amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/check.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;https://giscus.app/ko 에서 저장소 이름을 입력하면 체크 표시가 나오는 걸 확인할 수 있다.&lt;/p&gt;
&lt;h3&gt;Discussions 연결 옵션&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;images/connect.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;블로그 글과 Discussions의 제목을 어떻게 연결할지 설정할 수 있다.&lt;/p&gt;
&lt;p&gt;블로그 글의 URL이 https://psvm203.github.io/posts/blog-comments 라면, 각 옵션의 Discussion의 제목은&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;페이지 경로: &lt;code&gt;posts/blog-comments&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;http가 https로 바뀌거나 origin이 바뀌어도 인식한다.&lt;/li&gt;
&lt;li&gt;가장 추천하는 방식이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;페이지 URL: &lt;code&gt;https://psvm203.github.io/posts/blog-comments&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;http가 https로 바뀌거나 origin이 바뀌면 다른 Discussions가 생성된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;페이지 title(og:title): &lt;code&gt;깃허브 블로그 방문자 통계 확인하기 - psvm203&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;제목이 수정되면 다른 Discussions가 생성된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Discussions 카테고리&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;images/category.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;카테고리는 Announcements로 설정한다. 다른 카테고리는 방문자가 Discussions를 생성할 수 있어 오염될 우려가 있다.&lt;/p&gt;
&lt;h3&gt;적용하기&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;images/code.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;원하는 테마를 고르고, 생성된 소스 코드를 댓글을 넣고 싶은 위치에 붙여넣으면 댓글 시스템이 적용된다.&lt;/p&gt;
&lt;p&gt;&amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/comments.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;위는 Giscus를 적용한 예시이다.&lt;/p&gt;
</content:encoded></item><item><title>깃허브 블로그 방문자 통계 확인하기</title><link>https://psvm203.github.io/posts/blog-analytics/</link><guid isPermaLink="true">https://psvm203.github.io/posts/blog-analytics/</guid><description>구글 애널리틱스를 버리고 GoatCounter를 선택한 이유</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;블로그를 운영하다 보면 자연스럽게 &apos;방문자 수가 얼마나 될까?&apos;라는 궁금증을 가지게 된다. 네이버 블로그나 티스토리에서는 이런 방문자 통계를 별도 설정 없이 손쉽게 확인할 수 있다. (벨로그는 좀 예외다.)&lt;/p&gt;
&lt;p&gt;깃허브 블로그에서 방문자 통계를 확인할 때 십중팔구 구글 애널리틱스를 추천한다. 점유율이 압도적으로 높고, 무료이며, 기능도 많다. 사실상 웹 분석 도구의 표준처럼 여겨진다.&lt;/p&gt;
&lt;p&gt;그런데 나는 구글 애널리틱스를 며칠 쓰다 결국 떼어냈다. 그리고 그 자리에 GoatCounter를 붙였다. 널리 알려지지도 않고 기능도 더 적은 도구로 굳이 갈아탄 이유를 이 글에 정리하려 한다.&lt;/p&gt;
&lt;h2&gt;구글 애널리틱스를 버린 이유&lt;/h2&gt;
&lt;p&gt;처음에는 별 고민 없이 구글 애널리틱스를 설치했다. 구글에 &apos;깃허브 블로그 방문자 통계&apos;를 검색하면 온통 구글 애널리틱스밖에 안 나오기 때문이었다.&lt;/p&gt;
&lt;p&gt;하지만 프라이버시 문제가 마음에 걸렸다. 구글 애널리틱스는 방문자 브라우저에 쿠키를 심고 방문자 정보를 구글 서버로 넘긴다. 그러다 보니 GDPR 같은 규제를 신경 써야 하고, 쿠키 동의 배너를 띄워야 하는 부담도 생긴다. 글 하나 읽으러 들어온 사람에게 추적당한다는 찜찜함을 안겨주고 싶지는 않았다.&lt;/p&gt;
&lt;h2&gt;GoatCounter를 선택한 이유&lt;/h2&gt;
&lt;p&gt;그래서 대안을 몇 가지 찾아보았다. 조건은 명확했다. 쿠키 없이 동작하고, 개인정보를 과다하게 수집하지 않으며, 무료 플랜을 지원할 것.&lt;/p&gt;
&lt;p&gt;선택지가 많지는 않았다. 깃허브에서 analytics를 스타 순으로 검색해 나온 분석 도구 중 무료로 쓸 수 있는 건 Umami와 GoatCounter 정도였다. Umami 무료 플랜은 데이터를 6개월간 보관하는 반면, GoatCounter는 데이터를 영구 보관한다. Umami도 좋은 도구지만, 무료 플랜의 제한이 상대적으로 여유로운 GoatCounter를 선택했다.&lt;/p&gt;
&lt;p&gt;쿠키를 전혀 쓰지 않고, 개인을 식별하는 데이터를 수집하지 않으면서도, 대시보드 화면에서 방문자 수와 유입 경로, 인기 글을 바로 확인할 수 있었다. 기능은 구글 애널리틱스에 비해 적었지만 내게 필요한 기능은 다 들어있었다.&lt;/p&gt;
&lt;h2&gt;사용법&lt;/h2&gt;
&lt;p&gt;https://www.goatcounter.com 에 들어가 가입한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script
  data-goatcounter=&quot;https://{yoursite}.goatcounter.com/count&quot;
  async
  src=&quot;//gc.zgo.at/count.js&quot;
&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;{yoursite}&lt;/code&gt; 부분을 수정하고, 이 스크립트를 html의 아무 곳에나 추가하면 된다. 나는 &lt;code&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; 직전에 추가했다.&lt;/p&gt;
&lt;p&gt;https://{yoursite}.getcounter.com 에서 대시보드를 확인할 수 있다.&lt;/p&gt;
&lt;h2&gt;마무리&lt;/h2&gt;
&lt;p&gt;나는 도구를 고를 때 장점이 많은 것보다 단점이 적은 것을 선호한다. 구글 애널리틱스가 나쁜 도구인 것은 아니다. 다만 내 기준에 더 어울리는 것이 GoatCounter였을 뿐이다.&lt;/p&gt;
</content:encoded></item><item><title>맥북 필수 프로그램 Homebrew로 삶의 질 높이기</title><link>https://psvm203.github.io/posts/homebrew/</link><guid isPermaLink="true">https://psvm203.github.io/posts/homebrew/</guid><description>패키지 관리 프로그램 Homebrew 설치와 사용법</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Homebrew란?&lt;/h2&gt;
&lt;p&gt;Homebrew는 macOS용 서드파티 패키지 관리자로, 터미널에서 프로그램을 설치, 삭제, 업데이트할 수 있다. macOS에는 윈도우의 &lt;code&gt;winget&lt;/code&gt;이나 리눅스의 &lt;code&gt;apt&lt;/code&gt; 같은 공식 패키지 관리자가 없어 Homebrew가 그 역할을 대신한다.&lt;/p&gt;
&lt;p&gt;웹사이트를 일일이 찾아다니며 &lt;code&gt;.dmg&lt;/code&gt; 파일을 내려받고, 마운트하고, 옮기고, 언마운트하는 번거로운 과정을 명령어 한 줄로 줄여준다. 또한 &lt;code&gt;.dmg&lt;/code&gt; 파일로 설치한 프로그램은 하나씩 직접 실행해서 업데이트해야 하지만, Homebrew를 쓰면 설치된 모든 프로그램을 명령어 한 줄로 한 번에 업데이트할 수 있다.&lt;/p&gt;
&lt;p&gt;이처럼 Homebrew는 흩어져있는 번거로운 프로그램 관리 작업을 터미널 하나로 깔끔하게 모아준다. 한번 익숙해지면 다시는 &lt;code&gt;.dmg&lt;/code&gt; 파일을 보고 싶지 않아질 만큼 편리하다. 이제 Homebrew를 설치하는 방법과 사용법을 알아보자.&lt;/p&gt;
&lt;h2&gt;Homebrew 설치 방법&lt;/h2&gt;
&lt;p&gt;아래 명령어로 설치할 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;프로그램 설치&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;brew install {프로그램 이름}&lt;/code&gt; 을 입력하면 된다. 프로그램 이름은 구글에 &lt;code&gt;brew {설치할 프로그램}&lt;/code&gt; 을 검색하면 Homebrew 웹 페이지에 나온다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/formulae.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install wget
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;p&gt;GUI 프로그램의 경우, &lt;code&gt;--cask&lt;/code&gt; 옵션을 사용해야 하지만 생략해도 작동한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install --cask visual-studio-code
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;brew info&lt;/code&gt;로 설치 없이 정보만 확인할 수도 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew info visual-studio-code
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;brew list&lt;/code&gt;로 설치된 프로그램 목록을 확인할 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew list
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;프로그램 삭제&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;brew uninstall {프로그램 이름}&lt;/code&gt; 을 입력하면 된다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew uninstall wget
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;p&gt;GUI 프로그램의 경우 &lt;code&gt;--zap&lt;/code&gt; 옵션을 사용하면 프로그램이 남긴 설정 파일, 데이터 같은 잔여 파일까지 삭제하므로 &lt;code&gt;brew uninstall --zap&lt;/code&gt;으로 삭제하는 걸 추천한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew uninstall --zap visual-studio-code
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;프로그램 정리&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;brew autoremove&lt;/code&gt;는 어떤 프로그램도 의존하지 않는 프로그램, 즉 더 이상 필요 없어진 프로그램을 삭제하고, &lt;code&gt;brew cleanup&lt;/code&gt;은 오래된 버전의 패키지, 캐시, 임시 파일을 삭제한다. 주기적으로 실행하면 용량 관리에 도움이 된다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew autoremove
brew cleanup
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;프로그램 업데이트&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;brew update&lt;/code&gt;를 하면 프로그램 정보(카탈로그)를 최신 상태로 업데이트한다. 이름과는 달리 프로그램을 업데이트하지는 않는다. 다른 &lt;code&gt;brew&lt;/code&gt; 명령 실행 시 자동으로 갱신되는 경우가 많으므로 직접 실행하지 않아도 괜찮다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;brew upgrade&lt;/code&gt;를 하면 &lt;code&gt;brew&lt;/code&gt;로 설치한 모든 프로그램을 최신 상태로 업그레이드한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew upgrade
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;p&gt;특정 프로그램만 업그레이드하고 싶으면 프로그램 이름을 붙이면 된다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew upgrade visual-studio-code
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;br /&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;brew pin&lt;/code&gt;으로 특정 프로그램의 버전을 고정, 즉 업그레이드를 방지할 수 있다. 단, &lt;code&gt;brew upgrade&lt;/code&gt;만 방지되므로 GUI 프로그램의 자체 업데이트는 가능하다. &lt;code&gt;brew unpin&lt;/code&gt;으로 해제할 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew pin visual-studio-code
brew unpin visual-studio-code
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;여담: --cask 옵션&lt;/h2&gt;
&lt;p&gt;GUI 프로그램을 설치, 삭제, 업그레이드할 때는 &lt;code&gt;--cask&lt;/code&gt; 옵션을 사용해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;--cask&lt;/code&gt; 옵션을 붙이지 않으면 CLI 프로그램(formula)을 우선적으로 검색하고, 붙이면 GUI 프로그램(cask)만을 찾는다.&lt;/p&gt;
&lt;p&gt;다만 이름이 같은 CLI/GUI 프로그램은 이 글을 작성하는 시점에서 존재하지 않으므로 (&lt;code&gt;docker&lt;/code&gt;은 겹친 적이 있으나 이름을 바꾸었다.) 대부분의 경우 &lt;code&gt;--cask&lt;/code&gt; 옵션을 생략해도 된다. 명확성을 위해서는 명시하는 것이 좋다.&lt;/p&gt;
</content:encoded></item><item><title>Node.js와 pnpm 설치하기</title><link>https://psvm203.github.io/posts/nodejs-install/</link><guid isPermaLink="true">https://psvm203.github.io/posts/nodejs-install/</guid><description>윈도우, 맥, 리눅스에서의 Node.js, pnpm 설치법</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;code&gt;Node.js&lt;/code&gt;는 자바스크립트를 브라우저 밖에서 실행할 수 있는 런타임 환경이다. 현재 자바스크립트 런타임의 사실상 표준 위치를 차지하고 있다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pnpm&lt;/code&gt;은 &lt;code&gt;Node.js&lt;/code&gt; 생태계에서 사용하는 패키지 매니저다. &lt;code&gt;npm&lt;/code&gt;과 같은 역할을 하지만, 패키지 설치 속도가 빠르고 디스크 공간을 적게 차지한다.&lt;/p&gt;
&lt;p&gt;이 글에서는 &lt;code&gt;Node.js&lt;/code&gt;와 &lt;code&gt;pnpm&lt;/code&gt;을 설치하는 법을 정리하려 한다.&lt;/p&gt;
&lt;h2&gt;Windows&lt;/h2&gt;
&lt;h3&gt;방법 1: msi 프로그램&lt;/h3&gt;
&lt;p&gt;방법은 간단하지만 웹페이지에 접속해야하고 설치가 느리다는 단점이 있다.&lt;/p&gt;
&lt;p&gt;https://nodejs.org/ko/download 에 들어가 아래처럼 생긴 버튼을 눌러 &lt;code&gt;Node.js&lt;/code&gt;를 설치한다.&lt;/p&gt;
&lt;p&gt;&amp;lt;a href=&quot;https://nodejs.org/ko/download&quot; class=&quot;w-full min-w-56 sm:w-auto&quot; style=&quot;display:inline-flex;align-items:center;justify-content:center;gap:8px;color:#fff;padding:8px 16px;border:1px solid #417e38;border-radius:.25rem;background-color:#417e38;font-weight:500;font-size:14px;text-decoration:none;box-sizing:border-box;box-shadow:0 1px 2px 0 rgba(16,24,40,.05);&quot;&amp;gt;Windows 설치 프로그램 (.msi)&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;p&gt;그 후 아래 명령어로 &lt;code&gt;pnpm&lt;/code&gt;을 설치한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm install -g corepack@latest
corepack enable pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;방법 2: winget&lt;/h3&gt;
&lt;p&gt;터미널 하나로 모든 설치 작업을 수행할 수 있어 편리하다.&lt;/p&gt;
&lt;p&gt;아래 명령어로 &lt;code&gt;Node.js&lt;/code&gt;와 &lt;code&gt;pnpm&lt;/code&gt;을 설치한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;winget install OpenJS.NodeJS.LTS
npm install -g corepack@latest
corepack enable pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;방법 3: fnm&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;fnm&lt;/code&gt;은 &lt;code&gt;Node.js&lt;/code&gt;의 버전 관리 프로그램으로, &lt;code&gt;nvm&lt;/code&gt;과 같은 역할을 하지만 더 빠르다. 여러 버전의 &lt;code&gt;Node.js&lt;/code&gt;를 사용할 일이 있을 때 특히 유용하다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;winget install Schniz.fnm
fnm install --lts
npm install -g corepack@latest
corepack enable pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;macOS&lt;/h2&gt;
&lt;h3&gt;방법 1: Homebrew&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Homebrew&lt;/code&gt; 설치 방법은 &lt;a href=&quot;../homebrew/index.md&quot;&gt;맥북 필수 프로그램 Homebrew로 삶의 질 높이기&lt;/a&gt; 에서 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;아래 명령어로 &lt;code&gt;Node.js&lt;/code&gt;와 &lt;code&gt;pnpm&lt;/code&gt;을 설치한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install node
npm install -g corepack@latest
corepack enable pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;방법 2: fnm&lt;/h3&gt;
&lt;p&gt;여러 버전의 &lt;code&gt;Node.js&lt;/code&gt;를 사용할 일이 있을 때 특히 유용하다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install fnm
fnm install --lts
npm install -g corepack@latest
corepack enable pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Linux&lt;/h2&gt;
&lt;h3&gt;방법 1: fnm&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;curl -o- https://fnm.vercel.app/install | bash
fnm install --lts
npm install -g corepack@latest
corepack enable pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;apt&lt;/code&gt; 로도 설치가 가능하지만, apt 저장소에는 &lt;code&gt;fnm&lt;/code&gt;이 존재하지 않아 &lt;code&gt;Node.js&lt;/code&gt;를 직접 설치해야하는데, &lt;code&gt;npm&lt;/code&gt;과 분리되어 설치되고, 버전도 오래된 경우가 많아 &lt;code&gt;fnm&lt;/code&gt;으로 설치하는 걸 권장한다.&lt;/p&gt;
</content:encoded></item><item><title>내가 깃허브 블로그로 옮긴 이유</title><link>https://psvm203.github.io/posts/blog-comparison/</link><guid isPermaLink="true">https://psvm203.github.io/posts/blog-comparison/</guid><description>블로그 플랫폼 - 네이버, 티스토리, 벨로그 비교</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;그동안 티스토리, 벨로그로 개발 블로그를 운영했고, 각 플랫폼마다 분명한 장단점이 있었다. 이 글에서는 블로그 플랫폼의 장단점을 비교하고, 최종적으로 깃허브 블로그에 정착한 이유를 정리하려 한다.&lt;/p&gt;
&lt;h2&gt;네이버 블로그&lt;/h2&gt;
&lt;p&gt;네이버 블로그는 국내에서 대중적인 플랫폼이지만, 개발 블로그로는 적합하지 않았다.&lt;/p&gt;
&lt;p&gt;가장 큰 문제는 검색 엔진 최적화(SEO)다. 구글에서 네이버 블로그 글이 잘 검색되지 않고, 검색되었을 때 데스크톱 환경에서 모바일 버전으로 노출되는 경우도 많다. 개발자들이 정보를 찾을 때 대부분 구글을 사용한다는 점을 생각하여, 검색이 불편한 네이버 블로그는 처음부터 후보에서 제외하였다.&lt;/p&gt;
&lt;h2&gt;티스토리&lt;/h2&gt;
&lt;p&gt;티스토리는 네이버보다 검색 노출이 잘 되고 광고 연동이 가능하다는 장점이 있다.&lt;/p&gt;
&lt;p&gt;하지만 커스터마이징이 불편하고 마크다운 문법을 온전히 지원하지 않아 벨로그로 이주하였다. 티스토리에서도 물론 마크다운 사용이 가능하지만, 텍스트 에디터와의 호환이 매끄럽지 않다. 개발 글을 작성하다 보면 코드와 텍스트, 마크다운을 섞어 사용해야 하는데, 이 부분에서 사용 경험이 좋지 않았다.&lt;/p&gt;
&lt;h2&gt;벨로그&lt;/h2&gt;
&lt;p&gt;벨로그는 기본 디자인이 깔끔하고 마크다운 문법을 완벽하게 지원한다. 코드 블록과의 연동도 자연스러워 커스터마이징이 필요한 경우도 적었다. 개발 포스팅에 특화되어 있다는 점에서 가장 만족스러운 플랫폼이었다.&lt;/p&gt;
&lt;p&gt;다만 결정적인 아쉬움이 있었는데 바로 카테고리 기능이 빈약하다는 점이다. 벨로그는 태그 기반으로 글을 분류하는데, 시리즈 기능이 있긴 하지만 계층적인 카테고리 구조를 만들기는 어렵다. 글이 쌓일수록 체계적으로 분류하고 정리하고 싶은 욕구가 커졌는데, 벨로그의 분류 체계로는 한계가 있었다.&lt;/p&gt;
&lt;h2&gt;결론: 왜 깃허브 블로그인가&lt;/h2&gt;
&lt;p&gt;여러 플랫폼을 거치며, 내가 원하는 블로그의 조건이 명확해졌다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;검색 엔진 최적화가 가능할 것: 구글에서 잘 검색되어야 한다&lt;/li&gt;
&lt;li&gt;마크다운 문법을 지원할 것: 코드와 글을 편하게 작성할 수 있어야 한다&lt;/li&gt;
&lt;li&gt;커스터마이징이 자유로울 것: 플랫폼에 마음에 들지 않는 부분이 생기면 수정할 수 있어야 한다&lt;/li&gt;
&lt;li&gt;카테고리 기능을 갖출 것: 글을 체계적으로 분류할 수 있어야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 조건을 모두 만족하는 플랫폼은 결국 깃허브 블로그밖에 없었다. 깃허브 블로그는 마크다운으로 글을 작성하고, SEO를 세밀하게 관리할 수 있다. 테마를 자유롭게 고르거나 직접 만들 수 있어 커스터마이징의 제약이 사실상 없고, 폴더 구조나 설정을 통해 원하는 만큼 카테고리를 구성할 수 있다.&lt;/p&gt;
&lt;p&gt;무엇보다 모든 글이 내 깃 저장소에 남는다. 콘텐츠가 특정 플랫폼에 종속되지 않고 온전히 내 소유로 관리된다는 점은 큰 매력이다.&lt;/p&gt;
&lt;p&gt;물론 초기 설정이 다른 플랫폼보다 번거롭고, 필요한 기능을 직접 붙여야 한다는 진입 장벽은 있다. 하지만 한 번 환경을 갖춰두면 그 이후의 자유도는 다른 플랫폼이 따라올 수 없다. 그래서 나는 깃허브 블로그로 이사를 결심했다.&lt;/p&gt;
</content:encoded></item></channel></rss>