<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>cloud_kbm.log</title>
        <link>https://velog.io/</link>
        <description>클라우드/백엔드 엔지니어 지망생</description>
        <lastBuildDate>Fri, 26 Jun 2026 10:34:18 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>cloud_kbm.log</title>
            <url>https://velog.velcdn.com/images/cloud_kbm/profile/b51fb10e-766f-4e1e-a70a-024f8b563a85/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. cloud_kbm.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/cloud_kbm" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[#1. 반응형 페이지]]></title>
            <link>https://velog.io/@cloud_kbm/1.-%EB%B0%98%EC%9D%91%ED%98%95-%ED%8E%98%EC%9D%B4%EC%A7%80</link>
            <guid>https://velog.io/@cloud_kbm/1.-%EB%B0%98%EC%9D%91%ED%98%95-%ED%8E%98%EC%9D%B4%EC%A7%80</guid>
            <pubDate>Fri, 26 Jun 2026 10:34:18 GMT</pubDate>
            <description><![CDATA[<ul>
<li>반응형 페이지: 창 크기에 맞게 UI 조절.</li>
</ul>
<h1 id="1-반응형-웹-vs-적응형-웹">1. 반응형 웹 vs 적응형 웹</h1>
<h2 id="반응형-웹">반응형 웹</h2>
<p>디바이스의 종류와 화면 크기에 <strong>실시간으로 반응</strong>하여 웹 페이지를 최적화된 화면 구성으로 보여주는 웹</p>
<h2 id="적응형-웹">적응형 웹</h2>
<p>웹 페이지에서 감지된 기기를 기반으로 <strong>미리 만들어진</strong> 정적인 레이아웃을 불러오는 웹</p>
<h3 id="반응형-vs-적응형">반응형 vs 적응형</h3>
<table>
<thead>
<tr>
<th>구분</th>
<th>반응형 웹 (Responsive)</th>
<th>적응형 웹 (Adaptive)</th>
</tr>
</thead>
<tbody><tr>
<td><strong>핵심 개념</strong></td>
<td>하나의 레이아웃이 화면 크기에 따라 유동적으로 변형</td>
<td>화면 크기별 고정 레이아웃을 미리 만들어 선택</td>
</tr>
<tr>
<td><strong>레이아웃 수</strong></td>
<td>1개 (유연하게 변형)</td>
<td>여러 개 (320 / 768 / 1024 / 1440px 등 구간별)</td>
</tr>
<tr>
<td><strong>주요 단위</strong></td>
<td>상대 단위 (<code>%</code>, <code>vw</code>, <code>em</code>, <code>rem</code>, <code>fr</code>)</td>
<td>고정 단위 위주 (<code>px</code>)</td>
</tr>
<tr>
<td><strong>핵심 기술</strong></td>
<td>Flexible Grid + Flexible Image + Media Query</td>
<td>Media Query 구간 전환 / 서버 기기 감지</td>
</tr>
<tr>
<td><strong>크기 조절 시</strong></td>
<td>부드럽게 연속적으로 변함</td>
<td>브레이크포인트에서 뚝뚝 끊기며 전환(snap)</td>
</tr>
<tr>
<td><strong>성능</strong></td>
<td>모든 기기에 같은 리소스 전달 → 불필요한 로딩 가능</td>
<td>기기별 최적 리소스만 전달 가능</td>
</tr>
<tr>
<td><strong>유지보수</strong></td>
<td>코드 하나만 관리 → 수월</td>
<td>레이아웃마다 관리 → 손이 많이 감</td>
</tr>
<tr>
<td><strong>새 기기 대응</strong></td>
<td>자동 대응 (미래 기기도 OK)</td>
<td>정의된 구간 밖이면 깨질 수 있음</td>
</tr>
<tr>
<td><strong>개발 난이도</strong></td>
<td>CSS 설계가 까다로움</td>
<td>디자인·관리 부담이 큼</td>
</tr>
<tr>
<td><strong>비유</strong></td>
<td>🌊 물 — 어떤 그릇에도 모양을 맞춤</td>
<td>🥛 컵 여러 개 — 크기에 맞는 컵을 골라 담음</td>
</tr>
</tbody></table>
<blockquote>
<p><strong>반응형은 &quot;유동적으로 흐른다&quot;, 적응형은 &quot;정해진 형태로 갈아끼운다&quot;.</strong></p>
</blockquote>
<p>적응형은 naver.com</p>
<h1 id="2-viewport">2. viewport</h1>
<p>브라우저 화면 상에서 보여지는 웹페이지의 직사각형 영역</p>
<pre><code>&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;</code></pre><p>뷰포트를 설정하지 않으면 모바일 프라우저는 해당 페이지를 pc전용 페이지라고 인식한다.</p>
<h1 id="3-절대단위-vs-상대단위">3. 절대단위 vs 상대단위</h1>
<h2 id="절대단위">절대단위</h2>
<p>화면의 크기와 상관없이 일정한 크기를 유지한다. -&gt; px</p>
<h2 id="상대단위">상대단위</h2>
<p>크기가 기준에 따라 유동적인 값을 가짐. -&gt; %, em, rem, vw, vh</p>
<ul>
<li>em(부모 요소), rem(루트, 보통html): font-size 기준으로 크기나 길이를 지정하는 상대적 길이 단위<pre><code>&lt;p style=&quot;font-size: 1em&quot;&gt;1em&lt;/p&gt;
&lt;p style=&quot;font-size: 2em&quot;&gt;2em&lt;/p&gt;
&lt;p style=&quot;font-size: 3em&quot;&gt;3em&lt;/p&gt;</code></pre></li>
<li>em은 margin, padding, width, height 부모가 아닌 자기 자신의 폰트 크기에 기반한다. 폰트 사이즈와 같이 커진다.</li>
<li>rem은 기본 폰트 사이즈는 16px이다. em과 다르게 모두 root를 참조</li>
</ul>
<h1 id="4-가변-그리드">4. 가변 그리드</h1>
<ul>
<li>그리드 레이아웃을 화면사이즈에 따라 <strong>자유롭게 변형</strong>이 가능한 형태로 제작하는 방법</li>
<li>부모의 크기에 따라 자식의 크기를 조절할 수있음. -&gt; %로 조절
<img src="https://velog.velcdn.com/images/cloud_kbm/post/c4d61354-28e0-4aa7-8dea-b346e46f7409/image.png" alt="">
그리드 크기가 조절될 거임.</li>
</ul>
<h1 id="5-미디어-쿼리">5. 미디어 쿼리</h1>
<p>기기의 환경마다 다른 css를 적용시켜주는 문법 -&gt; 조건문 느낌</p>
<pre><code>@media screen and(max-width: 1023px) and (min-width: 768px)
@media (max-width:1023px)
@media all and(min-width: 768px)</code></pre><p>all이나 screen 많이 사용함</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[OpenAI ]]></title>
            <link>https://velog.io/@cloud_kbm/OpenAI</link>
            <guid>https://velog.io/@cloud_kbm/OpenAI</guid>
            <pubDate>Tue, 28 Apr 2026 07:40:54 GMT</pubDate>
            <description><![CDATA[<h1 id="1-gpt">1. GPT</h1>
<p><a href="https://platform.openai.com/home">https://platform.openai.com/home</a></p>
<blockquote>
<p>로그인 → 오른쪽 상단 프로필 클릭 
→ &quot;API keys&quot; 클릭 
→ &quot;Create new secret key&quot; 클릭 
→ 키 복사 (sk-... 로 시작하는 문자열)</p>
</blockquote>
<h2 id="env에-붙여넣기">.env에 붙여넣기</h2>
<p>sk로 시작</p>
<h2 id="2-주의사항">2. 주의사항</h2>
<ol>
<li>API키는 유료임 (사용량만큼 과금됨)</li>
</ol>
<h1 id="2-gemini">2. Gemini</h1>
<p><a href="https://aistudio.google.com/apps">https://aistudio.google.com/apps</a></p>
<blockquote>
<p>왼쪽 메뉴에서 &quot;Get API key&quot; 클릭
&quot;Create API key&quot; 클릭 → 복사</p>
</blockquote>
<h2 id="env">.env</h2>
<p>API 키</p>
<h2 id="프로젝트-번호">프로젝트 번호</h2>
<p>프로젝트 번호</p>
<h2 id="주의사항">주의사항</h2>
<p>무료 티어는 분당 5~15회, 하루 최대 1,000회 요청 제한</p>
<h2 id="사용량">사용량</h2>
<p>사용량 가서 얼마나 사용했는지 볼 수 있음. </p>
<p><img src="https://velog.velcdn.com/images/cloud_kbm/post/d9b29451-688e-4f5f-be50-39568265e2d4/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker #5 Docker Volume]]></title>
            <link>https://velog.io/@cloud_kbm/Docker-5-Docker-Volume</link>
            <guid>https://velog.io/@cloud_kbm/Docker-5-Docker-Volume</guid>
            <pubDate>Mon, 06 Apr 2026 07:44:02 GMT</pubDate>
            <description><![CDATA[<h1 id="1-docker-volume">1. Docker Volume</h1>
<ul>
<li>도커 컨테이너에서 <strong>데이터를 영속적으로 저장</strong>하기 위한 방법.</li>
<li>볼륨: 컨테이너 자체의 저장 공간을 사용하지 않고, <strong>호스트 자체의 저장 공간을 공유</strong>해서 사용하는 형태이다. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker #4 nginx]]></title>
            <link>https://velog.io/@cloud_kbm/Docker-4-nginx</link>
            <guid>https://velog.io/@cloud_kbm/Docker-4-nginx</guid>
            <pubDate>Mon, 06 Apr 2026 06:07:03 GMT</pubDate>
            <description><![CDATA[<h1 id="1-nginx란">1. nginx란?</h1>
<pre><code>사용자
  ↓
Nginx (80, 443)
  ↓
Spring Boot (9001)</code></pre><p>사용자가 요청한 것을 어느 서버로 보낼지 결정하는 것</p>
<pre><code>Nginx → blue 서버
     → green 서버</code></pre><h2 id="11-docker-pull-nginx">1.1 docker pull nginx</h2>
<pre><code>docker pull nginx</code></pre><p><img src="https://velog.velcdn.com/images/cloud_kbm/post/c1777afa-f5aa-4f2a-9c75-5de230a30cae/image.png" alt=""></p>
<pre><code>docker pull nginx:latest</code></pre><p>이거랑 같음.</p>
<h2 id="12-nginx-실행">1.2 nginx 실행</h2>
<p><img src="https://velog.velcdn.com/images/cloud_kbm/post/7d1bb109-48e6-4281-9010-3b6fc7dcd4f8/image.png" alt=""></p>
<pre><code>docker run --name webserver -d -p 80:80 nginx</code></pre><h2 id="13-nginx-삭제">1.3 nginx 삭제</h2>
<p>중단된 컨테이너에서 사용하고 있는 image 삭제하는 방법</p>
<pre><code>docker image rm -f 705</code></pre><p>컨테이너에서 사용하고 있지 않는 이미지 삭제</p>
<pre><code>docker image rm $(docker images -q)</code></pre><h1 id="2-reverse-proxy">2. Reverse Proxy</h1>
<ul>
<li>Proxy: 인터넷 접속을 할 때 보안상의 문제로 직접 통신을 주고받을 수 없을 때, 그 사이의 중계기로서 <strong>대리로 통신</strong>을 수행하는 기능<pre><code>사용자 → Nginx → Spring Boot → Nginx → 사용자</code></pre></li>
</ul>
<h1 id="3-로드-밸런싱">3. 로드 밸런싱</h1>
<pre><code>Nginx → 서버1
     → 서버2</code></pre><p>트래픽 북산</p>
<h1 id="4-httpsssl처리">4. HTTPS(SSL처리)</h1>
<pre><code>https:// → Nginx → 내부 서버(http)</code></pre><p>Spring은 http만 돌리고, Nginx가 https 처리</p>
<h1 id="5-포그라운드--백그라운드">5. 포그라운드 / 백그라운드</h1>
<ul>
<li>포그라운드: 내가 실행시킨 프로그램의 내용이 화면에서 실행되고 출력되는 상태</li>
<li>백그라운드: 내가 실행시킨 프로그램이 컴퓨터 내부적으로 실행되는 상태</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Docker #1 설명]]></title>
            <link>https://velog.io/@cloud_kbm/Docker-1-%EC%84%A4%EB%AA%85</link>
            <guid>https://velog.io/@cloud_kbm/Docker-1-%EC%84%A4%EB%AA%85</guid>
            <pubDate>Fri, 27 Mar 2026 08:07:40 GMT</pubDate>
            <description><![CDATA[<h1 id="1-컨테이너와-이미지">1. 컨테이너와 이미지</h1>
<p>이미지는 레시피, 컨테이너는 요리하는 것이다.
이미지를 실행하여 만든 것이 컨테이너 이다.</p>
<h3 id="만들어야-할-것">만들어야 할 것</h3>
<ol>
<li>Dockerfile -&gt; 이미지 생성</li>
<li>docker-compose.yml -&gt; 실행</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flask #8 DB: SQLAlchemy]]></title>
            <link>https://velog.io/@cloud_kbm/Flask-8-DB-SQLAlchemy</link>
            <guid>https://velog.io/@cloud_kbm/Flask-8-DB-SQLAlchemy</guid>
            <pubDate>Tue, 24 Mar 2026 08:47:02 GMT</pubDate>
            <description><![CDATA[<h1 id="1-sqlalchemy">1. SQLAlchemy</h1>
<h2 id="11-sql-orm-sqlalchemy">1.1 SQL, ORM, SQLAlchemy</h2>
<table>
<thead>
<tr>
<th>구분</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>SQL</td>
<td>데이터베이스를 직접 제어하는 언어</td>
</tr>
<tr>
<td>ORM</td>
<td>데이터베이스를 객체처럼 다루는 기술</td>
</tr>
<tr>
<td>SQLAlchemy</td>
<td>Python에서 SQL과 ORM을 사용할 수 있게 해주는 라이브러리</td>
</tr>
</tbody></table>
<h2 id="12-sql-vs-orm-차이">1.2 SQL vs ORM 차이</h2>
<table>
<thead>
<tr>
<th>구분</th>
<th>SQL</th>
<th>ORM</th>
</tr>
</thead>
<tbody><tr>
<td>접근 방식</td>
<td>쿼리 직접 작성</td>
<td>객체로 데이터 처리</td>
</tr>
<tr>
<td>개발 방식</td>
<td>DB 중심</td>
<td>객체 중심</td>
</tr>
<tr>
<td>가독성</td>
<td>낮음 (복잡해질수록)</td>
<td>높음</td>
</tr>
<tr>
<td>유지보수</td>
<td>어려움</td>
<td>쉬움</td>
</tr>
<tr>
<td>성능</td>
<td>높음 (직접 제어)</td>
<td>상황에 따라 비효율 발생</td>
</tr>
</tbody></table>
<h2 id="13-한-줄-정리">1.3 한 줄 정리</h2>
<ul>
<li>SQL: 데이터베이스를 직접 다루는 방식  </li>
<li>ORM: 객체를 통해 간접적으로 다루는 방식  </li>
<li>SQLAlchemy: Python에서 두 방식을 모두 지원하는 도구</li>
</ul>
<h2 id="14-sqlalchemy">1.4 SQLAlchemy</h2>
<p>SQLAlchemy는 Python에서 데이터베이스를 다루기 위한 라이브러리이다.<br>데이터베이스 연결, SQL 실행, ORM 기능까지 모두 제공한다.</p>
<h3 id="사용-하는-이유">사용 하는 이유</h3>
<ul>
<li>데이터베이스 연결을 쉽게 관리할 수 있다  </li>
<li>SQL을 직접 쓰거나 ORM을 선택해서 사용할 수 있다  </li>
<li>Python 코드 기반으로 DB를 다룰 수 있어 유지보수가 편하다  </li>
</ul>
<h1 id="2-db-설치">2. DB 설치</h1>
<pre><code>pip install flask flask_sqlalchemy pymysql</code></pre><h1 id="3-sqlalchemy-기본-문법">3. SQLAlchemy 기본 문법</h1>
<h2 id="31-db-연결">3.1 DB 연결</h2>
<pre><code>from sqlalchemy import create_engine
engine = create_engine(&quot;mysql+pymysql://root:0000@localhost:3306/flask_db&quot;)</code></pre><h2 id="32-base-생성">3.2 base 생성</h2>
<pre><code>from sqlalchemy.orm import declarative_base
Base = declarative_base()</code></pre><h2 id="33-모델-정의">3.3 모델 정의</h2>
<ul>
<li>테이블 = 클래스<pre><code>Base.metadata.create_all(engine)</code></pre></li>
</ul>
<p>실행하면 이렇게 나온다.
<img src="https://velog.velcdn.com/images/cloud_kbm/post/c27f5eb6-e476-4480-9ce6-29030a9c7d7a/image.png" alt=""></p>
<ul>
<li>table.py<pre><code>from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import declarative_base
</code></pre></li>
</ul>
<p>Base = declarative_base()
engine = create_engine(&quot;mysql+pymysql://root:0000@localhost:3306/flask_db&quot;)</p>
<p>class User(Base):
    <strong>tablename</strong> = &quot;user&quot;</p>
<pre><code>id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)</code></pre><p>Base.metadata.create_all(engine)</p>
<pre><code>
## 3.4 세션 생성

DB 작업을 실제로 실행하는 통로이다.

- engine: 연결 준비
- session: 실제 작업 실행
</code></pre><p>from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()</p>
<pre><code>
## 3.5 database crud</code></pre><p>from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker</p>
<p>engine = create_engine(&quot;mysql+pymysql://root:0000@localhost:3306/flask_db&quot;)
Base = declarative_base()
class User(Base):
    <strong>tablename</strong> = &quot;user&quot;</p>
<pre><code>id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)</code></pre><h1 id="테이블-생성">테이블 생성</h1>
<p>Base.metadata.create_all(engine)</p>
<h1 id="세션-생성">세션 생성</h1>
<p>Session = sessionmaker(bind=engine)
session = Session()</p>
<h1 id="create">Create</h1>
<p>user = User(name=&quot;짱구&quot;, age=20)
session.add(user)
session.commit()</p>
<h1 id="read">Read</h1>
<p>users = session.query(User).all()</p>
<p>for u in users:
    print(u.name)</p>
<h1 id="조건-조회">조건 조회</h1>
<p>user = session.query(User).filter(User.name == &quot;짱구&quot;).first()</p>
<h1 id="update">Update</h1>
<p>if user:
    user.name=&quot;수정된 이름&quot;
    session.commit()</p>
<h1 id="delete">Delete</h1>
<p>if user:
    session.delete(user)
    session.commit()</p>
<h1 id="세션-종료">세션 종료</h1>
<p>session.close()</p>
<p>```</p>
<p><strong>commit</strong>을 해야 실제로 반영이 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flask #7 json 응답하기, swagger 작성]]></title>
            <link>https://velog.io/@cloud_kbm/Flask-7-json-%EC%9D%91%EB%8B%B5%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@cloud_kbm/Flask-7-json-%EC%9D%91%EB%8B%B5%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 24 Mar 2026 06:05:26 GMT</pubDate>
            <description><![CDATA[<h1 id="1-json-으로-응답하기">1. Json 으로 응답하기</h1>
<pre><code>from flask import Flask
app = Flask(__name__)

@app.route(&quot;/api/hello&quot;)
def hello():
    return {
        &quot;message&quot;: &quot;Hello, Flask!&quot;,
        &quot;status&quot;: &quot;success&quot;
    }

if __name__ == &quot;__main__&quot;:
    app.run(debug=True)</code></pre><ul>
<li>Json 또한 key, value 형식이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/cloud_kbm/post/28e6813b-af77-4ed0-80d3-e8f88eb745c6/image.png" alt=""></p>
<p>하지만 Flask 공식 문서에서는 <strong>jsonify</strong>를 권장한다.</p>
<pre><code># 추가해주기
from flask import Flask, jsonify

# jsonify 사용하는 방법
def hello():
    return jsonify({
    &quot;message&quot;: &quot;success&quot;
})</code></pre><h2 id="한글로-성공-입력시-아스키로-변환되어-나타난다">한글로 성공 입력시 아스키로 변환되어 나타난다.</h2>
<p>한국어로 그래도 나타내는 방법</p>
<pre><code>app.json.ensure_ascii = False</code></pre><p>app = Flask(<strong>name</strong>) 여기에 붙여준다.</p>
<h1 id="2-swagger-문서-작성하기">2. swagger 문서 작성하기</h1>
<pre><code>pip install flasgger</code></pre><p>flasgger은 swagger앱이다.</p>
<pre><code>from flask import Flask, jsonify
from flasgger import Swagger

app = Flask(__name__)
app.json.ensure_ascii = False

Swagger(app)

@app.route(&quot;/api/hello&quot;)
def hello():
    &quot;&quot;&quot;
    간단한 Hello API
    ---
    responses:
      200:
        description: 성공 메시지 반환
        examples:
          application/json:
            message: 성공
    &quot;&quot;&quot;

    return jsonify({
    &quot;message&quot;: &quot;성공&quot;
})

if __name__ == &quot;__main__&quot;:
    app.run(debug=True)</code></pre><p><img src="https://velog.velcdn.com/images/cloud_kbm/post/e250eedd-186d-4e64-b30b-ce60b62877fd/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flask #6 Jinja2 block 개념 정리]]></title>
            <link>https://velog.io/@cloud_kbm/Flask-6-Jinja2-block-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@cloud_kbm/Flask-6-Jinja2-block-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 20 Mar 2026 10:14:45 GMT</pubDate>
            <description><![CDATA[<h1 id="1-block이란">1. Block이란?</h1>
<p>block은 템플릿 상속에서 <strong>특정 영역</strong>을 채우기 위한 공간이다.
즉, 공통 레이아웃(base.html) 만들어 두고 <strong>페이지마다 바뀌는 부분만 block으로</strong> 채워 넣는 방식이다.</p>
<h2 id="사용-하는-방법">사용 하는 방법</h2>
<pre><code>{% block title %}{% endblock %}
{% block content %}{% endblock %}
{% block style %}{% endblock %}
{% block script %}{% endblock %}</code></pre><h2 id="실습">실습</h2>
<ul>
<li><p>templates/base.html</p>
<pre><code>&lt;body&gt;
  &lt;h1&gt;🔥 공통 header&lt;/h1&gt;

  &lt;div&gt;
      {% block content %}
      기본 내용
      {% endblock %}
  &lt;/div&gt;

  &lt;h1&gt;🔥 공통 footer&lt;/h1&gt;
&lt;/body&gt;</code></pre></li>
<li><p>templates/home.html</p>
<pre><code>{% extends &#39;base.html&#39; %}
</code></pre></li>
</ul>
<p>{% block content %}</p>
<h2>🏠 홈 화면</h2>

<p>환영합니다! 이 페이지는 메인 페이지입니다.</p>

<ul>
    <li>공지사항 확인하기</li>
    <li>최근 게시글 보기</li>
    <li>마이페이지 이동</li>
</ul>

<p><button>로그인</button>
<button>회원가입</button>
{% endblock %}</p>
<pre><code>
- result.html</code></pre><p>{% extends &#39;base.html&#39; %}</p>
<p>{% block content %}</p>
<h2>📊 결과 화면</h2>

<p>입력한 데이터에 대한 결과입니다.</p>

<table border="1">
    <tr>
        <th>이름</th>
        <th>점수</th>
    </tr>
    <tr>
        <td>김철수</td>
        <td>85</td>
    </tr>
    <tr>
        <td>이영희</td>
        <td>92</td>
    </tr>
</table>

<p>평균 점수: 88.5</p>

<p><a href="/">다시 홈으로</a>
{% endblock %}</p>
<pre><code>
- main.py</code></pre><p>from flask import Flask, render_template</p>
<p>app = Flask(<strong>name</strong>)</p>
<p>@app.route(&#39;/&#39;)
def base():
    return render_template(&#39;base.html&#39;)</p>
<h1 id="홈-페이지">홈 페이지</h1>
<p>@app.route(&#39;/home&#39;)
def home():
    return render_template(&#39;home.html&#39;)</p>
<h1 id="결과-페이지">결과 페이지</h1>
<p>@app.route(&#39;/result&#39;)
def result():
    return render_template(&#39;result.html&#39;)</p>
<p>if <strong>name</strong> == &#39;<strong>main</strong>&#39;:
    app.run(debug=True)</p>
<pre><code>
# 2. 코드 설명
### base.html

전체 페이지의 공통 레이아웃을 담당한다. **거의 변하지 않는** 정적인 구조이다. 부모 html이므로, extends &#39;base.html&#39;을 통하여 상속한다. 레이아웃 상속이다.

### block의 의미</code></pre><p>{% block content %}</p>
<pre><code>
![](https://velog.velcdn.com/images/cloud_kbm/post/2c097472-6b1e-49ca-bef0-12e683f276a2/image.png)


이 부분은 나중에 **다른 템플릿**이 바꿀 수 있는 영역이다.
즉, **동적**으로 내용이 들어갈 자리(빈칸)이다.

block은 더어쓰기 가능한 영역이다.

### 기본 내용은 쓰는 이유는?</code></pre><p>{% block content %}
기본 내용
{% endblock %}</p>
<pre><code>- 자식이 block을 안 쓰면 -&gt; 기본 내용이 출력됨
- 자식이 block을 쓰면(/home 또는 /result) -&gt; 기본 내용 대신 그 내용으로 교체됨
- 기본 내용 = fallback(기본값)

![](https://velog.velcdn.com/images/cloud_kbm/post/72ce9c5e-8756-4320-a8db-5379bde9eeea/image.png)

![](https://velog.velcdn.com/images/cloud_kbm/post/6f767703-872a-4307-8279-f07f3bc34598/image.png)


# 3. request.args.getlist

- main.py</code></pre><p>@app.route(&#39;/hobby&#39;, methods=[&#39;GET&#39;])
def hobby():
    hobbies  = request.args.getlist(&#39;hobby&#39;)
    return render_template(&#39;hobby.html&#39;, hobbies=hobbies)</p>
<pre><code>
- request.args → GET 요청의 쿼리스트링 데이터를 가져옴
- getlist(&#39;hobby&#39;) → 같은 이름의 파라미터를 여러 개 리스트로 가져옴


- hobby.html</code></pre><p>{% extends &#39;base.html&#39; %}
{% block content %}</p>
<h2>취미 선택</h2>

<form method="GET">
    <input type="checkbox" name="hobby" value="게임"> 게임 <br>
    <input type="checkbox" name="hobby" value="운동"> 운동 <br>
    <input type="checkbox" name="hobby" value="독서"> 독서 <br>
    <input type="checkbox" name="hobby" value="코딩"> 코딩 <br>

<pre><code>&lt;button type=&quot;submit&quot;&gt;전송&lt;/button&gt;</code></pre></form>

<hr>
<h3>선택한 취미</h3>
<ul>
    {% for h in hobbies %}
        <li>{{ loop.index }}. {{ h }}</li>
    {% endfor %}
</ul>

<p>{% endblock %}</p>
<p>```</p>
<ul>
<li>form 태그에 있는 메소드 GET을 통하여 게임, 운동, 독서, 코딩이 List형태로 나열된다.</li>
<li>name에 있는 부분이 key가 된다.</li>
</ul>
<blockquote>
<p>hobby=게임&amp;hobby=운동 이런식으로 들어옴.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flask #5 실습3 - templates]]></title>
            <link>https://velog.io/@cloud_kbm/Flask-%EC%8B%A4%EC%8A%B5-3-templates</link>
            <guid>https://velog.io/@cloud_kbm/Flask-%EC%8B%A4%EC%8A%B5-3-templates</guid>
            <pubDate>Thu, 19 Mar 2026 08:22:05 GMT</pubDate>
            <description><![CDATA[<h1 id="1-template-engine">1. Template Engine</h1>
<p>웹을 개발하다 보면 <em>템플릿 엔진</em> 이라는 개념을 자주 접하게 된다.</p>
<h2 id="11-템플릿-엔진이란">1.1 템플릿 엔진이란?</h2>
<p>HTML에 데이터를 넣어 동적으로 페이지를 생성해주는 도구이다.
기존의 HTML은 정적인 구조를 가진다.</p>
<pre><code>&lt;h1&gt;안녕하세요 kim님&lt;/h1&gt;</code></pre><p>이름이 고정되어 있어 사용자마다 다른 값을 출력할 수 없다.
이때, Flask에서 템플릿 엔진인 <strong>Jinja2</strong>를 사용한다.</p>
<h2 id="12-jinja2">1.2 Jinja2</h2>
<p><a href="https://blog.naver.com/dldlstn6695/224204255318">https://blog.naver.com/dldlstn6695/224204255318</a>
<img src="https://velog.velcdn.com/images/cloud_kbm/post/68acb1a3-21cc-4026-b302-ea2c4211552c/image.png" alt=""></p>
<ul>
<li>app2.py<pre><code>from flask import Flask, render_template
</code></pre></li>
</ul>
<p>app = Flask(<strong>name</strong>)</p>
<p>@app.route(&#39;hello/<name>&#39;)
def hello(name):
    return render_template(&#39;index.html&#39;, username=name)</p>
<pre><code>
- templates/idex.html</code></pre><h1>안녕하세요 {{ username }}님</h1>
```

<p><img src="https://velog.velcdn.com/images/cloud_kbm/post/3c86722f-011e-4fe4-9dcd-8029637043a2/image.png" alt="">
출력완료시, 서버 로그에도 뜬다.</p>
<h3 id="코드-설명">코드 설명</h3>
<pre><code>return render_template(&#39;index.html&#39;, username=name)</code></pre><p>index.html에 있는 username에 name값을 넣어서 반환한다.</p>
<h1 id="2-조건문">2. 조건문</h1>
<ul>
<li><p>index.html</p>
<pre><code>{% if username == &quot;kim&quot; %}
  &lt;h3&gt;관리자입니다.&lt;/h3&gt;
{% else %}
  &lt;h3&gt;관리자가 아닙니다.&lt;/h3&gt;
{% endif %}</code></pre></li>
<li><p>조건문 작성할 때는 if, else, endif로 끝맺음을 한다.</p>
</li>
</ul>
<h1 id="3-반복문">3. 반복문</h1>
<ul>
<li><p>index.html</p>
<pre><code>{% for user in users %}
&lt;p&gt;{{ user }}&lt;/p&gt;
{% endfor %}</code></pre></li>
<li><p>app2.py</p>
<pre><code>@app.route(&#39;/users&#39;)
def users():
  user_list = [&quot;kim&quot;, &quot;lee&quot;, &quot;park&quot;]
  return render_template(&#39;index.html&#39;, users=user_list)</code></pre></li>
<li><p>반복문 작성할 때는 for, endfor로 끝맺음을 한다.</p>
</li>
</ul>
<h1 id="4-실습">4. 실습</h1>
<blockquote>
<p>브라우저 접속 (/)
    ↓
form.html (입력 화면)
    ↓
이름 입력 후 전송
    ↓
POST /result
    ↓
Flask가 데이터 받음
    ↓
result.html로 전달
    ↓
화면 출력</p>
</blockquote>
<ul>
<li>코드 구조</li>
</ul>
<blockquote>
<p>chap1/
├── app.py
├── static/
│   └── style.css
└── templates/
    ├── form.html
    └── result.html</p>
</blockquote>
<ul>
<li>app.py<pre><code>from flask import Flask, render_template, request
app = Flask(__name__)
</code></pre></li>
</ul>
<p>@app.route(&quot;/&quot;)
def home():
    return render_template(&quot;form.html&quot;)</p>
<p>@app.route(&#39;/result&#39;, methods = [&#39;POST&#39;])
def result():
    name = request.form[&#39;username&#39;]
    users = [&quot;kim&quot;, &quot;lee&quot;, &quot;park&quot;, name]</p>
<pre><code>return render_template(
    &#39;result.html&#39;,
    username = name,
    users=users
)</code></pre><p>if <strong>name</strong> == &#39;<strong>main</strong>&#39;:
    app.run(debug=True)</p>
<pre><code>
- form.html</code></pre><!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="{{ url_for('static', filename= 'style.css')}}">
</head>
<body>
    <h1>이름 입력</h1>
    <form action="/result" method="post">
        <input type="text" name="username" placeholder="이름 입력">
        <button type="submit">전송</button>
    </form>
</body>
</html>
```
- result.html
```
<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css')}}">
</head>
<body>
    {% if username == 'admin'%}
        <h2> 관리자 입니다. </h2>
    {% else %}
        <h2>{{username}}님. 환영합니다.</h2>
    {% endif %}

<pre><code>&lt;h3&gt;유저 목록&lt;/h3&gt;
{% for user in users %}
    &lt;p&gt;{{ loop.index }}. {{ user }}&lt;/p&gt;
{% endfor %}</code></pre></body>
</html>
```

<ul>
<li>style.css<pre><code>body {
  font-family: Arial;
  text-align: center;
}
</code></pre></li>
</ul>
<p>h1 {
    color: blue;
}</p>
<p>h2 {
    color: green;
}</p>
<p>p {
    font-size: 18px;
}</p>
<p>```</p>
<p>실행하면 admin이면 관리자입니다 하고 유저목록 나오고, admin이 아니면 유저입니다 하고 유저목록 나온다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flask #5 실습2 - Dynamic Routing]]></title>
            <link>https://velog.io/@cloud_kbm/Flask-5-%EC%8B%A4%EC%8A%B52-Dynamic-Routing</link>
            <guid>https://velog.io/@cloud_kbm/Flask-5-%EC%8B%A4%EC%8A%B52-Dynamic-Routing</guid>
            <pubDate>Thu, 19 Mar 2026 06:21:37 GMT</pubDate>
            <description><![CDATA[<h1 id="1-동적-라우팅하기">1. 동적 라우팅하기.</h1>
<pre><code>from flask import Flask, app

app = Flask(__name__)
@app.route(&#39;/user/&lt;name&gt;&#39;)
def user(name):
    return f&quot;Hello {name}&quot;

@app.route(&quot;/user/&lt;nickname&gt;&quot;)
def user(nickname):
    return f&quot;안녕하세요, {nickname}님. 소환사에 협곡에 오신것을 환영합니다.&quot;

if __name__ == &#39;__main__&#39;:
     app.run(debug=True)</code></pre><h3 id="실행">실행</h3>
<p><img src="https://velog.velcdn.com/images/cloud_kbm/post/a40f9bb8-e655-46fb-8d6a-3fa5379497d5/image.png" alt=""></p>
<h1 id="2-코드-설명">2. 코드 설명</h1>
<pre><code>return f&quot;Hello {name}</code></pre><ul>
<li>여기서 f는 <strong>f-string</strong>(문자열 포맷팅)이다.</li>
<li>f는 float가 아닌, <strong>format</strong>의 문자열을 의미한다.</li>
<li><blockquote>
<p>format은 문자열에 값을 넣어서 원하는 형태로 만드는 것을 의미한다.</p>
</blockquote>
</li>
</ul>
<h1 id="3-format-문법">3. format 문법</h1>
<pre><code>name = &quot;kim&quot;
age = 25

print(&quot;이름: {}, 나이: {}&quot;.format(name, age))</code></pre><p>출력 결과</p>
<pre><code>이름: kim, 나이: 25</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Flask #4 라우팅 / 라우터란?]]></title>
            <link>https://velog.io/@cloud_kbm/Flask-4-%EB%9D%BC%EC%9A%B0%ED%8C%85-%EB%9D%BC%EC%9A%B0%ED%84%B0%EB%9E%80</link>
            <guid>https://velog.io/@cloud_kbm/Flask-4-%EB%9D%BC%EC%9A%B0%ED%8C%85-%EB%9D%BC%EC%9A%B0%ED%84%B0%EB%9E%80</guid>
            <pubDate>Thu, 19 Mar 2026 05:56:00 GMT</pubDate>
            <description><![CDATA[<h1 id="1-라우팅-vs-라우터">1. 라우팅 vs 라우터</h1>
<h2 id="11-routing라우팅">1.1 Routing(라우팅)</h2>
<p>Routing: 요청을 어디로 보낼지 결정하는 <strong>(규칙)</strong>이다.</p>
<pre><code>@app.route(&#39;/user&#39;)
def user():
    return &quot;User Page&quot;</code></pre><p>-&gt; 라우팅 부분은 @app.route(&quot;/&quot;)이다.
/user라는 URL로 요청이 들어오면 user 함수를 실행한다.</p>
<p>즉, 라우팅은 URL과 실행될 코드(함수)를 연결하는 설정이다!</p>
<h2 id="12-router라우터">1.2 Router(라우터)</h2>
<p>Router: Routing 규칙을 실제로 적용하여 요청을 처리하는 주체이다.</p>
<pre><code>app = Flask(__name__)</code></pre><p>-&gt; app = Flask(name)
네트워크의 라우터랑은 다른 개념이다.</p>
<h2 id="13-요청-처리-흐름">1.3 요청 처리 흐름</h2>
<ol>
<li>Client가 특정 URL로 요청</li>
<li>Router가 요청을 받아서</li>
<li>Routing 규칙 확인하고</li>
<li>매칭되는 함수 실행한다.</li>
<li>결과를 클라이언트에게 반환</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flask #3 실습1 - Hello,Flask]]></title>
            <link>https://velog.io/@cloud_kbm/Flask-3-%EC%8B%A4%EC%8A%B51-HelloFlask</link>
            <guid>https://velog.io/@cloud_kbm/Flask-3-%EC%8B%A4%EC%8A%B51-HelloFlask</guid>
            <pubDate>Tue, 17 Mar 2026 10:40:26 GMT</pubDate>
            <description><![CDATA[<h1 id="1-apppy-만들기">1. app.py 만들기</h1>
<pre><code>Flask/
│
├── venv/              ← 가상환경 (건들기 x)
│
└── myapp/             ← 여기서 작업
    ├── app.py
    ├── templates/
    └── static/</code></pre><p>코드 작성하기</p>
<pre><code>from flask import Flask

app = Flask(__name__)

@app.route(&#39;/&#39;)
def hello():
    return &#39;Hello Flask!&#39;

@app.route(&quot;/home&quot;)
def home():
    return &quot;홈페이지&quot;

if __name__ == &#39;__main__&#39;:
    print(__name__)
    app.run(debug=True)
</code></pre><p>실행: python app.py</p>
<p>정상작동시, Running on <a href="http://127.0.0.1:5000%EC%9D%B4">http://127.0.0.1:5000이</a> 뜰 것이다.
들어가면 Hello Flask가 뜬다.
URL에 /home 입력시, 홈페이지라는 문구가 페이지에 나타난다.</p>
<h1 id="2-코드-설명">2. 코드 설명</h1>
<ul>
<li><p>app = Flask(<strong>name</strong>)
Flask 객체를 하나 만들고, app이라는 변수에 넣는다.</p>
</li>
<li><p><strong><strong>name</strong></strong> = 이 파일이 어떻게 실행됐는지를 알려주는 변수</p>
<pre><code>print(__name__)</code></pre></li>
</ul>
<p>출력: <strong>main</strong></p>
<ul>
<li><p>@app.route(&#39;/&#39;)
URL주소와 함수 연결.</p>
</li>
<li><p>@란?
데코레이터. 바로 아래 함수는 / 주소로 들어왔을 때 실행하라는 의미이다.</p>
</li>
<li><p>app.run(debug=True)
실행하는데, 디버그 보드 키고 실행하기</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flask #2 Flask란 무엇일까?]]></title>
            <link>https://velog.io/@cloud_kbm/Flask-2-Flask%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@cloud_kbm/Flask-2-Flask%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Tue, 17 Mar 2026 09:33:49 GMT</pubDate>
            <description><![CDATA[<h1 id="1-flask란">1. Flask란?</h1>
<p>Flask는 Python으로 웹 애플리케이션을 만들 수 있게 해주는 <strong>아주 가벼운</strong> 웹 프레임워크다.</p>
<ol>
<li>웹 서버 띄우기 </li>
<li>URL 요청을 받고</li>
<li>그 요청에 맞는 응답을 보내고</li>
<li>HTML 페이지를 보여주거나 / JSON 데이터를 반환</li>
</ol>
<h2 id="프레임워크란">프레임워크란?</h2>
<p>프레임워크는 개발할 때 기본 뼈대를 제공해주는 도구라고 생각하면 된다.</p>
<p>예를 들어 웹 서버를 직접 만든다고 하면: 요청 받는 기능, 응답 보내는 기능, URL 구분하는 기능, HTML 렌더링 등 직접 작성해야 한다.</p>
<p>Flask는 이런 기본 뼈대를 제공해 준다. 이로써, <strong>“무슨 기능을 만들지”</strong>에 집중할 수 있다.</p>
<h1 id="2-flask는-언제-쓸까">2. Flask는 언제 쓸까?</h1>
<ol>
<li><p>웹 입문
처음 웹 개발 배울 때 구조가 단순해서 이해하기 좋다.</p>
</li>
<li><p>간단한 웹 서비스
작은 프로젝트, 과제, 실습, 프로토타입 만들 때 편하다.</p>
</li>
<li><p>REST API 서버
React, Vue, 앱 프론트엔드와 연결할 백엔드 API를 만들 때 좋다.</p>
</li>
<li><p>AI / 데이터 프로젝트 백엔드
Python 기반이라서 머신러닝, 데이터 분석 코드와 붙이기 쉽다.</p>
</li>
</ol>
<h1 id="3-flask-vs-spring-boot">3. Flask vs Spring boot</h1>
<table>
<thead>
<tr>
<th>항목</th>
<th>Flask</th>
<th>Spring Boot</th>
</tr>
</thead>
<tbody><tr>
<td>언어</td>
<td>Python</td>
<td>Java</td>
</tr>
<tr>
<td>특징</td>
<td>가볍고 단순</td>
<td>기능 많고 구조화됨</td>
</tr>
<tr>
<td>구조</td>
<td>자유롭게 설계</td>
<td>정해진 구조 (Controller 등)</td>
</tr>
<tr>
<td>난이도</td>
<td>쉬움</td>
<td>어려움</td>
</tr>
<tr>
<td>사용 용도</td>
<td>빠른 개발, API, AI</td>
<td>대규모 서비스, 기업용</td>
</tr>
</tbody></table>
<h1 id="4-여러-프레임워크들">4. 여러 프레임워크들</h1>
<table>
<thead>
<tr>
<th>언어</th>
<th>프레임워크</th>
<th>특징</th>
<th>추천 용도</th>
</tr>
</thead>
<tbody><tr>
<td>Python</td>
<td>Flask</td>
<td>가볍고 단순</td>
<td>입문, API, 소규모 프로젝트</td>
</tr>
<tr>
<td>Python</td>
<td>Django</td>
<td>기능 많고 구조화됨</td>
<td>대규모 웹 서비스</td>
</tr>
<tr>
<td>Python</td>
<td>FastAPI</td>
<td>빠르고 최신</td>
<td>API 서버, 백엔드</td>
</tr>
<tr>
<td>Java</td>
<td>Spring Boot</td>
<td>안정적이고 강력함</td>
<td>기업용, 대규모 서비스</td>
</tr>
<tr>
<td>JavaScript</td>
<td>Express</td>
<td>가볍고 자유로움</td>
<td>간단한 서버, API</td>
</tr>
<tr>
<td>JavaScript</td>
<td>NestJS</td>
<td>구조화된 설계</td>
<td>팀 프로젝트, 대규모</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[Flask #1 환경 설정]]></title>
            <link>https://velog.io/@cloud_kbm/Flask-1-%EC%86%8C%EA%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@cloud_kbm/Flask-1-%EC%86%8C%EA%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95</guid>
            <pubDate>Tue, 17 Mar 2026 09:07:55 GMT</pubDate>
            <description><![CDATA[<h1 id="1-flask-환경-설정">1. Flask 환경 설정</h1>
<pre><code># venv 폴더 생성
python -m venv venv

# venv 폴더 실행하기
venv\Scripts\activate

-&gt; 완료시 (venv)

# flask 모듈 설치하기
pip install flask</code></pre><h2 id="venv란">venv란?</h2>
<p>프로젝트 전용 파이썬 환경이다. 가상환경</p>
<pre><code>내 컴퓨터
 ├── Python (기본)
 ├── 프로젝트A (venv)
 │     └── Flask 2.0
 ├── 프로젝트B (venv)
       └── Flask 3.0</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Google 초기 설정 - Gmail]]></title>
            <link>https://velog.io/@cloud_kbm/Google-%EC%B4%88%EA%B8%B0-%EC%84%A4%EC%A0%95-Gmail</link>
            <guid>https://velog.io/@cloud_kbm/Google-%EC%B4%88%EA%B8%B0-%EC%84%A4%EC%A0%95-Gmail</guid>
            <pubDate>Fri, 13 Mar 2026 10:38:29 GMT</pubDate>
            <description><![CDATA[<h1 id="gmail">Gmail</h1>
<h2 id="1-라벨링">1. 라벨링</h2>
<ul>
<li>추가 </li>
<li>라벨 색상 정하기</li>
</ul>
<h2 id="2-filter">2. filter</h2>
<ul>
<li>보낸 사람: github.com</li>
<li>필터 만들기</li>
<li>받은편지함 건너뛰기, 일치하는 대화 필터 적용, 라벨 선택</li>
</ul>
<h2 id="3-별표-맨-위-표시">3. 별표 맨 위 표시</h2>
<ul>
<li>설정 -&gt; 받은편지함 유형 -&gt; 별표 맨 위에 표시하기</li>
</ul>
<h2 id="4-ojt-on-the-job-training">4. OJT (on-the-job-training)</h2>
<p>OTJ란 이메일을 작성할 때 본문 아래에 이름, 직급, 회사 이름, 회사 주소, 연락처, 이메일 주소 등의 정보가 자동으로 추가되는 기능이다.</p>
<ul>
<li>설정 -&gt; 모든 설정 보기 -&gt; 기본설정 </li>
<li>아래로 내려서 서명란에 +새로 만들기 클릭</li>
<li>email, tel</li>
<li>편지쓰기 -&gt; 오른쪽에 펜 모양으로 서명 클릭</li>
</ul>
<h2 id="5-페이지-100개로-늘리기">5. 페이지 100개로 늘리기</h2>
<p>설정 -&gt; 모든 설정 보기 -&gt; 기본 설정 -&gt; 페이지 개수 늘리기</p>
<h2 id="6-대화-형식-사용-중지">6. 대화 형식 사용 중지</h2>
<p>설정 -&gt; 모든 설정 보기 -&gt; 기본 설정 -&gt; 대화 형식 사용 중지</p>
<h2 id="7-자주-사용-or-반복되는-답장">7. 자주 사용 or 반복되는 답장</h2>
<p>템플릿으로 저장하기.</p>
<ul>
<li>설정 -&gt; 모든 설정 보기 -&gt; 고급 -&gt; 템플릿 사용 허용</li>
<li>메일 작성하기 -&gt; 더 보기 -&gt; 템플릿 -&gt; 저장하기.</li>
<li>템플릿 사용하기</li>
</ul>
<h2 id="8-메시지-전송-취소-시간-2030초-늘리기">8. 메시지 전송 취소 시간 20~30초 늘리기</h2>
<ol>
<li>gmail은 보내기 누르고 나서 곧바로 <strong>실행 취소</strong> 누르면 전송이 취소된다.</li>
<li>설정 -&gt; 모든 설정 보기 -&gt; 기본 설정 -&gt; 전송 취소가 가능한 기간 늘리기</li>
<li>꼭 알아두기!!!!<blockquote>
<p>해당 편지함에서 취소 해야한다.</p>
</blockquote>
</li>
</ol>
<p>예를 들어서 받은편지함 -&gt; 보낸 편지함으로 옮기면 안됨.</p>
<h2 id="9-예약-기능">9. 예약 기능</h2>
<ul>
<li>내용 다 작성하고 -&gt; 보내기 오른쪽 버튼 눌러서 하기.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/cloud_kbm/post/d7125e42-9f4a-46fd-9193-fc491950cd11/image.png" alt=""></p>
<ul>
<li>수정하고 싶으면 <strong>예약됨</strong> 항목으로 가서 수정하기.</li>
<li>취소하고 싶으면 예약됨 항목으로 가서 취소하기.</li>
</ul>
<h2 id="10-비밀모드">10. 비밀모드</h2>
<ul>
<li>이메일 만료 기간 설정</li>
<li>비밀번호 입력</li>
<li>본분 내용 복사x</li>
<li>인쇄, 내려받기 안됨
<img src="https://velog.velcdn.com/images/cloud_kbm/post/88d12106-0ab2-4649-90da-60600b1b15ff/image.png" alt=""></li>
</ul>
<p>내용 작성하고 오른쪽 아래에 자물쇠 설정하기</p>
<blockquote>
<p>주의! 보내는 사람의 전화번호로 해야됨.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Google 초기 설정 - 크롬]]></title>
            <link>https://velog.io/@cloud_kbm/Google-%EC%B4%88%EA%B8%B0-%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@cloud_kbm/Google-%EC%B4%88%EA%B8%B0-%EC%84%A4%EC%A0%95</guid>
            <pubDate>Fri, 13 Mar 2026 09:45:42 GMT</pubDate>
            <description><![CDATA[<h1 id="크롬">크롬</h1>
<h2 id="1-동기화">1. 동기화</h2>
<p>크롬 -&gt; 설정 -&gt; 나의 Google의 관계 -&gt; 동기화 관리 -&gt; 검색 및 탐색 기능 개선</p>
<p><img src="https://velog.velcdn.com/images/cloud_kbm/post/a01f3723-37d7-4537-9050-9845bf00e2d5/image.png" alt=""></p>
<h2 id="2-북마크">2. 북마크</h2>
<p>나의 Google관계에서 북마크 가져올 수 있음.</p>
<h2 id="3-시크릿-모드">3. 시크릿 모드</h2>
<p>ctrl + shift + N</p>
<h2 id="4-검색엔진">4. 검색엔진</h2>
<ul>
<li>&quot;&quot; </li>
<li>and, or</li>
<li>filetype:docx</li>
<li>site</li>
<li>intitle (제목으로 찾기)</li>
<li>2015..2020</li>
</ul>
<h2 id="5-주소창-바로-가기">5. 주소창 바로 가기</h2>
<p>URL에 가서 naver.com / youtube.com -&gt; tab</p>
<h2 id="6-google-saas">6. google SaaS</h2>
<ul>
<li>drive.google.com</li>
<li>photos.google.com</li>
<li>gmail.google.com</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[React - 1일차]]></title>
            <link>https://velog.io/@cloud_kbm/React-1%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@cloud_kbm/React-1%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sun, 01 Mar 2026 12:39:12 GMT</pubDate>
            <description><![CDATA[<p><del>텍스트</del># 📌 Chapter 01. React 소개</p>
<h2 id="1️⃣-react란">1️⃣ React란?</h2>
<h3 id="🔹-react의-뜻">🔹 React의 뜻</h3>
<p>React는 <strong>사용자 인터페이스(UI)를 만들기 위한 JavaScript 라이브러리</strong>이다.<br>특히 <strong>SPA(Single Page Application)</strong> 개발에 많이 사용된다.</p>
<p>react는 화면을 여러 단위로 쪼개고 재사용하는 방식이다.</p>
<blockquote>
<p>✔ 웹 개발을 쉽게 할 수 있도록 도와주는 JavaScript 라이브러리</p>
</blockquote>
<h4 id="💡-프레임워크-vs-라이브러리">💡 프레임워크 vs 라이브러리</h4>
<ul>
<li><strong>프레임워크</strong>: 개발을 위한 기본 틀</li>
<li><strong>라이브러리</strong>: 개발에 필요한 도구 또는 기능들의 집합</li>
</ul>
<p>👉 React는 프레임워크가 아니라 <strong>UI 개발에 집중된 라이브러리</strong>이다.</p>
<p>그 전에는 서버에서 A 리소스 다운로드 -&gt; B 리소스 다운로드 했었음.</p>
<p>SPA로 서버에서 처음에 이미 A,B라는 다운로드 받고 B로 가면 새로고침이 아닌 js로 인해 새로운 페이지로 바뀌는거임.</p>
<hr>
<h3 id="🔹-react의-장점">🔹 React의 장점</h3>
<h4 id="1-트렌드성">1. 트렌드성</h4>
<ul>
<li>대중적으로 많이 사용됨</li>
<li>기업 수요가 많음</li>
<li>방대한 생태계 보유</li>
</ul>
<h4 id="2-편리성">2. 편리성</h4>
<ul>
<li>화면을 여러 단위(컴포넌트)로 나누어 관리 가능</li>
<li>재사용이 가능하여 유지보수가 쉬움</li>
<li>다양한 외부 라이브러리 활용 가능</li>
</ul>
<hr>
<h3 id="🔹-react가-트렌드화된-이유">🔹 React가 트렌드화된 이유</h3>
<ul>
<li>전통적인 웹 서비스의 문제점을 해결</li>
<li>SPA 방식(브라우저에서 화면을 그리는 방식) 도입</li>
<li>빠른 렌더링과 부드러운 사용자 경험 제공</li>
</ul>
<hr>
<h2 id="2️⃣-react의-특징">2️⃣ React의 특징</h2>
<h3 id="🔹-1-컴포넌트-기반-설계">🔹 1. 컴포넌트 기반 설계</h3>
<p>컴포넌트는 웹 페이지를 구성하는 하나의 요소이다.</p>
<ul>
<li>의미 단위로 화면을 분리</li>
<li>재사용 가능</li>
<li>유지보수성 증가</li>
</ul>
<p>👉 화면을 조각처럼 나누어 조립하는 방식</p>
<hr>
<h3 id="🔹-2-가상-dom-virtual-dom">🔹 2. 가상 DOM (Virtual DOM)</h3>
<p>React는 실제 DOM의 복사본인 <strong>가상 DOM</strong>을 사용한다.</p>
<p><img src="https://velog.velcdn.com/images/cloud_kbm/post/cea54651-33a2-45c9-9eef-4822b4c7e31d/image.png" alt=""></p>
<ul>
<li>SPA에서 동적인 변화를 효율적으로 관리</li>
<li>DOM을 직접 조작하면서 생기는 비효율 해결</li>
<li>변경된 부분만 비교(diff) 후 업데이트</li>
</ul>
<p>👉 성능 최적화에 매우 중요한 개념</p>
<hr>
<h3 id="🔹-3-그-외-특징">🔹 3. 그 외 특징</h3>
<ul>
<li>CSR(Client Side Rendering) 방식 사용</li>
<li>웹뿐만 아니라 앱 개발(React Native)도 가능</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[CloudLog Main Log]]></title>
            <link>https://velog.io/@cloud_kbm/CloudLog-main-log</link>
            <guid>https://velog.io/@cloud_kbm/CloudLog-main-log</guid>
            <pubDate>Tue, 24 Feb 2026 18:41:46 GMT</pubDate>
            <description><![CDATA[<h2 id="cloudlog-주요-메뉴-구성과-역할">CloudLog 주요 메뉴 구성과 역할</h2>
<p>CloudLog의 메뉴 구조는 단순한 화면 나열이 아니라,<br>“로그를 수집 → 분석 → 알림 → 운영 → 인프라 확인”이라는<br>운영 흐름을 기준으로 나눈 구조이다.</p>
<hr>
<h3 id="1-dashboard">1. Dashboard</h3>
<p><strong>용도</strong><br>전체 시스템 상태를 한눈에 확인하는 화면이다.</p>
<p><strong>주요 내용</strong></p>
<ul>
<li>오늘 전체 로그 수</li>
<li>에러 비율</li>
<li>P95 응답 시간</li>
<li>현재 활성 알림 수</li>
<li>로그 트렌드 그래프</li>
</ul>
<p>운영자가 접속했을 때 “지금 문제가 있는가?”를 가장 먼저 확인하는 화면이다.</p>
<hr>
<h3 id="2-log-explorer">2. Log Explorer</h3>
<p><strong>용도</strong><br>개별 로그를 직접 검색하고 분석하는 화면이다.</p>
<p><strong>주요 기능</strong></p>
<ul>
<li>error 로그 필터링</li>
<li>특정 서비스 로그 조회</li>
<li>특정 시간대 검색</li>
<li>StackTrace 확인</li>
</ul>
<p>장애 발생 시 가장 많이 사용하는 핵심 분석 화면이다.</p>
<hr>
<h3 id="3-analytics">3. Analytics</h3>
<p><strong>용도</strong><br>로그를 통계적으로 분석하는 화면이다.</p>
<p><strong>주요 내용</strong></p>
<ul>
<li>에러 유형 분포</li>
<li>평균 응답 시간</li>
<li>시간대별 활동량</li>
<li>가장 많이 발생한 이벤트 유형</li>
</ul>
<p>단기 장애 분석이 아니라, 장기적인 패턴과 추세를 분석하기 위한 화면이다.</p>
<hr>
<h3 id="4-alerts">4. Alerts</h3>
<p><strong>용도</strong><br>조건 기반 알림을 설정하는 기능이다.</p>
<p><strong>예시</strong></p>
<ul>
<li>5분 동안 error 50개 이상 발생 시 알림</li>
<li>응답 시간 2초 이상일 경우 알림</li>
</ul>
<p>운영 자동화를 위한 핵심 기능이다.</p>
<hr>
<h3 id="5-infrastructure">5. Infrastructure</h3>
<p><strong>용도</strong><br>서버 및 인프라 상태를 모니터링하는 화면이다.</p>
<p><strong>주요 내용</strong></p>
<ul>
<li>EC2 CPU 사용량</li>
<li>메모리 사용량</li>
<li>네트워크 트래픽</li>
<li>서버 상태</li>
</ul>
<p>애플리케이션 문제가 아닌, 인프라 문제인지 구분하기 위한 화면이다.</p>
<hr>
<h3 id="6-integrations">6. Integrations</h3>
<p><strong>용도</strong><br>외부 서비스와 연동하는 기능이다.</p>
<p><strong>예시</strong></p>
<ul>
<li>AWS CloudWatch</li>
<li>Slack 알림</li>
<li>Webhook</li>
<li>MongoDB 연결</li>
</ul>
<p>로그 수집 경로 및 알림 채널을 확장하기 위한 기능이다.</p>
<hr>
<h3 id="7-saved-views">7. Saved Views</h3>
<p><strong>용도</strong><br>자주 사용하는 로그 검색 조건을 저장하는 기능이다.</p>
<p><strong>예시</strong></p>
<ul>
<li>&quot;error AND service:payment&quot;</li>
<li>&quot;last 1h auth service&quot;</li>
</ul>
<p>반복적인 검색을 줄이고 분석 효율을 높이기 위한 기능이다.</p>
<hr>
<h3 id="8-users--roles">8. Users &amp; Roles</h3>
<p><strong>용도</strong><br>팀원 및 권한을 관리하는 기능이다.</p>
<p><strong>주요 내용</strong></p>
<ul>
<li>Admin / Editor / Viewer 권한 구분</li>
<li>사용자 초대</li>
<li>접근 권한 관리</li>
</ul>
<p>SaaS 형태의 서비스라면 필수적인 관리 기능이다.</p>
<hr>
<h3 id="9-settings">9. Settings</h3>
<p><strong>용도</strong><br>플랫폼 전반 설정을 관리하는 기능이다.</p>
<p><strong>주요 내용</strong></p>
<ul>
<li>로그 보관 기간 설정</li>
<li>인덱스 전략 관리</li>
<li>API 키 발급</li>
<li>조직 정보 관리</li>
</ul>
<p>시스템 환경을 제어하기 위한 기본 설정 영역이다.</p>
<hr>
<h3 id="정리">정리</h3>
<p>CloudLog의 메뉴 구조는 단순한 화면 분리가 아니라,<br>운영 관점에서 로그를 수집하고 분석하며 대응하는 전체 흐름을 반영한 구조이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CloudLog project개요]]></title>
            <link>https://velog.io/@cloud_kbm/CloudLog-project%EA%B0%9C%EC%9A%94</link>
            <guid>https://velog.io/@cloud_kbm/CloudLog-project%EA%B0%9C%EC%9A%94</guid>
            <pubDate>Tue, 24 Feb 2026 14:53:04 GMT</pubDate>
            <description><![CDATA[<h1 id="🎥-cloudlog--이벤트-기반-로그-분석-플랫폼">🎥 CloudLog – 이벤트 기반 로그 분석 플랫폼</h1>
<h2 id="1-프로젝트-개요">1. 프로젝트 개요</h2>
<p>CloudLog는 이벤트 기반 로그를 수집하고 분석하는 클라우드 지향 플랫폼입니다.</p>
<p>단순 CRUD 서비스가 아니라,<br>운영 환경에서 발생하는 로그를 수집하고 분석하는 구조를 직접 설계해보고자 시작한 프로젝트입니다.</p>
<p>이 프로젝트의 목표는 기능 구현이 아니라,<br><strong>클라우드 환경에서 로그를 수집·저장·분석·운영해보는 경험</strong>을 쌓는 것이었습니다.</p>
<hr>
<h2 id="2-프로젝트를-시작한-이유">2. 프로젝트를 시작한 이유</h2>
<p>클라우드 엔지니어는 단순히 서버를 배포하는 역할이 아니라,<br>운영 중 발생하는 로그를 기반으로 시스템 상태를 파악하고 장애를 분석하는 역할이라고 생각했습니다.</p>
<p>그래서 다음을 직접 경험해보고 싶었습니다:</p>
<ul>
<li>이벤트 기반 데이터 설계</li>
<li>로그 수집 및 분석 구조 설계</li>
<li>NoSQL 데이터 모델링</li>
<li>마이크로서비스 아키텍처 구성</li>
<li>AWS 환경 실제 배포</li>
</ul>
<p>기존 CRUD 프로젝트와 다르게,<br>“운영 도구”를 만들어보고자 했습니다.</p>
<hr>
<h2 id="3-전체-아키텍처">3. 전체 아키텍처</h2>
<p>Client
↓
Spring Boot (로그 수집 API)
↓
MongoDB (이벤트 저장)
↓
FastAPI (로그 분석)
↓
Dashboard (시각화)</p>
<h3 id="역할-분리">역할 분리</h3>
<h3 id="🔹-spring-boot">🔹 Spring Boot</h3>
<ul>
<li>이벤트 로그 수집 API</li>
<li>로그 조회 API</li>
<li>사용자 인증 처리</li>
</ul>
<h3 id="🔹-mongodb">🔹 MongoDB</h3>
<ul>
<li>로그를 Document 형태로 저장</li>
<li>Aggregation 기반 집계 처리</li>
<li>TTL Index를 통한 로그 보관 정책 실험</li>
</ul>
<h3 id="🔹-fastapi">🔹 FastAPI</h3>
<ul>
<li>로그 통계 분석</li>
<li>에러 비율 계산</li>
<li>시간대별 활동 분석</li>
<li>분석 결과 API 제공</li>
</ul>
<hr>
<h2 id="4-mongodb를-선택한-이유">4. MongoDB를 선택한 이유</h2>
<p>로그 데이터는 다음과 같은 특성이 있습니다:</p>
<ul>
<li>비정형 구조</li>
<li>필드 변경 가능성 높음</li>
<li>이벤트 중심 저장 방식</li>
<li>집계 연산 빈번</li>
</ul>
<p>이러한 특성 때문에 RDB보다 Document 기반 구조가 더 적합하다고 판단했습니다.</p>
<p>또한 다음을 실험해보고 싶었습니다:</p>
<ul>
<li>Compound Index 설계</li>
<li>TTL Index 활용</li>
<li>Aggregation Pipeline 최적화</li>
<li>대량 로그 집계 성능 테스트</li>
</ul>
<hr>
<h2 id="5-주요-기능">5. 주요 기능</h2>
<h3 id="1️⃣-dashboard">1️⃣ Dashboard</h3>
<ul>
<li>하루 전체 로그 수</li>
<li>에러 비율</li>
<li>시간대별 로그 그래프</li>
<li>최근 에러 로그 표시</li>
</ul>
<h3 id="2️⃣-log-explorer">2️⃣ Log Explorer</h3>
<ul>
<li>로그 필터링 (Level / Service / Date)</li>
<li>검색 기능</li>
<li>상세 로그 조회</li>
<li>StackTrace 확인</li>
</ul>
<h3 id="3️⃣-analytics">3️⃣ Analytics</h3>
<ul>
<li>에러 유형 분포</li>
<li>평균 응답 시간</li>
<li>시간대별 활동 분석</li>
<li>가장 많이 발생한 이벤트 유형</li>
</ul>
<h3 id="4️⃣-infrastructure-monitor">4️⃣ Infrastructure Monitor</h3>
<ul>
<li>EC2 CPU 사용량</li>
<li>메모리 사용량</li>
<li>네트워크 트래픽</li>
<li>CloudWatch 기반 모니터링</li>
</ul>
<hr>
<h2 id="6-aws-인프라-구성">6. AWS 인프라 구성</h2>
<ul>
<li>EC2 인스턴스에 Docker 기반 배포</li>
<li>Nginx Reverse Proxy 구성</li>
<li>MongoDB 컨테이너 운영</li>
<li>CloudWatch 연동</li>
<li>Security Group 및 포트 정책 구성</li>
</ul>
<p>단순 로컬 프로젝트가 아니라,<br>실제 클라우드 환경에서 동작하도록 설계했습니다.</p>
<hr>
<h2 id="7-기술적으로-고민했던-부분">7. 기술적으로 고민했던 부분</h2>
<ul>
<li>로그 인덱스 전략 설계</li>
<li>대량 데이터 집계 시 성능 문제</li>
<li>MongoDB Aggregation 최적화</li>
<li>Docker 네트워크 충돌 이슈</li>
<li>CORS 설정 문제</li>
</ul>
<p>단순 구현이 아니라,<br>“왜 이렇게 설계했는지”를 설명할 수 있도록 고민했습니다.</p>
<hr>
<h2 id="8-프로젝트를-통해-얻은-것">8. 프로젝트를 통해 얻은 것</h2>
<ul>
<li>이벤트 기반 사고방식</li>
<li>NoSQL 데이터 모델링 경험</li>
<li>마이크로서비스 구조 이해</li>
<li>AWS 배포 경험</li>
<li>운영 관점에서의 시스템 분석</li>
</ul>
<p>CloudLog는 단순 기능 구현 프로젝트가 아니라,<br>클라우드 엔지니어로 성장하기 위한 실험이었습니다.</p>
<hr>
<h2 id="9-앞으로의-계획">9. 앞으로의 계획</h2>
<ul>
<li>대량 로그 적재 후 성능 테스트</li>
<li>Auto Scaling 실험</li>
<li>Multi-AZ 구성 실험</li>
<li>CI/CD 자동 배포 구성</li>
<li>장애 시나리오 테스트</li>
</ul>
<p>인프라 중심으로 계속 확장해볼 계획입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Frozen1 - Do you wanna build a snowman]]></title>
            <link>https://velog.io/@cloud_kbm/Frozen1-Do-you-wanna-build-a-snowman</link>
            <guid>https://velog.io/@cloud_kbm/Frozen1-Do-you-wanna-build-a-snowman</guid>
            <pubDate>Tue, 03 Feb 2026 19:29:31 GMT</pubDate>
            <description><![CDATA[<table>
<thead>
<tr>
<th>영어 가사</th>
<th>한국어 번역</th>
</tr>
</thead>
<tbody><tr>
<td>Elsa?</td>
<td>엘사?</td>
</tr>
<tr>
<td>Do you wanna build a snowman?</td>
<td>눈사람 만들래?</td>
</tr>
<tr>
<td>Come on let’s go and play</td>
<td>자, 어서 나와서 같이 놀자</td>
</tr>
<tr>
<td>I never see you any more</td>
<td>난 이제 너를 거의 볼 수가 없어</td>
</tr>
<tr>
<td>Come out the door</td>
<td>문 좀 열고 나와</td>
</tr>
<tr>
<td>It’s like you’ve gone away!</td>
<td>마치 네가 멀리 떠나버린 것 같아!</td>
</tr>
<tr>
<td>We used to be best buddies</td>
<td>우린 예전에 정말 제일 친한 친구였잖아</td>
</tr>
<tr>
<td>And now we’re not</td>
<td>그런데 지금은 아니네</td>
</tr>
<tr>
<td>I wish you would tell me why</td>
<td>왜 그런지 말해줬으면 좋겠어</td>
</tr>
<tr>
<td>Do you wanna build a snowman?</td>
<td>눈사람 만들래?</td>
</tr>
<tr>
<td>It doesn’t have to be a snowman</td>
<td>꼭 눈사람일 필요는 없어</td>
</tr>
<tr>
<td>(Go away, Anna!)</td>
<td>(저리 가, 안나!)</td>
</tr>
<tr>
<td>Okay, bye</td>
<td>알겠어… 안녕</td>
</tr>
<tr>
<td>Do you wanna build a snowman?</td>
<td>눈사람 만들래?</td>
</tr>
<tr>
<td>Or ride our bike around the halls?</td>
<td>아니면 복도를 자전거 타고 돌아다닐까?</td>
</tr>
<tr>
<td>I think some company is overdue</td>
<td>난 누군가와 함께 있는 게 너무 그리워</td>
</tr>
<tr>
<td>I’ve started talking to the pictures on the walls!</td>
<td>이제는 벽에 걸린 그림이랑 얘기까지 하고 있어!</td>
</tr>
<tr>
<td>Hang in there, Joan!</td>
<td>힘내, 조안!</td>
</tr>
<tr>
<td>It gets a little lonely</td>
<td>점점 외로워져</td>
</tr>
<tr>
<td>All these empty rooms</td>
<td>이 텅 빈 방들 속에서</td>
</tr>
<tr>
<td>Just watching the hours tick by</td>
<td>시간만 흘러가는 걸 바라보고 있어</td>
</tr>
<tr>
<td>Elsa?</td>
<td>엘사?</td>
</tr>
<tr>
<td>Please, I know you’re in there</td>
<td>제발, 네가 거기 있는 거 알아</td>
</tr>
<tr>
<td>People are asking where you’ve been</td>
<td>사람들이 네가 어디 있었는지 묻고 있어</td>
</tr>
<tr>
<td>They say, “Have courage”, and I’m trying to</td>
<td>다들 “용기를 가져”라고 말하고, 나도 노력 중이야</td>
</tr>
<tr>
<td>I’m right out here for you</td>
<td>난 바로 여기서 널 기다리고 있어</td>
</tr>
<tr>
<td>Just let me in</td>
<td>그냥 문 좀 열어줘</td>
</tr>
<tr>
<td>We only have each other</td>
<td>우리에게는 서로밖에 없어</td>
</tr>
<tr>
<td>It’s just you and me</td>
<td>너와 나, 우리 둘뿐이야</td>
</tr>
<tr>
<td>What are we gonna do?</td>
<td>이제 우리는 어떻게 해야 할까?</td>
</tr>
<tr>
<td>Do you wanna build a snowman?</td>
<td>눈사람 만들래?</td>
</tr>
</tbody></table>
]]></description>
        </item>
    </channel>
</rss>