<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevLog</title><link>https://hdsu.net/</link><description>Dongsu Han's Tech DevLog &amp; Portfolio — Notes on information security, systems programming, and continuous learning.</description><generator>Hugo 0.168.0 &amp; FixIt v1.0.0-beta.3</generator><language>en</language><managingEditor>dongsu8142@naver.com (Dongsu Han)</managingEditor><webMaster>dongsu8142@naver.com (Dongsu Han)</webMaster><lastBuildDate>Thu, 15 Oct 2026 01:00:00 +0900</lastBuildDate><atom:link href="https://hdsu.net/index.xml" rel="self" type="application/rss+xml"/><item><title>DevLog 시작하기: 정적 사이트 직접 구축기와 정보보안 공부의 기록</title><link>https://hdsu.net/posts/welcome-to-devlog/</link><pubDate>Thu, 15 Oct 2026 01:00:00 +0900</pubDate><author>dongsu8142@naver.com (Dongsu Han)</author><guid>https://hdsu.net/posts/welcome-to-devlog/</guid><category domain="https://hdsu.net/categories/%EC%9D%BC%EB%B0%98/">일반</category><description>&lt;p&gt;안녕하세요! 현재 대학교에서 &lt;strong&gt;정보보호학&lt;/strong&gt;을 전공하고 있는 &lt;strong&gt;한동수&lt;/strong&gt;입니다.&lt;/p&gt;&#10;&lt;p&gt;컴퓨터 사이언스의 기초를 단단히 다지고, 시스템 보안과 개발을 함께 공부하면서 마주한 수많은 지식과 고민의 흔적들을 차곡차곡 축적하기 위해 개인 기술 블로그 &lt;strong&gt;DevLog&lt;/strong&gt;를 열었습니다.&lt;/p&gt;&#10;&lt;p&gt;첫 포스트에서는 거창한 선언 대신, &lt;strong&gt;왜 정보보호학을 공부하며 기록이 절실했는지&lt;/strong&gt;, 그리고 &lt;strong&gt;이 블로그를 Hugo와 Cloudflare Workers 기반의 정적 사이트로 직접 구축하며 겪었던 실제 엔지니어링 과정과 트러블슈팅&lt;/strong&gt;을 솔직하게 기록해 보려 합니다.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 class="heading-element" id="-1-왜-기록technical-writing인가"&gt;&lt;span&gt;🎓 1. 왜 기록(Technical Writing)인가?&lt;/span&gt;&#10; &lt;a href="#-1-%ec%99%9c-%ea%b8%b0%eb%a1%9dtechnical-writing%ec%9d%b8%ea%b0%80" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&lt;h3 class="heading-element" id="쏟아지는-지식과-휘발성의-문제"&gt;&lt;span&gt;쏟아지는 지식과 휘발성의 문제&lt;/span&gt;&#10; &lt;a href="#%ec%8f%9f%ec%95%84%ec%a7%80%eb%8a%94-%ec%a7%80%ec%8b%9d%ea%b3%bc-%ed%9c%98%eb%b0%9c%ec%84%b1%ec%9d%98-%eb%ac%b8%ec%a0%9c" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;정보보호학은 컴퓨터 시스템의 가장 밑바닥(Low-level)인 어셈블리어와 운영체제 커널부터, 네트워크 패킷 구조, 웹 아키텍처, 암호학에 이르기까지 &lt;strong&gt;광범위한 스펙트럼의 지식을 요구하는 복합 학문&lt;/strong&gt;입니다.&lt;/p&gt;&#10;&lt;p&gt;수업을 듣고 과제를 하며 새로운 도구나 분석 기법을 배울 때는 분명 이해한 것 같지만, 조금만 시간이 지나면 머릿속에서 흐릿해지기 일쑤였습니다.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;em&gt;&amp;ldquo;이 환경에서는 왜 버퍼 오버플로우 페이로드가 정확한 주소에 안착하지 못했는가?&amp;rdquo;&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;&amp;ldquo;보안 완화 기법(ASLR, DEP, PIE 등)이 걸려 있을 때 이를 우회하거나 방어하는 원리는 무엇인가?&amp;rdquo;&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;&amp;ldquo;이 프로토콜은 어떤 위협 모델을 방어하기 위해 설계되었는가?&amp;rdquo;&lt;/em&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;이러한 질문들은 단순히 머릿속에 담아두는 것만으로는 온전히 내 지식이 되지 못했습니다.&lt;/p&gt;&#10;&lt;h3 class="heading-element" id="파인만-기법과-메타인지"&gt;&lt;span&gt;파인만 기법과 메타인지&lt;/span&gt;&#10; &lt;a href="#%ed%8c%8c%ec%9d%b8%eb%a7%8c-%ea%b8%b0%eb%b2%95%ea%b3%bc-%eb%a9%94%ed%83%80%ec%9d%b8%ec%a7%80" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&lt;div class="details admonition note open disabled"&gt;&#10; &lt;div class="details-summary admonition-title"&gt;&lt;i class="icon fa-solid fa-pencil" aria-hidden="true"&gt;&lt;/i&gt;&lt;br&gt;&lt;/div&gt;&lt;div class="details-content"&gt;&#10; &lt;div class="admonition-content"&gt;&lt;p&gt;&lt;strong&gt;&amp;ldquo;내가 아는 것을 남에게 명확하게 설명할 수 없다면, 나는 그것을 온전히 아는 것이 아니다.&amp;rdquo;&lt;/strong&gt;&lt;br&gt;&#10;노벨 물리학상 수상자 리처드 파인만이 강조한 배움의 본질입니다.&lt;/p&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;글을 쓴다는 것은 &lt;strong&gt;내가 무엇을 알고 무엇을 모르는지 냉정하게 확인하는 메타인지 훈련&lt;/strong&gt;입니다. 머릿속의 어설픈 직관을 타인이 읽고 검증할 수 있는 논리적 문장과 코드로 재구성하는 과정에서 비어 있던 개념의 구멍이 비로소 메워집니다.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 class="heading-element" id="-2-보안-전공자의-관점에서-본-블로그-아키텍처"&gt;&lt;span&gt;🛡️ 2. 보안 전공자의 관점에서 본 블로그 아키텍처&lt;/span&gt;&#10; &lt;a href="#-2-%eb%b3%b4%ec%95%88-%ec%a0%84%ea%b3%b5%ec%9e%90%ec%9d%98-%ea%b4%80%ec%a0%90%ec%97%90%ec%84%9c-%eb%b3%b8-%eb%b8%94%eb%a1%9c%ea%b7%b8-%ec%95%84%ed%82%a4%ed%85%8d%ec%b2%98" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&lt;p&gt;Velog, Tistory, Medium, Notion 등 편리한 플랫폼이 넘쳐나는 시대에, 굳이 정적 사이트 생성기(Hugo)와 글로벌 엣지(Cloudflare)를 조합해 블로그를 직접 만든 데에는 보안 전공자로서의 명확한 이유가 있습니다.&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;graph LR&#10; subgraph Traditional[&amp;#34;전통적인 동적 CMS (예: WordPress)&amp;#34;]&#10; User1[&amp;#34;방문자&amp;#34;] --&amp;gt; WebServer[&amp;#34;웹 서버 (Nginx/Apache)&amp;#34;]&#10; WebServer --&amp;gt; AppServer[&amp;#34;애플리케이션 (PHP/Node)&amp;#34;]&#10; AppServer --&amp;gt; DB[(&amp;#34;데이터베이스 (MySQL)&amp;#34;)]&#10; style Traditional fill:#ffebee,stroke:#c62828&#10; end&#10;&#10; subgraph StaticArchitecture[&amp;#34;DevLog 아키텍처 (Hugo &amp;#43; Cloudflare)&amp;#34;]&#10; Author[&amp;#34;작성자 (Markdown)&amp;#34;] --&amp;gt;|Git Push| Build[&amp;#34;빌드 자동화 (Cloudflare)&amp;#34;]&#10; Build --&amp;gt;|컴파일| Edge[&amp;#34;글로벌 엣지 CDN (정적 자산)&amp;#34;]&#10; User2[&amp;#34;방문자&amp;#34;] --&amp;gt; Edge&#10; style StaticArchitecture fill:#e8f5e9,stroke:#2e7d32&#10; end&lt;/code&gt;&lt;/pre&gt;&lt;h3 class="heading-element" id="-공격-표면attack-surface의-최소화"&gt;&lt;span&gt;① 공격 표면(Attack Surface)의 최소화&lt;/span&gt;&#10; &lt;a href="#-%ea%b3%b5%ea%b2%a9-%ed%91%9c%eb%a9%b4attack-surface%ec%9d%98-%ec%b5%9c%ec%86%8c%ed%99%94" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;동적 CMS의 취약성&lt;/strong&gt;: PHP 기반의 WordPress 같은 전통적인 동적 사이트는 웹 서버, 백엔드 런타임, 데이터베이스, 수많은 외부 플러그인을 동반합니다. 관리되지 않은 플러그인 하나로 인해 SQL Injection, 파일 업로드 취약점, 원격 코드 실행(RCE) 등의 공격 표면이 끊임없이 노출됩니다.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;정적 사이트의 본질적 안전성&lt;/strong&gt;: 반면 Hugo로 사전 컴파일된 정적 웹사이트는 순수한 HTML, CSS, JavaScript 파일만으로 구성됩니다. 실행할 백엔드 스크립트나 데이터베이스 자체가 존재하지 않으므로 &lt;strong&gt;서버 사이드 침해 사고의 가능성을 구조적으로 원천 차단&lt;/strong&gt;할 수 있습니다.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 class="heading-element" id="-데이터-주권과-영속성"&gt;&lt;span&gt;② 데이터 주권과 영속성&lt;/span&gt;&#10; &lt;a href="#-%eb%8d%b0%ec%9d%b4%ed%84%b0-%ec%a3%bc%ea%b6%8c%ea%b3%bc-%ec%98%81%ec%86%8d%ec%84%b1" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;모든 글을 로컬의 순수 Markdown(&lt;code&gt;.md&lt;/code&gt;) 파일로 작성하고 Git으로 버전 관리합니다. 상용 플랫폼의 서비스 종료나 정책 변경에 영향을 받지 않고, 언제든 다른 인프라로 100% 온전하게 이식할 수 있는 &lt;strong&gt;지식 자산의 영속성&lt;/strong&gt;을 확보했습니다.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 class="heading-element" id="-3-실제-구축-과정에서-마주친-트러블슈팅"&gt;&lt;span&gt;💡 3. 실제 구축 과정에서 마주친 트러블슈팅&lt;/span&gt;&#10; &lt;a href="#-3-%ec%8b%a4%ec%a0%9c-%ea%b5%ac%ec%b6%95-%ea%b3%bc%ec%a0%95%ec%97%90%ec%84%9c-%eb%a7%88%ec%a3%bc%ec%b9%9c-%ed%8a%b8%eb%9f%ac%eb%b8%94%ec%8a%88%ed%8c%85" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&lt;p&gt;이 블로그를 구축하고 Cloudflare에 배포하는 과정은 단순한 복사-붙여넣기가 아니라, 그 자체로 의미 있는 엔지니어링 실습이었습니다. 실제로 마주쳤던 대표적인 기술적 문제와 해결 과정을 기록해 둡니다.&lt;/p&gt;&#10;&lt;h3 class="heading-element" id="-hugo와-dart-sass의---embedded-프로토콜-통신-문제"&gt;&lt;span&gt;① Hugo와 Dart Sass의 &lt;code&gt;--embedded&lt;/code&gt; 프로토콜 통신 문제&lt;/span&gt;&#10; &lt;a href="#-hugo%ec%99%80-dart-sass%ec%9d%98---embedded-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c-%ed%86%b5%ec%8b%a0-%eb%ac%b8%ec%a0%9c" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;FixIt 테마는 UnoCSS와 함께 SCSS를 컴파일하기 위해 &lt;strong&gt;Dart Sass&lt;/strong&gt;를 필수로 요구합니다. 초기 Cloudflare 배포 시 빌드 명령어로 &lt;code&gt;npm install -g sass &amp;amp;&amp;amp; hugo&lt;/code&gt;를 실행했으나, 빌드가 &lt;code&gt;Start building sites …&lt;/code&gt; 상태에서 영원히 멈추는(Hang) 현상이 발생했습니다.&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;# 원인 분석&#10;npm으로 설치되는 `sass` 패키지는 순수 JavaScript 래퍼입니다.&#10;Hugo는 SCSS 컴파일 시 Dart Sass 프로세스와 양방향 파이프 통신(--embedded 프로토콜)을 수행하는데,&#10;순수 JS 버전은 이 프로세스 핸드셰이크를 처리하지 못해 Hugo가 무한 대기에 빠졌던 것입니다.&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;해결 방법&lt;/strong&gt;: &lt;code&gt;build.sh&lt;/code&gt; 스크립트를 작성하여, 빌드 컨테이너 환경에서 Hugo의 &lt;code&gt;--embedded&lt;/code&gt; 프로토콜을 온전히 지원하는 **공식 Dart Sass 독립 실행형 바이너리(Standalone Linux x64)**를 자동으로 감지 및 다운로드하도록 파이프라인을 구축했습니다.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 class="heading-element" id="-무상태stateless-cicd-환경에서의-git-submodule-관리"&gt;&lt;span&gt;② 무상태(Stateless) CI/CD 환경에서의 Git Submodule 관리&lt;/span&gt;&#10; &lt;a href="#-%eb%ac%b4%ec%83%81%ed%83%9cstateless-cicd-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-git-submodule-%ea%b4%80%eb%a6%ac" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h3&gt;&lt;p&gt;테마 소스를 메인 레포지토리에 직접 병합하지 않고 독립적인 &lt;code&gt;git submodule&lt;/code&gt;로 관리했습니다. 하지만 클라우드 빌드 환경에서는 서브모듈 디렉터리가 기본적으로 비어 있는 상태로 클론되기 때문에, 빌드 직전에 테마 의존성을 안전하게 당겨오는 과정이 필수적이었습니다.&lt;/p&gt;&#10;&lt;p&gt;이를 위해 빌드 스크립트 최상단에 서브모듈 동기화(&lt;code&gt;git submodule update --init --recursive&lt;/code&gt;)를 선언하고, Hugo Extended 판별 로직과 결합하여 &lt;strong&gt;어떤 무상태(Stateless) 컨테이너에서도 의존성 없이 단일 스크립트로 빌드가 완결&lt;/strong&gt;되도록 자동화했습니다.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 class="heading-element" id="-마무리하며"&gt;&lt;span&gt;🚀 마무리하며&lt;/span&gt;&#10; &lt;a href="#-%eb%a7%88%eb%ac%b4%eb%a6%ac%ed%95%98%eb%a9%b0" class="heading-mark"&gt;&lt;svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"&gt;&lt;path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&#10;&lt;/h2&gt;&lt;p&gt;&lt;em&gt;&amp;ldquo;배움에는 끝이 없고, 기록은 배움을 온전한 나의 것으로 만든다.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;대학 생활 동안 마주할 수많은 과제와 프로젝트, 보안 기술의 퍼즐들을 하나씩 풀어가며 이곳에 흔적을 남기겠습니다.&lt;/p&gt;&#10;&lt;p&gt;컴퓨터 시스템의 동작 원리와 정보보안에 관심 있는 분들과 함께 고민하고 성장하는 공간이 되길 바랍니다. 글을 읽으시면서 궁금한 점이나 피드백, 교정할 내용이 있다면 언제든 이메일(&lt;a href="mailto:dongsu8142@naver.com"&gt;dongsu8142@naver.com&lt;/a&gt;)이나 &lt;a href="https://github.com/dongsu8142" target="_blank" rel="external nofollow noopener noreferrer"&gt;GitHub&lt;i class="fa-solid fa-external-link-alt fa-xs ms-1 text-secondary" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;으로 편하게 말씀해 주세요.&lt;/p&gt;&#10;&lt;p&gt;방문해 주셔서 진심으로 감사드립니다!&lt;/p&gt;</description></item></channel></rss>