<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>wine-faster.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 24 Apr 2026 14:19:04 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>wine-faster.log</title>
            <url>https://velog.velcdn.com/images/wine-faster/profile/2187e3e1-3bfa-4b39-8b3e-30d2ba4fef50/image.gif</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. wine-faster.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/wine-faster" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Mac 개발 환경 세팅 완벽 가이드 (Java + MySQL + Node.js 한 번에 끝내기)]]></title>
            <link>https://velog.io/@wine-faster/Mac-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-Java-MySQL-Node.js-%ED%95%9C-%EB%B2%88%EC%97%90-%EB%81%9D%EB%82%B4%EA%B8%B0</link>
            <guid>https://velog.io/@wine-faster/Mac-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C-Java-MySQL-Node.js-%ED%95%9C-%EB%B2%88%EC%97%90-%EB%81%9D%EB%82%B4%EA%B8%B0</guid>
            <pubDate>Fri, 24 Apr 2026 14:19:04 GMT</pubDate>
            <description><![CDATA[<h3 id="🛠️-개발-환경-세팅-가이드-frontend--backend">🛠️ 개발 환경 세팅 가이드 (Frontend / Backend)</h3>
<p>프로젝트를 전형적으로 <strong>Frontend / Backend</strong>로 나눴다고 가정한다.
프로젝트 트리는 대략 다음과 같다.</p>
<pre><code>utrip/
 ┣ utrip-backend   ← 백엔드（Java / Spring Boot）
 ┣ utrip-frontend  ← 프론트엔드（React）
 ┣ README.md
 ┗ application.properties ← 환경 설치</code></pre><hr>
<h3 id="1️⃣-사전-환경-설치">1️⃣ 사전 환경 설치</h3>
<p>먼저 아래 환경이 필요하다:</p>
<ul>
<li>Java 17 (JDK)</li>
<li>MySQL</li>
<li>Node.js</li>
</ul>
<h4 id="✔️-설치-여부-확인">✔️ 설치 여부 확인</h4>
<p>터미널에서 아래 명령어 실행:</p>
<pre><code class="language-bash">java -version
mysql --version
npm -v</code></pre>
<p>👉 <code>11.12.1</code> 같은 <strong>버전 번호가 나오면 정상 설치 완료</strong></p>
<p>👉 <code>&quot;command not found&quot;</code>가 나오면 → 설치 안 된 상태</p>
<hr>
<h3 id="2️⃣-java-17-jdk-설치">2️⃣ Java 17 (JDK) 설치</h3>
<p>🔗 <a href="https://www.oracle.com/java/technologies/downloads/#jdk22-mac">https://www.oracle.com/java/technologies/downloads/#jdk22-mac</a>
<img src="https://velog.velcdn.com/images/wine-faster/post/41b57950-6ce4-4085-b033-4a63ebfc68cd/image.png" alt=""></p>
<h4 id="✔️-설치-방법">✔️ 설치 방법</h4>
<ol>
<li>원하는 Java 버전 다운로드</li>
<li>내 컴퓨터 아키텍처 확인:</li>
</ol>
<pre><code class="language-bash">uname -m</code></pre>
<ul>
<li><code>x86_64</code> → Intel (64비트)</li>
<li><code>arm64</code> → M1 / M2 / M3</li>
</ul>
<ol start="3">
<li>맞는 버전 다운로드 후 설치 진행 (계속 클릭)</li>
</ol>
<h4 id="✔️-설치-확인">✔️ 설치 확인</h4>
<pre><code class="language-bash">java -version</code></pre>
<p>👉 예시 출력:</p>
<pre><code>java version &quot;17.0.19&quot; 2026-04-21 LTS</code></pre><p>→ 정상 설치 완료</p>
<hr>
<h3 id="3️⃣-mysql-설치">3️⃣ MySQL 설치</h3>
<p>🔗 <a href="https://dev.mysql.com/downloads/">https://dev.mysql.com/downloads/</a></p>
<h4 id="✔️-반드시-설치해야-하는-것">✔️ 반드시 설치해야 하는 것</h4>
<ul>
<li>MySQL Community Server</li>
<li>MySQL Workbench
<img src="https://velog.velcdn.com/images/wine-faster/post/d00c4581-262f-476e-ba3c-d8bb644ad1df/image.png" alt=""></li>
</ul>
<hr>
<h4 id="31-mysql-community-server">3.1 MySQL Community Server</h4>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/d9eaedf2-e1df-4826-8de2-33935e4a68a0/image.png" alt=""></p>
<h5 id="✔️-설치-방법-1">✔️ 설치 방법</h5>
<ul>
<li>OS 선택</li>
<li>ARM / x86 확인 후 다운로드</li>
</ul>
<h5 id="⚠️-주의">⚠️ 주의</h5>
<p>설치 중 <strong>root 비밀번호 설정 필수</strong> , 반드시 기억해야 함</p>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/6c449261-55ea-45f3-8fb3-50d4dec222fd/image.png" alt=""></p>
<hr>
<h4 id="32-mysql-workbench">3.2 MySQL Workbench</h4>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/ac34edfb-57e5-47b8-ab85-6f19e2323b23/image.png" alt=""></p>
<ul>
<li>OS / 버전 선택</li>
<li>ARM / x86 맞게 다운로드</li>
</ul>
<h5 id="✔️-설치-확인-1">✔️ 설치 확인</h5>
<pre><code class="language-bash">mysql --version</code></pre>
<p>👉 예시:</p>
<pre><code>mysql  Ver 9.6.0 for macos15.7 on arm64 (Homebrew)</code></pre><p>→ 정상 설치 완료</p>
<hr>
<h3 id="4️⃣-nodejs-설치">4️⃣ Node.js 설치</h3>
<p>🔗 <a href="https://nodejs.org/en/download/current">https://nodejs.org/en/download/current</a></p>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/baa92b16-2bab-4083-86ca-3e49b4927804/image.png" alt=""></p>
<h4 id="✔️-설치-방법-2">✔️ 설치 방법</h4>
<ul>
<li>다운로드 후 바로 설치</li>
</ul>
<h4 id="✔️-설치-확인-2">✔️ 설치 확인</h4>
<pre><code class="language-bash">npm -v</code></pre>
<p>👉 예시:</p>
<pre><code>11.12.1</code></pre><p>→ 정상 설치 완료</p>
<hr>
<h3 id="5️⃣-프로젝트-실행">5️⃣ 프로젝트 실행</h3>
<h4 id="51-프론트엔드-실행">5.1 프론트엔드 실행</h4>
<ol>
<li>VSCode로 프로젝트 열기</li>
<li>터미널에서 frontend 폴더 이동</li>
</ol>
<pre><code class="language-bash">npm install</code></pre>
<p>👉 의존성 설치 (시간 소요), 그 다음에 프로젝트 실행:</p>
<pre><code class="language-bash">npm start</code></pre>
<h5 id="✔️-실행-결과">✔️ 실행 결과:</h5>
<pre><code>You can now view utrip-frontend in the browser.

Local: http://localhost:3000

webpack compiled successfully</code></pre><p>👉 브라우저에서 <code>http://localhost:3000</code> 접속, localhost 뒤에 나오는 prot 번호는 다를 수 있음.</p>
<hr>
<h4 id="52-백엔드-실행">5.2 백엔드 실행</h4>
<pre><code class="language-bash">./mvnw spring-boot:run</code></pre>
<p>👉 프로젝트에 <code>mvnw</code> 파일이 있으면 바로 실행 가능</p>
<hr>
<h3 id="6️⃣-mysql-설정-및-db-생성">6️⃣ MySQL 설정 및 DB 생성</h3>
<h4 id="61-mysql-실행">6.1 MySQL 실행</h4>
<ul>
<li>Workbench 실행</li>
<li>root 비밀번호 입력 후 접속</li>
</ul>
<hr>
<h4 id="62-applicationproperties-설정">6.2 application.properties 설정</h4>
<p>프로젝트 내 파일 수정:</p>
<pre><code class="language-properties">spring.datasource.url=jdbc:mysql://localhost:3306/utrip
spring.datasource.username=xxx
spring.datasource.password=xxx</code></pre>
<p>👉 실제 MySQL 정보와 동일하게 입력</p>
<hr>
<h4 id="63-데이터베이스-생성">6.3 데이터베이스 생성</h4>
<ol>
<li>Workbench → <strong>New SQL Tab</strong></li>
</ol>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/420c44ba-edf5-4fd7-b027-8fbcb917e8d4/image.png" alt=""></p>
<ol start="2">
<li>프로젝트에 맞는 SQL 쿼리 입력</li>
<li>⚡ 버튼 클릭하여 실행</li>
</ol>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/6d6dc9ab-0e2d-4269-aca5-73f1245b4050/image.png" alt=""></p>
<hr>
<h4 id="64-db-생성-확인">6.4 DB 생성 확인</h4>
<ul>
<li>상단 탭 → <strong>Schemas 선택</strong></li>
</ul>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/077723e9-3fcd-4069-a40b-a89ad2111d51/image.png" alt=""></p>
<p>👉 프로젝트 이름 아래 Tables 생성 확인 가능</p>
<hr>
<h3 id="✅-전체-흐름-요약">✅ 전체 흐름 요약</h3>
<ol>
<li>환경 설치 (Java / MySQL / Node)</li>
<li>프론트 실행 (<code>npm start</code>)</li>
<li>백엔드 실행 (<code>spring-boot:run</code>)</li>
<li>DB 연결 및 생성</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[unity6 TMP없을 때 해결법]]></title>
            <link>https://velog.io/@wine-faster/unity6-TMP%EC%97%86%EC%9D%84-%EB%95%8C-%ED%95%B4%EA%B2%B0%EB%B2%95</link>
            <guid>https://velog.io/@wine-faster/unity6-TMP%EC%97%86%EC%9D%84-%EB%95%8C-%ED%95%B4%EA%B2%B0%EB%B2%95</guid>
            <pubDate>Mon, 20 Apr 2026 17:37:39 GMT</pubDate>
            <description><![CDATA[<p>unity6를 새로 설치했는데, 텍스트를 넣으려고 하는데 TMP가 안 보이는 경우,</p>
<p>Window - Package Management - Package Manager - Unity Registy 여기에 들어가서,</p>
<p>uGUI 검새해서 다운로드, 그러면 다 해결 돼요~</p>
<p>저도 이 것 때문에 고생해서 공유합니다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[파이썬 입문  - 변수와 자료형(숫자형, 문자열)]]></title>
            <link>https://velog.io/@wine-faster/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%AC%B8-%EB%B3%80%EC%88%98%EC%99%80-%EC%9E%90%EB%A3%8C%ED%98%95%EC%88%AB%EC%9E%90%ED%98%95-%EB%AC%B8%EC%9E%90%EC%97%B4</link>
            <guid>https://velog.io/@wine-faster/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%AC%B8-%EB%B3%80%EC%88%98%EC%99%80-%EC%9E%90%EB%A3%8C%ED%98%95%EC%88%AB%EC%9E%90%ED%98%95-%EB%AC%B8%EC%9E%90%EC%97%B4</guid>
            <pubDate>Sat, 18 Apr 2026 03:30:42 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>본 파이썬 강의는 맥북용 <strong>Visual Studio Code 편집기</strong>를 기반으로 진행되는 강의입니다. 우선 해당 프로그램을 컴퓨터에 다운로드받는 걸 권장드립니다. 또한 맥북과 윈도우스는 실행 환경이 좀 다를 수 있으니 참고 부탁드립니다.
<a href="https://code.visualstudio.com/download">https://code.visualstudio.com/download</a></p>
</blockquote>
<hr>
<h2 id="컴파일-언어와-인터프리터-언어">컴파일 언어와 인터프리터 언어</h2>
<h3 id="개념">개념</h3>
<ul>
<li><p><strong>컴파일 언어</strong>
→ 0과 1만 읽을 수 있는 컴퓨터를 위해, 사람의 언어를 컴파일을 통해 컴퓨터가 이해 가능한 언어로 해석해.</p>
</li>
<li><p><strong>인터프리터 언어</strong>
→ 코드를 한 줄씩 해석하면서 실행해.</p>
</li>
<li><p>C 언어는 컴파일 언어고, <strong>파이썬</strong>은 <strong>인터프리터</strong> 언어야.</p>
</li>
</ul>
<hr>
<h3 id="파이썬-기본-규칙">파이썬 기본 규칙</h3>
<ul>
<li>들여쓰기를 엄격하게 지켜야 해.</li>
<li>문법을 깔끔하게 지켜야 해.</li>
</ul>
<hr>
<h2 id="파이썬은-어디에-쓰일까">파이썬은 어디에 쓰일까?</h2>
<ul>
<li>웹 프로그래밍: <code>Django</code>, <code>FastAPI</code>, <code>Flask</code></li>
<li>인공지능과 머신러닝: <code>TensorFlow</code>, <code>PyTorch</code></li>
<li>수치 연산 프로그래밍: <code>NumPy</code></li>
<li>데이터 분석: <code>pandas</code></li>
<li>데이터베이스 프로그래밍: <code>SQLite</code>, <code>MySQL</code></li>
</ul>
<p>이것들이 파이썬이랑 무슨 관계냐고?</p>
<p>→ 위에 나열한 것들은 모두 <strong>Python 언어에서 사용하는 도구(라이브러리 또는 프레임워크)</strong>야.</p>
<pre><code class="language-bash">pip install django</code></pre>
<p>터미널에 위 명령어를 작성해서 실행하면, 로컬또는 가상 환경에 바로 설치해서 사용할 수 있어.</p>
<hr>
<h2 id="변수variable">변수(Variable)</h2>
<p>먼저 파이썬 문법을 배우기 전에 변수에 대해 알아보자.</p>
<blockquote>
<p>변수 = 데이터를 담아두는 상자</p>
</blockquote>
<p><code>a = 3</code></p>
<p>위 연산을 보면, 우리는 보통 <em>a는 3과 같다</em>고 말하지만,
코딩에서는 <strong>&quot;3이라는 숫자를 a라는 상자에 담는다&quot;</strong>라고 해석해. </p>
<p>그래서 파이썬으로 코딩하다보면 <code>a = a + 1</code> 와 같은 연산을 많이 보게 될거야, 하지만 만약 우리가 평소에 알던 수학 연산으로 생각하면 완전 말이 안되는 연산이지, 이 규칙을 이해하기 위해서 상자 안에 무엇을 담을 수 있을까 알아 볼까?</p>
<hr>
<h2 id="자료형data-type">자료형(Data Type)</h2>
<p>상자 안에 담는 내용을 알기 위해 <strong>자료형(Data Type)</strong>을 알아보자.</p>
<p>자료형은 다음과 같은 종류가 있어:</p>
<ul>
<li>숫자</li>
<li>문자열</li>
<li>불(Boolean)</li>
<li>리스트(List)</li>
<li>튜플(Tuple)</li>
<li>딕셔너리(Dictionary)</li>
<li>집합(Set)</li>
</ul>
<p>이렇게 다양한 자료형을 가진 데이터를 변수 상자에 담을 수 있어.</p>
<blockquote>
<p>자료형은 컴퓨터가 데이터를 어떤 종류로 인식하고 다루는지 알려주는 <strong>라벨표</strong>라고 생각하면 쉬워.</p>
</blockquote>
<p>예를 들어:</p>
<pre><code>a = &quot;안녕하세요&quot;   # 문자열
a = 12345        # 숫자</code></pre><p>파이썬은 데이터의 종류를 자료형으로 구분해서,
어떤 연산을 할 수 있는지, 어떻게 저장할지를 결정해줘.</p>
<hr>
<h2 id="숫자형number">숫자형(Number)</h2>
<p>먼저 숫자형을 알아보자. 크게 두 가지를 사용해.</p>
<h3 id="1-int-정수형">1. int (정수형)</h3>
<blockquote>
<p>소수점이 없는 숫자.</p>
</blockquote>
<ul>
<li>양수, 음수, 0 모두 가능해.</li>
<li>나이, 페이지 번호, 사람 수 등에 사용해.</li>
</ul>
<pre><code>a = 10000       # 양의 정수
b = -5          # 음의 정수
c = 0           # 0

print(type(a))  # &lt;class &#39;int&#39;&gt;가 terminal에 출력됨</code></pre><p><img src="https://velog.velcdn.com/images/wine-faster/post/57b1a3aa-fc5c-41c6-a353-fe8c846a4663/image.png" alt=""></p>
<blockquote>
<p>() 안에 b, c로 바꿔서 뭐가 출력되는지 직접 확인해봐.</p>
</blockquote>
<hr>
<h4 id="실행-방법">실행 방법</h4>
<p>코드는 보통 편집기에 작성해.
터미널을 열어서 이렇게 입력하면 실행할 수 있어:</p>
<pre><code class="language-bash">python3 파일이름.py</code></pre>
<p>터미널은 상단 메뉴바에서 Terminal - New Terminal에서 열 수 있어. <img src="https://velog.velcdn.com/images/wine-faster/post/0302f77e-7bb6-46c6-a2a0-b5933ecbaf72/image.png" alt=""></p>
<hr>
<h4 id="연산">연산</h4>
<p>연산자는 이렇게 있어:</p>
<ul>
<li>더하기 <code>+</code></li>
<li>빼기 <code>-</code></li>
<li>곱하기 <code>*</code></li>
<li>나누기 <code>/</code></li>
<li>제곱 <code>**</code></li>
<li>나머지 <code>%</code></li>
<li>몫 <code>//</code></li>
</ul>
<p>정수는 사칙연산(+, -, *, /)을 주로 사용해.</p>
<pre><code>a = 123
b = 1.9
c = 7

print(a + c)    # 130이 출력됨</code></pre><blockquote>
<p>나머지와 몫이 좀 낯설 수 있는데, 예시를 들어보자.
<code>7 ÷ 2 =</code> 몫 3, 나머지 1이야.</p>
</blockquote>
<pre><code>d = 10

print(d // 3)   # 3 출력
print(d % 3)    # 1 출력</code></pre><hr>
<h3 id="2-float-실수형">2. float (실수형)</h3>
<blockquote>
<p>소수점이 있는 숫자.</p>
</blockquote>
<ul>
<li>키, 몸무게, 평균 점수 등에 사용해.</li>
</ul>
<pre><code>x = 3.14
y = -2.5
z = 0.0
height = 158.7

print(type(x))  # &lt;class &#39;float&#39;&gt; 출력</code></pre><p><img src="https://velog.velcdn.com/images/wine-faster/post/848a6605-e8ba-4ee8-9295-e2c535d559e4/image.png" alt=""></p>
<blockquote>
<p>() 안에 y, z로 바꿔서 확인해봐.</p>
</blockquote>
<hr>
<h2 id="문자열string">문자열(String)</h2>
<p>이제 문자열을 알아보자.</p>
<p>문자열을 표현하는 방법은 4가지가 있어:</p>
<ul>
<li><code>&quot;안녕&quot;</code> (큰따옴표)</li>
<li><code>&#39;안녕&#39;</code> (작은따옴표)</li>
<li><code>&quot;&quot;&quot;안녕&quot;&quot;&quot;</code> (큰따옴표 3개)</li>
<li><code>&#39;&#39;&#39;안녕&#39;&#39;&#39;</code> (작은따옴표 3개)</li>
</ul>
<p>다양한 문자열 표현 방식은 문자열 안에 따옴표를 포함할 때 특히 유용해.</p>
<pre><code>e = &quot;배가 고프다!&quot;         
f = &#39;123&#39;                  
g = &quot;&quot;&quot;I&#39;m hungry&quot;&quot;&quot;      
h = &#39;&#39;&#39;I miss you!&#39;&#39;&#39;     

print(type(e))  # &lt;class &#39;str&#39;&gt;</code></pre><p><img src="https://velog.velcdn.com/images/wine-faster/post/281fcb37-baa7-429c-9a38-13c09d5ce4aa/image.png" alt=""></p>
<hr>
<h3 id="줄바꿈">줄바꿈</h3>
<p>줄 바꿈을 하고 싶으면 <code>\n</code>을 사용하면 돼.</p>
<pre><code>i = &quot;오늘은 날씨가 좋은데 \n 뭘 먹을까나?&quot;
print(i)</code></pre><p><img src="https://velog.velcdn.com/images/wine-faster/post/77c7e2a0-b062-4f5d-8a9d-7be6d6f14fb4/image.png" alt=""></p>
<hr>
<h3 id="문자열-연산">문자열 연산</h3>
<p>문자열(str)은 숫자처럼 더하기(+) 와 곱하기(*) 연산을 할 수 있어.
하지만 빼기(-)나 나누기(/)는 할 수 없어.</p>
<ol>
<li>문자열 더하기 (문자열 연결)</li>
</ol>
<ul>
<li>&#39;+&#39; 기호를 사용하면 두 문자열을 붙여서 하나의 문자열로 만들 수 있어.</li>
</ul>
<pre><code>name = &quot;선배님&quot;
greeting = &quot;안녕하세요!&quot;

print(greeting + name)           # 안녕하세요!선배님
print(greeting + &quot; &quot; + name)     # 안녕하세요! 선배님   (공백 추가)

first = &quot;Hello&quot;
second = &quot;World&quot;
print(first + &quot; &quot; + second)      # Hello World</code></pre><ul>
<li>문자열과 숫자를 바로 더하면 오류가 발생할 수 있어!<pre><code>  print(&quot;나는 &quot; + 14 + &quot;살입니다.&quot;)   # ← 오류 발생!</code></pre></li>
</ul>
<ol start="2">
<li>문자열 곱하기 (반복)</li>
</ol>
<ul>
<li>문자열과 숫자를 *로 곱하면, 그 문자열을 숫자만큼 반복해.<pre><code>print(&quot;안녕&quot; * 3)          # 안녕안녕안녕
print(&quot;★&quot; * 10)            # ★★★★★★★★★★
print(&quot;=&quot; * 20)            # ====================</code></pre></li>
</ul>
<hr>
<h3 id="문자열-인덱싱-index">문자열 인덱싱 (Index)</h3>
<ul>
<li><p>문자열은 하나하나의 글자가 순서대로 나열되어 있어.</p>
</li>
<li><p>각 글자에 번호(위치)를 붙여서 접근할 수 있는데, 이걸 인덱싱이라고 해.</p>
</li>
<li><p>인덱스는 항상 0부터 시작해! </p>
</li>
<li><p>대괄호 [ ]를 사용해서 접근.</p>
</li>
<li><p>코드 예시: </p>
<pre><code>fruit = &quot;apple&quot;

print(fruit[0])   # a   ← 첫 번째 글자
print(fruit[1])   # p
print(fruit[2])   # p
print(fruit[3])   # l
print(fruit[4])   # e

# 음수 인덱스 (뒤에서부터 세기)
print(fruit[-1])  # e   ← 마지막 글자
print(fruit[-2])  # l
print(fruit[-3])  # p</code></pre><p>** print할 때 범위를 벗어나면 오류가 발생하니까 주의해.</p>
</li>
<li><p>시각화로 이해하기:</p>
<pre><code>문자열:   a  p  p  l  e
인덱스:    0  1  2  3  4
음수인덱스:      -3 -2 -1</code></pre></li>
</ul>
<hr>
<h3 id="문자열-슬라이싱-slicing">문자열 슬라이싱 (Slicing)</h3>
<ul>
<li><p>인덱스를 이용해서 문자열의 일부분을 잘라서 가져오는 것을 슬라이싱이라고 해. </p>
</li>
<li><p>형식: 문자열[시작:끝], <strong>시작</strong> 위치는 <strong>포함</strong>,<strong>끝</strong> 위치는 <strong>포함하지 않음</strong>.</p>
<pre><code>word = &quot;python&quot;

print(word[0:2])    # py     (0부터 2 전까지)
print(word[2:5])    # tho
print(word[0:4])    # pyth

# 처음부터 특정 위치까지
print(word[:3])     # pyt    (0부터 3 전까지)

# 특정 위치부터 끝까지
print(word[3:])     # hon

# 전체 문자열 복사
print(word[:])      # python</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[추상적 자료구조 큐와 스택에 대해 알아보기]]></title>
            <link>https://velog.io/@wine-faster/%EC%B6%94%EC%83%81%EC%A0%81-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%81%90%EC%99%80-%EC%8A%A4%ED%83%9D%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@wine-faster/%EC%B6%94%EC%83%81%EC%A0%81-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%81%90%EC%99%80-%EC%8A%A4%ED%83%9D%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Thu, 16 Apr 2026 10:21:24 GMT</pubDate>
            <description><![CDATA[<h2 id="스택stack과-큐queue">스택(Stack)과 큐(Queue)</h2>
<p>스택, 큐는 일종의 규칙이다. 이 두 개는 <strong>추상적 데이터 구조</strong>라고 부른다.</p>
<p>추상적 데이터 구조는 자료 구조의 하나의 형태이다. 코드로 정의된 것이 아니라 그렇게 부른다.</p>
<hr>
<h3 id="스택stack">스택(Stack)</h3>
<p>먼저 스택에 대해서 알아볼까?</p>
<p>우리가 샌드위치를 만들었다고 가정해 보자.
접시에 차곡차곡 쌓을 때 가장 최근에 만든 샌드위치가 맨 위에 있겠지,
반대로 가장 처음에 만든 샌드위치는 바닥에 깔려 있어.</p>
<p>그럼 우리가 샌드위치를 먹을 때 가장 마지막에 만든 샌드위치를 가장 먼저 먹겠지.
우리는 이를 <strong>Last In, First Out (LIFO)</strong>이라고 해.</p>
<hr>
<h3 id="큐queue">큐(Queue)</h3>
<p>큐는 말 그대로 줄을 선다고 생각하면 돼.
가장 먼저 온 사람이 첫 줄에 서겠지.</p>
<p>간단한 예시를 들면, 콘서트 티켓팅이 바로 큐 규칙을 사용해.
예매 버튼을 빨리 누른 사람이 티켓팅에 성공하지!</p>
<p>우리는 이를 <strong>First In, First Out (FIFO)</strong>이라고 해.</p>
<hr>
<h3 id="정리">정리</h3>
<p>그럼 정리해 보면,</p>
<ul>
<li><p>스택은 샌드위치를 쌓는 것 같아.
→ <strong>위에서만 요소를 읽거나 삭제할 수 있어.</strong></p>
</li>
<li><p>큐는 줄을 서는 것 같아.
→ 새로운 요소는 <strong>큐 맨 뒤에 추가되고</strong>,
→ <strong>큐의 맨 앞 요소만 읽거나 삭제될 수 있어.</strong></p>
</li>
</ul>
<p>스택과 큐는 추상적 데이터 구조라, 규칙들만 이해하면 돼.</p>
<hr>
<h3 id="언제-사용할까">언제 사용할까?</h3>
<p>언제 큐를 쓰고 언제 스택을 쓰는지 질문한다면,</p>
<ul>
<li><p>웹 서핑을 한다고 생각해 봐.
뒤로 가기를 누르면 바로 앞 페이지로 넘어가지.
→ 이거는 <strong>스택의 개념이야.</strong></p>
</li>
<li><p>큐는
→ 이메일 전송
→ 쇼핑몰 주문
→ 콜센터 전화
같은 경우에 사용돼.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Q&A로 배우는 쿠버네티스  ]]></title>
            <link>https://velog.io/@wine-faster/QA%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4</link>
            <guid>https://velog.io/@wine-faster/QA%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4</guid>
            <pubDate>Wed, 15 Oct 2025 12:06:59 GMT</pubDate>
            <description><![CDATA[<p>✨ 쿠버네티스는 뭐지? 그럼 도커는? 도커와 쿠버네티스의 관계는? 어떤 상황에서 쿠버네티스가 필요한지 궁금하다면 Q&amp;A로 배워보자.</p>
<blockquote>
<p><strong>Q: 쿠버네티스는 뭐에요?</strong></p>
</blockquote>
<ul>
<li>쿠버네티스는 컨테이너화된 워크로드(Workload) 와 서비스를 자동으로 배포, 스케일링 및 관리해주는 오픈 소스 시스템입니다.</li>
</ul>
<blockquote>
<p><strong>Q: 워크로드(Workload)뭐에요?</strong></p>
</blockquote>
<ul>
<li><p>워크로드는 시스템에 의해 수행되거나 처리되어야 하는 작업의 양 또는 종류를 포괄적으로 일컫는 말입니다.</p>
</li>
<li><p>웹 서버(Nginx, Apache), 데이터베이스(MySQL, PostgreSQL), 백엔드 API 서비스, 배치 처리 프로그램, 머신러닝 모델 추론 서비스 등 사용자에게 서비스를 제공하거나 내부 시스템을 운영하는 모든 애플리케이션이나 프로세스가 워크로드에 해당합니다.</p>
</li>
</ul>
<blockquote>
<p> <strong>Q: &quot;컨테이너화&quot;된다는 것은 무슨 의미인가요?</strong></p>
</blockquote>
<ul>
<li>애플리케이션 코드와 그 실행에 필요한 모든 종속성 (운영체제 라이브러리, 환경 변수, 설정 파일, 런타임 등)이 하나의 컨테이너 이미지로 묶여 있음을 의미합니다. </li>
<li>또한 이 패키지(이미지)는 어떤 환경(개발자 노트북, 테스트 서버, 클라우드 환경)에서도 동일한 실행 환경을 보장하며, 실행되면 컨테이너라는 격리된 공간에서 작동합니다.</li>
</ul>
<blockquote>
<p><strong>Q: 컨테이너 이미지는 무엇인가요?</strong></p>
</blockquote>
<ul>
<li>컨테이너 이미지(Container Image)는 컨테이너를 생성하는 데 사용되는 읽기 전용 템플릿이자 독립 실행 가능한 정적 패키지입니다.</li>
<li>쉽게 말해, 애플리케이션을 실행하기 위해 필요한 모든 것(코드, 런타임, 시스템 도구, 라이브러리, 설정 파일)을 하나의 파일 시스템으로 묶어 놓은 &#39;청사진&#39; 또는 &#39;스냅샷&#39;이라고 이해할 수 있습니다.</li>
</ul>
<blockquote>
<p><strong>Q: 도커의 역할은 무엇인가요?</strong></p>
</blockquote>
<ul>
<li><p>이미지 생성: 개발자는 도커(Docker) 플랫폼을 사용하여 애플리케이션 코드와 모든 종속성을 묶어 컨테이너 이미지를 만듭니다.</p>
</li>
<li><p>컨테이너 실행: 도커 엔진은 이 컨테이너 이미지를 로드하여 도커 컨테이너라는 격리된 실행 환경을 생성합니다. 컨테이너가 실행되면, 이는 독립된 하나의 워크로드가 됩니다.</p>
</li>
</ul>
<blockquote>
<p><strong>Q: 쿠버네티스의 역할(오케스트레이션)은 무엇인가요?</strong></p>
</blockquote>
<ul>
<li><p>배포 및 확장: 서비스 규모가 커지면, 수십, 수백 개의 컨테이너가 필요해지고 이들을 여러 대의 서버(노드)에 분산시켜야 합니다. 이때 쿠버네티스가 등장합니다.</p>
</li>
<li><p>클러스터 관리: 쿠버네티스는 레지스트리에서 컨테이너 이미지를 다운로드받아 클러스터 내의 각 서버에 도커 컨테이너를 생성하고 관리합니다.</p>
</li>
<li><p>운영 자동화: 쿠버네티스는 컨테이너의 상태를 모니터링하며, 컨테이너가 죽으면 자동으로 다시 시작하고(Self-healing), 트래픽이 몰리면 컨테이너 수를 자동으로 늘립니다(Scaling).</p>
</li>
</ul>
<blockquote>
<p><strong>Q: 도커, 쿠버네티스의 관계는 뭐에요?</strong></p>
</blockquote>
<ul>
<li>쿠버네티스는 도커의 상위 개념이 아닙니다. 상호 보완적이며 계층적인 관계입니다.</li>
<li>도커는 애플리케이션을 포장하고 실행하는 하위 수준 기술입니다. (컨테이너 런타임 환경 제공)</li>
<li>쿠버네티스는 이 포장된 애플리케이션(컨테이너)을 대규모로 효율적으로 배포 및 관리하는 상위 수준 관리 시스템입니다. (오케스트레이션 제공)</li>
</ul>
<blockquote>
<p><strong>Q: 그럼 쿠버네티스의 오케스트레이션과 자동화의 차이는 뭔가요?</strong></p>
</blockquote>
<ul>
<li><p>자동화 (Automation): 개별적이고 반복적인 작업을 스크립트나 도구를 사용해 인간의 개입 없이 처리하는 것입니다. (예: 서버에 패치 설치, 백업 실행)</p>
</li>
<li><p>오케스트레이션 (Orchestration): 여러 개의 자동화된 작업과 시스템들을 통합하고, 이들 간의 복잡한 상호 작용 및 순서를 조율하여 전체적인 목표(워크플로)를 달성하는 것입니다.</p>
</li>
<li><p>오케스트레이션은 여러 자동화된 구성 요소를 엮어내는 상위 관리 기술이며, 쿠버네티스가 바로 이 컨테이너 오케스트레이션의 가장 강력하고 널리 사용되는 도구입니다.</p>
</li>
</ul>
<blockquote>
<p>Q: 쿠버네티스의 오케스트레이션이 제공하는 주요 기능은 뭔가요?</p>
</blockquote>
<table>
<thead>
<tr>
<th>기능</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><strong>스케줄링 (Scheduling)</strong></td>
<td>컨테이너를 실행할 최적의 서버(노드)를 찾아 컨테이너를 배치합니다.</td>
</tr>
<tr>
<td><strong>자동 복구 (Self-healing)</strong></td>
<td>컨테이너가 실패하거나 서버가 다운되면 자동으로 컨테이너를 재시작하거나 다른 서버로 옮겨 재배치합니다.</td>
</tr>
<tr>
<td><strong>스케일링 (Scaling)</strong></td>
<td>사용자의 명령이나 트래픽 부하에 따라 컨테이너 복제본 수를 자동으로 늘리거나(Scale Out) 줄입니다(Scale In).</td>
</tr>
<tr>
<td><strong>서비스 디스커버리 및 로드 밸런싱</strong></td>
<td>컨테이너 그룹에 단일 진입점(Service)을 제공하고, 들어오는 요청을 실행 중인 여러 컨테이너에 균등하게 분산시킵니다.</td>
</tr>
<tr>
<td><strong>롤아웃 및 롤백</strong></td>
<td>새로운 버전의 애플리케이션을 배포할 때 점진적으로 교체하며, 문제가 생기면 즉시 이전 버전으로 안전하게 되돌립니다.</td>
</tr>
<tr>
<td><strong>스토리지 오케스트레이션</strong></td>
<td>컨테이너가 데이터를 저장하고 접근할 수 있도록 영구 스토리지(Persistent Storage)를 자동으로 마운트하고 관리합니다.</td>
</tr>
</tbody></table>
<blockquote>
<p>*<em>Q: 도커, 도커 이미지, 컨테이너, 쿠버네티스의 상관 관계 정리 *</em></p>
</blockquote>
<table>
<thead>
<tr>
<th>기술 요소</th>
<th>핵심 역할</th>
<th>생성/실행 관계</th>
<th>상위/하위 관계</th>
</tr>
</thead>
<tbody><tr>
<td><strong>컨테이너 이미지</strong></td>
<td>애플리케이션의 설계도 (정적 패키지)</td>
<td>컨테이너를 만드는 원본 템플릿</td>
<td>가장 하위의 &quot;무엇을 실행할지&quot; 정의</td>
</tr>
<tr>
<td><strong>도커 (Docker)</strong></td>
<td>컨테이너를 만들고 실행하는 기술 플랫폼/엔진</td>
<td>이미지를 기반으로 컨테이너를 생성하고 실행</td>
<td>컨테이너 기술의 기반</td>
</tr>
<tr>
<td><strong>도커 컨테이너 (Docker Container)</strong></td>
<td>실행 중인 애플리케이션의 격리된 인스턴스</td>
<td>이미지가 도커 엔진에 의해 실행된 결과물</td>
<td>쿠버네티스의 주요 관리 대상</td>
</tr>
<tr>
<td><strong>쿠버네티스 (Kubernetes)</strong></td>
<td>컨테이너의 대규모 배포 및 자동 관리 (오케스트레이션)</td>
<td>실행 중인 컨테이너의 라이프사이클을 통제</td>
<td>가장 상위의 &quot;어떻게 운영할지&quot; 결정</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[블록체인 기술 아직도 모른다면...이제는 정말 클리어! ]]></title>
            <link>https://velog.io/@wine-faster/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EC%88%A0-%EC%95%84%EC%A7%81%EB%8F%84-%EB%AA%A8%EB%A5%B8%EB%8B%A4%EB%A9%B4...%EC%9D%B4%EC%A0%9C%EB%8A%94-%EC%A0%95%EB%A7%90-%ED%81%B4%EB%A6%AC%EC%96%B4</link>
            <guid>https://velog.io/@wine-faster/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EA%B8%B0%EC%88%A0-%EC%95%84%EC%A7%81%EB%8F%84-%EB%AA%A8%EB%A5%B8%EB%8B%A4%EB%A9%B4...%EC%9D%B4%EC%A0%9C%EB%8A%94-%EC%A0%95%EB%A7%90-%ED%81%B4%EB%A6%AC%EC%96%B4</guid>
            <pubDate>Sat, 04 Oct 2025 22:55:50 GMT</pubDate>
            <description><![CDATA[<h2 id="시작하며">시작하며</h2>
<p>아래에서 언급하는 정의는 아마 수도없이 들어봤을거다, 하지만 &quot;그래서 뭐?&quot;, 정의에 대해 아무리 여러 번 읽어도 여전히 블록체인을 이해할 수 없는 분들을 위해 이 글을 쓴다.</p>
<blockquote>
<p>&quot;블록체인은 블록에 데이터를 담아 체인 형태로 연결하여, 수많은 컴퓨터에 동시에 이를 복제해 저장하는 분삭형 데이터 저장 기술이다.&quot;</p>
</blockquote>
<h1 id="정의보다는-작동-원리-이해가-우선">정의보다는 작동 원리 이해가 우선</h1>
<h3 id="1-그림으로-보는-블록체인"><strong>1. 그림으로 보는 블록체인</strong></h3>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/f7ff877f-0ae7-48d0-b637-e4a7afd8e49c/image.png" alt=""></p>
<pre><code>출처: 데일리투머로우</code></pre><hr>
<h3 id="2단계별로-보는-작동-방식"><strong>2.단계별로 보는 작동 방식</strong></h3>
<p>정리하면 블록체인의 6단계 작동 원리를 따른다.</p>
<table>
<thead>
<tr>
<th><strong>단계</strong></th>
<th><strong>명칭</strong></th>
</tr>
</thead>
<tbody><tr>
<td>1단계</td>
<td>거래(Transaction) 발생 및 생성</td>
</tr>
<tr>
<td>2단계</td>
<td>네트워크 전파 및 검증 (P2P Network)</td>
</tr>
<tr>
<td>3단계</td>
<td>블록으로 모으기 (Block Creation)</td>
</tr>
<tr>
<td>4단계</td>
<td>합의 및 승인 (Consensus Mechanism)</td>
</tr>
<tr>
<td>5단계</td>
<td>체인 연결 및 기록 (Chain Linkage)</td>
</tr>
<tr>
<td>6단계</td>
<td>분산 저장 및 불변성 확보 (Distribution &amp; Immutability)</td>
</tr>
</tbody></table>
<h4 id="✅-1단계-거래transaction-발생-및-생성">✅ 1단계: 거래(Transaction) 발생 및 생성</h4>
<p>사용자 A가 사용자 B에게 디지털 자산(예: 코인)을 전송하는 등의 거래를 요청한다. 이 요청은 <strong>개인 키(Private Key)</strong>로 서명되어 거래의 유효성(소유권)을 증명한다.</p>
<h4 id="✅-2단계-네트워크-전파-및-검증-p2p-network">✅ 2단계: 네트워크 전파 및 검증 (P2P Network)</h4>
<p>생성된 거래는 P2P(Peer-to-Peer, 개인 간) 네트워크에 연결된 <strong>모든 노드(Node, 참여 컴퓨터)</strong>에게 전파.
노드들은 이 거래를 받아 유효성을 검증. (예: 송금자가 잔액이 충분한지, 서명이 올바른지 등)</p>
<h4 id="✅-3단계-블록으로-모으기-block-creation">✅ 3단계: 블록으로 모으기 (Block Creation)</h4>
<p>유효한 것으로 검증된 거래들은 <strong>채굴자(Miner)</strong>나 <strong>검증자(Validator)</strong>와 같은 특정 노드에 의해 수집되어 하나의 <strong>블록(Block)</strong>으로 묶인다.</p>
<p>새로운 블록은 다음 세 가지 주요 정보로 구성된다:</p>
<table>
<thead>
<tr>
<th><strong>주요 정보</strong></th>
<th><strong>설명</strong></th>
</tr>
</thead>
<tbody><tr>
<td>데이터 (Data)</td>
<td>수많은 거래 기록</td>
</tr>
<tr>
<td>논스 (Nonce)</td>
<td>합의 과정을 위해 찾는 임의의 숫자 (PoW 방식의 경우)</td>
</tr>
<tr>
<td>이전 블록 해시 (Previous Hash)</td>
<td>바로 직전 블록의 고유한 식별값</td>
</tr>
</tbody></table>
<h4 id="✅-4단계-합의-및-승인-consensus-mechanism">✅ 4단계: 합의 및 승인 (Consensus Mechanism)</h4>
<p>이는 새로운 블록이 정당하고 유효한지 네트워크 전체가 동의하는 과정이다.</p>
<table>
<thead>
<tr>
<th><strong>합의 방식</strong></th>
<th><strong>설명</strong></th>
</tr>
</thead>
<tbody><tr>
<td>PoW (작업 증명)</td>
<td>채굴자가 복잡한 수학 문제(논스 찾기)를 풀어 작업을 증명하고 블록 생성 권한을 획득.</td>
</tr>
<tr>
<td>PoS (지분 증명)</td>
<td>코인을 많이 스테이킹(Stake)한 검증자가 확률적으로 선택되어 블록을 검증하고 승인.</td>
</tr>
<tr>
<td>네트워크</td>
<td>이 과정을 통해 거래 기록의 일관성(Consistency)을 유지.</td>
</tr>
</tbody></table>
<h4 id="✅-5단계-체인-연결-및-기록-chain-linkage">✅ 5단계: 체인 연결 및 기록 (Chain Linkage)</h4>
<p>합의를 통해 승인된 블록은 <strong>암호화 해시(Cryptographic Hash)</strong>를 이용하여 기존 블록체인의 맨 끝에 연결된다.</p>
<p>해시는 블록의 모든 정보를 압축한 고유한 지문이다.</p>
<p>새 블록에 포함된 <strong>&#39;이전 블록 해시&#39;</strong>가 블록들을 시간순으로 끊어지지 않게 <strong>체인(Chain)</strong>처럼 연결한다.</p>
<h4 id="✅-6단계-분산-저장-및-불변성-확보-distribution--immutability">✅ 6단계: 분산 저장 및 불변성 확보 (Distribution &amp; Immutability)</h4>
<p>새롭게 연결된 블록체인의 사본이 네트워크에 참여하는 모든 노드에 분산 저장된다.</p>
<table>
<thead>
<tr>
<th><strong>특성</strong></th>
<th><strong>설명</strong></th>
</tr>
</thead>
<tbody><tr>
<td>분산성</td>
<td>모든 참여자가 동일한 원장(장부)의 사본을 가지므로 중앙 통제가 불가능합니다.</td>
</tr>
<tr>
<td>불변성</td>
<td>만약 누군가 과거 블록의 데이터를 조작하려고 하면, 그 블록의 해시 값이 바뀌고, 그 이후에 연결된 모든 블록의 해시 값이 연쇄적으로 바뀌게 됩니다. 다수의 노드들이 이를 비교하여 잘못된 사본임을 즉시 감지하고 거부하므로 위변조가 사실상 불가능해집니다.</td>
</tr>
</tbody></table>
<hr>
<h1 id="특징으로-보는-블록체인"><strong>특징으로 보는 블록체인</strong></h1>
<p>블록체인이 기존 시스템과 결정적으로 다른 이유는 딱 <strong>세 가지</strong>다.</p>
<blockquote>
</blockquote>
<p><strong>불변성, 인센티브 메커니즘, 분산 원장</strong></p>
<h4 id="1-불변성immutability과-무결성">1. 불변성(Immutability)과 무결성</h4>
<p>블록체인은 거짓된 정보를 기록할 수 없다.</p>
<p>데이터는 해시 연결과 합의 메커니즘을 통해 한 번 기록되면, 그 누구도 임의로 수정하거나 삭제하는 것이 불가능하다, 이것이 불변성이다.</p>
<p>이처럼 데이터가 위변조되지 않고 원래 상태를 유지하는 성질은 <strong>무결성(Integrity)</strong>이라고 부른다. 데이터의 물결성은 데이터의 신뢰성을 극한으로 끌어올린 것이다.</p>
<h4 id="2-인센티브-메커니즘">2. 인센티브 메커니즘</h4>
<p>인센티브 메커니즘이란, 분산된 네트워크 참여자들이 자신의 이익을 추구하는 과정에서 자연스럽게 네트워크 전체의 이익에 기여하도록 유도하는 경제적/기술적 설계이다.</p>
<p>인센티브 메커니즘은 <strong>주로 퍼블릭 블록체인에서 나타난다</strong>, 퍼블릭(무허가형) 블록체인은 신뢰할 수 없는(Trustless) 익명의 다수 참여자들로 구성되서 그렇다.
따라서 그들의 악의적인 행동을 억제하며 네트워크 유지하기 위해선 인센티브 메커니즘 꼭 필요하다.</p>
<p>예를들어 <strong>합의 과정(채굴 또는 검증)</strong>에 참여하여 블록체인 네트워크를 유지하는 <strong>노드(또는 사용자)</strong>들에게 <strong>보상(코인 또는 수수료)</strong>을 지급한다.</p>
<p>다만, 보상은 참여 노드의 <strong>&#39;기여도&#39;에 따라 보상이 차등 지급</strong>된다. 더 많은 자원(컴퓨팅 파워, 지분)을 투입하고 검증에 성공한 노드가 더 많은 보상을 가져갈 가능성이 크다는 뜻이다.</p>
<table>
<thead>
<tr>
<th><strong>구성 요소</strong></th>
<th><strong>내용</strong></th>
<th><strong>비고</strong></th>
</tr>
</thead>
<tbody><tr>
<td>블록 보상 (Block Reward)</td>
<td>합의 과정에 성공하여 새로운 블록을 블록체인에 추가하는 기여자에게 새롭게 발행된 암호화폐를 지급한다.</td>
<td>시간이 지남에 따라 보상량이 감소하도록 설계되는 경우가 많음 (예: 비트코인 반감기).</td>
</tr>
<tr>
<td>거래 수수료 (Transaction Fee)</td>
<td>네트워크 사용자가 거래 처리를 위해 지불하는 수수료를 블록 생성자에게 지급한다.</td>
<td>네트워크가 성숙하고 블록 보상이 감소할수록 중요한 주요 수익원이 된다.</td>
</tr>
</tbody></table>
<h4 id="3-분산-원장-distributed-ledger">3. 분산 원장 (Distributed Ledger)</h4>
<p>블록체인은 <strong>중앙 서버 없이</strong> 네트워크 참여자(노드)들에게 정보(거래 내역)가 복제되어 <strong>분산 저장</strong>되는 분산 원장(Distributed Ledger) 특성을 가진다.</p>
<p>이는 다수의 사용자가 서로 정보를 공유하기 때문이다. </p>
<p>이러한 분산 저장 방식 덕분에 특정 노드 한두 개가 다운되어도 전체 네트워크는 문제없이 유지되며, 모든 참여자가 동일한 정보를 볼 수 있어 투명성과 가용성이 보장된다.</p>
<hr>
<h1 id="인센티브-메커니즘-작동-방식">인센티브 메커니즘 작동 방식</h1>
<p>인센티브 메커니즘은 블록체인이 어떤 <strong>합의 알고리즘(Consensus Algorithm)</strong>을 채택하느냐에 따라 구체적인 방식이 달라진다</p>
<table>
<thead>
<tr>
<th><strong>합의 방식</strong></th>
<th><strong>참여자</strong></th>
<th><strong>주요 인센티브 (보상)</strong></th>
</tr>
</thead>
<tbody><tr>
<td>작업 증명 (PoW)</td>
<td>채굴자 (Miner)</td>
<td>블록 보상 + 거래 수수료</td>
</tr>
<tr>
<td>지분 증명 (PoS)</td>
<td>검증자 (Validator)</td>
<td>수수료 및 이자 형태의 보상</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[MUSIA ONE으로 나만의 신곡 만들기]]></title>
            <link>https://velog.io/@wine-faster/MUSIA-ONE%EC%9C%BC%EB%A1%9C-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%8B%A0%EA%B3%A1-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@wine-faster/MUSIA-ONE%EC%9C%BC%EB%A1%9C-%EB%82%98%EB%A7%8C%EC%9D%98-%EC%8B%A0%EA%B3%A1-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Sat, 02 Aug 2025 06:42:18 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>MUSIA ONE사용법에 앞서 곡의 구성(SONG FORM)을 알아보자.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/e78efbb2-6646-41c7-9c24-ce0a88690ca1/image.svg" alt=""></p>
<h2 id="🎵-song-form">🎵 SONG FORM</h2>
<h3 id="🎬-intro-인트로">🎬 INTRO (인트로)</h3>
<ul>
<li>가사가 없는 전주 부분</li>
<li>분위기를 서서히 잡아주며, 곡의 시작을 알린다</li>
<li><strong>생략 가능</strong></li>
</ul>
<hr>
<h3 id="🎙-verse-벌스">🎙 VERSE (벌스)</h3>
<ul>
<li>노래가 본격적으로 시작되는 파트</li>
<li>스토리나 메시지를 전달하며, <strong>노래의 분위기를 형성</strong></li>
<li>보통 반복되며 가사는 매번 달라지는 경우가 많다</li>
</ul>
<hr>
<h3 id="🎙-pre-chorus-프리-코러스">🎙 PRE-CHORUS (프리 코러스)</h3>
<ul>
<li><strong>후렴으로 넘어가기 전</strong>의 연결 파트</li>
<li>긴장감과 기대감을 조성하여 <strong>감정의 고조를 유도</strong></li>
<li><strong>생략 가능</strong></li>
</ul>
<hr>
<h3 id="🌟-chorus-코러스--후렴">🌟 CHORUS (코러스 / 후렴)</h3>
<ul>
<li>노래의 <strong>가장 중요한 파트</strong></li>
<li>감정이 가장 고조되는 부분이며, <strong>가장 기억에 남도록</strong> 만들어야 한다</li>
<li>보통 반복되며, 가사나 멜로디가 거의 동일</li>
</ul>
<hr>
<h3 id="🎙-bridge-브리지">🎙 BRIDGE (브리지)</h3>
<ul>
<li>보통 두 번째 코러스 이후 등장</li>
<li>주 멜로디와 <strong>다른 리듬과 분위기로 전환</strong>하여, 곡에 변화를 준다</li>
<li><strong>코러스와 코로스를 자연스럽게 연결</strong>해주는 역할을 한다</li>
</ul>
<hr>
<h3 id="🎬-outro-아웃트로">🎬 OUTRO (아웃트로)</h3>
<ul>
<li>가사가 끝난 후의 마무리 파트</li>
<li>인트로와 유사한 연주로 <strong>곡의 여운을 남기며 종료</strong></li>
</ul>
<h2 id="🎵-song-form-한눈에-보기">🎵 SONG FORM 한눈에 보기</h2>
<table>
<thead>
<tr>
<th>파트명</th>
<th>설명</th>
<th>비고</th>
</tr>
</thead>
<tbody><tr>
<td><strong>INTRO</strong></td>
<td>가사가 없는 전주. 분위기를 서서히 잡아주며 곡의 시작을 알림.</td>
<td>생략 가능</td>
</tr>
<tr>
<td><strong>VERSE</strong></td>
<td>노래가 시작되는 부분. 스토리와 분위기를 형성하며 곡의 기반이 됨.</td>
<td>필수</td>
</tr>
<tr>
<td><strong>PRE-CHORUS</strong></td>
<td>후렴 전 긴장감과 기대감을 조성. 감정의 고조를 유도함.</td>
<td>생략 가능</td>
</tr>
<tr>
<td><strong>CHORUS</strong></td>
<td>후렴. 가장 고조되는 파트로, 가장 기억에 남는 멜로디와 가사로 구성됨.</td>
<td>필수, 반복됨</td>
</tr>
<tr>
<td><strong>BRIDGE</strong></td>
<td>두 코러스를 연결하며 분위기 전환을 유도. 주 멜로디와는 다른 리듬을 사용하는 경우가 많음.</td>
<td>선택적 변화 요소</td>
</tr>
<tr>
<td><strong>OUTRO</strong></td>
<td>곡의 마무리. 가사가 끝나고 연주로 여운을 남기며 종료함.</td>
<td>생략 가능</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[내 벨로그 꾸미기(마크다운 문법 정리)]]></title>
            <link>https://velog.io/@wine-faster/%EB%82%B4-%EB%B2%A8%EB%A1%9C%EA%B7%B8-%EA%BE%B8%EB%AF%B8%EA%B8%B0%EB%A7%88%ED%81%AC%EB%8B%A4%EC%9A%B4-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@wine-faster/%EB%82%B4-%EB%B2%A8%EB%A1%9C%EA%B7%B8-%EA%BE%B8%EB%AF%B8%EA%B8%B0%EB%A7%88%ED%81%AC%EB%8B%A4%EC%9A%B4-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Thu, 22 May 2025 16:38:36 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>🟢 <strong>벨로그</strong>는 _GitHub Flavored Markdown(<strong>GFM</strong>)_을 <strong>기반</strong>으로 하여, 표준 마크다운 문법과 일부 확장 기능을 지원한다.
🟢 <strong>마크다운</strong>은 직관적인 _문법_으로 문서 작성과 콘텐츠 제작을 효율적으로 만들어주는 도구</p>
</blockquote>
<hr>
<h3 id="🟧-제목-추가">🟧 제목 추가</h3>
<p>🔻 제목은 # 기호를 사용하여 1~6단계까지 표현</p>
<pre><code># H1 제목
## H2 부제목
### H3 소제목
#### H4
##### H5
###### H6</code></pre><p>🔎 미리보기</p>
<h1 id="h1-제목">H1 제목</h1>
<h2 id="h2-부제목">H2 부제목</h2>
<h3 id="h3-소제목">H3 소제목</h3>
<h4 id="h4">H4</h4>
<h5 id="h5">H5</h5>
<h6 id="h6">H6</h6>
<hr>
<h3 id="🟧-텍스트-서식">🟧 텍스트 서식</h3>
<p>🔻 텍스트를 강조하거나 스타일을 적용할 수 있다</p>
<pre><code>**굵은 글씨** 또는 __굵은 글씨__
*기울임* 또는 _기울임_
~~취소선~~
`인라인 코드`</code></pre><p>🔎 미리보기
<strong>굵은 글씨</strong> 또는 <strong>굵은 글씨</strong>
<em>기울임</em> 또는 <em>기울임</em>
<del>취소선</del>
<code>인라인 코드</code></p>
<hr>
<h3 id="🟧-목록-lists">🟧 목록 (Lists)</h3>
<p>🔻 순서 없는 목록(글머리 기호)</p>
<pre><code>- 항목 1
- 항목 2
  - 하위 항목 2.1
  - 하위 항목 2.2
* 대시(-) 대신 * 사용 가능</code></pre><p>🔎 미리보기</p>
<ul>
<li>항목 1</li>
<li>항목 2<ul>
<li>하위 항목 2.1</li>
<li>하위 항목 2.2</li>
</ul>
</li>
<li>항목 3</li>
</ul>
<p>🔻 순서 있는 목록(번호)</p>
<pre><code>1. 첫 번째
2. 두 번째
</code></pre><p>🔎 미리보기</p>
<ol>
<li>첫 번째</li>
<li>두 번째</li>
</ol>
<hr>
<h3 id="🟧-표">🟧 표</h3>
<p>🔻 열을 |로 구분, 헤더는 -로 정의</p>
<pre><code>| 제목1 | 제목2 | 제목3 |
|-------|-------|-------|
| 내용1 | 내용2 | 내용3 |
| 내용4 | 내용5 | 내용6 |</code></pre><p>🔎 미리보기</p>
<table>
<thead>
<tr>
<th>제목1</th>
<th>제목2</th>
<th>제목3</th>
</tr>
</thead>
<tbody><tr>
<td>내용1</td>
<td>내용2</td>
<td>내용3</td>
</tr>
<tr>
<td>내용4</td>
<td>내용5</td>
<td>내용6</td>
</tr>
</tbody></table>
<hr>
<h3 id="🟧-수평선">🟧 수평선</h3>
<p>🔻 섹션을 구분할 때 사용</p>
<pre><code>---
또는
***</code></pre><p>🔎 미리보기</p>
<hr>
<h3 id="🟧-체크리스트">🟧 체크리스트</h3>
<pre><code>- [x] 완료된 작업
- [ ] 미완료 작업</code></pre><p>🔎 미리보기</p>
<ul>
<li><input checked="" disabled="" type="checkbox"> 완료된 작업</li>
<li><input disabled="" type="checkbox"> 미완료 작업</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[svg는 뭔가요? jpg, png와의 관계는?]]></title>
            <link>https://velog.io/@wine-faster/svg%EB%8A%94-%EB%AD%94%EA%B0%80%EC%9A%94-jpg-png%EB%9E%91%EA%B3%BC-%EA%B4%80%EA%B3%84%EB%8A%94</link>
            <guid>https://velog.io/@wine-faster/svg%EB%8A%94-%EB%AD%94%EA%B0%80%EC%9A%94-jpg-png%EB%9E%91%EA%B3%BC-%EA%B4%80%EA%B3%84%EB%8A%94</guid>
            <pubDate>Thu, 22 May 2025 15:05:21 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>🟢 <strong>svg</strong>는 <em>벡터</em> 이미지 형식으로, 크기를 조정해도 퀄리티를 잃지 않는 파일이다.
🟢 <strong>벡터</strong>는 _크기_와 _방향_을 모두 가진 양이다, 예를들어 힘, 가속도.</p>
</blockquote>
<h3 id="🟧-svg의-기본-개념">🟧 svg의 기본 개념</h3>
<p>🔸 SVG(Scalable Vector Graphics)
🔸 벡터 그래픽 형식으로, XML 기반의 텍스트 파일로 저장
🔸 이미지의 경로, 모양, 색상을 수학적 공식으로 정의하여, 크기 조정 시에도 품질 손실 없음</p>
<h3 id="🟧-svg의-활용처">🟧 svg의 활용처</h3>
<p>🔸 웹 디자인: 스케일 가능한 아이콘, 로고, 그래픽 제작.
🔸 인쇄: T-셔츠 등 스케일이 중요한 템플릿 제작.
🔸 대화형 그래픽: JavaScript를 통해 애니메이션 및 동적 그래픽 구현.</p>
<h3 id="🟧-svg의-장단점">🟧 svg의 장단점</h3>
<p>🔸 장점</p>
<ul>
<li>크기 조정 시 품질 유지 가능</li>
<li>압축 시 파일 크기 감소 가능, 품질 저하 없음</li>
<li>스크린 리더로 텍스트 읽기 가능</li>
<li>JavaScript로 인터랙티브 가능</li>
</ul>
<p>🔹 단점</p>
<ul>
<li>사진이나 복잡한 이미지에는 부적합(예: 원화)</li>
<li>오래된 브라우저(예: IE 8 이하)에서 호환성 문제</li>
</ul>
<h3 id="🟧-svg-jpg와-png와의-비교">🟧 svg, JPG와 PNG와의 비교</h3>
<table>
<thead>
<tr>
<th>측면</th>
<th>SVG</th>
<th>JPG</th>
<th>PNG</th>
</tr>
</thead>
<tbody><tr>
<td>유형</td>
<td>벡터 (수학적 공식 기반)</td>
<td>라스터 (픽셀 기반, 손실 압축)</td>
<td>라스터 (픽셀 기반, 손실없는 압축)</td>
</tr>
<tr>
<td>확장성</td>
<td>무한 확장 가능, 품질 손실 없음</td>
<td>확대 시 품질 손실</td>
<td>확대 시 픽셀화 가능</td>
</tr>
<tr>
<td>사용 사례</td>
<td>로고, 아이콘, 웹 그래픽</td>
<td>사진, 복잡한 이미지</td>
<td>텍스트, 배경 없는 이미지</td>
</tr>
<tr>
<td>파일 크기</td>
<td>압축 시 작음 (SVGZ 20-50% 감소)</td>
<td>중간, 손실 압축으로 크기 줄임</td>
<td>크기 큼, 손실없는 압축</td>
</tr>
<tr>
<td>기타 기능</td>
<td>검색/인덱싱 가능, JavaScript로 인터랙티브</td>
<td>정적 이미지, 메타데이터 제한</td>
<td>정적 이미지, 투명도 지원</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[인디자인 pdf 저장 시 스프레드 오류 해결 방법]]></title>
            <link>https://velog.io/@wine-faster/%EC%9D%B8%EB%94%94%EC%9E%90%EC%9D%B8-pdf-%EC%A0%80%EC%9E%A5-%EC%8B%9C-%EC%8A%A4%ED%94%84%EB%A0%88%EB%93%9C-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@wine-faster/%EC%9D%B8%EB%94%94%EC%9E%90%EC%9D%B8-pdf-%EC%A0%80%EC%9E%A5-%EC%8B%9C-%EC%8A%A4%ED%94%84%EB%A0%88%EB%93%9C-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Sun, 09 Feb 2025 19:43:25 GMT</pubDate>
            <description><![CDATA[<p>🔴 이와 동일한 오류가 발생했다면 주목
<img src="https://velog.velcdn.com/images/wine-faster/post/f89da5c7-c900-49b7-956d-7dae43615bb8/image.png" alt=""></p>
<p><em>친절하게 어느 스프레드에 오류가 발생했는지 알려줄 때도 있고, 그냥 PDF 저장 오류만 뜰 수 있음.</em>
<em>우선 어느 스프레드에 오류가 발생했는지 찾는 방법부터 알아보자</em></p>
<hr>
<h3 id="오류난-스프레드-찾는-방법">오류난 스프레드 찾는 방법</h3>
<p>1️⃣ 바탕화면에 <strong>텍스트 문서</strong> 하나 만들기
 🔸 파일명은 <em>DisableAsyncExports</em>
 🔸 본문 내용은 그냥 공백으로 둔다
 <img src="https://velog.velcdn.com/images/wine-faster/post/0c430664-1145-4375-85ab-b76448b5fa1f/image.png" alt=""></p>
<p>2️⃣ adobe Indesign이 있는 파일을 찾는다
🔸 보통 따로 지정하지 않았더라면 로콜 디스크(C:) Program Files나 Program Files(x86)에 있음
<img src="https://velog.velcdn.com/images/wine-faster/post/528cef49-5da7-4b5e-a14b-c440299dced1/image.png" alt="">
🔸 파일 진입 후 Adobe 파일 찾기
<img src="https://velog.velcdn.com/images/wine-faster/post/4939a1f9-1de8-4cc5-a768-d8d7c813085e/image.png" alt="">
🔸 해당 파일에서 내가 지금 작업하고 있는 인디자인 버전 찾기
<img src="https://velog.velcdn.com/images/wine-faster/post/1cbfce64-2636-4b95-9cd0-287afc7326e7/image.png" alt=""></p>
<p>3️⃣ 바탕화면에 생성한 _DisableAsyncExports_을 원하는 인디자인 파일에 드래그해서 안에다 넣기</p>
<p>4️⃣ 인디자인에 돌아와서 창-유틸리티-배경 작업 열기
<img src="https://velog.velcdn.com/images/wine-faster/post/a27e9a35-39cd-4bc3-b50f-80b5e2161b89/image.png" alt=""></p>
<p>5️⃣ 그럼 이런 화면이 나옴</p>
<p>🔸 이거를 통해서 pdf로 저장할 때 어디에 오류가 발생했는지 확인 가능
<img src="https://velog.velcdn.com/images/wine-faster/post/e6463544-b0fb-4f5f-b028-0a288fd96a69/image.png" alt=""></p>
<p>6️⃣ 이제 다시 pdf로 내보내기 실행
🔸 그러면 아래 이미지처럼 저장되는 과정이 ui로 표시됨
<img src="https://velog.velcdn.com/images/wine-faster/post/f2fea06c-4fbf-4543-ba0f-9b4e4bed3d42/image.png" alt="">
🔸 만약 저장 중에 에러가 생기면 여기서 바로 오류가 떠서 확인 가능</p>
<h3 id="스프레드-오류-해결-방법">스프레드 오류 해결 방법</h3>
<p><em>이제 스프레드 오류 해결 방법 알아보자, 어떤 페이지가 오류 났는지 표시해주지만, 정확히 무슨 오류인지는 친절히 알려주지 않는다.</em></p>
<p><em>그래서 가능하다면 오류난 스프레드를 지워서 다시 만드는 게 가장 효과적이다.</em></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[가상화와 도커(Docker) 개념]]></title>
            <link>https://velog.io/@wine-faster/%EA%B0%80%EC%83%81%ED%99%94%EC%99%80-%EB%8F%84%EC%BB%A4Docker</link>
            <guid>https://velog.io/@wine-faster/%EA%B0%80%EC%83%81%ED%99%94%EC%99%80-%EB%8F%84%EC%BB%A4Docker</guid>
            <pubDate>Fri, 03 Jan 2025 06:59:57 GMT</pubDate>
            <description><![CDATA[<h3 id="🌷-intro">🌷 INTRO</h3>
<hr>
<h4 id="🌾-도커-도커-컨테이너-도커-이미지">🌾 도커? 도커 컨테이너? 도커 이미지?</h4>
<p>도커라는 말이 나오면, 컨테이너, 이미지 등 
여러 개념을 접하게 되는데, 
각각 어떤 흐름으로 사용되는지 앞서, 
그 관계성에 대해서 간략히 집고 넘어간다.
아래 그림으로 설명하자면,
<img src="https://velog.velcdn.com/images/wine-faster/post/50dffc11-7cd8-491c-81d8-868fe6a5c1c5/image.png" alt=""></p>
<ul>
<li><strong>도커</strong>는 <strong>컨테이너</strong>를 관리하는 프로그램</li>
<li><strong>도커 이미지</strong>는 <strong>컨테이너</strong>를 만들기 위한 템플릿 즉 설계도</li>
<li><strong>도커 컨테이너</strong>는 <strong>도커 이미지</strong>가 실행되는 환경</li>
<li><strong>컨테이너</strong>와 <strong>이미지</strong>는 둘 중 하나가 누락되면 존재 할 수 없다, 둘은 <strong>쌍둥이</strong>라고 생각해면 쉽다.</li>
</ul>
<h4 id="🌾-도커">🌾 도커</h4>
<ul>
<li>도커는 응용 프로그램과 그 종속성을 격리된 환경인 컨테이너로 패키징하여 실행할 수 있도록 해주는 플랫폼</li>
<li>이를 통해 다양한 환경에서 프로그램을 일관되게 실행할 수 있으며, 개발과 운영 환경 간의 차이로 인한 문제를 최소화</li>
</ul>
<h4 id="🌾-도커-이미지">🌾 도커 이미지</h4>
<ul>
<li><strong>정의</strong><ul>
<li>도커 이미지는 컨테이너를 생성하기 위한 템플릿이나 설계도로, 실행할 프로그램과 그에 필요한 파일 및 의존성을 포함하고 있음</li>
</ul>
</li>
<li><strong>사용 방법</strong><ul>
<li>이미지는 각 컨테이너에 실행 환경을 정의, Dockerfile이라는 설정 파일에 기반하여 생성</li>
<li>이 파일에는 설치할 소프트웨어와 그 설정이 명시되어 있음</li>
</ul>
</li>
<li><strong>장점</strong><ul>
<li>도커 레지스트리를 통해 다른 개발자와 쉽게 공유 가능</li>
<li>이미지는 변경 불가하며, 새 버전은 기존 이미지 기반으소 생성</li>
</ul>
</li>
</ul>
<h4 id="🌾-도커-컨테이너">🌾 도커 컨테이너</h4>
<ul>
<li><strong>정의</strong><ul>
<li>도커 컨테이너는 도커 이미지의 실행 인스턴스</li>
<li>환경이 격리되어 있어, 여러 애플리케이션이 충돌하지 않고 독립적으로 실행될 수 있게 돕는다</li>
</ul>
</li>
<li><strong>역할</strong><ul>
<li>각 컨테이너는 격리된 환경에서 실행되어 애플리케이션과 관련된 기능을 수행</li>
<li>컨테이너 내에서 발생한 문제는 다른 컨테이너와는 무관하게 접근</li>
</ul>
</li>
<li><strong>특징</strong><ul>
<li>일반 가상 머신보다 훨씬 가볍고 빠르게 실행 가능</li>
<li>각 컨테이너는 쉽게 생성, 수정 또는 삭제할 수 있으며, 필요할 때마다 재사용할 수 있음</li>
</ul>
</li>
</ul>
<h3 id="🌷-도커를-왜-사용하지">🌷 도커를 왜 사용하지?</h3>
<hr>
<h4 id="🌾-환경-일치를-위함">🌾 환경 일치를 위함</h4>
<blockquote>
<p>  도커를 사용하면 모든 팀원이 같은 환경에서 작업할 수 있음  </p>
</blockquote>
<ol>
<li>다른 팀원과 같이 협업할 때 내 파이썬은 1.34, 영미의 파이썬은 1.26, 이렇게 버전이 다를 수 있음</li>
<li>이런 버전 차이는 때때로 충돌을 일으키며, 프로젝트 실행이 안되는 상황이 발생</li>
</ol>
<blockquote>
<p>코드화된 환경 자동으로 설치</p>
</blockquote>
<ol>
<li>Dockerfile을 통해 언어와 패키지 버전을 명시하여 자동으로 설치 가능</li>
<li>설정 오류를 줄이고 쉽게 환경 재구성 가능</li>
</ol>
<h4 id="🌾-용이한-배포와-관리">🌾 용이한 배포와 관리</h4>
<blockquote>
<p>빠른 배포</p>
</blockquote>
<ol>
<li>도커 이미지를 사용하여 애플리케이션 패키징하고 배포 가능</li>
<li>필요한 경우 즉각적으로 확장할 수 있음</li>
</ol>
<blockquote>
<p>에러 독립</p>
</blockquote>
<ol>
<li>각 도커 컨테이너는 독립적으로 실행되기 때문에, </li>
<li>한 컨테이너의 문제가 다른 컨테이너에 영향을 미치지 않음</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[노드 js에 파이어베이스 얹어보기]]></title>
            <link>https://velog.io/@wine-faster/%EB%85%B8%EB%93%9C-js%EC%97%90-%ED%8C%8C%EC%9D%B4%EC%96%B4%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%96%B9%EC%96%B4%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@wine-faster/%EB%85%B8%EB%93%9C-js%EC%97%90-%ED%8C%8C%EC%9D%B4%EC%96%B4%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%96%B9%EC%96%B4%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Mon, 11 Nov 2024 08:36:37 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>노드 js 프로젝트 만들기</p>
</blockquote>
<ul>
<li><p>리엑트 설치</p>
<pre><code>npx create-react-app ./</code></pre></li>
<li><p>Firebase 설치
<a href="https://firebase.google.com/docs/cli?hl=ko">https://firebase.google.com/docs/cli?hl=ko</a></p>
<pre><code>cd 파일명
npm install firebase</code></pre></li>
</ul>
<blockquote>
<p>Firebase 사용방법</p>
</blockquote>
<ul>
<li><p>링크:
  <a href="https://firebase.google.com/?hl=ko">https://firebase.google.com/?hl=ko</a></p>
</li>
<li><p>회원 가입</p>
</li>
<li><p>프로젝트 만들기</p>
<ul>
<li>원하는 파일 이름 정하고, 계속 누르기
<img src="https://velog.velcdn.com/images/wine-faster/post/23a97e79-2028-47e7-9986-91bf356f6857/image.png" alt="">
<img src="https://velog.velcdn.com/images/wine-faster/post/575a9d34-e0f2-4804-9be1-5f378b6b5354/image.png" alt="">
<img src="https://velog.velcdn.com/images/wine-faster/post/a4e8b9ff-86f9-401c-98e2-382e7c96c80a/image.png" alt=""></li>
<li>미국 선택 - 프로젝트 만들기
<img src="https://velog.velcdn.com/images/wine-faster/post/bc78e3ce-37f8-4658-8d2a-4602a43f9cf9/image.png" alt=""></li>
</ul>
</li>
<li><p>파이어베이스 CLI 설정</p>
<ul>
<li><p>링크: <a href="https://firebase.google.com/docs/cli?hl=ko#mac-linux-auto-script">https://firebase.google.com/docs/cli?hl=ko#mac-linux-auto-script</a> </p>
</li>
<li><p>나에게 맞는 장치 선택
<img src="https://velog.velcdn.com/images/wine-faster/post/372ae04d-b3e0-42c5-88ee-b9818640f9bd/image.png" alt=""></p>
</li>
<li><p>나는 윈도우 노드 js 기반이라 비주얼 스튜디오에 가서 터미널 창 열기</p>
</li>
<li><p>반드시 command promt 열기
<img src="https://velog.velcdn.com/images/wine-faster/post/daf96108-5e31-487a-ae34-aee9e7b073c8/image.png" alt=""></p>
</li>
<li><p>코드 입력</p>
<pre><code class="language-bash">       //파이어베이스 로그인
  firebase login</code></pre>
</li>
<li><p>터미널 창에 이거 나오면 y 입력
<img src="https://velog.velcdn.com/images/wine-faster/post/aa033504-7a3c-4374-a120-be4a288c6ed1/image.png" alt=""></p>
</li>
<li><p>y 입력하면 브라우저에 자동으로 구글 로그인 창으로 연결</p>
</li>
<li><p>수락하면 성공했다고 브라우저 창에 메시지가 뜸
<img src="https://velog.velcdn.com/images/wine-faster/post/992b9810-04fe-487e-bb2d-e72463d250d3/image.png" alt=""></p>
</li>
<li><p>콘솔창에 입력</p>
<pre><code class="language-java">//firebase 프로젝트를 오픈한 프로젝트에 생성
firebase init</code></pre>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/6471e635-af84-4019-91c0-141fa4d06f76/image.png" alt=""></p>
</li>
<li><p>yes 선택
<img src="https://velog.velcdn.com/images/wine-faster/post/4e1dfa48-9f5f-4826-b90a-93ad41cea895/image.png" alt=""></p>
</li>
</ul>
</li>
<li><p><strong>이제 어떤 상품을 사용할 것인지 선택해야한다(중요)</strong></p>
<ul>
<li>나는 Firestore, Hosting(optionally github), Storage 설치 필요, 선택은 <strong>스페이스 바</strong>로 하면 된다.</li>
<li>체크된 부분은 *이 생성된다
<img src="https://velog.velcdn.com/images/wine-faster/post/33fd9f08-9681-4fae-a633-e34cec9d63ed/image.png" alt=""></li>
<li>다 선택했으면 엔터 키</li>
<li>이제는 프로젝트를 선택한다, 아까 처음에 프로젝트를 이미 생성했으므로 <strong>use an exisitng project</strong> 선택
<img src="https://velog.velcdn.com/images/wine-faster/post/fbae122c-fb82-406a-b456-31ed18ddda4a/image.png" alt=""></li>
<li>아마 프로젝트를 여러 개를 생성했다면 여러 개가 보일거다, 내가 원하는 프로젝트 이름을 선택하고 엔터</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python]Matplotlib 왕초보 입문(csv 기반)]]></title>
            <link>https://velog.io/@wine-faster/PythonMatplotlib-%EC%99%95%EC%B4%88%EB%B3%B4-%EC%9E%85%EB%AC%B8csv-%EA%B8%B0%EB%B0%98</link>
            <guid>https://velog.io/@wine-faster/PythonMatplotlib-%EC%99%95%EC%B4%88%EB%B3%B4-%EC%9E%85%EB%AC%B8csv-%EA%B8%B0%EB%B0%98</guid>
            <pubDate>Mon, 14 Oct 2024 09:47:34 GMT</pubDate>
            <description><![CDATA[<blockquote>
<ul>
<li>Matplotlib는 <strong>데이터 시각화</strong>를 위한 가장 널리 사용되는 라이브러리이다. </li>
</ul>
</blockquote>
<ul>
<li>주로 <strong>2D 플롯</strong>을 생성하는데 사용된다.</li>
</ul>
<h2 id="matplotlib는">Matplotlib는......?</h2>
<h3 id="주요-기능">주요 기능</h3>
<ul>
<li>다양한 그래프 생성 가능<ul>
<li><strong><em>선 그래프</em></strong>
x축과 y축을 매핑하여 시각화 가능.
데이터가 연속적으로 변화하거나 시간 축을 따라 변화하는 데이터를 시각화할 때 사용.</li>
<li><strong><em>막대 그래프</em></strong></li>
<li><strong><em>히스토그램</em></strong></li>
<li><strong><em>산점도</em></strong></li>
<li><strong><em>파이 차트</em></strong></li>
</ul>
</li>
<li>세부 조정가능<ul>
<li>축의 레이블, 범례 , 제목 , 스타일 등 요소 조정 가능</li>
</ul>
</li>
<li>대규모 데이터 시각화<ul>
<li>대규모 데이터셋에 대한 시각화 효율적으로 처리 가능</li>
</ul>
</li>
<li>Python 생태계와의 통합<ul>
<li>Numpy, Padnas 등과 같은 라이브러리와 자연스럽게 통합되어, 분석과 시각화를 손쉽게 결합 가능</li>
</ul>
</li>
<li>플롯 저장 및 출력<ul>
<li>생성한 그래프 다양한 파일 형식(예 : PNG, PDF, SVG 등)으로 저장 가능가능</li>
</ul>
</li>
</ul>
<h2 id="matplotlib-사용법">Matplotlib 사용법</h2>
<h3 id="matplotlib-설치">Matplotlib 설치</h3>
<pre><code class="language-bash"># 터미널에 install

# 윈도우 설치
pip install matplotlib

#맥 설치
pip3 install matplotlib</code></pre>
<h3 id="matplotlib-선언하기">Matplotlib 선언하기</h3>
<pre><code class="language-python"># 굳이 선언 안해도 되지만 선언하면 손쉽게 불러와서 사용 가능
import matplotlib.pyplot as plt</code></pre>
<h3 id="데이터-불러오기">데이터 불러오기</h3>
<pre><code class="language-python"># 데이터 불러오기 위해 pandas 설치 필요(pip install pandas,import pandas as pd ) 
# 데이터 이름 = pd.read_csv(&quot;데이터 경로/데이터 이름.csv&quot;)

ecommerce_df = pd.read_csv(&quot;../00_data/ecommerce_sales.csv&quot;</code></pre>
<h3 id="matplotlib-사용하기">Matplotlib 사용하기</h3>
<h4 id="선-그래프-그리기">선 그래프 그리기</h4>
<pre><code class="language-python">ecommerce_df = pd.read_csv(&quot;../00_data/ecommerce_sales.csv&quot;, encoding=&quot;latin1&quot;)
# InvoiceDate 컬럼을 날짜 형식으로 변경
ecommerce_df[&quot;InvoiceDate&quot;] = pd.to_datetime(ecommerce_df[&quot;InvoiceDate&quot;])

ecommerce_df[&quot;TotalPrice&quot;] = ecommerce_df[&quot;Quantity&quot;] * ecommerce_df[&quot;UnitPrice&quot;]
dail_sales = ecommerce_df.groupby(ecommerce_df[&quot;InvoiceDate&quot;].dt.date)[&quot;TotalPrice&quot;].sum()

plt.figure(figsize=(10,6))
plt.rc(&quot;font&quot;, family=&quot;Malgun Gothic&quot;)

# plot 차트를 그리는 매서드이다.
plt.plot(dail_sales.index, dail_sales.values, label=&quot;날짜별 총 판매 금액&quot;)

plt.title(&quot;날짜별 총 판매 금액 변화&quot;)
plt.xlabel(&quot;날짜&quot;)
plt.xticks(rotation=45)
plt.ylabel(&quot;총 판매 금액&quot;)
plt.legend()
plt.tight_layout()
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/1a77c27c-a308-4d97-8f95-9b6f042d9928/image.png" alt=""></p>
<h4 id="막대형-그래프-그리기">막대형 그래프 그리기</h4>
<blockquote>
<p>막대형 그래프는 각 카테고리가 갖는 값을 막대 높이로 표현하여, 데이터를 <strong>직관적으로 비교</strong>할 수 있다.</p>
</blockquote>
<pre><code class="language-python"># 축의 값 포맷을 사용자 정의 형식으로 지정하기 위해서 사용하는 도구이다.
from matplotlib.ticker import FuncFormatter

ecommerce_df = pd.read_csv(&quot;../00_data/ecommerce_sales.csv&quot;, encoding=&quot;latin1&quot;)
ecommerce_df[&quot;InvoiceDate&quot;] = pd.to_datetime(ecommerce_df[&quot;InvoiceDate&quot;])

filtered_df = ecommerce_df[(ecommerce_df[&quot;InvoiceDate&quot;] &gt; &quot;2010-12-01&quot;)&amp; (ecommerce_df[&quot;InvoiceDate&quot;] &lt; &quot;2011-06-01&quot;)].copy()

filtered_df[&quot;Total&quot;] = filtered_df[&quot;Quantity&quot;] * filtered_df[&quot;UnitPrice&quot;]

country_salse = filtered_df.groupby(&quot;Country&quot;)[&quot;Total&quot;].sum()
plt.figure(figsize=(20,6))
# 막대 그래프를 그리는 메서드이다.
plt.bar(country_salse.index, country_salse.values, label=&quot;지역별 총 판매 금액&quot;)
plt.xlabel(&quot;지역&quot;)
plt.xticks(rotation=45)
plt.ylabel(&quot;금액&quot;)

formatter = FuncFormatter(lambda x, _: f&#39;{int(x):,}&#39;)

plt.gca().yaxis.set_major_formatter(formatter)

plt.tight_layout()
plt.legend()
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/b668e980-ac76-4ee4-96a3-4c7ada5713b2/image.png" alt=""></p>
<h4 id="히스토그램">히스토그램</h4>
<blockquote>
<ul>
<li>히스토그램은 데이터 분포를 시각화하는데 사용한다. </li>
</ul>
</blockquote>
<ul>
<li>즉 <strong>데이터의 빈도</strong>를 막대 형태로 표현한다.</li>
<li><strong>가로</strong> 축에는 <strong>데이터의 구간</strong>, <strong>세로</strong> 축에는 해당 구간에 속하는 <strong>데이터의 빈도</strong>(횟수나 개수 등)를 나타낸다. </li>
</ul>
<pre><code class="language-python">human_df = pd.read_csv(&quot;../00_data/Human_Resources.csv&quot;, encoding=&quot;latin1&quot;)

plt.figure(figsize=(20,6))
plt.hist(human_df[&quot;Age&quot;], bins=50, color=&quot;skyblue&quot;, edgecolor=&quot;black&quot;)
plt.title(&quot;나이 분포&quot;)
plt.xlabel(&quot;나이&quot;)
plt.xticks(rotation=45)
plt.ylabel(&quot;분포&quot;)
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/36bf5dff-3c74-49a0-a942-244ee0423964/image.png" alt=""></p>
<h4 id="산점도">산점도</h4>
<blockquote>
<p>산점도는 두 변수 간의 상관관계를 시각화 하는데 유용하다.</p>
</blockquote>
<pre><code class="language-python">stock_df = pd.read_csv(&quot;../00_data/stock_daily_prices.csv&quot;)

goog = stock_df[&quot;GOOG&quot;]
amzn = stock_df[&quot;AMZN&quot;]

plt.figure(figsize=(10,5))

plt.scatter(goog, amzn)

plt.title(&quot;goog와 amzn의 상관관계&quot;)
plt.xlabel(&quot;구글 가격&quot;)
plt.ylabel(&quot;아마존 가격&quot;)
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/b9f4fbe8-bf87-4ef4-bf57-6418f1e96c99/image.png" alt=""></p>
<h4 id="다중-플롯">다중 플롯</h4>
<blockquote>
<p>하나의 그래프에 여러 데이터를 겹쳐서 비교할 때 유용하다.</p>
</blockquote>
<pre><code class="language-python">stock_df = pd.read_csv(&quot;../00_data/stock_daily_prices.csv&quot;)
filtered_df = stock_df[(stock_df[&quot;Date&quot;] &gt; &quot;2020-07-10&quot;) &amp; (stock_df[&quot;Date&quot;] &lt; &quot;2020-08-05&quot;)].copy()


plt.figure(figsize=(10,6))

plt.plot(filtered_df[&quot;Date&quot;], filtered_df[&quot;AAPL&quot;], label=&quot;AAPL&quot;, color=&quot;green&quot;, marker=&quot;o&quot;)
plt.plot(filtered_df[&quot;Date&quot;], filtered_df[&quot;AMZN&quot;], label=&quot;AMZN&quot;, color=&quot;blue&quot;, marker=&quot;x&quot;)
plt.plot(filtered_df[&quot;Date&quot;], filtered_df[&quot;GOOG&quot;], label=&quot;GOOG&quot;, color=&quot;red&quot;, marker=&quot;s&quot;)
plt.plot(filtered_df[&quot;Date&quot;], filtered_df[&quot;TSLA&quot;], label=&quot;TSLA&quot;, color=&quot;purple&quot;, marker=&quot;^&quot; )

plt.title(&quot;주식 가격 비교&quot;)
plt.xlabel(&quot;Date&quot;)
plt.ylabel(&quot;stock Price&quot;)
plt.xticks(rotation=45)
plt.legend()
plt.tight_layout()
plt.show()</code></pre>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/15b13b57-5081-40a9-a639-fc58198d7665/image.png" alt=""></p>
<h4 id="서브플롯">서브플롯</h4>
<blockquote>
<ul>
<li>하나의 figure 내에 여러 개의 그래프를 배치 가능하다.</li>
</ul>
</blockquote>
<ul>
<li><strong>여러 데이터를 한번에 비교</strong>할 때 유용하다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python]Numpy 왕초보 입문]]></title>
            <link>https://velog.io/@wine-faster/PythonNumpy-%EC%99%95%EC%B4%88%EB%B3%B4-%EC%9E%85%EB%AC%B8</link>
            <guid>https://velog.io/@wine-faster/PythonNumpy-%EC%99%95%EC%B4%88%EB%B3%B4-%EC%9E%85%EB%AC%B8</guid>
            <pubDate>Thu, 10 Oct 2024 10:41:12 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>Numpy는 파이썬을 통해 <strong>데이터 분석</strong>할 때 사용하는 <strong>수치 계산</strong>용 라이브러리이다.</p>
</blockquote>
<h2 id="numpy는">Numpy는......?</h2>
<hr>
<h3 id="🔮-정의">🔮 정의</h3>
<ul>
<li>Numpy는 Numerical Python의 줄임말로 C언어로 구현된 파이썬 라이브러리이다.</li>
</ul>
<h3 id="🔮-용도">🔮 용도</h3>
<ul>
<li>대규모 다차원 배열과 행렬 연산에 도움을 준다.</li>
</ul>
<h3 id="🔮-왜-사용하는가">🔮 왜 사용하는가......?</h3>
<ul>
<li>파이썬을 통해 머신러닝, 딥러닝, 데이터분석 등을 할 때 사용한다.</li>
</ul>
<h2 id="numpy-사용법">Numpy 사용법</h2>
<hr>
<h3 id="🗳-numpy-설치">🗳 Numpy 설치</h3>
<ul>
<li>pip를 통해 쉽게 설치 가능하다<ul>
<li>우선 프로젝트에 가상환경을 생성하고 연결허세요 --&gt; 참조
<a href="https://velog.io/@wine-faster/Python%EB%AF%B8%EB%8B%88%EC%BD%98%EB%8B%A4Miniconda-%EC%84%A4%EC%B9%98-on-Windows">윈도우에서 미니콘다 설치</a>
<a href="https://velog.io/@wine-faster/Python%EB%AF%B8%EB%8B%88%EC%BD%98%EB%8B%A4Miniconda-%EC%84%A4%EC%B9%98-on-Mac">맥에서 미니콘다 설치</a><pre><code class="language-bash">$pip install numpy</code></pre>
</li>
</ul>
</li>
</ul>
<h3 id="🗳-numpy-사용하기">🗳 Numpy 사용하기</h3>
<ul>
<li>Numpy를 파이썬에서 쉽게 사용하기 위해 np라는 이름을 붙인다.<pre><code class="language-bash">import numpy as np</code></pre>
</li>
</ul>
<h3 id="🗳-numpy-배열-생성">🗳 Numpy 배열 생성</h3>
<blockquote>
<ul>
<li>Numpy에서 가장 기본적인 데이터 구조는 배열이다.</li>
</ul>
</blockquote>
<ul>
<li>ndarray 클래스로 다차원 배열을 생성하고 관리할 수 있다.</li>
<li>np.array() 함수를 통해 파이썬 list를 인자로 받아와서 사용한다.</li>
</ul>
<h4 id="1-list를-배열로-변환">1. list를 배열로 변환</h4>
<ul>
<li>array정의 및 출력하기<pre><code class="language-python">arr = [1,2,3,4,5]
print(arr)
type(arr)
</code></pre>
</li>
</ul>
<h1 id="결과">결과:</h1>
<h1 id="1-2-3-4-5">[1, 2, 3, 4, 5]</h1>
<h1 id="list">list</h1>
<pre><code>
- 위에서 만든 python list를 사용하기
~~~python
ndarray = np.array(arr)
print(ndarray) 
type(ndarray)

# 결과:
# [1 2 3 4 5]
# numpy.ndarray</code></pre><h4 id="2-다차원-배열">2. 다차원 배열</h4>
<pre><code class="language-python">arr_2d = np.array([[1,2,3],[3,4,5]])
print(arr_2d)

# 결과: 
# [[1 2 3]
# [3 4 5]]</code></pre>
<h4 id="3-ndarray배열의-속성">3. ndarray배열의 속성</h4>
<blockquote>
<ul>
<li>배열의 구조에 따라 데이터를 조작하는 방식이 달라지기 때문에,</li>
</ul>
</blockquote>
<ul>
<li><p>배열의 중요한 속성들을 확인하는 것은 배열의 구조를 파악하는데 필수적이다.</p>
</li>
<li><p>배열의 차원 확인</p>
<pre><code class="language-python">print(ndarray.shape) #(5,)
print(arr_2d.shape)  #(2, 3)</code></pre>
</li>
<li><p>데이터 타입 확인</p>
<pre><code class="language-python">print(ndarray.dtype) #int64
print(arr_2d.dtype)     #int64</code></pre>
</li>
<li><p>배열의 차원 수 확인</p>
<pre><code class="language-python">print(ndarray.ndim)  #1
print(arr_2d.ndim)   #2</code></pre>
</li>
</ul>
<h4 id="4-배열-초기화">4. 배열 초기화</h4>
<ul>
<li>np.zeros(size)<pre><code class="language-python"># 3 * 3의 배열로 초기화
arr_2d = np.zeros((3,3))
print(arr_2d)
</code></pre>
</li>
</ul>
<p>#결과:
#[[0. 0. 0.]
 #[0. 0. 0.]
 #[0. 0. 0.]]</p>
<pre><code>
- np.ones(size)
~~~python
# 2*2 배열을 생성하고 값을 1로 채움
arr_2d = np.ones((2,2)) 
print(arr_2d)

#결과:
#[[1. 1.]
# [1. 1.]]</code></pre><ul>
<li>np.full(size)<pre><code class="language-python"># 3*3 배열을 생성하고 값을 7로 채움
arr_2d = np.full((3,3), 7) 
print(arr_2d)
</code></pre>
</li>
</ul>
<p>#결과:
#[[7 7 7]</p>
<h1 id="7-7-7">[7 7 7]</h1>
<h1 id="7-7-7-1">[7 7 7]]</h1>
<pre><code>
- np.random.random(size)
~~~python
# 2*2 배열을 생성하고 값을 랜덤하게 채움
arr_2d = np.random.random((2,2)) 
print(arr_2d)

#결과:
#[[0.60425932 0.53006054]
# [0.28702881 0.3450351 ]]</code></pre><h3 id=""></h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React]npm프로젝트 생성]]></title>
            <link>https://velog.io/@wine-faster/Reactnpm%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1</link>
            <guid>https://velog.io/@wine-faster/Reactnpm%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1</guid>
            <pubDate>Tue, 08 Oct 2024 03:07:54 GMT</pubDate>
            <description><![CDATA[<h2 id="파일-설치">파일 설치</h2>
<hr>
<blockquote>
<ul>
<li>npm = Node Package Manager</li>
</ul>
</blockquote>
<ul>
<li>자바스크립트를 위한 패키지 관리자이다</li>
<li>Node.JS를 설치하면 npm이 자동으로 설치된다</li>
</ul>
<h3 id="nodejs-설치">Node.js 설치</h3>
<ul>
<li>링크: <a href="https://nodejs.org/en/download/package-manager/current">https://nodejs.org/en/download/package-manager/current</a></li>
<li>자신의 컴퓨터 사양에 맞게 다운로드
<img src="https://velog.velcdn.com/images/wine-faster/post/9999f4e5-d63f-4542-b37f-19d6108f1f45/image.png" alt=""></li>
</ul>
<h3 id="vs-code-설치">VS Code 설치</h3>
<ul>
<li>링크: <a href="https://code.visualstudio.com/download">https://code.visualstudio.com/download</a></li>
<li>자신의 컴퓨터 사양에 맞게 다운로드
<img src="https://velog.velcdn.com/images/wine-faster/post/efa451f6-764a-45cf-84fd-5897e26eb9d4/image.png" alt=""></li>
</ul>
<h3 id="설치-확인">설치 확인</h3>
<pre><code class="language-bash">#버전은 항상 체크해이햔다, 버전이 다르면 프로젝트 진행할 때 오류가 생길 수 있다
node -v  #노드 버전 체크
npm -v   #npm 버전 체크</code></pre>
<h2 id="리액트-프로젝트-생성">리액트 프로젝트 생성</h2>
<ul>
<li>VS CODE에서 CTRL+J으로 터미널 열기</li>
<li>npx 명령어 사용해서 프로젝트 생성<pre><code class="language-bash">#npx create-react-app {프로젝트 명}
npx create-react-app react-board
#또는 프로젝트 이름없이
npx create-react-app ./</code></pre>
</li>
<li>npx명령어 사용하면 프로젝트에 필요한 모듈 등이 생성된다, 기본적으로 깃허브에는 모듈은 업로드하지 않는다
<img src="https://velog.velcdn.com/images/wine-faster/post/96d1717f-dd97-4717-9f1a-52a5d4aa0322/image.png" alt=""></li>
<li>프로젝트 업데이트<pre><code class="language-bash">npm i</code></pre>
</li>
<li>프로젝트 웹브라우저에서 실행<pre><code class="language-bash">npm start</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python]미니콘다(Miniconda) 설치 on Windows]]></title>
            <link>https://velog.io/@wine-faster/Python%EB%AF%B8%EB%8B%88%EC%BD%98%EB%8B%A4Miniconda-%EC%84%A4%EC%B9%98-on-Windows</link>
            <guid>https://velog.io/@wine-faster/Python%EB%AF%B8%EB%8B%88%EC%BD%98%EB%8B%A4Miniconda-%EC%84%A4%EC%B9%98-on-Windows</guid>
            <pubDate>Mon, 07 Oct 2024 06:10:20 GMT</pubDate>
            <description><![CDATA[<blockquote>
<ul>
<li>미니콘다(Miniconda)는 파이썬 환경을 관리하고 패키지를 설치하는 데 사용하는 경량 버전의 Anaconda 배포판이다.</li>
</ul>
</blockquote>
<ul>
<li>아나콘다(Anaconda)는 데이터 과학, 머신러닝, 데이터 분석 등에 필요한 많은 패키지를 포함한 배포판이라, 용량이 상당하다!</li>
<li>하지만 미니콘다는 아나콘다의 핵심적인 기능만 제공하여 훨씬 가볍고 빠른 설치가 가능하다.</li>
</ul>
<h3 id="미니콘다-설치">미니콘다 설치</h3>
<hr>
<ul>
<li><p>설치 페이지에서 다운로드</p>
<ul>
<li>링크:<a href="https://docs.anaconda.com/miniconda/">https://docs.anaconda.com/miniconda/</a></li>
<li>사용하는 디바이스 os버전에 맞게 다운로드</li>
<li>다운로드 파일에 저장된 파일 열기
<img src="https://velog.velcdn.com/images/wine-faster/post/a957c5e0-4377-437f-b9e9-ea139dd815ca/image.png" alt=""></li>
<li><img src="https://velog.velcdn.com/images/wine-faster/post/c92d43e5-ac45-4eba-a2e3-0143228e9901/image.png" alt=""></li>
<li>경로를  한글 없게 설정해야한다, 아디면 실행 안될 수 있다. 
<img src="https://velog.velcdn.com/images/wine-faster/post/c1959b14-3985-46e3-ad9b-ca0830d64b26/image.png" alt=""></li>
<li>다음 3개는 꼭 체크해야한다.
<img src="https://velog.velcdn.com/images/wine-faster/post/2f9ab150-c3b8-44ea-8ede-306ea0b77fce/image.png" alt=""></li>
<li>미니콘다가 설치되면 기본적으로 (base)라는 환경이 만들어진다.
<img src="https://velog.velcdn.com/images/wine-faster/post/9b2ee22a-3afc-42db-a16f-39bf5138141e/image.png" alt=""></li>
</ul>
</li>
</ul>
<h3 id="미니콘다-실행">미니콘다 실행</h3>
<hr>
<blockquote>
<p>터미널에서 실행</p>
</blockquote>
<ul>
<li><p>버전 확인</p>
<pre><code class="language-bash">python --version
conda --version</code></pre>
</li>
<li><p>vs code에 파이썬 연결, 버전에 맞게</p>
<ul>
<li>그럼 conda list하면 콘다 연결 가능</li>
</ul>
</li>
<li><p>가상환경 생성</p>
<pre><code class="language-bash">#conda create -n {가상환경 이름} python=내 파이썬 버전
conda create -n test_conda python=3.12
</code></pre>
</li>
</ul>
<h1 id="proceed-yn-나오면-y-입력">Proceed ([y]/n)? 나오면 y 입력</h1>
<pre><code>
- 가상환경 활성(cmd에서 작업)
~~~bash
conda activate {원하는 가상환경 이름}

#&#39;(가상환경 이름)프로젝트 경로&#39; 이렇게 출력되면 가상환경 활성된 것이다.
# 가상 환경이 프로젝트 파일에 만들어지지 않고 우리가 미니콘다에 설치한 가상 환경을 끌어다 쓴다.</code></pre><ul>
<li><p>가상환경 비활성</p>
<pre><code class="language-bash">conda deactivate</code></pre>
</li>
<li><p>가상환경에 패키지 설치</p>
<pre><code class="language-bash"># pip install {패키지명}
pip install pandas
</code></pre>
</li>
</ul>
<p>#Proceed ([y]/n)? 나오면 y 입력</p>
<pre><code>
- 가상환경에 패키지 제거
~~~bash
# pip uninstall {패키지명}
pip uninstall pandas</code></pre><ul>
<li><p>다운로드 받은 패키지 확인</p>
<pre><code class="language-bash">pip list</code></pre>
</li>
<li><p>가상환경 삭제</p>
<pre><code class="language-bash">conda env remove -n {원하는 가상환경 이름}</code></pre>
</li>
</ul>
<blockquote>
<p>인공지능 분석 및 챗봇을 위해 install해야할 패키지</p>
</blockquote>
<pre><code class="language-bash">conda install pandas
conda install sciscikit-learn scipy
conda install -c conda-forge implicit</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python]미니콘다(Miniconda) 설치 on Mac]]></title>
            <link>https://velog.io/@wine-faster/Python%EB%AF%B8%EB%8B%88%EC%BD%98%EB%8B%A4Miniconda-%EC%84%A4%EC%B9%98-on-Mac</link>
            <guid>https://velog.io/@wine-faster/Python%EB%AF%B8%EB%8B%88%EC%BD%98%EB%8B%A4Miniconda-%EC%84%A4%EC%B9%98-on-Mac</guid>
            <pubDate>Fri, 04 Oct 2024 06:09:33 GMT</pubDate>
            <description><![CDATA[<blockquote>
<ul>
<li><strong>미니콘다(Miniconda)</strong>는 파이썬 환경을 관리하고 패키지를 설치하는 데 사용하는 경량 버전의 Anaconda 배포판이다.</li>
</ul>
</blockquote>
<ul>
<li><strong>아나콘다(Anaconda)</strong>는 데이터 과학, 머신러닝, 데이터 분석 등에 필요한 많은 패키지를 포함한 배포판이라, 용량이 상당하다!</li>
<li>하지만 <strong>미니콘다</strong>는 아나콘다의 핵심적인 기능만 제공하여 훨씬 <strong>가볍고 빠른 설치</strong>가 가능하다.</li>
</ul>
<h3 id="미니콘다-설치-방법">미니콘다 설치 방법</h3>
<ul>
<li><p>설치 페이지에서 다운로드</p>
<ul>
<li>링크: <a href="https://docs.anaconda.com/miniconda/">https://docs.anaconda.com/miniconda/</a></li>
<li>사용하는 디바이스 os버전에 맞게 다운로드</li>
<li>필자는 M1이라 이미지에서 보이는 가장 하단에 것 다운로드
<img src="https://velog.velcdn.com/images/wine-faster/post/5b433668-d707-4a62-980f-cb568fef6ab0/image.png" alt=""></li>
</ul>
</li>
<li><p>미니콘다 파일 설치</p>
<ul>
<li><p>파일이 다운로드 된 다음에 우선 다운로드된 경로를 확인한다.(보통 따로 설정하지 않았으면 Downloads파일에 있다)</p>
</li>
<li><p>그리고 터미널을 연다.
<img src="https://velog.velcdn.com/images/wine-faster/post/a83738d8-718d-41ad-8e43-f5f04f6b4904/image.png" alt=""></p>
</li>
<li><p><strong>미니콘다가 설치된 경로로 이동한다.</strong></p>
<pre><code class="language-bash">#cd {파일이 다운로도된 경로}
cd Downloads</code></pre>
</li>
<li><p><strong>현재 위치한 경로 안에 내용 확인</strong></p>
<pre><code class="language-bash"># ls로 확인하면 경로에 저장된 내용들을 리스트의 형태로 쭉 확인할 수 있다.
# 방금 우리가 다운로드한 {Miniconda3-latest-MacOSX-arm64.sh}이런 형태로된 파일 확인 가능
ls</code></pre>
</li>
<li><p><strong>sh 파일 실행</strong></p>
<pre><code class="language-bash"># sh {파일명}
# 방금 확인한 sh 파일 명러어 뒤에 복붙
sh Miniconda3-latest-MacOSX-arm64.sh</code></pre>
</li>
<li><p><strong>라인선스 확인</strong>
설치 한 다음에는 아래와 같은 내용이 나오는 데 enter를 계속 클릭한다.
_Do you accept the license terms?_가 나오면 yes 를 입력한다, 그전까지는 계속 enter 클릭해야 한다.</p>
<pre><code class="language-bash"># 참고로 라인선스 내용이 많아서 한참동안 enter 클릭해야한다. 
Welcome to Miniconda3 py312_24.7.1-0
In order to continue the installation process, please review the license agreement.
Please, press ENTER to continue
&gt;&gt;&gt; </code></pre>
</li>
<li><p><strong>미니콘다 설치 경로 지정</strong>
yes를 입력하면 아래와 같은 내용이 출력된다.
내가 원하는 경로로 경로와 파일 이름 지정하고 enter 누르면 해당 파일에 내용이 다운로드된다.</p>
<pre><code class="language-bash">#경로 지정 방법: /경로/파일 이름
#다운로드 시간은 좀 걸리니 기다려야한다.
- Press ENTER to confirm the location
 - Press CTRL-C to abort the installation
 - Or specify a different location below

/Users/me/miniconda</code></pre>
</li>
</ul>
<ul>
<li><strong>다운로드 완성</strong>
<em>Thank you for installing Miniconda3!</em> 문구가 나오면 완성된거다.</li>
</ul>
</li>
</ul>
<ul>
<li><p><strong>터미널 종료 후 재 시작</strong>
방금까지 사용한 터미널 끄고 새로운 창을 연다, 재시작하지 않으면 설치된 것을 확인할 수 없다.</p>
</li>
<li><p><strong>다운로드 확인</strong></p>
<pre><code class="language-bash">#{conda 24.7.1} 이와 같은 내용이 출력되면 잘 다운로드 된 것!
conda --version</code></pre>
</li>
</ul>
<h3 id="미니콘다-실행">미니콘다 실행</h3>
<blockquote>
<p>터미널에서 실행</p>
</blockquote>
<ul>
<li>가상 환경 생성<pre><code class="language-bash">#conda create -n {가상환경 이름} python=내 파이썬 버전
conda create -n test_conda python=3.12
</code></pre>
</li>
</ul>
<h1 id="proceed-yn-나오면-y-입력">Proceed ([y]/n)? 나오면 y 입력</h1>
<pre><code>

- 가상환경 활성
~~~bash
conda activate {원하는 가상환경 이름}

#&#39;(가상환경 이름)프로젝트 경로&#39; 이렇게 출력되면 가상환경 활성된 것이다.
# 가상 환경이 프로젝트 파일에 만들어지지 않고 우리가 미니콘다에 설치한 가상 환경을 끌어다 쓴다.</code></pre><ul>
<li><p>가상환경 비활성</p>
<pre><code class="language-bash">conda deactivate</code></pre>
</li>
<li><p>가상환경에 패키지 설치</p>
<pre><code class="language-bash"># pip3 install {패키지명}
pip3 install pandas
</code></pre>
</li>
</ul>
<p>#Proceed ([y]/n)? 나오면 y 입력</p>
<pre><code>
- 가상환경에 패키지 제거
~~~bash
# pip3 uninstall {패키지명}
pip3 uninstall pandas</code></pre><ul>
<li>다운로드 받은 패키지 확인<pre><code class="language-bash">pip list</code></pre>
</li>
</ul>
<ul>
<li>가상환경 삭제</li>
</ul>
<pre><code class="language-bash">conda env remove -n {원하는 가상환경 이름}</code></pre>
<blockquote>
<p>인공지능 분석 및 챗봇을 위해 install해야할 패키지</p>
</blockquote>
<pre><code class="language-bash">conda install pandas
conda install sciscikit-learn scipy
conda install -c conda-forge implicit</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React]Redux thunk 비동기 작업 이해하기]]></title>
            <link>https://velog.io/@wine-faster/ReactRedux-thunk-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%9E%91%EC%97%85-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@wine-faster/ReactRedux-thunk-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%9E%91%EC%97%85-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 03 Oct 2024 17:25:49 GMT</pubDate>
            <description><![CDATA[<blockquote>
</blockquote>
<ul>
<li>Redux Thunk는 Redux에서 비동기 작업을 처리하는 미들웨어이다.</li>
<li>기본 Redux 액션은 순수한 동기 액션 객체여야 한다, </li>
<li>하지만 Redux Thunk를 사용하면 <strong>액션을 함수로 반환</strong>할 수 있어서, </li>
<li><strong>비동기 작업</strong>(API 호출 등)을 수행할 수 있다.</li>
</ul>
<br>

<h3 id="intro">Intro</h3>
<hr>
<p>우선 들어가기 전에 Redux, React, Thunk의 상관관계에 대해서 정리하고 들어가자.</p>
<ul>
<li><p>정의 </p>
<ul>
<li><p>React는 UI 라이브러리로, <strong>컴포넌트</strong> 기반으로 화면을 구성하고 상태 관리 할 수 있다.</p>
</li>
<li><p>Redux는 React에서 상태 관리를 위한 상태관리 라이브러리이다.(리액트 없이도 사용 가능하다)</p>
</li>
<li><p>Redux-Thunk는 Redux에서 비동기 작업을 처리할 때 가장 기본적으로 사용하는 미들웨어이다.</p>
</li>
</ul>
</li>
<li><p>상관 관계</p>
<ul>
<li><p>React의 상태 관리 기능은 컴포넌트 단위로 제한되기 때문에, 전역 상태를 관리하기 위해 별도의 라이브러리인 Redux를 사용한다. Redux를 사용하면 <strong>여러 컴포넌트</strong> 간 상태를 <strong>일관</strong>되게 <strong>공유</strong>할 수 있다.</p>
</li>
<li><p>실무 작업에서는 <strong>API 호출</strong> 같은 비동기 작업이 많이 필요하다, Redux는 동기 액션을 처리하기 때문에 비동기 작업을 처리할 수 있는 Redux-Thunk를 활용한다.</p>
</li>
</ul>
</li>
<li><p>Redux Thunk의 동작 로직</p>
<ul>
<li><p>React에서 Redux Thunk를 사용하면, React 컴포넌트는 전역 상태를 관리하는 Redux 스토어와 상호작용할 수 있고, 비동기 로직을 Redux Thunk를 통해 처리할 수 있다.</p>
</li>
<li><p>React 컴포넌트는 Redux의 <strong>dispatch</strong> 함수를 사용해 <strong>Thunk를 호출</strong>하여 비동기 액션을 트리거하고, 비동기 작업의 결과에 따라 상태가 업데이트되면 <strong>컴포넌트는 리렌더링</strong>된다.</p>
</li>
</ul>
</li>
</ul>
<h3 id="redux-thunk-사용-방법">Redux-Thunk 사용 방법</h3>
<hr>
<ul>
<li>설치</li>
</ul>
<pre><code class="language-bash">npm install redux-thunk</code></pre>
<blockquote>
<p>아래에 작성된 코드는 그냥 이해를 돕기 위한 예시이다.</p>
</blockquote>
<ul>
<li>Redux Store에 Redux Thunk 적용</li>
</ul>
<pre><code class="language-javascript">import { createStore, applyMiddleware } from &#39;redux&#39;;
import thunk from &#39;redux-thunk&#39;;
import rootReducer from &#39;./reducers&#39;; 

const store = createStore(rootReducer, applyMiddleware(thunk));
</code></pre>
<br>

<ul>
<li>Thunk 액션 함수 작성</li>
</ul>
<pre><code class="language-javascript">//이 함수는 dispatch와 getState를 인자로 받으며, 여기서 비동기 작업을 실행할 수 있다.
//여기서 fetchUserData는 비동기 API 호출을 처리하고, 결과에 따라 성공 또는 실패 액션을 dispatch로 처리한다.
const fetchUserData = () =&gt; {
  return async (dispatch) =&gt; {
    dispatch({ type: &#39;FETCH_USER_REQUEST&#39; });
    try {
      const response = await fetch(&#39;https://api.example.com/user&#39;);
      const data = await response.json();
      dispatch({ type: &#39;FETCH_USER_SUCCESS&#39;, payload: data });
    } catch (error) {
      dispatch({ type: &#39;FETCH_USER_FAILURE&#39;, error });
    }
  };
};
</code></pre>
<br>

<ul>
<li>Reducer에서 액션 처리</li>
</ul>
<pre><code class="language-javascript">const userReducer = (state = {}, action) =&gt; {
  switch (action.type) {
    case &#39;FETCH_USER_REQUEST&#39;:
      return { ...state, loading: true };
    case &#39;FETCH_USER_SUCCESS&#39;:
      return { ...state, loading: false, data: action.payload };
    case &#39;FETCH_USER_FAILURE&#39;:
      return { ...state, loading: false, error: action.error };
    default:
      return state;
  }
};
</code></pre>
<br>

<ul>
<li>React 컴포넌트에서 비동기 액션을 호출</li>
</ul>
<pre><code class="language-javascript">import { useDispatch, useSelector } from &#39;react-redux&#39;;
import { useEffect } from &#39;react&#39;;
import { fetchUserData } from &#39;./actions&#39;;

const UserProfile = () =&gt; {
  const dispatch = useDispatch();
  const user = useSelector((state) =&gt; state.user);

  useEffect(() =&gt; {
    dispatch(fetchUserData()); // 비동기 액션을 호출
  }, [dispatch]);

  if (user.loading) {
    return &lt;div&gt;Loading...&lt;/div&gt;;
  }

  if (user.error) {
    return &lt;div&gt;Error: {user.error}&lt;/div&gt;;
  }

  return (
    &lt;div&gt;
      &lt;h1&gt;{user.data.name}&lt;/h1&gt;
      &lt;p&gt;{user.data.email}&lt;/p&gt;
    &lt;/div&gt;
  );
};

export default UserProfile;
</code></pre>
<h3 id="redux-thunk-구조-플로우차트">Redux-Thunk 구조 플로우차트</h3>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/9b4f3ee1-f34d-4a4c-a41b-48e2f730f3ff/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Flowchat]리액트 및 노드를 활용한 백엔드/프론트 엔드 구축 구조 ]]></title>
            <link>https://velog.io/@wine-faster/Flowchat%EB%A6%AC%EC%95%A1%ED%8A%B8-%EB%B0%8F-%EB%85%B8%EB%93%9C%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%B0%B1%EC%97%94%EB%93%9C%ED%94%84%EB%A1%A0%ED%8A%B8-%EC%97%94%EB%93%9C-%EA%B5%AC%EC%B6%95-%EA%B5%AC%EC%A1%B0</link>
            <guid>https://velog.io/@wine-faster/Flowchat%EB%A6%AC%EC%95%A1%ED%8A%B8-%EB%B0%8F-%EB%85%B8%EB%93%9C%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%B0%B1%EC%97%94%EB%93%9C%ED%94%84%EB%A1%A0%ED%8A%B8-%EC%97%94%EB%93%9C-%EA%B5%AC%EC%B6%95-%EA%B5%AC%EC%A1%B0</guid>
            <pubDate>Thu, 03 Oct 2024 16:02:20 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>리액트 및 노드를 활용한 백엔드/프론트 엔드 구축 구조 </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/wine-faster/post/699d39da-ce87-45ee-bb2a-4a67d9cf153c/image.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Flowchart]CICD 백엔드/프론트엔드 배포 과정]]></title>
            <link>https://velog.io/@wine-faster/FlowchartCICD-%EB%B0%B1%EC%97%94%EB%93%9C%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EB%B0%B0%ED%8F%AC-%EA%B3%BC%EC%A0%95</link>
            <guid>https://velog.io/@wine-faster/FlowchartCICD-%EB%B0%B1%EC%97%94%EB%93%9C%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EB%B0%B0%ED%8F%AC-%EA%B3%BC%EC%A0%95</guid>
            <pubDate>Thu, 03 Oct 2024 15:22:42 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/wine-faster/post/16139a50-e29f-4712-9b35-06c03491fc3e/image.jpg" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>