<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>kwon_green.log</title>
        <link>https://velog.io/</link>
        <description>하고 싶은 거 하면, 할 수 있게 되는 매직</description>
        <lastBuildDate>Thu, 07 Aug 2025 14:49:54 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>kwon_green.log</title>
            <url>https://velog.velcdn.com/images/kwon_green/profile/317e566a-fb7d-437e-a032-87dc1283b555/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. kwon_green.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/kwon_green" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[VSCode Mac 단축키 모음 정리]]></title>
            <link>https://velog.io/@kwon_green/VSCode-Mac-%EB%8B%A8%EC%B6%95%ED%82%A4-%EB%AA%A8%EC%9D%8C-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@kwon_green/VSCode-Mac-%EB%8B%A8%EC%B6%95%ED%82%A4-%EB%AA%A8%EC%9D%8C-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Thu, 07 Aug 2025 14:49:54 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/kwon_green/post/be47cc39-afbf-485f-a40e-9ff66fd6a2fc/image.png" alt=""></p>
<p>Visual Studio Code(이하 VSCode)는 강력한 코드 편집기이자 다양한 확장 기능과 커스터마이징을 제공하는 도구입니다. 맥북 사용자라면 생산성을 높이기 위해 필수로 익혀야 할 단축키들이 있습니다. 이 글에서는 VSCode를 맥북에서 사용할 때 유용한 단축키들을 범주별로 정리하여 소개합니다.</p>
<hr>
<h2 id="📁-파일-탐색-및-기본-조작">📁 파일 탐색 및 기본 조작</h2>
<table>
<thead>
<tr>
<th>기능</th>
<th>단축키</th>
</tr>
</thead>
<tbody><tr>
<td>명령 팔레트 열기</td>
<td><code>Cmd + Shift + P</code></td>
</tr>
<tr>
<td>사이드바 토글</td>
<td><code>Cmd + B</code></td>
</tr>
<tr>
<td>새 파일 만들기</td>
<td><code>Cmd + N</code></td>
</tr>
<tr>
<td>파일 열기</td>
<td><code>Cmd + O</code></td>
</tr>
<tr>
<td>파일 저장</td>
<td><code>Cmd + S</code></td>
</tr>
<tr>
<td>모두 저장</td>
<td><code>Cmd + Option + S</code></td>
</tr>
<tr>
<td>파일 닫기</td>
<td><code>Cmd + W</code></td>
</tr>
<tr>
<td>전체 창 닫기</td>
<td><code>Cmd + Shift + W</code></td>
</tr>
</tbody></table>
<hr>
<h2 id="📝-편집-관련-단축키">📝 편집 관련 단축키</h2>
<table>
<thead>
<tr>
<th>기능</th>
<th>단축키</th>
</tr>
</thead>
<tbody><tr>
<td>줄 복사</td>
<td><code>Option + Shift + ↓ / ↑</code></td>
</tr>
<tr>
<td>줄 이동</td>
<td><code>Option + ↓ / ↑</code></td>
</tr>
<tr>
<td>줄 삭제</td>
<td><code>Cmd + Shift + K</code></td>
</tr>
<tr>
<td>줄 합치기</td>
<td><code>Ctrl + J</code></td>
</tr>
<tr>
<td>자동 줄 정렬 (포맷)</td>
<td><code>Option + Shift + F</code></td>
</tr>
<tr>
<td>다중 커서 추가</td>
<td><code>Option + Click</code> 또는 <code>Cmd + Option + ↓ / ↑</code></td>
</tr>
<tr>
<td>선택 영역 확장</td>
<td><code>Shift + Option + → / ←</code></td>
</tr>
<tr>
<td>동일 단어 선택</td>
<td><code>Cmd + D</code></td>
</tr>
<tr>
<td>전체 동일 단어 선택</td>
<td><code>Cmd + Shift + L</code></td>
</tr>
</tbody></table>
<hr>
<h2 id="🔍-탐색-및-검색">🔍 탐색 및 검색</h2>
<table>
<thead>
<tr>
<th>기능</th>
<th>단축키</th>
</tr>
</thead>
<tbody><tr>
<td>전체 검색</td>
<td><code>Cmd + Shift + F</code></td>
</tr>
<tr>
<td>현재 파일 내 검색</td>
<td><code>Cmd + F</code></td>
</tr>
<tr>
<td>검색 후 바꾸기</td>
<td><code>Cmd + Option + F</code></td>
</tr>
<tr>
<td>다음 검색 결과</td>
<td><code>Cmd + G</code></td>
</tr>
<tr>
<td>이전 검색 결과</td>
<td><code>Cmd + Shift + G</code></td>
</tr>
<tr>
<td>파일 내 정의로 이동</td>
<td><code>F12</code></td>
</tr>
<tr>
<td>정의 미리 보기</td>
<td><code>Option + F12</code></td>
</tr>
<tr>
<td>해당 위치로 바로 이동</td>
<td><code>Cmd + Click</code></td>
</tr>
</tbody></table>
<hr>
<h2 id="📦-터미널-및-기타">📦 터미널 및 기타</h2>
<table>
<thead>
<tr>
<th>기능</th>
<th>단축키</th>
</tr>
</thead>
<tbody><tr>
<td>새 터미널 열기</td>
<td>`Ctrl + `` (Backtick)</td>
</tr>
<tr>
<td>터미널 탭 이동</td>
<td><code>Cmd + Shift + [</code> / <code>]</code></td>
</tr>
<tr>
<td>통합 터미널 숨기기/보이기</td>
<td>`Ctrl + ``</td>
</tr>
<tr>
<td>설정 열기</td>
<td><code>Cmd + ,</code></td>
</tr>
<tr>
<td>키 바인딩 설정</td>
<td><code>Cmd + K Cmd + S</code></td>
</tr>
<tr>
<td>확장기능 보기</td>
<td><code>Cmd + Shift + X</code></td>
</tr>
<tr>
<td>버전관리(Git) 보기</td>
<td><code>Cmd + Shift + G</code></td>
</tr>
</tbody></table>
<hr>
<h2 id="💡-팁">💡 팁</h2>
<ul>
<li>VSCode는 단축키 커스터마이징이 가능하므로 자주 사용하는 기능은 자신에게 맞게 바꾸는 것도 좋은 방법입니다.</li>
<li><code>Cmd + P</code>를 통해 빠르게 파일을 검색할 수 있습니다.</li>
<li><code>Cmd + Shift + E</code>로 탐색기 열기, <code>Cmd + Shift + D</code>로 디버깅 창을 여는 것도 유용합니다.</li>
</ul>
<hr>
<p>📚 참고: <a href="https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf">VSCode 공식 단축키 리스트 (macOS)</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] 잘못 한 커밋 기록 삭제하기]]></title>
            <link>https://velog.io/@kwon_green/Git-%EC%9E%98%EB%AA%BB-%ED%95%9C-%EC%BB%A4%EB%B0%8B-%EA%B8%B0%EB%A1%9D-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@kwon_green/Git-%EC%9E%98%EB%AA%BB-%ED%95%9C-%EC%BB%A4%EB%B0%8B-%EA%B8%B0%EB%A1%9D-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 06 Aug 2025 03:31:15 GMT</pubDate>
            <description><![CDATA[<p>작업을 하다 보면 .gitignore에 추가했어야 했는데 뒤늦게 알아차리는 경우가 종종 있죠.
저도 이미 푸쉬해버린 커밋들에 섞여있는 나의 json 파일들을 발견하고 말았습니다.</p>
<h3 id="gitignore--사전-방지">.gitignore : 사전 방지</h3>
<p><img src="https://velog.velcdn.com/images/kwon_green/post/f25ccf2f-1a63-48ab-b8ba-7fec24ae4cf3/image.png" alt=""></p>
<p>이렇게 작성해 두면 커밋에서 파일들은 무시됩니다.
만약 경로 아래에 있는 파일들 전체를 무시하길 원한다면,
루트 기준 해당 파일 경로를 작성해 주면 됩니다.</p>
<pre><code>/파일이름/

# 예시
/config/</code></pre><h4 id="하지만-이미-커밋해버린-상황">하지만 이미 커밋해버린 상황...</h4>
<p>브랜치를 들여다 보면 아래처럼 이미 쏙쏙 박혀있는 경우가 있죠</p>
<p><img src="https://velog.velcdn.com/images/kwon_green/post/f015ed6d-4122-4801-a0be-cb0e6965367c/image.png" alt=""></p>
<p>보통 이런 건 한 커밋에만 있는 게 아니죠, 그 전 커밋... 그 이후 커밋... 다 있어요.</p>
<h2 id="해결-방법">해결 방법</h2>
<ol>
<li>현재 파일 백업 (선택)<pre><code class="language-bash"># 새로 클론 받아두기
git clone https://github.com/your-github/your-repository.git your-repository-clean
cd your-repository-clean
</code></pre>
</li>
</ol>
<h1 id="새로-브랜치-백업">새로 브랜치 백업</h1>
<p>git checkout main #또는 대상 브랜치
git branch backup-before-config-clean</p>
<pre><code>2. git-filter-repo 설치
```bash
pip install git-filter-repo</code></pre><ol start="3">
<li><p>레포지토리 클린업</p>
<pre><code class="language-bash"># 맞는 프로젝트인지 경로 확인 후 작업 your-repo-clean
git filter-repo --path 해당-폴더-이름/ --invert-paths</code></pre>
<blockquote>
<p>--path 파일이름/ : 경로 디렉터리 안에 있는 모든 파일을 대상으로 함
--invert-paths  :해당 경로만 제거하고 나머지는 유지함</p>
</blockquote>
</li>
<li><p>강제 푸시</p>
<pre><code class="language-bash">git push origin --force --all
git push origin --force --tags</code></pre>
</li>
<li><p>.gitignore에 추가</p>
<pre><code>/디렉토리/</code></pre></li>
</ol>
<h4 id="번외-지금-디렉토리에서-강제-실행">번외) 지금 디렉토리에서 강제 실행</h4>
<pre><code class="language-bash">git filter-repo --force --path config/ --invert-paths</code></pre>
<ul>
<li>히스토리 손상 가능성 있음 : 백업 꼭 하고 진행할 것</li>
</ul>
<p><img src="https://velog.velcdn.com/images/kwon_green/post/d8ecb8ae-0eee-43aa-a74d-7c7429e10916/image.gif" alt=""></p>
<p>살아나세요 용사여</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] VPC 구조 이해]]></title>
            <link>https://velog.io/@kwon_green/4%EC%9D%BC%EC%B0%A8AWS-VPC-%EA%B5%AC%EC%A1%B0-%EC%9D%B4%ED%95%B4</link>
            <guid>https://velog.io/@kwon_green/4%EC%9D%BC%EC%B0%A8AWS-VPC-%EA%B5%AC%EC%A1%B0-%EC%9D%B4%ED%95%B4</guid>
            <pubDate>Mon, 04 Aug 2025 14:25:54 GMT</pubDate>
            <description><![CDATA[<h3 id="퍼블릭프라이빗-서브넷-nat-gateway">퍼블릭/프라이빗 서브넷, NAT Gateway</h3>
<hr>
<h2 id="1-vpc">1. VPC</h2>
<blockquote>
<p>Virtual Private Cloud</p>
<p>AWS 상에서 내가 원하는 네트워크 구조를 <strong>직접 설계</strong>하고, <strong>격리된 공간</strong>에서 운영할 수 있도록 해주는 서비스 </p>
</blockquote>
<h3 id="핵심-개념">핵심 개념</h3>
<ul>
<li>AWS 리전 내에서 내가 정의한 IP 대역(CIDR 블록)을 기준으로 구성</li>
<li>서브넷, 라우팅 테이블, 보안 그룹, 인터넷 게이트웨이, NAT 등 다양한 네트워크 구성 요소 포함</li>
<li><strong>온프레미스와 연결(VPN/Direct Connect)</strong> 하거나, <strong>다중 계정 연결(Transit Gateway)</strong> 도 가능</li>
</ul>
<h3 id="예시">예시</h3>
<pre><code class="language-jsx">VPC (10.0.0.0/16)
├── Subnet A (10.0.1.0/24)
└── Subnet B (10.0.2.0/24)</code></pre>
<hr>
<h2 id="2-서브넷">2. 서브넷</h2>
<blockquote>
<p>VPC 안에서 IP 주소 범위를 작게 나누는 단위</p>
</blockquote>
<h3 id="왜-나눌까">왜 나눌까</h3>
<ul>
<li>서로 다른 용도의 리소스를 격리</li>
<li>퍼블릭/프라이빗 서브넷 구분을 통해 <strong>보안 계층 구성</strong></li>
<li>고가용성(HA)을 위해 여러 AZ(가용영역)에 분산 가능</li>
</ul>
<h3 id="퍼블릭프라이빗-구분-기준">퍼블릭/프라이빗 구분 기준</h3>
<ul>
<li><strong>퍼블릭 서브넷</strong>: 인터넷 게이트웨이(IGW)에 연결된 서브넷</li>
<li><strong>프라이빗 서브넷</strong>: IGW와 연결되지 않음. 대신 NAT Gateway를 통해 외부와 통신</li>
</ul>
<hr>
<h2 id="3-퍼블릭-vs-프라이빗-서브넷-상세-비교">3. 퍼블릭 vs 프라이빗 서브넷 상세 비교</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>퍼블릭 서브넷</th>
<th>프라이빗 서브넷</th>
</tr>
</thead>
<tbody><tr>
<td>외부 인터넷 통신</td>
<td>가능 (IGW 연결)</td>
<td>기본적으로 차단됨</td>
</tr>
<tr>
<td>대표 용도</td>
<td>웹 서버, Bastion Host</td>
<td>DB 서버, 백엔드 API 서버</td>
</tr>
<tr>
<td>라우팅 테이블</td>
<td><code>0.0.0.0/0 → IGW</code></td>
<td><code>0.0.0.0/0 → NAT Gateway</code></td>
</tr>
<tr>
<td>보안 성격</td>
<td>외부 노출 가능성 높음</td>
<td>내부망으로 보호</td>
</tr>
<tr>
<td>예시 서비스</td>
<td>ALB, EC2 Web</td>
<td>RDS, Redis, EC2 백엔드</td>
</tr>
</tbody></table>
<blockquote>
<p>퍼블릭은 외부에서 접속 가능한 리소스가 위치</p>
<p>프라이빗은 외부에서는 접근 불가, 내부 서비스 전용</p>
</blockquote>
<hr>
<h2 id="4-nat-gateway">4. NAT Gateway</h2>
<blockquote>
<p>프라이빗 서브넷에 있는 리소스가 외부로 나가는 통로</p>
</blockquote>
<h3 id="왜-필요한가">왜 필요한가?</h3>
<ul>
<li>프라이빗 서브넷에 있는 EC2 인스턴스나 Lambda가 <strong>외부 API 호출, 소프트웨어 업데이트, S3 접근</strong> 등 인터넷 연결이 필요한 경우가 많음</li>
<li>보안을 위해 <strong>직접 인터넷 게이트웨이를 연결하지는 않음</strong></li>
<li>이때 <strong>NAT Gateway를 경유해 외부로 나갈 수 있음</strong></li>
</ul>
<h3 id="핵심-특징">핵심 특징</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>통신 방향</td>
<td><strong>내부 → 외부만 허용</strong>, 외부 → 내부는 차단</td>
</tr>
<tr>
<td>보안 효과</td>
<td>외부 접근은 막되, 내부 자원은 인터넷 이용 가능</td>
</tr>
<tr>
<td>과금</td>
<td>시간 + 데이터 처리량 기준</td>
</tr>
<tr>
<td>대안</td>
<td>NAT 인스턴스 (하지만 관리 복잡도 높음)</td>
</tr>
</tbody></table>
<hr>
<h2 id="5-실전-구조-예시-3-tier-아키텍처">5. 실전 구조 예시: 3-Tier 아키텍처</h2>
<pre><code class="language-jsx">📦 VPC (10.0.0.0/16)
├── 🌐 퍼블릭 서브넷 (10.0.1.0/24)
│ ├── EC2 웹 서버
│ └── 인터넷 게이트웨이 (IGW)
│
├── 🔒 프라이빗 서브넷 (10.0.2.0/24)
│ ├── EC2 백엔드 서버
│ └── NAT Gateway 연결
│
├── 🔐 프라이빗 서브넷 (10.0.3.0/24)
│ └── RDS DB 인스턴스</code></pre>
<ul>
<li>웹 서버는 외부에서 접속 가능</li>
<li>백엔드 서버는 외부에서는 접속 불가하지만, <strong>외부로 요청은 가능</strong></li>
<li>DB는 백엔드 서버에서만 접근 가능</li>
</ul>
<blockquote>
<p>📌 실제로는 AZ 분산(다중 가용영역) 구성 권장</p>
</blockquote>
<hr>
<h3 id="6-az가용영역-분산-구성">6. AZ(가용영역) 분산 구성</h3>
<blockquote>
<p>&quot;하나의 서버실이 문제가 생겨도, 서비스는 계속되어야 한다.&quot;</p>
</blockquote>
<h3 id="🔹-az">🔹 AZ</h3>
<ul>
<li><strong>Availability Zone (가용영역)</strong> 의 약자</li>
<li>하나의 AWS 리전(예: ap-northeast-2, 서울)에는 <strong>2개 이상의 독립된 AZ</strong>가 존재</li>
<li>각 AZ는 <strong>전력, 네트워크, 냉각, 재난에 독립적인 물리적 데이터 센터</strong></li>
</ul>
<blockquote>
<p>AZ 간에는 저지연, 고속 네트워크로 연결되어 있음</p>
</blockquote>
<hr>
<h3 id="🔹-왜-분산해야-할까">🔹 왜 분산해야 할까?</h3>
<table>
<thead>
<tr>
<th>단일 AZ 구성 시</th>
<th>다중 AZ 구성 시</th>
</tr>
</thead>
<tbody><tr>
<td>장애 발생 시 서비스 전체 중단 가능</td>
<td>한 AZ가 다운되어도 다른 AZ에서 서비스 유지 가능</td>
</tr>
<tr>
<td>가용성이 낮음</td>
<td>고가용성(High Availability, HA) 확보</td>
</tr>
<tr>
<td>장애 대응이 수동적</td>
<td>자동 복구(Auto Recovery) 또는 멀티 AZ 전환 가능</td>
</tr>
</tbody></table>
<hr>
<h3 id="🔹-적용-예시-2-tier-웹-시스템">🔹 적용 예시: 2-Tier 웹 시스템</h3>
<pre><code class="language-yaml">VPC
├── Subnet-A (ap-northeast-2a)
│ ├── EC2 Web 서버
│ └── RDS DB (멀티 AZ)
│
├── Subnet-B (ap-northeast-2c)
│ ├── EC2 Web 서버 (Auto Scaling)
│ └── Standby RDS</code></pre>
<ul>
<li>EC2 Auto Scaling Group: 2개 AZ에 인스턴스 분산 배포</li>
<li>RDS: 멀티 AZ 옵션 활성화 시 <strong>Active-Standby 구성</strong></li>
<li>ALB (Application Load Balancer)는 <strong>자동으로 다중 AZ 트래픽 분산</strong></li>
</ul>
<hr>
<h3 id="🔹-구성-전략">🔹 구성 전략</h3>
<ul>
<li><strong>서브넷은 최소 2개 이상</strong> (각기 다른 AZ에)</li>
<li>Auto Scaling Group + ALB + 멀티 AZ RDS = 기본 고가용성 조합</li>
<li>EC2, NAT Gateway, ALB 등 비용이 조금 더 들지만, <strong>서비스 안정성 극대화</strong></li>
</ul>
<hr>
<h3 id="🔹-정리">🔹 정리</h3>
<blockquote>
<p>&quot;VPC 안에서 가용성 확보 = AZ 분산 설계가 기본이다&quot;</p>
</blockquote>
<ul>
<li>단일 AZ → 비용은 적지만 리스크 큼</li>
<li>멀티 AZ → 구성은 복잡하지만 기업 서비스에서는 <strong>사실상 필수</strong></li>
</ul>
<hr>
<h2 id="7-서브넷-간-통신과-라우팅-테이블의-실제-역할">7. 서브넷 간 통신과 라우팅 테이블의 실제 역할</h2>
<h3 id="🔹-라우팅-테이블route-table이란">🔹 라우팅 테이블(Route Table)이란?</h3>
<blockquote>
<p>VPC 내의 서브넷이 어디로 트래픽을 전달할지 결정하는 설정표</p>
</blockquote>
<ul>
<li>각 서브넷은 <strong>하나의 라우팅 테이블에 연결</strong></li>
<li>라우팅 테이블은 여러 서브넷과 공유할 수 있음</li>
<li>트래픽 목적지(CIDR)와 대상(Target)을 명시</li>
</ul>
<h3 id="🔹-기본-구성-예시">🔹 기본 구성 예시</h3>
<h3 id="퍼블릭-서브넷-라우팅-테이블">퍼블릭 서브넷 라우팅 테이블:</h3>
<pre><code>Destination: 0.0.0.0/0 → Target: igw-abc123  # 인터넷 게이트웨이</code></pre><h3 id="프라이빗-서브넷-라우팅-테이블">프라이빗 서브넷 라우팅 테이블:</h3>
<pre><code class="language-yaml">Destination: 0.0.0.0/0 → Target: nat-xyz789  # NAT Gateway</code></pre>
<h3 id="🔹-서브넷-간-통신">🔹 서브넷 간 통신</h3>
<blockquote>
<p>같은 VPC 내 서브넷끼리는 기본적으로 통신 가능</p>
<p>다만, <strong>라우팅 테이블과 보안 그룹 설정이 맞아야</strong> 실질적 통신 가능</p>
</blockquote>
<table>
<thead>
<tr>
<th>조건</th>
<th>통신 가능 여부</th>
</tr>
</thead>
<tbody><tr>
<td>같은 VPC, 서로 다른 서브넷</td>
<td>✅ 가능</td>
</tr>
<tr>
<td>라우팅 테이블에 서로를 향한 경로 없음</td>
<td>❌ 불가</td>
</tr>
<tr>
<td>보안 그룹 인바운드 허용 없음</td>
<td>❌ 불가</td>
</tr>
</tbody></table>
<h3 id="🔹-인터넷-접근은-라우팅-설정이-핵심">🔹 인터넷 접근은 라우팅 설정이 핵심</h3>
<table>
<thead>
<tr>
<th>목적</th>
<th>설정 방식</th>
</tr>
</thead>
<tbody><tr>
<td>퍼블릭 서브넷에서 외부로</td>
<td><code>0.0.0.0/0 → IGW</code></td>
</tr>
<tr>
<td>프라이빗 서브넷에서 외부로</td>
<td><code>0.0.0.0/0 → NAT Gateway</code></td>
</tr>
<tr>
<td>내부 통신 (ex. Web → DB)</td>
<td>별도 라우팅 필요 없음 (같은 VPC일 경우)</td>
</tr>
</tbody></table>
<h3 id="🔹-다중-az-구성-시-라우팅-전략">🔹 다중 AZ 구성 시 라우팅 전략</h3>
<ul>
<li><strong>퍼블릭 서브넷이 여러 AZ에 걸쳐 있다면</strong>, 각 서브넷은 같은 라우팅 테이블을 공유하거나 각각의 라우팅 테이블을 가질 수 있음</li>
<li><strong>NAT Gateway가 특정 AZ에만 있을 경우</strong>, 해당 AZ의 프라이빗 서브넷에만 연결되는지 확인 필요</li>
</ul>
<pre><code class="language-yaml">[ 퍼블릭 서브넷 ] --IGW--&gt;
    EC2 Web

[ 프라이빗 서브넷 ] --NAT GW--&gt; 인터넷
    EC2 App

[ 프라이빗 서브넷 ] --- 내부 통신 ---&gt;
    RDS DB</code></pre>
<h3 id="정리하면">정리하면…</h3>
<ul>
<li>서브넷은 라우팅 테이블을 통해 <strong>외부/내부 목적지</strong>를 향해 통신</li>
<li>IGW와 NAT Gateway 설정 여부에 따라 인터넷 사용 가능성 달라짐</li>
<li><strong>보안 그룹 + 라우팅 테이블 조합이 실제 통신 가능 여부를 결정</strong></li>
</ul>
<hr>
<h2 id="8-보안-그룹-vs-네트워크-acl">8. 보안 그룹 vs 네트워크 ACL</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>보안 그룹 (SG)</th>
<th>네트워크 ACL (NACL)</th>
</tr>
</thead>
<tbody><tr>
<td>작동 방식</td>
<td><strong>상태 저장(Stateful)</strong></td>
<td>비상태 저장(Stateless)</td>
</tr>
<tr>
<td>적용 범위</td>
<td>인스턴스 단위</td>
<td>서브넷 단위</td>
</tr>
<tr>
<td>기본 설정</td>
<td>모든 인바운드 차단 / 아웃바운드 허용</td>
<td>모든 트래픽 허용</td>
</tr>
<tr>
<td>보통 역할</td>
<td><strong>방화벽 역할</strong></td>
<td>추가 네트워크 필터링 용도</td>
</tr>
</tbody></table>
<blockquote>
<p>실무에서는 대부분 SG로 제어하고, NACL은 특별한 보안 요구 시 사용</p>
</blockquote>
<hr>
<h2 id="9-마무리">9. 마무리</h2>
<ul>
<li>퍼블릭 서브넷: <strong>외부와 통신이 필요한 자원 배치</strong></li>
<li>프라이빗 서브넷: <strong>보호되어야 할 리소스 (DB 등) 배치</strong></li>
<li>NAT Gateway: <strong>프라이빗 자원의 아웃바운드 전용 통로</strong></li>
<li>VPC 구성은 보안과 확장성을 위한 <strong>네트워크 설계의 핵심</strong></li>
</ul>
<hr>
<hr>
<h2 id="10-vpc-peering이란">10. VPC Peering이란?</h2>
<blockquote>
<p>서로 다른 VPC 간의 네트워크 연결을 직접 구성하는 방식</p>
<p>마치 <strong>하나의 VPC처럼 통신</strong>할 수 있도록 만들어주는 기능</p>
</blockquote>
<hr>
<h3 id="🔹-vpc-peering의-정의">🔹 VPC Peering의 정의</h3>
<ul>
<li>VPC Peering은 두 개의 VPC 사이에 <strong>1:1 네트워크 터널을 만드는 것</strong></li>
<li>서로 다른 VPC 내의 리소스 간에 <strong>프라이빗 IP로 직접 통신 가능</strong></li>
<li><strong>같은 계정, 다른 계정, 다른 리전 간에도 연결 가능</strong></li>
</ul>
<hr>
<h3 id="🔹-왜-필요한가">🔹 왜 필요한가?</h3>
<table>
<thead>
<tr>
<th>사용 상황</th>
<th>이유</th>
</tr>
</thead>
<tbody><tr>
<td>마이크로서비스 간 분리된 VPC</td>
<td>서비스 별 격리는 유지하면서도 통신은 필요</td>
</tr>
<tr>
<td>계정/환경 별 VPC 구성 (예: dev/prod)</td>
<td>서로 리소스를 참조하거나 호출해야 함</td>
</tr>
<tr>
<td>조직 간 협업 (다른 계정)</td>
<td>서비스 연동, 내부 API 호출 등</td>
</tr>
<tr>
<td>비용 절감 및 성능 향상</td>
<td>NAT, Transit Gateway 없이 바로 연결 가능</td>
</tr>
</tbody></table>
<blockquote>
<p>💡 S3, RDS, EC2 등 모든 서비스에서 프라이빗 IP로 호출 가능</p>
</blockquote>
<hr>
<h3 id="🔹-예시-구조">🔹 예시 구조</h3>
<pre><code>📦 VPC-A (10.0.0.0/16)
   └── Subnet-A (10.0.1.0/24)
       └── EC2-A

📦 VPC-B (192.168.0.0/16)
   └── Subnet-B (192.168.1.0/24)
       └── EC2-B

==&gt; VPC Peering 연결 생성 후:
EC2-A → EC2-B (프라이빗 IP로 ping 가능)
</code></pre><hr>
<h3 id="🔹-설정-순서-요약">🔹 설정 순서 요약</h3>
<ol>
<li><strong>Peering 연결 생성</strong><ul>
<li><code>VPC A → VPC B</code> 요청</li>
<li>같은 계정/다른 계정 지정 가능</li>
</ul>
</li>
<li><strong>Peering 연결 승인</strong><ul>
<li>상대 VPC 소유자가 <strong>수락</strong>해야 함</li>
</ul>
</li>
<li><strong>라우팅 테이블 수정</strong><ul>
<li>각 VPC의 라우팅 테이블에 상대 VPC CIDR 추가</li>
</ul>
</li>
<li><strong>보안 그룹 설정</strong><ul>
<li>통신 대상 포트를 <strong>보안 그룹에서 허용</strong>해야 정상 작동</li>
</ul>
</li>
</ol>
<hr>
<h3 id="🔹-라우팅-테이블-예시">🔹 라우팅 테이블 예시</h3>
<h3 id="vpc-a-라우팅-테이블">VPC A 라우팅 테이블</h3>
<pre><code>Destination: 192.168.0.0/16 → Target: pcx-abc123
</code></pre><h3 id="vpc-b-라우팅-테이블">VPC B 라우팅 테이블</h3>
<pre><code>Destination: 10.0.0.0/16 → Target: pcx-abc123
</code></pre><blockquote>
<p>pcx-abc123는 Peering Connection ID</p>
</blockquote>
<hr>
<h3 id="🔹-주의-사항">🔹 주의 사항</h3>
<table>
<thead>
<tr>
<th>제한/주의점</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><strong>양방향 설정 필수</strong></td>
<td>라우팅, 보안 그룹 모두 <strong>서로 허용</strong>해야 통신 가능</td>
</tr>
<tr>
<td><strong>중첩 CIDR 불가</strong></td>
<td>두 VPC의 IP 범위가 겹치면 Peering 불가</td>
</tr>
<tr>
<td><strong>전이(transitive) 불가</strong></td>
<td>A ↔ B, B ↔ C 연결되어 있어도 A → C 불가</td>
</tr>
<tr>
<td><strong>인터넷 게이트웨이 공유 불가</strong></td>
<td>IGW는 각 VPC에서 별도로 설정해야 함</td>
</tr>
<tr>
<td><strong>비용</strong></td>
<td>Peering 연결 자체는 무료, <strong>트래픽에 따라 요금 발생</strong></td>
</tr>
</tbody></table>
<hr>
<h3 id="✅-언제-vpc-peering을-쓰면-좋을까">✅ 언제 VPC Peering을 쓰면 좋을까?</h3>
<ul>
<li>단순히 <strong>2~3개의 VPC만 연결할 때</strong></li>
<li><strong>고속 통신이 필요한 내부 서비스 간 연결</strong></li>
<li><strong>VPN이나 Transit Gateway</strong> 대신 가볍게 연결하고 싶을 때</li>
</ul>
<hr>
<h3 id="❌-언제는-피하는-게-좋을까">❌ 언제는 피하는 게 좋을까?</h3>
<ul>
<li>VPC 간 연결이 <strong>10개 이상</strong>으로 늘어날 때 → <strong>Transit Gateway 권장</strong></li>
<li><strong>리소스 공유가 복잡한 경우</strong> (ex. Lambda ↔ EC2 ↔ RDS)</li>
<li>CIDR이 중복될 가능성이 있는 경우</li>
</ul>
<hr>
<h3 id="💡-요약">💡 요약:</h3>
<p><strong>&quot;VPC Peering은 서로 떨어진 가상 사설망을 하나처럼 연결하는 안전한 통로&quot;</strong></p>
<p>구성 수가 많아질수록 <strong>확장성의 한계</strong>가 생기므로, 구조 설계 단계에서 <strong>필요성과 규모</strong>를 먼저 판단</p>
<hr>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://aws.amazon.com/vpc/">AWS 공식 VPC 설명</a></li>
<li><a href="https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html">AWS 서브넷 및 라우팅 튜토리얼</a></li>
<li><a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html">NAT Gateway 공식 문서</a></li>
<li><a href="https://app.diagrams.net/">draw.io - AWS 아키텍처 그리기</a></li>
<li><a href="https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html">VPC Hands-on 실습 가이드 (AWS)</a></li>
<li><a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html">AWS 리전과 가용영역 개념</a></li>
<li><a href="https://docs.aws.amazon.com/ko_kr/wellarchitected/latest/framework/availability.html">멀티 AZ 배포 아키텍처 예시 (AWS Well-Architected)</a></li>
<li><a href="https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html">VPC Peering 공식 문서 (AWS)</a></li>
<li><a href="https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html">VPC Peering 설정 튜토리얼</a></li>
<li><a href="https://aws.amazon.com/transit-gateway/faqs/">VPC Peering vs Transit Gateway 비교</a></li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] Boto3(실습) : 초보자도 파이썬으로 AWS 관리하기]]></title>
            <link>https://velog.io/@kwon_green/3%EC%9D%BC%EC%B0%A8-Boto3%EC%8B%A4%EC%8A%B5-%EC%B4%88%EB%B3%B4%EC%9E%90%EB%8F%84-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-AWS-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@kwon_green/3%EC%9D%BC%EC%B0%A8-Boto3%EC%8B%A4%EC%8A%B5-%EC%B4%88%EB%B3%B4%EC%9E%90%EB%8F%84-%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-AWS-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 01 Aug 2025 07:19:52 GMT</pubDate>
            <description><![CDATA[<h4 id="boto3란">Boto3란?</h4>
<p>AWS에서 만든 Python SDK로, AWS의 다양한 서비스들을 제어/관리할 수 있다</p>
<pre><code class="language-python">import boto3

# client 방식 (low-level)
ec2_client = boto3.client(&#39;ec2&#39;)

# resource 방식 (high-level)
ec2_resource = boto3.resource(&#39;ec2&#39;)</code></pre>
<hr>
<h3 id="대표-서비스별-세부사항-총정리">대표 서비스별 세부사항 총정리!</h3>
<p>(전체 서비스는 200개가 넘어요)</p>
<table>
<thead>
<tr>
<th>서비스</th>
<th>주요 리소스</th>
<th>조회 메서드 예시</th>
<th>관리/제어 메서드 예시</th>
</tr>
</thead>
<tbody><tr>
<td>EC2</td>
<td>인스턴스, AMI, EBS, 보안 그룹 등</td>
<td><code>describe_instances()</code>, <code>describe_images()</code></td>
<td><code>start_instances()</code>, <code>stop_instances()</code>, <code>terminate_instances()</code>, <code>create_security_group()</code></td>
</tr>
<tr>
<td>S3</td>
<td>버킷, 오브젝트</td>
<td><code>list_buckets()</code>, <code>list_objects_v2()</code></td>
<td><code>create_bucket()</code>, <code>delete_object()</code>, <code>put_object()</code></td>
</tr>
<tr>
<td>IAM</td>
<td>사용자, 정책, 역할</td>
<td><code>list_users()</code>, <code>list_roles()</code></td>
<td><code>create_user()</code>, <code>attach_user_policy()</code></td>
</tr>
<tr>
<td>CloudWatch</td>
<td>지표, 로그, 경보</td>
<td><code>list_metrics()</code>, <code>get_metric_data()</code>, <code>describe_alarms()</code></td>
<td><code>put_metric_alarm()</code>, <code>delete_alarms()</code></td>
</tr>
<tr>
<td>CloudTrail</td>
<td>이벤트 기록</td>
<td><code>lookup_events()</code></td>
<td><em>(읽기 전용)</em></td>
</tr>
<tr>
<td>Lambda</td>
<td>함수</td>
<td><code>list_functions()</code></td>
<td><code>create_function()</code>, <code>invoke()</code></td>
</tr>
<tr>
<td>DynamoDB</td>
<td>테이블</td>
<td><code>list_tables()</code>, <code>describe_table()</code></td>
<td><code>put_item()</code>, <code>delete_item()</code>, <code>create_table()</code></td>
</tr>
<tr>
<td>RDS</td>
<td>DB 인스턴스</td>
<td><code>describe_db_instances()</code></td>
<td><code>start_db_instance()</code>, <code>stop_db_instance()</code></td>
</tr>
<tr>
<td>VPC</td>
<td>서브넷, 라우팅</td>
<td><code>describe_vpcs()</code>, <code>describe_subnets()</code></td>
<td><code>create_vpc()</code>, <code>delete_subnet()</code></td>
</tr>
<tr>
<td>ELB</td>
<td>로드밸런서</td>
<td><code>describe_load_balancers()</code></td>
<td><code>create_load_balancer()</code>, <code>delete_load_balancer()</code></td>
</tr>
<tr>
<td>ECS</td>
<td>클러스터, 서비스</td>
<td><code>list_clusters()</code>, <code>describe_services()</code></td>
<td><code>update_service()</code>, <code>run_task()</code></td>
</tr>
<tr>
<td>EKS</td>
<td>클러스터</td>
<td><code>list_clusters()</code>, <code>describe_cluster()</code></td>
<td><code>create_cluster()</code>, <code>delete_cluster()</code></td>
</tr>
<tr>
<td>CloudFormation</td>
<td>스택</td>
<td><code>describe_stacks()</code></td>
<td><code>create_stack()</code>, <code>delete_stack()</code></td>
</tr>
<tr>
<td>SNS</td>
<td>주제, 구독</td>
<td><code>list_topics()</code>, <code>list_subscriptions()</code></td>
<td><code>create_topic()</code>, <code>publish()</code></td>
</tr>
<tr>
<td>SQS</td>
<td>큐</td>
<td><code>list_queues()</code></td>
<td><code>send_message()</code>, <code>receive_message()</code></td>
</tr>
<tr>
<td>Billing/Cost Explorer</td>
<td>비용/사용량</td>
<td><code>get_cost_and_usage()</code></td>
<td><em>(읽기 전용)</em></td>
</tr>
<tr>
<td>Tagging</td>
<td>리소스 태그</td>
<td><code>get_resources()</code> (<code>resourcegroupstaggingapi</code>)</td>
<td><code>tag_resources()</code>, <code>untag_resources()</code></td>
</tr>
</tbody></table>
<hr>
<p><img src="https://velog.velcdn.com/images/kwon_green/post/7b858c6b-ac83-487e-a831-db4d99ce8e3c/image.jpg" alt=""></p>
<p><code>중간중간 커비는.. 제가 좋아해서.. 넣습니다.. 히히</code></p>
<hr>
<h2 id="직접-사용해-봅시다">직접 사용해 봅시다!</h2>
<ol>
<li><p>Python 설치 확인</p>
<pre><code class="language-bash">python --version
# 또는
python3 --version</code></pre>
<p>1-1. 없는 경우 Python 설치</p>
</li>
<li><p>프로젝트 폴더 생성</p>
<pre><code class="language-bash">mkdir test
cd test</code></pre>
</li>
<li><p>가상환경 생성</p>
<pre><code class="language-bash">python -m venv .venv</code></pre>
</li>
<li><p>가상환경 활성화</p>
<pre><code class="language-bash">.\.venv\Scripts\Activate.ps1       # Windows
</code></pre>
</li>
</ol>
<p>source .venv/bin/activate          # macOS/Linux</p>
<pre><code>
5. 필수 패키지 설치
```bash
pip install boto3 python-dotenv

# 선택 설치
pip install requests

#설치된 패키지 저장
pip freeze &gt; requirements.txt</code></pre><ol start="6">
<li>.env 파일 생성<pre><code class="language-bash">.env</code></pre>
</li>
</ol>
<pre><code>AWS_ACCESS_KEY_ID=your_access_key            # 계정 키 입력
AWS_SECRET_ACCESS_KEY=your_secret_key        # 계정 시크릿키 입력
AWS_REGION=ap-northeast-2                    # 계정 리전</code></pre><blockquote>
<p>주의! .env 파일은 절대 커밋하지 않도록 .gitignore에 추가하세요!</p>
</blockquote>
<ol start="7">
<li>test.py 코드 작성<pre><code class="language-python">import os
import boto3
from dotenv import load_dotenv
</code></pre>
</li>
</ol>
<h1 id="env-파일에서-환경-변수-로드">.env 파일에서 환경 변수 로드</h1>
<p>load_dotenv()</p>
<p>aws_access_key = os.getenv(&quot;AWS_ACCESS_KEY_ID&quot;)
aws_secret_key = os.getenv(&quot;AWS_SECRET_ACCESS_KEY&quot;)
aws_region = os.getenv(&quot;AWS_REGION&quot;)</p>
<h1 id="ec2-client-생성">EC2 client 생성</h1>
<p>ec2 = boto3.client(
    &quot;ec2&quot;,
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key,
    region_name=aws_region
)</p>
<h1 id="s3-client-생성">S3 client 생성</h1>
<p>s3 = boto3.client(
    &quot;s3&quot;,
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key,
    region_name=aws_region
)</p>
<h1 id="ec2-인스턴스-조회">EC2 인스턴스 조회</h1>
<p>def list_ec2_instances():
    print(&quot;🖥 EC2 인스턴스 목록:&quot;)
    response = ec2.describe_instances()
    for reservation in response[&quot;Reservations&quot;]:
        for instance in reservation[&quot;Instances&quot;]:
            print(f&quot;- Instance ID: {instance[&#39;InstanceId&#39;]}, State: {instance[&#39;State&#39;][&#39;Name&#39;]}&quot;)</p>
<h1 id="s3-버킷-조회">S3 버킷 조회</h1>
<p>def list_s3_buckets():
    print(&quot;\n🪣 S3 버킷 목록:&quot;)
    response = s3.list_buckets()
    for bucket in response[&quot;Buckets&quot;]:
        print(f&quot;- {bucket[&#39;Name&#39;]}&quot;)</p>
<h1 id="실행">실행</h1>
<p>if <strong>name</strong> == &quot;<strong>main</strong>&quot;:
    list_ec2_instances()
    list_s3_buckets()</p>
<pre><code>8. 실행
``` bash
python test.py</code></pre><h4 id="🎉-실행-결과-예시">🎉 실행 결과 예시</h4>
<pre><code>🖥 EC2 인스턴스 목록:
- Instance ID: i-0123456789abcdef0, State: running
- Instance ID: i-0abcdef1234567890, State: stopped

🪣 S3 버킷 목록:
- my-project-logs
- static-assets-kwon</code></pre><hr>
<h3 id="가능한-전체-서비스-확인하는-법">가능한 전체 서비스 확인하는 법</h3>
<pre><code class="language-python">import boto3

print(boto3.session.Session().get_available_services())
</code></pre>
<h3 id="특정-서비스의-전체-메서드-확인하는-법">특정 서비스의 전체 메서드 확인하는 법</h3>
<pre><code class="language-python">import boto3

client = boto3.client(&#39;ec2&#39;)
print(dir(client))</code></pre>
<hr>
<blockquote>
<p>잘 따라오셨나요?
boto3 초기화 시 Session을 사용하는 방식도 추후에 다루어 보겠습니다!</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] EC2 무료 인스턴스 생성하기]]></title>
            <link>https://velog.io/@kwon_green/2%EC%9D%BC%EC%B0%A8-AWS-EC2-%EB%AC%B4%EB%A3%8C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@kwon_green/2%EC%9D%BC%EC%B0%A8-AWS-EC2-%EB%AC%B4%EB%A3%8C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 30 Jul 2025 08:56:42 GMT</pubDate>
            <description><![CDATA[<p>여러모로 돈이 순식간에 청구될 수 있는 내용이니.. 하나하나 주의하며 진행할 것</p>
<p>.</p>
<p>.</p>
<p><a href="https://us-east-1.console.aws.amazon.com/console/home?region=us-east-1">https://us-east-1.console.aws.amazon.com/console/home?region=us-east-1</a></p>
<p><img src="https://velog.velcdn.com/images/kwon_green/post/4e6c695c-0976-4618-8b08-c7ff37f9f76b/image.png" alt=""></p>
<p>우선 회원가입을 진행하고, free trial을 갖고 로그인을 한다.
12개월 한정 기간 사용 가능한 10달러가 주어진다.</p>
<ul>
<li>참고
현재 내 대시보드를 보면 금액이 청구된 것으로 보이는데,
실제 청구서에 들어가보면 아래와 같다.
<img src="https://velog.velcdn.com/images/kwon_green/post/b4c73c61-0d99-4ea8-851a-a05cd03f256d/image.png" alt=""></li>
</ul>
<p>그러니 돈이 찍혔더라도 청구서에 들어가 꼼꼼히 확인하자.</p>
<p>참고로 AWS는 뉴비에게 친절하다.. 문의로 &quot;나 돈나와써 몰라써 ㅜㅜ&quot; 하면 대개는 청구를 삭제해준다(카더라)</p>
<ol>
<li><p>검색창에 EC2 검색 후 대시보드 접속
<img src="https://velog.velcdn.com/images/kwon_green/post/1a7dd6f4-beb2-4b89-bdef-0cd5f943b1a5/image.png" alt=""></p>
</li>
<li><p>오른쪽 &quot;인스턴스 시작&quot; 선택</p>
</li>
<li><p>이름 지정, Amazone Linux 선택
<img src="https://velog.velcdn.com/images/kwon_green/post/40a75649-345e-4157-91ef-662d57fd72ed/image.png" alt=""></p>
</li>
<li><p>아키텍처 맞게, 인스턴스 t3.micro 선택
<img src="https://velog.velcdn.com/images/kwon_green/post/e21e4ca4-bb0d-4982-9f2a-724c6aa232c9/image.png" alt=""></p>
</li>
</ol>
<p>무료플랜에 적용돼서 선택한 것이고, 추후 시스템이나 프로젝트에 따라 스펙이 다르게 선택 가능하다.</p>
<ol start="5">
<li><p>새 키 페어 생성 선택
<img src="https://velog.velcdn.com/images/kwon_green/post/1c36a62f-aadd-4457-a938-d98d8772881c/image.png" alt="">
이름을 적어주고, 파일 형식을 SSH로 선택 후 아래 키 페어 생성을 누른다.
다운로드가 뜰텐데 저장해두면 된다.</p>
</li>
<li><p>남은 선택지 확인
<img src="https://velog.velcdn.com/images/kwon_green/post/7487bacc-587a-44ee-9d47-3ebca5cb1b3f/image.png" alt="">
딱히 손댈 것은 없고, 용도에 따라 아래 체크를 변경하면 된다.
아직 용도 확정이 안되었으면 일단 그대로 진행.</p>
</li>
<li><p>가장 적은 용량으로 선택
<img src="https://velog.velcdn.com/images/kwon_green/post/1b3bbcd1-df41-4bfd-9081-ed7bd21c0a95/image.png" alt=""></p>
</li>
<li><p>생성!
<img src="https://velog.velcdn.com/images/kwon_green/post/2c6ebdc0-c5b8-4537-8e3a-b81cd5c83c55/image.png" alt="">
오른쪽에 있다.</p>
</li>
</ol>
<hr>
<p>이렇게 생성한 것의 상태는 &quot;실행중&quot; / &quot;정지&quot; / &quot;중지&quot; 세가지가 있는데
중지하지 않는 한 계속 비용이 발생한다는 점을 명심할 것!</p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[.md] 깃헙 README.md 생성하기]]></title>
            <link>https://velog.io/@kwon_green/%EC%9E%94%EB%94%94-%EC%8B%AC%EA%B8%B0-1%EC%9D%BC%EC%B0%A8-%EA%B9%83%ED%97%99-README.md-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@kwon_green/%EC%9E%94%EB%94%94-%EC%8B%AC%EA%B8%B0-1%EC%9D%BC%EC%B0%A8-%EA%B9%83%ED%97%99-README.md-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 29 Jul 2025 00:57:52 GMT</pubDate>
            <description><![CDATA[<p>재미있는 작업들이 스멀스멀 떠오르는 김에
1일 1커밋 챌린지를 시작해보려 한다.</p>
<p>우선 깃헙 메인 간판부터 꾸며본다.</p>
<h2 id="마크다운-형식--md-파일">마크다운 형식 / .md 파일</h2>
<p><img src="https://velog.velcdn.com/images/kwon_green/post/691186b6-904b-4f0e-b840-1fd9fa39a7e6/image.png" alt="">
<a href="https://github.com/builtkwon">https://github.com/builtkwon</a></p>
<p>깃헙 프로필에 들어오면 제일 먼저 보이는 README.md
이러쿵 저러쿵 써보았는데, 확실히 꾸밈자를 조금 알고 나니 깔끔한 것 같다.</p>
<p>우선 .md 확장자에 대해 설명하자면,
Markdown이라고 텍스트 꾸미기 위한 문서 형식 정도로 알면 된다.</p>
<p>깃헙에서 각 게시물을 Repository/레포지토리/레포 라고 한다.
레포지토리마다 README.md 파일이 생성된다.
프로젝트나 GitHub 리포지토리를 설명하는 대표 문서가 된다.
그리고 GitHub는 리포지토리의 최상단에 있는 README.md를 자동으로 렌더링해서 보여줌</p>
<h3 id="대표적인-문법">대표적인 문법</h3>
<h4 id="1-제목heading">1. 제목/Heading</h4>
<pre><code># H1 제목 (가장 크다)
## H2 제목
### H3 제목
#### H4
##### H5
###### H6 (가장 작다)</code></pre><h4 id="2-굵게기울임취소선">2. 굵게/기울임/취소선</h4>
<pre><code>**굵게**  
*기울임*  
~~취소선~~</code></pre><h4 id="3-리스트">3. 리스트</h4>
<h5 id="3-1-순서-없는-리스트">3-1. 순서 없는 리스트</h5>
<pre><code>- 항목 1
- 항목 2
  - 하위 항목</code></pre><h5 id="3-2-순서-있는-리스트">3-2. 순서 있는 리스트</h5>
<pre><code>1. 첫 번째
2. 두 번째</code></pre><h4 id="4-구분선">4. 구분선</h4>
<pre><code>---</code></pre><h4 id="5-링크이미지">5. 링크/이미지</h4>
<pre><code>[링크텍스트](https://example.com)

![이미지설명](이미지주소)
</code></pre><h4 id="6-코드">6. 코드</h4>
<h5 id="6-1-인라인-코드">6-1. 인라인 코드</h5>
<pre><code>`코드`</code></pre><h5 id="6-2-여러줄-코드">6-2. 여러줄 코드</h5>
<pre><code>```python
def hello():
    print(&quot;Hello, world!&quot;)```</code></pre><h4 id="7-인용문">7. 인용문</h4>
<pre><code>&gt; 인용문입니다.</code></pre><h4 id="8-표table">8. 표/table</h4>
<pre><code>| 제목1 | 제목2 |
|-------|-------|
| 내용1 | 내용2 |
| 내용3 | 내용4 |</code></pre><h4 id="9-체크박스todo-list">9. 체크박스/todo list</h4>
<pre><code>- [x] 완료된 일
- [ ] 아직 안 한 일
</code></pre><h4 id="10-이모지">10. 이모지</h4>
<pre><code>:smile: :rocket: :fire:</code></pre><h4 id="참고-html도-함께-사용-가능">참고. html도 함께 사용 가능</h4>
<pre><code>&lt;b&gt;굵은 글씨&lt;/b&gt;
&lt;details&gt;
  &lt;summary&gt;접을 수 있는 영역&lt;/summary&gt;
  여기에 자세한 내용을 씁니다.
&lt;/details&gt;
</code></pre><p>.
.
.</p>
<p><img src="https://velog.velcdn.com/images/kwon_green/post/f351d47d-3c1c-49b4-ad21-23b388642790/image.png" alt="">
재미있는 잔디심기 으쌰으쌰 시작합니다~</p>
]]></description>
        </item>
    </channel>
</rss>