<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>box-archi 님의 블로그</title>
    <link>https://box-archi.tistory.com/</link>
    <description>box-archi 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Fri, 12 Jun 2026 04:28:15 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>box-archi</managingEditor>
    <image>
      <title>box-archi 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/8655470/attach/dad195d3c0824bf2be9e7dcd18328a4f</url>
      <link>https://box-archi.tistory.com</link>
    </image>
    <item>
      <title>제주 농지 취득 및 전용 방법 정리</title>
      <link>https://box-archi.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;제주 농지를 거래하거나 건축허가를 진행할 때는 단순히 &amp;ldquo;농지를 살 수 있느냐&amp;rdquo;만 보면 안 된다. 특히 해당 농지가 &lt;b&gt;상속받은 농지인지&lt;/b&gt;, &lt;b&gt;제3자에게 매도하려는 것인지&lt;/b&gt;, &lt;b&gt;건축허가나 농지전용을 먼저 받을 것인지&lt;/b&gt;에 따라 검토 방향이 달라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에서는 제주 농지를 기준으로 상속, 매매, 농지전용, 건축허가, 지목변경 문제를 순서대로 정리한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 상속으로 농지를 취득한 경우&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아버지 등 피상속인으로부터 농지를 &lt;b&gt;상속&lt;/b&gt;받은 경우에는 일반 매매와 달리 농지취득자격증명이 필요하지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 상속인은 농지를 취득할 때 다음과 같은 농취증(농지취득자격증명) 관련 서류를 제출하지 않아도 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;농지취득자격증명&lt;/li&gt;
&lt;li&gt;농업경영계획서&lt;/li&gt;
&lt;li&gt;주말&amp;middot;체험영농계획서&lt;/li&gt;
&lt;li&gt;그 밖의 농지취득자격 증명을 위한 서류&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 이것은 어디까지나 &lt;b&gt;상속으로 농지를 취득할 때의 문제&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속받은 농지를 건축용으로 사용하거나 대지화하려면, 별도로 농지전용허가, 개발행위허가, 건축허가 등의 절차를 검토해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속받은 농지에 대해서는 농지전용허가 시 위의 농취증 관련 서류를 제출할 필요가 없다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. 상속받은 농지를 제3자에게 매도하는 경우&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속인이 상속받은 농지를 제3자에게 매도하는 것 자체는 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 매매 당시 토지가 아직 농지 상태라면, 매수인은 원칙적으로 농지취득자격증명을 받아야 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 매수인이 도외 거주자인 경우에는 농지 취득 목적이 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검토해야 할 취득 목적은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실제 농업경영 목적&lt;/li&gt;
&lt;li&gt;주말&amp;middot;체험영농 목적&lt;/li&gt;
&lt;li&gt;농지전용 목적&lt;/li&gt;
&lt;li&gt;기타 농지법상 예외 사유&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중 어떤 구조에 해당하는지에 따라 농취증 가능성이 달라진다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. 도외 거주자가 제주 농지를 바로 사서 건축허가를 진행하는 경우&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도외 거주자가 제주 농지를 매수한 뒤 바로 건축허가나 농지전용허가를 신청하는 구조는 주의가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제주특별자치도 농지관리 조례에는 농업경영을 목적으로 농지를 취득한 자가 취득 후 일정 기간 내에 농지전용허가를 신청하는 경우, 별도의 심사기준에 따라 심사하도록 하는 규정이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 도외 거주자가 농지를 농업경영 목적으로 취득한 뒤 곧바로 건축허가나 농지전용을 신청하면, 처음부터 농업경영 목적이 아니라 개발 목적이 아니었는지 문제가 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 도외 거주자가 제주 농지를 바로 매수해서 건축허가를 진행하는 방식은 농취증, 농지전용, 개발행위허가 단계에서 모두 리스크가 생길 수 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. 상속농지와 제주 농지관리 조례상 3년 기준&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제주특별자치도 농지관리 조례에서 문제되는 부분은 &amp;ldquo;농업경영을 목적으로 농지를 취득한 자가 해당 농지를 취득한 후 3년 이내에 농지전용허가를 신청한 경우&amp;rdquo;에 관한 심사기준이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 상속으로 취득한 농지이고, 상속받은 지 3년이 지난 경우라면 해당 조항의 강화심사 대상에 바로 해당한다고 보기는 어려울 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속은 일반적인 농업경영 목적의 매매취득과 성격이 다르기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 3년이 지났다고 해서 농지전용허가가 자동으로 가능하다는 뜻은 아니다. 농지전용허가 자체의 일반 심사기준은 여전히 적용된다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. 상속인이 직접 농지전용을 신청하는 경우&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속인은 농지를 취득할 때 농지취득자격증명이 필요하지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 상속인이 직접 상속농지에 대해 농지전용이나 건축허가를 진행하는 경우, &lt;b&gt;농지취득자격을 증명하기 위한 서류&lt;/b&gt;는 쟁점이 되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 여기서 주의할 점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속인이 농취증 관련 서류를 제출하지 않아도 된다는 것이지, 농지전용허가 자체의 신청서류와 심사가 면제된다는 뜻은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 다음 두 가지는 구분해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분 판단&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;상속으로 농지를 취득하는 절차&lt;/td&gt;
&lt;td&gt;농취증 및 농취증 관련 서류 불필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;상속농지를 건축용으로 전용하는 절차&lt;/td&gt;
&lt;td&gt;농지전용허가, 개발행위허가, 건축허가 등 별도 검토 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면, 상속농지는 농취증 없이 취득할 수 있지만, 건축이나 대지화를 위해서는 농지전용허가 등 관련 인허가 절차를 별도로 진행해야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. 건축허가를 받은 뒤 매도하는 경우&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속인이 먼저 건축허가를 받은 뒤 제3자에게 매도하는 방식도 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 건축허가를 받았다고 해서 곧바로 지목이 대지로 바뀌는 것은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 농지의 지목이 대지로 변경되려면 다음 절차가 필요하다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&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;li&gt;공사 완료&lt;/li&gt;
&lt;li&gt;사용승인&lt;/li&gt;
&lt;li&gt;지목변경 신청&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 건축허가만 받은 상태에서는 토지대장상 지목이 여전히 전, 답, 과수원일 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 매수인은 농지취득자격증명 문제를 다시 검토해야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;7. 건축허가 후 매매 시 매수인의 농취증 문제&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;건축허가를 받은 뒤 매매하더라도, 매매 당시 토지가 아직 농지라면 매수인은 농지취득자격증명을 요구받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 농지전용허가나 건축허가상 농지전용협의가 이미 완료된 경우라면, 매수인은 일반적인 농업경영 목적이 아니라 &lt;b&gt;전용목적 취득&lt;/b&gt;으로 농취증을 신청하는 구조를 검토할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 계약 전에는 반드시 관할 행정청에 다음 내용을 확인해야 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&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;li&gt;매수인이 전용목적 취득으로 농취증을 받을 수 있는지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 건축허가가 났다고 해서 농취증 문제가 자동으로 사라지는 것은 아니라는 점이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;8. 지목변경은 언제 가능한가&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;건축허가를 받았다는 이유만으로 지목변경이 가능한 것은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지목변경은 보통 건축공사가 완료되고, 사용승인을 받은 뒤에 진행된다. 또는 관계 법령에 따른 토지 형질변경 공사가 준공되는 등 지목변경 사유가 발생해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;건축허가 완료: 지목변경 불가&lt;/li&gt;
&lt;li&gt;공사 완료 및 사용승인: 지목변경 가능성 발생&lt;/li&gt;
&lt;li&gt;지목변경 완료: 농지가 아닌 대지로 매매 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &amp;ldquo;건축허가 완료&amp;rdquo;와 &amp;ldquo;지목변경 가능&amp;rdquo;은 반드시 구분해야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;9. 실무상 안전한 거래 구조&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 안전한 방식은 상속인이 직접 농지전용허가와 건축허가를 진행하고, 가능하다면 사용승인과 지목변경까지 완료한 뒤 매도하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지목변경까지 완료되면 토지가 더 이상 농지 상태가 아니므로, 매수인의 농취증 문제도 상당 부분 정리될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 현실적으로 건축허가만 받은 상태에서 매도하려는 경우에는 계약서에 반드시 조건부 특약을 넣어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면 다음과 같은 내용이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 계약은 매수인이 본 토지에 관한 건축허가, 개발행위허가, 농지전용허가 또는 협의 등 관련 인허가의 명의변경 또는 지위승계를 관할 행정청으로부터 수리받는 것을 조건으로 한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 농취증 문제가 남아 있다면 다음 문구도 함께 검토해야 한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 토지가 소유권이전등기 시 농지취득자격증명 대상에 해당하는 경우, 매수인의 농지취득자격증명 발급을 본 계약의 조건으로 한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;10. 최종 정리&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속받은 농지는 상속 취득 당시 농지취득자격증명이 필요하지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 상속농지를 제3자에게 매도하거나 건축허가&amp;middot;농지전용을 진행할 때는 별도의 법적 검토가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 제주 농지는 농지전용과 개발행위 심사가 까다로울 수 있으므로, 단순히 &amp;ldquo;상속농지니까 자유롭게 전용 가능하다&amp;rdquo;거나 &amp;ldquo;건축허가를 받았으니 바로 대지처럼 팔 수 있다&amp;rdquo;고 판단하면 위험하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&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;li&gt;지목변경 전 매매라면 매수인의 농취증 문제가 남을 수 있다.&lt;/li&gt;
&lt;li&gt;도외 거주자가 농지를 바로 취득해 전용하려는 구조는 특히 주의해야 한다.&lt;/li&gt;
&lt;li&gt;계약 전 관할 행정청 확인과 조건부 특약이 필수다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 이 사안의 핵심은 &lt;b&gt;상속취득, 농지전용, 건축허가, 지목변경, 제3자 매매를 각각 분리해서 봐야 한다는 점&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상속으로 농지를 취득한 사실만으로 모든 절차가 면제되는 것은 아니고, 건축허가를 받았다고 해서 곧바로 대지처럼 거래할 수 있는 것도 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 실제 거래 전에는 해당 토지의 지목, 현황, 농업진흥지역 여부, 개발행위 가능성, 농지전용 가능성, 건축허가 조건, 지목변경 가능 시점, 매수인의 농취증 필요 여부를 관할 행정청에 반드시 확인하는 것이 안전하다.&lt;/p&gt;</description>
      <category>법규검토</category>
      <category>;농지전용</category>
      <category>농지</category>
      <category>농지매매</category>
      <category>농지취득증명</category>
      <category>농취증</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/15</guid>
      <comments>https://box-archi.tistory.com/15#entry15comment</comments>
      <pubDate>Thu, 28 May 2026 19:22:34 +0900</pubDate>
    </item>
    <item>
      <title>제주도지역 옥상 우수량 산출기 &amp;mdash; 개발 과정 및 산정 방법론</title>
      <link>https://box-archi.tistory.com/14</link>
      <description>&lt;h1&gt;개요&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 &lt;b&gt;제주특별자치도 하수도정비 기본계획&lt;/b&gt; 기반의 옥상 우수량 자동 산정 웹 앱을 개발한 과정과, 앱에 적용된 설계 방법론을 정리한 블로그 포스팅용 자료입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합리식(Rational Method) &amp;middot; 가중 유출계수 &amp;middot; 배관방식별 관경 개수 산정 &amp;middot; 벽면 우수 포함&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;1. 우수량 산정 이론&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;합리식 (Rational Method)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소규모 유역의 첨두유량을 산정하는 가장 기본적인 방법입니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;Q = (1/360) &amp;times; I &amp;times; &amp;Sigma;(Cᵢ &amp;times; Aᵢ) / 10,000   [m&amp;sup3;/s]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기호 의미 단위&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Q&lt;/td&gt;
&lt;td&gt;첨두유량&lt;/td&gt;
&lt;td&gt;m&amp;sup3;/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I&lt;/td&gt;
&lt;td&gt;강우강도 (Talbot형)&lt;/td&gt;
&lt;td&gt;mm/hr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cᵢ&lt;/td&gt;
&lt;td&gt;지붕 유형별 유출계수&lt;/td&gt;
&lt;td&gt;무차원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aᵢ&lt;/td&gt;
&lt;td&gt;지붕 유형별 면적&lt;/td&gt;
&lt;td&gt;㎡&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;강우강도식 &amp;mdash; 제주도 Talbot형&lt;/h2&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;I = a / (t + b)   [mm/hr]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설계빈도 계수 a 계수 b I (t=5분)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10년&lt;/td&gt;
&lt;td&gt;2,108&lt;/td&gt;
&lt;td&gt;13.0&lt;/td&gt;
&lt;td&gt;117.3 mm/hr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;30년 ★&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;2,916&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;12.0&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;171.5 mm/hr&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50년&lt;/td&gt;
&lt;td&gt;3,294&lt;/td&gt;
&lt;td&gt;11.5&lt;/td&gt;
&lt;td&gt;199.6 mm/hr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100년&lt;/td&gt;
&lt;td&gt;3,785&lt;/td&gt;
&lt;td&gt;11.2&lt;/td&gt;
&lt;td&gt;232.4 mm/hr&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;★ 일반 건축물 기본 적용 빈도. 제주도는 태풍 영향권이므로 최소 30년 권장.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;강우 지속시간 선정 기준&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옥상은 유역이 작아 유달시간이 매우 짧습니다. &lt;b&gt;합계 면적 기준으로 지속시간을 결정&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합계 면적 권장 지속시간&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;~ 500 ㎡&lt;/td&gt;
&lt;td&gt;&lt;b&gt;5분&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500 ~ 2,000 ㎡&lt;/td&gt;
&lt;td&gt;10분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2,000 ~ 5,000 ㎡&lt;/td&gt;
&lt;td&gt;15분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5,000 ㎡ ~&lt;/td&gt;
&lt;td&gt;30분&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. 지붕 유형별 유출계수&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복합 지붕 적용 시 가중 유출계수를 산정합니다.&lt;/p&gt;
&lt;pre class=&quot;dns&quot;&gt;&lt;code&gt;C_w = &amp;Sigma;(Cᵢ &amp;times; Aᵢ) / &amp;Sigma;Aᵢ
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지붕 유형 C값 적용 기준&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;콘크리트&amp;middot;우레탄 방수&lt;/td&gt;
&lt;td&gt;0.90&lt;/td&gt;
&lt;td&gt;일반 평지붕 방수층&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;아스팔트 시트 방수&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;td&gt;시트 방수 마감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;자갈층 처리&lt;/td&gt;
&lt;td&gt;0.75&lt;/td&gt;
&lt;td&gt;배수겸용 자갈 포설&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;녹화 경량형&lt;/td&gt;
&lt;td&gt;0.40&lt;/td&gt;
&lt;td&gt;토심 200mm 미만, 세덤류&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;녹화 중량형&lt;/td&gt;
&lt;td&gt;0.25&lt;/td&gt;
&lt;td&gt;토심 200mm 이상, 교목 식재&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;3. 상층 벽면 우수 산정&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고층 건물(예: 18층) 저층부 옥상정원의 경우 상층 외벽을 타고 내려오는 우수량을 별도 산정해야 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;적용 조건&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;건물 형태 벽면 우수 산정 필요 여부&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;상층부가 하층 옥상 안쪽으로 세트백&lt;/td&gt;
&lt;td&gt;✅ 반드시 산정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;상층부와 하층 외벽이 동일 선상&lt;/td&gt;
&lt;td&gt;✅ 일부 유입 고려&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;상층부가 하층보다 돌출&lt;/td&gt;
&lt;td&gt;❌ 지면으로 직접 낙하&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;산정 공식&lt;/h2&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;Aw_eff = H(벽면높이) &amp;times; P(둘레) &amp;times; 노출비율   [㎡]
Q_wall = (1/360) &amp;times; C_w &amp;times; I &amp;times; Aw_eff / 10,000
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노출 조건 노출비율&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1면 노출 (편측)&lt;/td&gt;
&lt;td&gt;0.25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2면 / 사방 균등&lt;/td&gt;
&lt;td&gt;0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3면 노출&lt;/td&gt;
&lt;td&gt;0.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;독립 타워형&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벽면 C값: 콘크리트&amp;middot;커튼월 0.80 / 벽돌&amp;middot;석재 0.65&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;4. 배관 방식별 산정 기준&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심 원칙&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Manning 경사 공식은 수평관에만 적용&lt;/b&gt;되며, 수직관은 별도 용량표(부분흐름 기준)를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배관 방식 경사 필요 적용 공식&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;수직 낙수관 (선홈통)&lt;/td&gt;
&lt;td&gt;❌ 불필요&lt;/td&gt;
&lt;td&gt;수직관 용량표 (만관 1/3 충만)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;꺾임 수직관&lt;/td&gt;
&lt;td&gt;❌ 불필요&lt;/td&gt;
&lt;td&gt;수직관과 동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;수평 경사관&lt;/td&gt;
&lt;td&gt;✅ 필요&lt;/td&gt;
&lt;td&gt;Manning 공식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;수평 연결관 + 수직관&lt;/td&gt;
&lt;td&gt;✅ 수평만&lt;/td&gt;
&lt;td&gt;구간별 별도 산정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;수직 낙수관 용량 (KDS 57 60 00)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만관의 약 1/3 충만 흐름 기준입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관경 용량 (L/s)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;phi; 75 mm&lt;/td&gt;
&lt;td&gt;3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;phi;100 mm&lt;/td&gt;
&lt;td&gt;6.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;phi;125 mm&lt;/td&gt;
&lt;td&gt;12.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;phi;150 mm&lt;/td&gt;
&lt;td&gt;19.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;phi;200 mm&lt;/td&gt;
&lt;td&gt;40.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;phi;250 mm&lt;/td&gt;
&lt;td&gt;73.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;phi;300 mm&lt;/td&gt;
&lt;td&gt;118.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Manning 공식 &amp;mdash; 수평관 유량&lt;/h2&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;Q = (1/n) &amp;middot; A &amp;middot; R^(2/3) &amp;middot; S^(1/2)   [m&amp;sup3;/s]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관 재질 조도계수 n&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PVC관&lt;/td&gt;
&lt;td&gt;0.010&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;주철관&lt;/td&gt;
&lt;td&gt;0.012&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;콘크리트관&lt;/td&gt;
&lt;td&gt;0.013&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;필요 개수 및 여유율 산정&lt;/h2&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;필요 개수 = &amp;lceil;Q_설계 / Q_1개&amp;rceil;   (올림 처리)
여유율(%) = (Q_총처리 &amp;minus; Q_설계) / Q_설계 &amp;times; 100
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소관경 다수 설치보다 대관경 1개가 시공성&amp;middot;유지관리 면에서 유리한 경우가 많습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;5. 앱 개발 및 배포&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기술 스택&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;FastAPI + Uvicorn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Vanilla JS (단일 HTML)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;배포 플랫폼&lt;/td&gt;
&lt;td&gt;Railway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;접근 제어&lt;/td&gt;
&lt;td&gt;HTTP Referer 헤더 기반 블로그 도메인 화이트리스트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;차트&lt;/td&gt;
&lt;td&gt;Chart.js&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;파일 구조&lt;/h2&gt;
&lt;pre class=&quot;axapta&quot;&gt;&lt;code&gt;jeju-runoff/
├── main.py            # FastAPI 서버 + 블로그 접근 제한 미들웨어
├── requirements.txt   # fastapi, uvicorn
├── railway.json       # Railway 배포 설정
├── README.md
└── static/
    └── index.html     # 계산기 앱 전체
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;블로그 접근 제한 구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ALLOWED_BLOG 환경변수에 허용 도메인을 설정하면 해당 블로그의 iframe에서만 앱이 동작합니다.&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;# Railway 환경변수 설정 예시
ALLOWED_BLOG = &quot;myblog.tistory.com&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속 경로 결과&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;블로그 iframe으로 접속&lt;/td&gt;
&lt;td&gt;✅ 앱 정상 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Railway URL 직접 접속&lt;/td&gt;
&lt;td&gt;  접근 차단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;다른 사이트 iframe&lt;/td&gt;
&lt;td&gt;  접근 차단&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;GitHub &amp;rarr; Railway 배포 순서&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;GitHub 레포 생성 후 git push&lt;/li&gt;
&lt;li&gt;Railway &amp;rarr; New Project &amp;rarr; Deploy from GitHub Repo&lt;/li&gt;
&lt;li&gt;환경변수 ALLOWED_BLOG = 본인 블로그 도메인 입력&lt;/li&gt;
&lt;li&gt;Settings &amp;rarr; Generate Domain &amp;rarr; URL 복사&lt;/li&gt;
&lt;li&gt;블로그 포스팅에 &amp;lt;iframe src=&quot;배포URL&quot; ...&amp;gt; 삽입&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;블로그 임베드 코드&lt;/h2&gt;
&lt;pre class=&quot;&quot;&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;6. 적용 기준 및 참고 법령&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기준 내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;제주도 하수도정비 기본계획&lt;/td&gt;
&lt;td&gt;Talbot형 강우강도식 계수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KDS 57 60 00&lt;/td&gt;
&lt;td&gt;건축물 급배수 설비 설계기준 (수직관 용량)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;건축물의 설비기준 등에 관한 규칙&lt;/td&gt;
&lt;td&gt;배수설비 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;하수도법 시행령&lt;/td&gt;
&lt;td&gt;우수유출량 산정 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 앱은 설계 참고용이며, 실제 설계 시 최신 기준 및 전문가 검토를 통해 확정하시기 바랍니다.&lt;br /&gt;본 블러그 &quot;APP_설계&quot; 카테고리 참고 &lt;a href=&quot;https://box-archi.tistory.com/13&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://box-archi.tistory.com/13&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>클로드(claude)/클로드코드 사용일지</category>
      <category>어플</category>
      <category>우수량</category>
      <category>작업</category>
      <category>클로드코드</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/14</guid>
      <comments>https://box-archi.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 27 May 2026 01:14:49 +0900</pubDate>
    </item>
    <item>
      <title>옥상(중층)지붕 우수량 산출</title>
      <link>https://box-archi.tistory.com/13</link>
      <description>&lt;p&gt;&lt;iframe src=&quot;https://jeju-runoff-production.up.railway.app&quot; width=&quot;100%&quot; height=&quot;800&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;title&gt;제주도 옥상 우수량 산정기 — 사용 안내&lt;/title&gt;
&lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;&gt;
&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700&amp;family=JetBrains+Mono:wght@400;500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;style&gt;
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

  :root {
    --green:   #085041;
    --green-l: #1D9E75;
    --green-bg:#E1F5EE;
    --blue:    #185FA5;
    --blue-bg: #E6F1FB;
    --amber:   #854F0B;
    --amber-bg:#FAEEDA;
    --text:    #1a1a1a;
    --muted:   #666;
    --border:  #e8e8e8;
    --bg:      #F5F6F3;
    --card:    #ffffff;
  }

  body {
    font-family: 'Noto Sans KR', sans-serif;
    background: var(--bg);
    color: var(--text);
    line-height: 1.7;
    font-size: 14px;
  }

  /* ── 헤더 ── */
  .hero {
    background: var(--green);
    color: #fff;
    padding: 40px 24px 36px;
    text-align: center;
    position: relative;
    overflow: hidden;
  }
  .hero::before {
    content: '';
    position: absolute; inset: 0;
    background: repeating-linear-gradient(
      45deg,
      transparent, transparent 30px,
      rgba(255,255,255,.03) 30px, rgba(255,255,255,.03) 31px
    );
  }
  .hero-badge {
    display: inline-block;
    background: rgba(255,255,255,.15);
    border: 1px solid rgba(255,255,255,.25);
    border-radius: 20px;
    padding: 4px 14px;
    font-size: 11px;
    letter-spacing: .06em;
    margin-bottom: 14px;
    color: #9FE1CB;
  }
  .hero h1 {
    font-size: 22px;
    font-weight: 700;
    margin-bottom: 8px;
    line-height: 1.4;
  }
  .hero p {
    font-size: 13px;
    opacity: .75;
    max-width: 480px;
    margin: 0 auto;
  }

  /* ── 공통 레이아웃 ── */
  .wrap { max-width: 700px; margin: 0 auto; padding: 28px 20px 48px; }

  /* ── 섹션 타이틀 ── */
  .sec-title {
    font-size: 13px;
    font-weight: 700;
    color: var(--green);
    letter-spacing: .04em;
    text-transform: uppercase;
    margin: 28px 0 14px;
    display: flex;
    align-items: center;
    gap: 8px;
  }
  .sec-title::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--border);
  }

  /* ── 카드 ── */
  .card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 18px 20px;
    margin-bottom: 12px;
  }

  /* ── 스텝 ── */
  .steps { display: flex; flex-direction: column; gap: 10px; }
  .step {
    display: flex;
    gap: 14px;
    align-items: flex-start;
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 12px;
    padding: 16px 18px;
  }
  .step-num {
    flex-shrink: 0;
    width: 28px; height: 28px;
    background: var(--green);
    color: #fff;
    border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    font-size: 12px;
    font-weight: 700;
  }
  .step-body h3 {
    font-size: 14px;
    font-weight: 700;
    margin-bottom: 4px;
    color: var(--text);
  }
  .step-body p {
    font-size: 13px;
    color: var(--muted);
    line-height: 1.6;
  }
  .step-body .tip {
    display: inline-block;
    margin-top: 6px;
    background: var(--green-bg);
    color: var(--green);
    font-size: 11px;
    border-radius: 6px;
    padding: 3px 9px;
  }
  .step-body .tip.blue { background: var(--blue-bg); color: var(--blue); }
  .step-body .tip.amber { background: var(--amber-bg); color: var(--amber); }

  /* ── 파라미터 표 ── */
  table.param {
    width: 100%;
    border-collapse: collapse;
    font-size: 12.5px;
  }
  table.param th {
    background: #F0F3F0;
    color: var(--muted);
    font-weight: 500;
    padding: 7px 10px;
    text-align: left;
    border-bottom: 1px solid var(--border);
    font-size: 11px;
    letter-spacing: .03em;
  }
  table.param td {
    padding: 8px 10px;
    border-bottom: 1px solid #f5f5f5;
    vertical-align: top;
  }
  table.param tr:last-child td { border-bottom: none; }
  table.param td:first-child { font-weight: 600; color: var(--green); white-space: nowrap; }
  table.param td:nth-child(2) { color: var(--muted); }
  .rec-badge {
    display: inline-block;
    background: var(--green-bg);
    color: var(--green);
    border-radius: 4px;
    padding: 1px 6px;
    font-size: 10px;
    font-weight: 600;
    margin-left: 4px;
  }

  /* ── 파이프 방식 카드 그리드 ── */
  .pipe-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .pipe-card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 14px 16px;
  }
  .pipe-card h4 {
    font-size: 13px;
    font-weight: 700;
    margin-bottom: 4px;
    display: flex;
    align-items: center;
    gap: 6px;
  }
  .pipe-card p { font-size: 12px; color: var(--muted); line-height: 1.5; }
  .pipe-card .ptag {
    display: inline-block;
    font-size: 10px;
    border-radius: 4px;
    padding: 1px 6px;
    margin-top: 6px;
    font-weight: 600;
  }
  .ptag-v { background: var(--green-bg); color: var(--green); }
  .ptag-h { background: var(--amber-bg); color: var(--amber); }
  .ptag-m { background: var(--blue-bg); color: var(--blue); }

  /* ── 공식 박스 ── */
  .formula-row {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-top: 4px;
  }
  .formula-item {
    background: #F8FAF8;
    border: 1px solid #e0e8e0;
    border-radius: 8px;
    padding: 10px 14px;
  }
  .formula-label { font-size: 10px; color: var(--muted); margin-bottom: 4px; }
  .formula-eq {
    font-family: 'JetBrains Mono', monospace;
    font-size: 12.5px;
    color: var(--text);
    line-height: 1.5;
  }

  /* ── 결과 패널 예시 ── */
  .result-preview {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 8px;
    margin-top: 8px;
  }
  .rp-card {
    background: #F8FAF8;
    border-radius: 8px;
    padding: 10px 12px;
    text-align: center;
  }
  .rp-card .rp-l { font-size: 10px; color: var(--muted); margin-bottom: 4px; }
  .rp-card .rp-v { font-size: 17px; font-weight: 700; color: var(--green); }
  .rp-card .rp-u { font-size: 10px; color: var(--muted); }

  /* ── 주의사항 ── */
  .notice {
    background: var(--amber-bg);
    border-left: 3px solid #D97706;
    border-radius: 0 8px 8px 0;
    padding: 12px 16px;
    font-size: 12.5px;
    color: #6B3A0A;
    line-height: 1.65;
    margin-top: 8px;
  }
  .notice strong { color: #854F0B; }

  /* ── 푸터 ── */
  .footer {
    text-align: center;
    padding: 20px;
    font-size: 11.5px;
    color: #bbb;
    border-top: 1px solid var(--border);
    margin-top: 12px;
  }

  @media (max-width: 520px) {
    .pipe-grid { grid-template-columns: 1fr; }
    .result-preview { grid-template-columns: 1fr 1fr; }
    .hero h1 { font-size: 18px; }
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero&quot;&gt;
  &lt;div class=&quot;hero-badge&quot;&gt;  JEJU RUNOFF CALCULATOR&lt;/div&gt;
  &lt;h1&gt;제주도 옥상 우수량 산정기&lt;br&gt;사용 안내&lt;/h1&gt;
  &lt;p&gt;합리식 · 지붕유형별 면적 · 벽면 우수 · 배관방식별 관경 개수 산정&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;wrap&quot;&gt;

  &lt;!-- 개요 --&gt;
  &lt;div class=&quot;sec-title&quot;&gt;앱 개요&lt;/div&gt;
  &lt;div class=&quot;card&quot;&gt;
    &lt;p style=&quot;color:var(--muted);font-size:13px;line-height:1.8;&quot;&gt;
      이 앱은 &lt;strong&gt;제주특별자치도 하수도정비 기본계획의 Talbot형 강우강도식&lt;/strong&gt;과
      &lt;strong&gt;합리식(Rational Method)&lt;/strong&gt;을 이용해 옥상 첨두유량을 자동 계산합니다.
      지붕 유형별 면적을 개별 입력하면 가중 유출계수가 자동으로 산정되고,
      배관 방식에 따라 필요한 우수관 관경과 개수까지 한 번에 확인할 수 있습니다.
    &lt;/p&gt;
    &lt;div style=&quot;display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;&quot;&gt;
      &lt;span style=&quot;background:var(--green-bg);color:var(--green);border-radius:6px;padding:3px 10px;font-size:11px;font-weight:600;&quot;&gt;합리식&lt;/span&gt;
      &lt;span style=&quot;background:var(--green-bg);color:var(--green);border-radius:6px;padding:3px 10px;font-size:11px;font-weight:600;&quot;&gt;제주 강우강도식&lt;/span&gt;
      &lt;span style=&quot;background:var(--blue-bg);color:var(--blue);border-radius:6px;padding:3px 10px;font-size:11px;font-weight:600;&quot;&gt;벽면 우수 산정&lt;/span&gt;
      &lt;span style=&quot;background:var(--amber-bg);color:var(--amber);border-radius:6px;padding:3px 10px;font-size:11px;font-weight:600;&quot;&gt;배관방식별 개수 산정&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 사용 순서 --&gt;
  &lt;div class=&quot;sec-title&quot;&gt;사용 순서&lt;/div&gt;
  &lt;div class=&quot;steps&quot;&gt;

    &lt;div class=&quot;step&quot;&gt;
      &lt;div class=&quot;step-num&quot;&gt;1&lt;/div&gt;
      &lt;div class=&quot;step-body&quot;&gt;
        &lt;h3&gt;지붕 유형별 면적 입력&lt;/h3&gt;
        &lt;p&gt;콘크리트 방수, 아스팔트, 자갈층, 녹화 경량·중량형 중 해당하는 유형의 면적을 ㎡ 단위로 입력합니다. 소수점 둘째 자리까지 입력 가능하며 해당 없는 항목은 빈칸으로 두면 됩니다.&lt;/p&gt;
        &lt;span class=&quot;tip&quot;&gt;여러 유형을 동시에 입력 → 가중 유출계수 자동 계산&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;step&quot;&gt;
      &lt;div class=&quot;step-num&quot;&gt;2&lt;/div&gt;
      &lt;div class=&quot;step-body&quot;&gt;
        &lt;h3&gt;상층 벽면 우수 포함 여부 선택 (선택)&lt;/h3&gt;
        &lt;p&gt;18층 건물 2층 옥상정원처럼 상층 외벽 우수가 유입되는 경우 토글을 켜고 벽면 높이, 옥상에 면한 벽 둘레, 노출 방향을 입력합니다.&lt;/p&gt;
        &lt;span class=&quot;tip blue&quot;&gt;수식: Aw = 높이 × 둘레 × 노출비율&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;step&quot;&gt;
      &lt;div class=&quot;step-num&quot;&gt;3&lt;/div&gt;
      &lt;div class=&quot;step-body&quot;&gt;
        &lt;h3&gt;건물 용도 선택 → 설계빈도 자동 결정&lt;/h3&gt;
        &lt;p&gt;소규모 주거(10년) / 일반 건축물(30년) / 공공·상업시설(50년) / 특수 지하(100년) 중 선택합니다.&lt;/p&gt;
        &lt;span class=&quot;tip&quot;&gt;제주도 일반 건축물 기본값: 30년 빈도&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;step&quot;&gt;
      &lt;div class=&quot;step-num&quot;&gt;4&lt;/div&gt;
      &lt;div class=&quot;step-body&quot;&gt;
        &lt;h3&gt;강우 지속시간 확인&lt;/h3&gt;
        &lt;p&gt;합계 면적을 기준으로 적정 지속시간이 자동 추천됩니다. 필요 시 직접 변경 가능합니다.&lt;/p&gt;
        &lt;span class=&quot;tip&quot;&gt;~500㎡ → 5분 / 500~2,000㎡ → 10분 / 2,000~5,000㎡ → 15분&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;step&quot;&gt;
      &lt;div class=&quot;step-num&quot;&gt;5&lt;/div&gt;
      &lt;div class=&quot;step-body&quot;&gt;
        &lt;h3&gt;배관 방식 선택 → 관경·개수 확인&lt;/h3&gt;
        &lt;p&gt;수직 낙수관 / 수평 경사관 / 혼합(수평+수직) / 꺾임관 중 선택하면 관경별 필요 개수와 여유율이 표로 표시됩니다. 원하는 관경을 클릭하면 해당 기준으로 요약 정보가 갱신됩니다.&lt;/p&gt;
        &lt;span class=&quot;tip amber&quot;&gt;수평관: 재질·경사 추가 선택 필요&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;

  &lt;/div&gt;

  &lt;!-- 주요 파라미터 --&gt;
  &lt;div class=&quot;sec-title&quot;&gt;주요 파라미터&lt;/div&gt;
  &lt;div class=&quot;card&quot; style=&quot;padding:0;overflow:hidden;&quot;&gt;
    &lt;table class=&quot;param&quot;&gt;
      &lt;thead&gt;&lt;tr&gt;&lt;th&gt;파라미터&lt;/th&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;콘크리트 방수 C&lt;/td&gt;&lt;td&gt;0.90&lt;/td&gt;&lt;td&gt;일반 평지붕 방수층 기준&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;녹화 경량형 C&lt;/td&gt;&lt;td&gt;0.40&lt;/td&gt;&lt;td&gt;토심 200mm 미만, 세덤류&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;녹화 중량형 C&lt;/td&gt;&lt;td&gt;0.25&lt;/td&gt;&lt;td&gt;토심 200mm 이상, 교목 식재&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;설계빈도&lt;/td&gt;&lt;td&gt;30년 &lt;span class=&quot;rec-badge&quot;&gt;기본&lt;/span&gt;&lt;/td&gt;&lt;td&gt;일반 건축물 기준, 제주 권장&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;벽면 노출비율&lt;/td&gt;&lt;td&gt;0.25~1.00&lt;/td&gt;&lt;td&gt;1면=0.25, 사방균등=0.50, 독립타워=1.00&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;Manning n (PVC)&lt;/td&gt;&lt;td&gt;0.010&lt;/td&gt;&lt;td&gt;주철관 0.012, 콘크리트관 0.013&lt;/td&gt;&lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;

  &lt;!-- 배관 방식 --&gt;
  &lt;div class=&quot;sec-title&quot;&gt;배관 방식별 산정 기준&lt;/div&gt;
  &lt;div class=&quot;pipe-grid&quot;&gt;
    &lt;div class=&quot;pipe-card&quot;&gt;
      &lt;h4&gt;↓ 수직 낙수관&lt;/h4&gt;
      &lt;p&gt;선홈통·루프 드레인. 중력 낙하 방식으로 경사 불필요. KDS 57 60 00 만관 1/3 충만 기준 용량 적용.&lt;/p&gt;
      &lt;div&gt;&lt;span class=&quot;ptag ptag-v&quot;&gt;경사 불필요&lt;/span&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&quot;pipe-card&quot;&gt;
      &lt;h4&gt;↗ 꺾임 수직관&lt;/h4&gt;
      &lt;p&gt;중간 오프셋·엘보 삽입으로 유속 충격 완화. 수직 낙수관과 동일 용량 기준 적용.&lt;/p&gt;
      &lt;div&gt;&lt;span class=&quot;ptag ptag-v&quot;&gt;경사 불필요&lt;/span&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&quot;pipe-card&quot;&gt;
      &lt;h4&gt;→ 수평 경사관&lt;/h4&gt;
      &lt;p&gt;오배수관 방식. Manning 공식 적용. 재질(PVC·주철·콘크리트)과 경사(1/200~1/33) 선택 필요.&lt;/p&gt;
      &lt;div&gt;&lt;span class=&quot;ptag ptag-h&quot;&gt;경사·재질 선택&lt;/span&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&quot;pipe-card&quot;&gt;
      &lt;h4&gt;↔↓ 수평+수직 혼합&lt;/h4&gt;
      &lt;p&gt;루프 드레인 → 수평 연결관(Manning) → 수직 낙수관(용량표). 연결관 ≤ 수직관 관경 권장.&lt;/p&gt;
      &lt;div&gt;&lt;span class=&quot;ptag ptag-m&quot;&gt;구간별 별도 산정&lt;/span&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 계산 공식 --&gt;
  &lt;div class=&quot;sec-title&quot;&gt;적용 공식 요약&lt;/div&gt;
  &lt;div class=&quot;card&quot;&gt;
    &lt;div class=&quot;formula-row&quot;&gt;
      &lt;div class=&quot;formula-item&quot;&gt;
        &lt;div class=&quot;formula-label&quot;&gt;강우강도식 (제주도 Talbot형)&lt;/div&gt;
        &lt;div class=&quot;formula-eq&quot;&gt;I = a / (t + b)　[mm/hr]
예) 30년 빈도 t=5분 → I = 2916 / (5 + 12.0) = 171.5 mm/hr&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;formula-item&quot;&gt;
        &lt;div class=&quot;formula-label&quot;&gt;합리식 — 첨두유량 산정&lt;/div&gt;
        &lt;div class=&quot;formula-eq&quot;&gt;Q = (1/360) × I × Σ(Cᵢ × Aᵢ) / 10,000　[m³/s]&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;formula-item&quot;&gt;
        &lt;div class=&quot;formula-label&quot;&gt;벽면 유효 집수면적&lt;/div&gt;
        &lt;div class=&quot;formula-eq&quot;&gt;Aw = H(벽면높이) × P(둘레) × 노출비율　[㎡]&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class=&quot;formula-item&quot;&gt;
        &lt;div class=&quot;formula-label&quot;&gt;Manning 공식 — 수평관 유량&lt;/div&gt;
        &lt;div class=&quot;formula-eq&quot;&gt;Q = (1/n) · A · R^(2/3) · S^(1/2)　[m³/s]&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- 결과 예시 --&gt;
  &lt;div class=&quot;sec-title&quot;&gt;결과 화면 예시&lt;/div&gt;
  &lt;div class=&quot;card&quot;&gt;
    &lt;p style=&quot;font-size:12px;color:var(--muted);margin-bottom:8px;&quot;&gt;콘크리트 방수 500㎡, 30년 빈도, 5분 지속, 수직 낙수관 선택 시&lt;/p&gt;
    &lt;div class=&quot;result-preview&quot;&gt;
      &lt;div class=&quot;rp-card&quot;&gt;&lt;div class=&quot;rp-l&quot;&gt;첨두유량 Q&lt;/div&gt;&lt;div class=&quot;rp-v&quot;&gt;0.0215&lt;/div&gt;&lt;div class=&quot;rp-u&quot;&gt;m³/s&lt;/div&gt;&lt;/div&gt;
      &lt;div class=&quot;rp-card&quot;&gt;&lt;div class=&quot;rp-l&quot;&gt;첨두유량 Q&lt;/div&gt;&lt;div class=&quot;rp-v&quot;&gt;21.44&lt;/div&gt;&lt;div class=&quot;rp-u&quot;&gt;L/s&lt;/div&gt;&lt;/div&gt;
      &lt;div class=&quot;rp-card&quot;&gt;&lt;div class=&quot;rp-l&quot;&gt;강우강도 I&lt;/div&gt;&lt;div class=&quot;rp-v&quot;&gt;171.5&lt;/div&gt;&lt;div class=&quot;rp-u&quot;&gt;mm/hr&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;p style=&quot;font-size:12px;color:var(--muted);margin-top:10px;&quot;&gt;→ φ150mm 수직관 1개(19.0 L/s) 부족 → &lt;strong style=&quot;color:var(--green);&quot;&gt;φ200mm 1개(40.0 L/s)&lt;/strong&gt; 선택 시 여유율 +86.5%&lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- 주의사항 --&gt;
  &lt;div class=&quot;sec-title&quot;&gt;주의사항&lt;/div&gt;
  &lt;div class=&quot;notice&quot;&gt;
    &lt;strong&gt;⚠ 본 앱은 설계 참고용입니다.&lt;/strong&gt;&lt;br&gt;
    · 강우강도 계수는 제주특별자치도 하수도정비 기본계획 기준이며, 실제 설계 시 최신 기본계획 수치를 반드시 확인하세요.&lt;br&gt;
    · 수직관 용량은 KDS 57 60 00 기준 만관 약 1/3 충만 흐름 기준입니다.&lt;br&gt;
    · 수평관 Manning 공식은 만관(full flow) 기준으로, 실제 설치 조건에 따라 수리계산 검증이 필요합니다.&lt;br&gt;
    · 최종 설계는 관련 법령 및 전문가 검토를 통해 확정하시기 바랍니다.
  &lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;footer&quot;&gt;
  제주도 옥상 우수량 산정기 · 건축사사무소 BOX&lt;br&gt;
  합리식 · 제주도 하수도정비 기본계획 · KDS 57 60 00
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</description>
      <category>APP_설계</category>
      <category>건축</category>
      <category>옥상</category>
      <category>우수량</category>
      <category>중층</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/13</guid>
      <comments>https://box-archi.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 27 May 2026 00:19:06 +0900</pubDate>
    </item>
    <item>
      <title> ️ 시리로 Claude 음성 비서 만들기</title>
      <link>https://box-archi.tistory.com/10</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이폰 단축어 앱과 Claude API를 연동해서 &quot;헤이 시리&quot; 한 마디로 Claude와 음성 대화하는 방법을 정리했습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  준비물&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;iPhone (iOS 16 이상)&lt;/li&gt;
&lt;li&gt;Claude 앱 설치&lt;/li&gt;
&lt;li&gt;Anthropic API 키 (&lt;a href=&quot;http://console.anthropic.com&quot;&gt;console.anthropic.com&lt;/a&gt; 에서 발급)&lt;/li&gt;
&lt;li&gt;API 크레딧 (최소 $5 충전 권장)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  1단계 &amp;mdash; API 키 발급&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://console.anthropic.com&quot;&gt;console.anthropic.com&lt;/a&gt; 접속&lt;/li&gt;
&lt;li&gt;구글 계정으로 회원가입 또는 로그인&lt;/li&gt;
&lt;li&gt;좌측 메뉴 &lt;b&gt;API Keys&lt;/b&gt; 클릭&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Create Key&lt;/b&gt; 버튼으로 새 키 생성&lt;/li&gt;
&lt;li&gt;생성된 키 복사해서 안전한 곳에 저장 (다시 볼 수 없음)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Plans &amp;amp; Billing&lt;/b&gt;에서 크레딧 충전 (최소 $5)&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⚠️ API 키는 절대 외부에 공유하지 마세요. 채팅창에 붙여넣지 마세요.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⚙️ 2단계 &amp;mdash; 단축어 앱 설정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;새 단축어 만들기&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;단축어 앱&lt;/b&gt; 열기&lt;/li&gt;
&lt;li&gt;우상단 &lt;b&gt;+&lt;/b&gt; 버튼으로 새 단축어 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;액션 1 &amp;mdash; 텍스트 받아쓰기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동작 검색에서 &lt;b&gt;&quot;텍스트 받아쓰기&quot;&lt;/b&gt; 추가&lt;/li&gt;
&lt;li&gt;언어: 한국어(대한민국)&lt;/li&gt;
&lt;li&gt;듣기 중단: 정지 후&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;액션 2 &amp;mdash; URL 콘텐츠 가져오기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동작 검색에서 &lt;b&gt;&quot;URL 콘텐츠 가져오기&quot;&lt;/b&gt; 추가&lt;/li&gt;
&lt;li&gt;URL: &lt;a href=&quot;https://api.anthropic.com/v1/messages&quot;&gt;https://api.anthropic.com/v1/messages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;메소드: &lt;b&gt;POST&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;헤더 3개 추가:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키 값&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;x-api-key&lt;/td&gt;
&lt;td&gt;발급받은 API 키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;anthropic-version&lt;/td&gt;
&lt;td&gt;2023-06-01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;content-type&lt;/td&gt;
&lt;td&gt;application/json&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;본문 요청 &amp;mdash; JSON 필드 추가:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키 값 타입&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;model&lt;/td&gt;
&lt;td&gt;claude-sonnet-4-5-20250929&lt;/td&gt;
&lt;td&gt;텍스트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;max_tokens&lt;/td&gt;
&lt;td&gt;1024&lt;/td&gt;
&lt;td&gt;&lt;b&gt;숫자&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;system&lt;/td&gt;
&lt;td&gt;당신은 음성 비서입니다. 짧고 자연스럽게 한국어 구어체로 대답하세요. 마크다운 기호나 특수문자 없이 말하듯이 답변하세요.&lt;/td&gt;
&lt;td&gt;텍스트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;messages&lt;/td&gt;
&lt;td&gt;배열 &amp;rarr; 딕셔너리 &amp;rarr; role: user / content: 받아쓰기한 텍스트&lt;/td&gt;
&lt;td&gt;배열&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⚠️ max_tokens는 반드시 &lt;b&gt;숫자 타입&lt;/b&gt;으로 설정해야 합니다. 텍스트로 입력하면 오류 발생.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;액션 3 &amp;mdash; 딕셔너리 값 가져오기 (2번 중첩)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째: URL 콘텐츠에서 content 키 가져오기&lt;/li&gt;
&lt;li&gt;두 번째: 위 결과에서 text 키 가져오기&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;액션 4 &amp;mdash; 텍스트 말하기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앞 단계 결과(사전 값)를 말하기로 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  3단계 &amp;mdash; 더 간단한 방법 (Claude 앱 공식 연동)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iPhone에 Claude 앱이 설치되어 있다면 훨씬 간단하게 설정 가능합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;단축어 앱에서 &lt;b&gt;+&lt;/b&gt; 버튼으로 새 단축어 생성&lt;/li&gt;
&lt;li&gt;동작 검색에서 &lt;b&gt;&quot;Claude&quot;&lt;/b&gt; 검색&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&quot;음성 대화 시작&quot;&lt;/b&gt; 선택&lt;/li&gt;
&lt;li&gt;단축어 이름 저장 (예: AI 또는 어시스턴트)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 &lt;b&gt;&quot;헤이 시리, AI&quot;&lt;/b&gt; 한 마디로 Claude와 바로 음성 대화가 시작됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; ️ 트러블슈팅&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류 메시지 원인 해결 방법&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;credit balance is too low&lt;/td&gt;
&lt;td&gt;크레딧 부족&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://console.anthropic.com&quot;&gt;console.anthropic.com&lt;/a&gt;에서 충전&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;max_tokens: Input should be a valid integer&lt;/td&gt;
&lt;td&gt;숫자 타입 오류&lt;/td&gt;
&lt;td&gt;max_tokens를 숫자 타입으로 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;model: not found&lt;/td&gt;
&lt;td&gt;모델명 오류&lt;/td&gt;
&lt;td&gt;claude-sonnet-4-5-20250929 정확히 입력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;듣기만 하고 응답 없음&lt;/td&gt;
&lt;td&gt;변수 연결 오류&lt;/td&gt;
&lt;td&gt;messages의 content에 받아쓰기한 텍스트 변수 연결 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;✅ 완성 후 사용법&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&quot;헤이 시리, [단축어 이름] 실행해줘&quot;&lt;/b&gt; &amp;rarr; 음성 질문 &amp;rarr; Claude 답변&lt;/li&gt;
&lt;li&gt;홈 화면에 아이콘 추가해서 탭으로도 실행 가능&lt;/li&gt;
&lt;li&gt;설정 &amp;rarr; 손쉬운 사용 &amp;rarr; 뒤로 탭에 연결하면 폰 뒷면 두드려서 실행 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작성일: 2026년 5월 | 참고: Anthropic API Docs&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단축어 링크 필요하신분 참고하세요~! ---- ios에서만 작동됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.icloud.com/shortcuts/57345763121c46659afcea4cdd43cf46&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.icloud.com/shortcuts/57345763121c46659afcea4cdd43cf46&lt;/a&gt;&lt;/p&gt;</description>
      <category>클로드(claude)/클로드코드 사용일지</category>
      <category>단축어</category>
      <category>시리</category>
      <category>아이폰</category>
      <category>클로드</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/10</guid>
      <comments>https://box-archi.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 18 May 2026 19:49:24 +0900</pubDate>
    </item>
    <item>
      <title>브래딩의 시작 &amp;quot;로고&amp;quot;-1</title>
      <link>https://box-archi.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 사업자의 이름을 만드는 과정은 무척이나 힘들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;그리고(&amp;amp;)&quot;에서 시작된 작명은 아들과 딸의 이름을 줄인 &quot;슈샤&quot; 이건 너무 빵집느낌이라...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭔가 하나가 빠져 있어 보여 다시 고민을 하기 시작했고 이름의 성인 &quot;박&quot;씨와 상자의 중의적인 이름인 &quot;BOX&quot;로 결정한듯 했지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭔가 또 아쉬워, 이때부터 AI도구(LLM)를 사용하여&amp;nbsp; 많은 네이밍을 했지만 이것 역시 마음에 들지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, 구관이 명관인지라 최종적으로 &quot;BOX&quot;라는 이름을 택했고 시대에 맞춰 플랫폼화에 중점을 두어&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;BOX_Archi&quot;,&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;BOX_Book&quot;,&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;BOX_DevAI&quot; 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업의 경계가 사라진 지금, 다양한 확장성을 포괄할 수 있는 부분으로 선택하게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 로고 디자인을 해봐야지 하고 '덕테이프'로 핫한 chatGPT를 사용하여 간단한 스케치를 통하여 제작을 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3e6a2a63-d8d6-4ec7-a23e-173f21a9e1f8.png&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;1122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYTJZ8/dJMcacCXwoE/Usuq0nN8FIHMNY8tbEQaq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYTJZ8/dJMcacCXwoE/Usuq0nN8FIHMNY8tbEQaq0/img.png&quot; data-alt=&quot;최초 디자인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYTJZ8/dJMcacCXwoE/Usuq0nN8FIHMNY8tbEQaq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYTJZ8%2FdJMcacCXwoE%2FUsuq0nN8FIHMNY8tbEQaq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1402&quot; height=&quot;1122&quot; data-filename=&quot;3e6a2a63-d8d6-4ec7-a23e-173f21a9e1f8.png&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;1122&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최초 디자인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;38b2758e-fcc8-4f0b-9f09-9645475ec497.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcyTc9/dJMcabD2aOS/2sxMnsZohB64cjwUCLK9j0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcyTc9/dJMcabD2aOS/2sxMnsZohB64cjwUCLK9j0/img.png&quot; data-alt=&quot;2차안&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcyTc9/dJMcabD2aOS/2sxMnsZohB64cjwUCLK9j0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcyTc9%2FdJMcabD2aOS%2F2sxMnsZohB64cjwUCLK9j0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;38b2758e-fcc8-4f0b-9f09-9645475ec497.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2차안&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;c8494a86-30a7-4108-b604-1c59774ee9ab.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Ypro/dJMcadaIeMP/QSXjF7TOE5RcsdzORuoHD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Ypro/dJMcadaIeMP/QSXjF7TOE5RcsdzORuoHD0/img.png&quot; data-alt=&quot;3차안&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Ypro/dJMcadaIeMP/QSXjF7TOE5RcsdzORuoHD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Ypro%2FdJMcadaIeMP%2FQSXjF7TOE5RcsdzORuoHD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;c8494a86-30a7-4108-b604-1c59774ee9ab.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3차안&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 대안을 받아 봤지만 이거다 하는 녀석은 없어 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 형태의 제안과 로고에 대한 정의등 AI에게 러닝을 시킨후 다시 대안을 받아보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9102e81f-47ef-4aa3-9bdc-3132c4f8ca64.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C6DcA/dJMcaaLT526/ql6VkuVR0DQoMSHkkPfAsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C6DcA/dJMcaaLT526/ql6VkuVR0DQoMSHkkPfAsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C6DcA/dJMcaaLT526/ql6VkuVR0DQoMSHkkPfAsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC6DcA%2FdJMcaaLT526%2Fql6VkuVR0DQoMSHkkPfAsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;9102e81f-47ef-4aa3-9bdc-3132c4f8ca64.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;bea76d67-bd9b-449a-93a9-5d0ca3f89c94.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eg4aUF/dJMcagZCdzT/B6y1TlzbzEeSU8QVDgKy7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eg4aUF/dJMcagZCdzT/B6y1TlzbzEeSU8QVDgKy7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eg4aUF/dJMcagZCdzT/B6y1TlzbzEeSU8QVDgKy7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feg4aUF%2FdJMcagZCdzT%2FB6y1TlzbzEeSU8QVDgKy7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; data-filename=&quot;bea76d67-bd9b-449a-93a9-5d0ca3f89c94.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀더 다양한 대안들이 제시됐지만 아직 눈에 차지를 않았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조금 더 고민해보고 다시 진행해 봐야겠다.&lt;/p&gt;</description>
      <category>건축 일지</category>
      <category>Box</category>
      <category>Design</category>
      <category>logo</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/8</guid>
      <comments>https://box-archi.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 7 May 2026 17:21:17 +0900</pubDate>
    </item>
    <item>
      <title>로또 번호 추첨기 사이트 작업 요약</title>
      <link>https://box-archi.tistory.com/7</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;  프로젝트 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;사이트&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://product-builder-recture.pages.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://product-builder-recture.pages.dev/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/woogim-afk/product-builder-recture&quot;&gt;https://github.com/woogim-afk/product-builder-recture&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;배포&lt;/td&gt;
&lt;td&gt;Cloudflare Pages (자동 배포)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;최종 커밋&lt;/td&gt;
&lt;td&gt;bb5bd1e&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;작업일&lt;/td&gt;
&lt;td&gt;2026-04-28 ~ 2026-04-29&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  전체 작업 내역&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1단계 &amp;mdash; 기본 사이트 구축&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;index.html : 로또 6/45 번호 추첨기 메인 페이지&lt;/li&gt;
&lt;li&gt;style.css : 다크/라이트 테마, 반응형 디자인&lt;/li&gt;
&lt;li&gt;script.js : 피셔-예이츠 셔플 알고리즘 기반 번호 생성, 단일/5개 동시 추첨, 히스토리 기능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2단계 &amp;mdash; 기능 확장&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;다크/라이트 모드&lt;/b&gt; : CSS 커스텀 변수(--bg-gradient 등) + body.light 클래스 토글&lt;/li&gt;
&lt;li&gt;&lt;b&gt;5개 동시 추첨&lt;/b&gt; : drawMulti() 함수 및 renderMultiBalls() 렌더링 추가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제휴 문의 폼&lt;/b&gt; (contact.html) : Formspree(xvzdnndp) 연동, _next 리다이렉트, 완료 메시지 처리(&lt;a href=&quot;https://formspree.io/register&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://formspree.io/register&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Disqus 댓글&lt;/b&gt; : producttbuilder 쇼트네임, index.html 하단 삽입(&lt;a href=&quot;https://disqus.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://disqus.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동물상 테스트&lt;/b&gt; (animal.html) : TensorFlow.js MobileNet v2 기반 강아지상/고양이상/믹스상 판별, 브라우저 내 처리로 개인정보 보호(&lt;a href=&quot;https://teachablemachine.withgoogle.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://teachablemachine.withgoogle.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Google AdSense&lt;/b&gt; : ads.txt 추가, 모든 페이지 헤드 스크립트 및 광고 유닛 삽입 (ca-pub-4067903464638354)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3단계 &amp;mdash; AdSense 승인 최적화 ✅&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 파일 내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;개인정보처리방침&lt;/td&gt;
&lt;td&gt;privacy.html (신규)&lt;/td&gt;
&lt;td&gt;AdSense 쿠키, 이미지 처리, Formspree/Disqus/TF.js/Cloudflare 등 10개 항목&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사이트 소개&lt;/td&gt;
&lt;td&gt;about.html (신규)&lt;/td&gt;
&lt;td&gt;서비스 설명, 기술 스택, 제휴 안내&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;로또 콘텐츠 섹션&lt;/td&gt;
&lt;td&gt;index.html&lt;/td&gt;
&lt;td&gt;로또 소개, 당첨 확률표(1~5등), 이용방법, FAQ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;동물상 콘텐츠 섹션&lt;/td&gt;
&lt;td&gt;animal.html&lt;/td&gt;
&lt;td&gt;동물상이란, AI 분석 방법, 개인정보 안내, 강아지상&amp;middot;고양이상&amp;middot;믹스상 특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;전체 푸터&lt;/td&gt;
&lt;td&gt;모든 페이지&lt;/td&gt;
&lt;td&gt;로또추첨기&amp;middot;동물상테스트&amp;middot;소개&amp;middot;제휴문의&amp;middot;개인정보처리방침 링크&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;메타 태그&lt;/td&gt;
&lt;td&gt;모든 페이지&lt;/td&gt;
&lt;td&gt;meta description, og:title, og:description, og:url, canonical&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  최종 파일 구조&lt;/h2&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;로또 번호 추첨기/
├── index.html       &amp;mdash; 로또 번호 추첨기 (메인)
├── animal.html      &amp;mdash; 동물상 테스트 (AI)
├── contact.html     &amp;mdash; 제휴 문의 (Formspree)
├── about.html       &amp;mdash; 사이트 소개 ✨ 신규
├── privacy.html     &amp;mdash; 개인정보처리방침 ✨ 신규
├── script.js        &amp;mdash; 추첨 로직
├── style.css        &amp;mdash; 공통 스타일
└── ads.txt          &amp;mdash; AdSense 인증
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;✅ AdSense 승인 체크리스트&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[x] ads.txt 등록 (google.com, pub-4067903464638354, DIRECT)&lt;/li&gt;
&lt;li&gt;[x] 모든 페이지에 AdSense 헤드 스크립트 삽입&lt;/li&gt;
&lt;li&gt;[x] &lt;b&gt;개인정보처리방침 페이지&lt;/b&gt; (privacy.html) &amp;mdash; 쿠키&amp;middot;제3자 서비스 명시&lt;/li&gt;
&lt;li&gt;[x] &lt;b&gt;소개 페이지&lt;/b&gt; (about.html) &amp;mdash; 사이트 목적 및 운영자 정보&lt;/li&gt;
&lt;li&gt;[x] &lt;b&gt;제휴 문의 페이지&lt;/b&gt; (contact.html) &amp;mdash; 연락처 제공&lt;/li&gt;
&lt;li&gt;[x] 실질 텍스트 콘텐츠 (로또 설명, 당첨 확률, FAQ, 동물상 설명)&lt;/li&gt;
&lt;li&gt;[x] 모든 페이지 하단에 개인정보처리방침 링크 노출&lt;/li&gt;
&lt;li&gt;[x] meta description / og 태그 / canonical URL&lt;/li&gt;
&lt;li&gt;[x] 다크/라이트 모드 반응형 디자인&lt;/li&gt;
&lt;li&gt;[x] 복수 페이지 (5개) &amp;mdash; thin site 아님&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  주요 기술 스택&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Frontend&lt;/b&gt; : Vanilla HTML5 / CSS3 / JavaScript (ES5+)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AI 모델&lt;/b&gt; : TensorFlow.js 4.17.0 + MobileNet v2 (CDN)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추첨 알고리즘&lt;/b&gt; : Fisher-Yates Shuffle&lt;/li&gt;
&lt;li&gt;&lt;b&gt;폼 처리&lt;/b&gt; : Formspree (서버리스)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;댓글&lt;/b&gt; : Disqus&lt;/li&gt;
&lt;li&gt;&lt;b&gt;광고&lt;/b&gt; : Google AdSense&lt;/li&gt;
&lt;li&gt;&lt;b&gt;호스팅&lt;/b&gt; : Cloudflare Pages + GitHub Actions 자동 배포&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>AI스터디/AI앱 제작</category>
      <category>AI공부</category>
      <category>로또</category>
      <category>앱제작</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/7</guid>
      <comments>https://box-archi.tistory.com/7#entry7comment</comments>
      <pubDate>Wed, 29 Apr 2026 21:52:44 +0900</pubDate>
    </item>
    <item>
      <title>Claude Code + ECC 환경 설정 정리 (2026-04-29)</title>
      <link>https://box-archi.tistory.com/6</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows 11 환경에서 Claude Code + ECC(Everything Claude Code) 플러그인 설치 및 설정한 내용 정리.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 일자: 2026-04-29 | 작업 경로: C:\\Users\\사용자&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 설치 과정 요약&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Git 설치 (사전 필수)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ECC 마켓플레이스 클론에 git이 필요한데 PATH 미등록 상태였음.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;# winget으로 Git 설치
winget install Git.Git

# SSH known_hosts 등록 (GitHub)
mkdir -p ~/.ssh
ssh-keyscan github.com &amp;gt;&amp;gt; ~/.ssh/known_hosts
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설치 경로: C:\\Program Files\\Git\\cmd\\&lt;/li&gt;
&lt;li&gt;Claude Code 재시작 필요 (새 PATH 반영)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ECC 마켓플레이스 &amp;amp; 플러그인 설치&lt;/h3&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;# SSH 오류 발생 시 &amp;rarr; HTTPS URL 사용
/plugin marketplace add &amp;lt;https://github.com/affaan-m/everything-claude-code&amp;gt;

# 플러그인 설치
/plugin install everything-claude-code@everything-claude-code

# 적용
/reload-plugins
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 글로벌 settings.json 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로: C:\\Users\\사용자명\\.claude\\settings.json&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 값 설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;autoUpdatesChannel&lt;/td&gt;
&lt;td&gt;latest&lt;/td&gt;
&lt;td&gt;최신 버전 자동 업데이트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;theme&lt;/td&gt;
&lt;td&gt;dark&lt;/td&gt;
&lt;td&gt;다크 모드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;model&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;sonnet&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;기본 모델: Claude Sonnet&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;MAX_THINKING_TOKENS&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;10000&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;사고 토큰 최대값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;CLAUDE_CODE_SUBAGENT_MODEL&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;haiku&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;서브에이전트 모델&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;permissions.allow&lt;/td&gt;
&lt;td&gt;Bash(git *)&lt;/td&gt;
&lt;td&gt;git 명령어 자동 허용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 활성화한 ECC 스킬 3종(프로젝트별 필요시 스킬추가)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스킬 역할&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;search-first&lt;/td&gt;
&lt;td&gt;코드 작성 전 기존 라이브러리/도구 검색 우선&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tdd-workflow&lt;/td&gt;
&lt;td&gt;RED&amp;rarr;GREEN&amp;rarr;REFACTOR TDD 사이클, 80%+ 커버리지 강제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;strategic-compact&lt;/td&gt;
&lt;td&gt;컨텍스트 50 tool call 초과 시 /compact 권고&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;strategic-compact 훅 (settings.json)&lt;/h3&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&quot;hooks&quot;: {
  &quot;PreToolUse&quot;: [{
    &quot;matcher&quot;: &quot;Edit|Write&quot;,
    &quot;hooks&quot;: [{
      &quot;type&quot;: &quot;command&quot;,
      &quot;command&quot;: &quot;node \\&quot;C:/Users/사용자명/.claude/plugins/cache/everything-claude-code/everything-claude-code/2.0.0-rc.1/scripts/hooks/suggest-compact.js\\&quot;&quot;,
      &quot;statusMessage&quot;: &quot;Checking context budget...&quot;
    }]
  }]
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;threshold: 50 tool call &amp;rarr; 첫 알림, 이후 25회마다 반복&lt;/li&gt;
&lt;li&gt;COMPACT_THRESHOLD 환경변수로 임계값 조정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. ECC 핵심 구성 요소&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구성요소 경로 역할&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Skills&lt;/td&gt;
&lt;td&gt;~/.claude/skills/&lt;/td&gt;
&lt;td&gt;재사용 가능한 워크플로우 번들&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agents&lt;/td&gt;
&lt;td&gt;~/.claude/agents/&lt;/td&gt;
&lt;td&gt;위임용 서브에이전트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hooks&lt;/td&gt;
&lt;td&gt;settings.json &amp;gt; hooks&lt;/td&gt;
&lt;td&gt;이벤트 기반 자동화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rules&lt;/td&gt;
&lt;td&gt;~/.claude/rules/&lt;/td&gt;
&lt;td&gt;항상 따르는 코딩 가이드라인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commands&lt;/td&gt;
&lt;td&gt;~/.claude/commands/&lt;/td&gt;
&lt;td&gt;슬래시 커맨드 진입점&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. ECC 주요 스킬 카테고리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코어 워크플로우&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;tdd-workflow &amp;mdash; TDD 강제 (unit + integration + E2E)&lt;/li&gt;
&lt;li&gt;verification-loop &amp;mdash; 빌드 &amp;rarr; 테스트 &amp;rarr; 린트 &amp;rarr; 보안 검증&lt;/li&gt;
&lt;li&gt;strategic-compact &amp;mdash; 컨텍스트 예산 관리&lt;/li&gt;
&lt;li&gt;search-first &amp;mdash; 구현 전 기존 도구 검색 우선&lt;/li&gt;
&lt;li&gt;security-review &amp;mdash; 보안 체크리스트&lt;/li&gt;
&lt;li&gt;continuous-learning-v2 &amp;mdash; 세션 패턴 자동 추출 &amp;rarr; 스킬 진화&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프레임워크별&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Python: python-patterns, python-testing, django-*&lt;/li&gt;
&lt;li&gt;Go: golang-patterns, golang-testing&lt;/li&gt;
&lt;li&gt;Java: java-coding-standards, springboot-*&lt;/li&gt;
&lt;li&gt;Frontend: frontend-patterns, frontend-slides&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비즈니스/콘텐츠&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;deep-research, market-research, article-writing, content-engine&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. MCP 관리 원칙&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;200k 컨텍스트 중 MCP 과다 활성화 시 실효 컨텍스트 &lt;b&gt;70k로 감소&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;권장: MCP 20~30개 설정, &lt;b&gt;실제 활성화는 10개 미만&lt;/b&gt;, 활성 도구 80개 미만&lt;/li&gt;
&lt;li&gt;확인 명령어: /mcp 또는 /plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. 키보드 단축키&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단축키 기능&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ctrl+U&lt;/td&gt;
&lt;td&gt;입력 줄 전체 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;!&lt;/td&gt;
&lt;td&gt;빠른 bash 명령어 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;@&lt;/td&gt;
&lt;td&gt;파일 검색&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;슬래시 커맨드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shift+Enter&lt;/td&gt;
&lt;td&gt;멀티라인 입력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tab&lt;/td&gt;
&lt;td&gt;thinking 표시 토글&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Esc Esc&lt;/td&gt;
&lt;td&gt;Claude 중단 / 코드 복원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. 트러블슈팅 기록&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 원인 해결&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;git not found&lt;/td&gt;
&lt;td&gt;Git PATH 미등록&lt;/td&gt;
&lt;td&gt;winget 설치 후 재시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH host key 오류&lt;/td&gt;
&lt;td&gt;known_hosts 없음&lt;/td&gt;
&lt;td&gt;ssh-keyscan github.com &amp;gt;&amp;gt; ~/.ssh/known_hosts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plugin ecc not found&lt;/td&gt;
&lt;td&gt;플러그인 이름 오류&lt;/td&gt;
&lt;td&gt;everything-claude-code@everything-claude-code 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;9. 관련 파일 경로&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;글로벌 설정: C:\\Users\\사용자명\\.claude\\settings.json&lt;/li&gt;
&lt;li&gt;ECC 플러그인 캐시: C:\\Users\\사용자명\\.claude\\plugins\\cache\\everything-claude-code\\&lt;/li&gt;
&lt;li&gt;프로젝트 설정: C:\\Users\\사용자명\\Desktop\\클로드설정\\260429md\\.claude\\settings.json&lt;/li&gt;
&lt;li&gt;SSH known_hosts: C:\\Users\\사용자명\\.ssh\\known_hosts&lt;/li&gt;
&lt;li&gt;ECC 스크립트(훅): .../2.0.0-rc.1/scripts/hooks/suggest-compact.js&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>클로드(claude)/클로드코드 사용일지</category>
      <category>claude</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/6</guid>
      <comments>https://box-archi.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 29 Apr 2026 21:47:05 +0900</pubDate>
    </item>
    <item>
      <title>GCP Cloud Run MCP 서버 배포 기록</title>
      <link>https://box-archi.tistory.com/5</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2026년 4월 27일 | 제주 AI 아키랩&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  목표&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python MCP 서버를 클라우드에 배포해서 어디서든 Claude Desktop과 연결하여 사용하기&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⚙️ 환경 설정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;GCP 설정 완료&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;계정&lt;/b&gt;: &lt;a href=&quot;mailto:woogim@gmail.com&quot;&gt;woogim@gmail.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로젝트&lt;/b&gt;: gen-lang-client-########## (Google AI Studio 자동 생성)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;리전&lt;/b&gt;: asia-northeast3 (서울)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;존&lt;/b&gt;: asia-northeast3-a&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로컬 파일 구조 (C:\\Users\\[사용자]\\Desktop\\mcp_test)&lt;/h3&gt;
&lt;pre class=&quot;axapta&quot;&gt;&lt;code&gt;mcp_test/
├── server.py          # MCP 서버 메인 파일
├── Dockerfile         # 컨테이너 설정
├── requirements.txt   # 패키지 목록
├── server.js
└── client.js
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;http://server.py&quot;&gt;server.py&lt;/a&gt; 최종 버전&lt;/h3&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;import os
from mcp.server.fastmcp import FastMCP

mcp = FastMCP(&quot;add-mcp-http&quot;)

@mcp.tool()
def add(a: int, b: int) -&amp;gt; int:
    &quot;&quot;&quot;Add two numbers&quot;&quot;&quot;
    return a + b

if __name__ == &quot;__main__&quot;:
    port = int(os.environ.get(&quot;PORT&quot;, 8080))
    mcp.run(transport=&quot;sse&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;requirements.txt&lt;/h3&gt;
&lt;pre class=&quot;avrasm&quot;&gt;&lt;code&gt;mcp[cli]
uvicorn
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;❌ GCP Cloud Run 배포 실패&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시도한 것들&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;API 활성화&lt;/b&gt;: run.googleapis.com, cloudbuild.googleapis.com, artifactregistry.googleapis.com ✅&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IAM 권한 추가&lt;/b&gt;: artifactregistry.reader 역할 부여 ✅&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새 프로젝트 생성&lt;/b&gt;: jeju-mcp-server-2026 생성 후 시도 ✅&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이미지 직접 지정 배포&lt;/b&gt; 시도 ✅&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다른 리전(us-central1)&lt;/b&gt; 시도 ✅&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실패 원인&lt;/h3&gt;
&lt;pre class=&quot;subunit&quot;&gt;&lt;code&gt;ERROR: Container import failed.
reason: ContainerImageImportFailed
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론&lt;/b&gt;: gen-lang-client-* 프로젝트는 Google AI Studio 자동 생성 프로젝트로 Cloud Run 컨테이너 실행에 내부 제한이 있음. 새 프로젝트도 동일 계정 레벨 제한으로 실패.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;✅ Railway 배포 성공!&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배포 과정&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;GitHub repo 생성: woogim-afk/mcp-test&lt;/li&gt;
&lt;li&gt;코드 push (폴더 구조: Desktop/mcp_test/)&lt;/li&gt;
&lt;li&gt;Railway 접속 &amp;rarr; GitHub 연동 &amp;rarr; 자동 배포&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배포 결과&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목 값&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;플랫폼&lt;/td&gt;
&lt;td&gt;Railway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;상태&lt;/td&gt;
&lt;td&gt;  Online&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://mcp-test-production-f362.up.railway.app&quot;&gt;https://mcp-test-production-f362.up.railway.app&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSE 엔드포인트&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://mcp-test-production-f362.up.railway.app/sse&quot;&gt;https://mcp-test-production-f362.up.railway.app/sse&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  Claude Desktop 연결 방법&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설정 파일 위치&lt;/h3&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;C:\\Users\\[사용자]\\AppData\\Roaming\\Claude\\claude_desktop_config.json&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설정 내용&lt;/h3&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{
  &quot;mcpServers&quot;: {
    &quot;my-server&quot;: {
      &quot;url&quot;: &quot;&amp;lt;https://mcp-test-production-f362.up.railway.app/sse&amp;gt;&quot;,
      &quot;transport&quot;: &quot;sse&quot;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;연결 후 테스트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude Desktop에서 add(3, 5) 입력 &amp;rarr; 결과: 8&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  배운 점&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Google AI Studio 자동 생성 프로젝트(gen-lang-client-*)는 Cloud Run 사용 불가&lt;/li&gt;
&lt;li&gt;Railway는 GitHub 연동만으로 Dockerfile 자동 감지 후 배포 가능&lt;/li&gt;
&lt;li&gt;FastMCP의 run() 메서드는 버전에 따라 host, port 파라미터 지원 여부가 다름&lt;/li&gt;
&lt;li&gt;Cloud Run 배포 시 0.0.0.0:8080 바인딩 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  다음 단계&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Claude Desktop 앱 설치 및 MCP 연결 테스트&lt;/li&gt;
&lt;li&gt;MCP 서버에 더 많은 도구(tool) 추가&lt;/li&gt;
&lt;li&gt;제주 AI 아키랩 프로젝트에 활용&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>클로드(claude)/클로드코드 사용일지</category>
      <category>claude code</category>
      <category>일지</category>
      <category>클로드</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/5</guid>
      <comments>https://box-archi.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 27 Apr 2026 15:29:42 +0900</pubDate>
    </item>
    <item>
      <title>MCP 배포하기</title>
      <link>https://box-archi.tistory.com/4</link>
      <description>&lt;div data-test-render-count=&quot;2&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-is-streaming=&quot;false&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 배포 서비스는 크게 이렇게 나눌 수 있어요.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;☁️ 주요 클라우드 배포 서비스&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  빅3 클라우드 (IaaS/PaaS)&lt;/h4&gt;
&lt;div&gt;서비스특징
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;AWS&lt;/b&gt; (Amazon)&lt;/td&gt;
&lt;td&gt;가장 넓은 서비스 생태계, EC2&amp;middot;Lambda&amp;middot;S3 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Google Cloud&lt;/b&gt; (GCP)&lt;/td&gt;
&lt;td&gt;AI/ML 강점, Firebase 통합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Azure&lt;/b&gt; (Microsoft)&lt;/td&gt;
&lt;td&gt;기업 환경&amp;middot;MS 제품 연동 강점&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  개발자 친화적 PaaS&lt;/h4&gt;
&lt;div&gt;서비스특징
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Vercel&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Next.js 최적화, 프론트엔드 배포 최강&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Netlify&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;정적 사이트&amp;middot;JAMstack 특화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Railway&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;풀스택 앱 간편 배포, DB 포함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Render&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Heroku 대체제, 무료 티어 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Fly.io&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;글로벌 엣지 배포, Docker 기반&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Heroku&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;오랜 PaaS 강자, 유료화 이후 입지 축소&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  컨테이너/쿠버네티스&lt;/h4&gt;
&lt;div&gt;서비스특징
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;AWS ECS / EKS&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;AWS 컨테이너 오케스트레이션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Google GKE&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;구글 관리형 쿠버네티스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Azure AKS&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;애저 쿠버네티스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Docker Hub&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;이미지 레지스트리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⚡ 서버리스 / 엣지&lt;/h4&gt;
&lt;div&gt;서비스특징
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;AWS Lambda&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;함수형 서버리스 원조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Cloudflare Workers&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;엣지 서버리스, 초고속&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Supabase&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;BaaS (백엔드 as a 서비스), PostgreSQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Firebase&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Google BaaS, 실시간 DB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-state=&quot;closed&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-test-render-count=&quot;2&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-state=&quot;closed&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000; font-size: 1.62em; letter-spacing: -1px;&quot;&gt;구글 클라우드(GCP) 배포 방법을 주요 서비스별로 정리해 드릴게요.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-test-render-count=&quot;2&quot;&gt;
&lt;div&gt;
&lt;div data-is-streaming=&quot;false&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글 클라우드(GCP) 배포 방법을 주요 서비스별로 정리해 드릴게요.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  GCP 배포 방법 총정리&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1️⃣ Cloud Run (가장 추천 - 컨테이너 서버리스)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #eaecf0;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 1. gcloud CLI 설치 후 로그인
gcloud auth login
gcloud config set project YOUR_PROJECT_ID

# 2. Docker 이미지 빌드 &amp;amp; GCR에 푸시
docker build -t gcr.io/YOUR_PROJECT_ID/my-app .
docker push gcr.io/YOUR_PROJECT_ID/my-app

# 3. Cloud Run 배포
gcloud run deploy my-app \
  --image gcr.io/YOUR_PROJECT_ID/my-app \
  --platform managed \
  --region asia-northeast3 \  # 서울 리전
  --allow-unauthenticated&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2️⃣ App Engine (코드만 올리면 끝)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;avrasm&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# app.yaml 작성
runtime: python311  # 또는 nodejs20, go122 등

# 배포 명령어 하나로 끝
gcloud app deploy&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3️⃣ GKE (Google Kubernetes Engine)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;dsconfig&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# 클러스터 생성
gcloud container clusters create my-cluster \
  --zone asia-northeast3-a \
  --num-nodes 3

# kubectl 연결
gcloud container clusters get-credentials my-cluster

# 배포
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4️⃣ Compute Engine (VM 직접 운영)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# VM 인스턴스 생성
gcloud compute instances create my-vm \
  --zone=asia-northeast3-a \
  --machine-type=e2-medium \
  --image-family=ubuntu-2204-lts \
  --image-project=ubuntu-os-cloud

# SSH 접속 후 직접 앱 실행
gcloud compute ssh my-vm&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5️⃣ Cloud Functions (함수형 서버리스)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# index.js 또는 main.py 작성 후
gcloud functions deploy myFunction \
  --runtime nodejs20 \
  --trigger-http \
  --allow-unauthenticated \
  --region asia-northeast3&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  서비스 선택 가이드&lt;/h3&gt;
&lt;div&gt;상황추천 서비스
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;컨테이너 앱, 빠른 배포&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Cloud Run&lt;/b&gt; ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;코드만 올리고 싶음&lt;/td&gt;
&lt;td&gt;&lt;b&gt;App Engine&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;마이크로서비스, 대규모&lt;/td&gt;
&lt;td&gt;&lt;b&gt;GKE&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;완전한 서버 제어 필요&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Compute Engine&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;단순 API 함수&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Cloud Functions&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  공통 사전 준비&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# 1. gcloud CLI 설치
# https://cloud.google.com/sdk/docs/install

# 2. 프로젝트 설정
gcloud projects create YOUR_PROJECT_ID
gcloud config set project YOUR_PROJECT_ID

# 3. 결제 계정 연결 (콘솔에서)
# console.cloud.google.com

# 4. 필요한 API 활성화
gcloud services enable run.googleapis.com
gcloud services enable cloudbuild.googleapis.com&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-state=&quot;closed&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000; font-size: 1.62em; letter-spacing: -1px;&quot;&gt;MCP 서버를 클라우드에 배포해서 Claude와 연결&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-test-render-count=&quot;2&quot;&gt;
&lt;div&gt;
&lt;div data-is-streaming=&quot;false&quot;&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  전체 흐름&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #eaecf0;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;MCP 서버 코드 &amp;rarr; Docker 빌드 &amp;rarr; Cloud Run 배포 &amp;rarr; HTTPS URL 획득 &amp;rarr; Claude MCP 연결&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1️⃣ MCP 서버 준비 (예: Python)&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;python&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;python&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP(&quot;my-server&quot;)

@mcp.tool()
def hello(name: str) -&amp;gt; str:
    return f&quot;Hello, {name}!&quot;

if __name__ == &quot;__main__&quot;:
    mcp.run(transport=&quot;sse&quot;)  # SSE transport 필수!&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;txt&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;avrasm&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# requirements.txt
mcp[cli]
uvicorn&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2️⃣ Dockerfile&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;dockerfile&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;dockerfile&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

EXPOSE 8080
CMD [&quot;python&quot;, &quot;server.py&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3️⃣ Cloud Run 배포&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# 프로젝트 설정
gcloud config set project YOUR_PROJECT_ID

# 빌드 &amp;amp; 배포 한 번에
gcloud run deploy my-mcp-server \
  --source . \
  --region asia-northeast3 \
  --allow-unauthenticated \
  --port 8080&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포 완료되면 이런 URL 받아요:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;dts&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;https://my-mcp-server-xxxxxxxxxx-du.a.run.app&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4️⃣ Claude에 MCP 연결&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;claude.ai (Artifacts API 방식)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;javascript&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;dts&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;mcp_servers: [
  {
    type: &quot;url&quot;,
    url: &quot;https://my-mcp-server-xxxxxxxxxx-du.a.run.app/sse&quot;,
    name: &quot;my-mcp-server&quot;
  }
]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Claude Desktop (claude_desktop_config.json)&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;json&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;json&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;{
  &quot;mcpServers&quot;: {
    &quot;my-server&quot;: {
      &quot;url&quot;: &quot;https://my-mcp-server-xxxxxxxxxx-du.a.run.app/sse&quot;,
      &quot;transport&quot;: &quot;sse&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;⚠️ Cloud Run MCP 주의사항&lt;/h3&gt;
&lt;div&gt;항목내용
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Transport&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;sse 또는 streamable-http 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;포트&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;반드시 8080&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;인증&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;우선 --allow-unauthenticated, 나중에 API Key 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Cold Start&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;첫 요청 느릴 수 있음 &amp;rarr; --min-instances 1 옵션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;타임아웃&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;기본 60초 &amp;rarr; SSE는 --timeout 3600 권장&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;bash&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# 타임아웃 설정 추가한 배포
gcloud run deploy my-mcp-server \
  --source . \
  --region asia-northeast3 \
  --allow-unauthenticated \
  --port 8080 \
  --timeout 3600 \
  --min-instances 1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-state=&quot;closed&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div data-state=&quot;closed&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-test-render-count=&quot;2&quot;&gt;
&lt;div&gt;
&lt;div data-state=&quot;closed&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-test-render-count=&quot;2&quot;&gt;
&lt;div data-is-streaming=&quot;false&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;GCP Cloud Run &amp;rarr; MCP 연결 치트시트&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;markdown&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #eaecf0;&quot;&gt;&lt;code&gt;# GCP Cloud Run MCP 서버 배포

## 사전준비
gcloud auth login
gcloud config set project YOUR_PROJECT_ID
gcloud services enable run.googleapis.com cloudbuild.googleapis.com

## 파일 구조
my-mcp-server/
├── server.py
├── requirements.txt
└── Dockerfile

## server.py
from mcp.server.fastmcp import FastMCP
mcp = FastMCP(&quot;my-server&quot;)

@mcp.tool()
def hello(name: str) -&amp;gt; str:
    return f&quot;Hello, {name}!&quot;

if __name__ == &quot;__main__&quot;:
    mcp.run(transport=&quot;sse&quot;)

## requirements.txt
mcp[cli]
uvicorn

## Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8080
CMD [&quot;python&quot;, &quot;server.py&quot;]

## 배포 (타임아웃/인스턴스 포함)
gcloud run deploy my-mcp-server \
  --source . \
  --region asia-northeast3 \
  --allow-unauthenticated \
  --port 8080 \
  --timeout 3600 \
  --min-instances 1

## 결과 URL
https://my-mcp-server-xxxxxxxxxx-du.a.run.app

## Claude Desktop 연결 (claude_desktop_config.json)
{
  &quot;mcpServers&quot;: {
    &quot;my-server&quot;: {
      &quot;url&quot;: &quot;https://my-mcp-server-xxxxxxxxxx-du.a.run.app/sse&quot;,
      &quot;transport&quot;: &quot;sse&quot;
    }
  }
}

## Artifacts API 연결
mcp_servers: [{ type: &quot;url&quot;, url: &quot;...URL.../sse&quot;, name: &quot;my-mcp-server&quot; }]

## 주의
- transport: sse 필수
- 포트: 8080 고정
- SSE timeout: 3600 권장
- Cold start 방지: --min-instances 1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26-04-25 클라우드 코딩 작업일지 참조&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>클로드(claude)/클로드코드 사용일지</category>
      <category>클라우드 코딩</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/4</guid>
      <comments>https://box-archi.tistory.com/4#entry4comment</comments>
      <pubDate>Mon, 27 Apr 2026 15:28:47 +0900</pubDate>
    </item>
    <item>
      <title>클로드 디자인툴</title>
      <link>https://box-archi.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;슬라이드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 내용은 유지하되 아래 가이드에 따라 애니메이션 슬라이드로 개선해줘 -배경 : webgl 세이더 -폰트 : 현재사용유지 -컬러 : 현재사용유지&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래픽과 텍스트 영역분리 - 텍스트 가독성 최우선, 그라디언트 텍스트 금지&lt;/li&gt;
&lt;li&gt;장면마다 맥락에 맞는 추상 도형(원/링/선)또는 의미있는 상징적 그래픽 사용&lt;/li&gt;
&lt;li&gt;animations.jsx 스타터 컴포넌트 기반 (stage/sprite/usetime)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://xn--2z1bu26abc.md&quot;&gt;디자인.md&lt;/a&gt;(&lt;a href=&quot;https://github.com/woogim-afk/awesome-design-md&quot;&gt;**awesome-design-md&lt;/a&gt;)&amp;larr;대기업들의 디자인 UI 참조**&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디자인 기본안을 통한 슬라이드 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/NnIuDXt-KKI?si=fWQ7rnsvUZq9kUnY&quot;&gt;https://youtu.be/NnIuDXt-KKI?si=fWQ7rnsvUZq9kUnY&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=NnIuDXt-KKI&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bjv0zJ/dJMb8WMshIV/hL836RCLiQF4p3N0jAT2X1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;디자인 프로세스 없애버린 클로드 디자인 19분 만에 끝내기&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/NnIuDXt-KKI&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클로드 디자인으로 제작한 애플스타일 결과물(토큰이 너무많이들어 영상까지는 ㅠ)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/vkxka/dJMcafsPKmW/yfNnayMfk9rdnww5kJ0yI0/%EA%B1%B4%EC%B6%95%20%26times%3B%20%EC%97%90%EC%9D%B4%EC%A0%84%ED%8B%B1%20AI%20%26mdash%3B%20%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84%20%EC%A0%84%ED%99%98%28scheme-01%29.pdf?attach=1&amp;amp;knm=tfile.pdf&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;건축 &amp;amp;times; 에이전틱 AI &amp;amp;mdash; 패러다임 전환(scheme-01).pdf&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;1.18MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>클로드(claude)/클로드 디자인</category>
      <category>AI</category>
      <category>claude</category>
      <category>클로드</category>
      <category>클로드 디자인</category>
      <author>box-archi</author>
      <guid isPermaLink="true">https://box-archi.tistory.com/3</guid>
      <comments>https://box-archi.tistory.com/3#entry3comment</comments>
      <pubDate>Sat, 25 Apr 2026 17:12:27 +0900</pubDate>
    </item>
  </channel>
</rss>