<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dev_juloaa.log</title>
        <link>https://velog.io/</link>
        <description>ML Engineer</description>
        <lastBuildDate>Thu, 07 Aug 2025 02:32:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dev_juloaa.log</title>
            <url>https://velog.velcdn.com/images/dev_juloaa43/profile/26a48b00-a05a-44b0-ba59-f74a0139baa5/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dev_juloaa.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev_juloaa43" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[1.6 고유값과 고유벡터]]></title>
            <link>https://velog.io/@dev_juloaa43/1.6-%EA%B3%A0%EC%9C%A0%EA%B0%92%EA%B3%BC-%EA%B3%A0%EC%9C%A0%EB%B2%A1%ED%84%B0</link>
            <guid>https://velog.io/@dev_juloaa43/1.6-%EA%B3%A0%EC%9C%A0%EA%B0%92%EA%B3%BC-%EA%B3%A0%EC%9C%A0%EB%B2%A1%ED%84%B0</guid>
            <pubDate>Thu, 07 Aug 2025 02:32:24 GMT</pubDate>
            <description><![CDATA[<p><strong>1. 고윳값과 고유벡터의 정의</strong>
행렬 A에 대해 Av = $\lambda$v 를 만족하는 v가 0이 아닌 벡터를 고유벡터, 그에 대응하는 스칼라값을 고유값이라고 한다.
기하학적으로는, 고유벡터는 선형 변환의 방향을 변경하지 않고 단지 길이만 $\lambda$배로 늘리거나 줄이는 역할을 한다.</p>
<p><strong>2. 고윳값 계산 방법</strong>
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/55a6af5d-0476-43a3-9499-90da2763602f/image.png" alt="">
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/815bc28f-499f-4c1b-a25f-da682aff91d7/image.png" alt=""></p>
<p>즉 행렬 A는 두 개의 방향 $[1, 1]^T$에서 벡터를 3배 늘리고,
$[1, -1]^T$ 에서 벡터를 1배 그대로 유지한다.</p>
<p><strong>3. 딥러닝에서 고유값/고유벡터가 왜 중요한가?</strong>
고유값/고유벡터는 행렬 변환이 어떤 방향을 그대로 유지하면서 얼마나 늘리거나 줄이는지 알려주는 도구이다. </p>
<ul>
<li><p>PCA 분석 (데이터 압축/차원 축소)
예를 들어 100차원의 데이터를 2차원으로 줄이고 싶을 때, PCA는 공분산 행렬의 고유벡터를 구해서 <strong>가장 중요한 방향(분산이 큰 방향)</strong>을 찾고 그 방향만 남기고 나머지는 버려서 정보를 압축한다.</p>
</li>
<li><p>신경망의 가중치 안정성/학습 분석
딥러닝 모델이 학습을 잘 하고 있는지 분석할 때 가중치 행렬의 고유값을 보면 너무 큰 고유값인 경우 폭주 가능성이 있고 너무 작은 고유값인 경우 학습이 느리거나 정보손실이 발생할 수 있음을 파악할 수 있다.</p>
</li>
</ul>
<p><strong>4. 행렬의 대각화</strong>
고유값과 고유벡터를 알면 행렬 A도 구할 수 있다.
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/db158ef8-f81f-403f-a487-6808620e989f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1.5 직교행렬과 부분공간]]></title>
            <link>https://velog.io/@dev_juloaa43/1.5-%EC%A7%81%EA%B5%90%ED%96%89%EB%A0%AC%EA%B3%BC-%EB%B6%80%EB%B6%84%EA%B3%B5%EA%B0%84</link>
            <guid>https://velog.io/@dev_juloaa43/1.5-%EC%A7%81%EA%B5%90%ED%96%89%EB%A0%AC%EA%B3%BC-%EB%B6%80%EB%B6%84%EA%B3%B5%EA%B0%84</guid>
            <pubDate>Wed, 06 Aug 2025 04:18:53 GMT</pubDate>
            <description><![CDATA[<p><strong>1. 직교행렬 개념</strong>
직교행렬 Q는 다음 성질을 만족 
$$
Q^TQ = I (=Q^-1 = Q^T)
$$
즉, 행과 열이 서로 직교하고 단위 벡터인 행렬</p>
<ul>
<li>직교 기저 개념 확장
행/열 벡터가 서로 직교하고 길이가 1인 기저</li>
</ul>
<p><strong>2. 직교행렬이 중요한 이유</strong></p>
<p><strong>* 수학적 관점에서 중요한 이유</strong></p>
<ul>
<li>직교행렬은 유클리드 공간의 기하 구조(거리, 각도, 직선성)을 왜곡하지 않고 좌표계만 바꾸는 역할을 한다.</li>
<li>변환 후 벡터의 성질(길이, 각도)가 유지되므로 데이터 분석/기하 알고리즘에서 해석이 용이</li>
<li>행렬의 열벡터 (또는 행벡터)가 서로 직교이고 길이가 1이므로, 이 벡터들이 직교 기저 역할을 한다.</li>
</ul>
<p><strong>* 계산/수치적 관점에서 중요한 이유</strong></p>
<ul>
<li>직교행렬의 역은 전치이므로 역행렬 계산이 단순하다. -&gt; 계산 비용과 복잡성이 낮아진다.</li>
</ul>
<p><strong>3. 직교와 영공간</strong>
<strong>직교</strong>란 두 벡터의 내적이 0이란 뜻이다. $u^Tv$=0
즉 벡터공간에서 &quot;서로 전혀 상관없는 방향&quot; 이라고 볼 수 있다. 벡터 집합이 서로 직교한다는 것은 독립적이고 중복 없는 정보라고 볼 수 있다. </p>
<p><strong>영공간</strong>(Ax=0)의 의미는 A의 열공간에 영향을 주지 않는 방향을 뜻한다. 즉, 행렬이 못 보는 방향, 정보 손실이 발생하는 차원을 뜻한다.
랭크가 낮을수록 영공간이 커진다. (정보 손실이 큼)</p>
<ul>
<li><strong>핵심 직교 관계</strong>
행공간과 영공간은 서로 직교, 열공간과 좌영공간은 서로 직교이다.
Ax=0 (영공간) -&gt; x는 A의 행공간과 직교하는 벡터
Ax=b (열공간) -&gt; 해가 존재하려면 b는 A의 열공간 안에 있어야함. 
만약 b가 열공간에 없으면 b를 열공간에 직교분해해 최소제곱 해를 구해야한다.</li>
</ul>
<p><strong>4. 요약</strong>
<strong>직교</strong> : 두 벡터가 서로 독립적이고 상호작용이 없는 상태 (내적=0)
<strong>영공간</strong> : 행렬이 정보를 무시하는 방향들의 집합
<strong>관계</strong> : 행렬이 정보를 보는 공간과 무시하는 공간은 항상 직교한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1.4 소거법과 A=LU]]></title>
            <link>https://velog.io/@dev_juloaa43/%EC%86%8C%EA%B1%B0%EB%B2%95%EA%B3%BC-ALU</link>
            <guid>https://velog.io/@dev_juloaa43/%EC%86%8C%EA%B1%B0%EB%B2%95%EA%B3%BC-ALU</guid>
            <pubDate>Wed, 06 Aug 2025 03:10:57 GMT</pubDate>
            <description><![CDATA[<p><strong>1. Gaussian Elimination(가우시안 소거법)</strong></p>
<ul>
<li><p>개요
행렬 A에 일련의 행 연산을 수행하여 상삼각 행렬 U로 변환하는 과정이다.
이 소거 과정은 행렬의 계수(rank), 열공간, 영공간 구조를 찾는 데 핵심적 방법이자 시각적 도구이다.</p>
</li>
<li><p>목적 및 의미
기저열을 찾아 열공간의 독립 열 벡터를 식별한다.</p>
</li>
</ul>
<p><strong>2. LU Decomposition (A=LU 분해)</strong></p>
<ul>
<li>정의
하삼각행렬 L과 상삼각행렬 U의 곱으로 원래 행렬 A를 표현하는 방법이다.
$$ 
A=LU$$</li>
</ul>
<p>이 분해는 소거법으로 얻어진 계수들을 행렬 형태로 정리한 결과이다.</p>
<p>예시)
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/c2bcc989-0b36-4acf-b454-e089f708d812/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/dev_juloaa43/post/96417f0f-565a-4c1d-8921-6c42720d0a73/image.png" alt="">
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/daa41f6f-f3ea-4f6a-b96e-458ef3426bb5/image.png" alt=""></p>
<blockquote>
<p>4z = 20 -&gt; z = 5
-y + 5 = 6 -&gt; y = -1
x + 2(-1) + 5 = 9 -&gt; x = 6
해 (x, y, z) = (6, -1, 5)</p>
</blockquote>
<ul>
<li>행 교환이 필요한 이유
가장 위의 행의 피벗(나눌 값)이 0이거나 아주 작은 수일 때는 아래 행 중 가장 큰 절댓값을 가진 행과 교환한다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dev_juloaa43/post/02e000fe-40de-4235-88c7-0b1e0c4f04f0/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1.3 네 가지 기본 부분공간]]></title>
            <link>https://velog.io/@dev_juloaa43/%EB%84%A4-%EA%B0%80%EC%A7%80-%EA%B8%B0%EB%B3%B8-%EB%B6%80%EB%B6%84%EA%B3%B5%EA%B0%84</link>
            <guid>https://velog.io/@dev_juloaa43/%EB%84%A4-%EA%B0%80%EC%A7%80-%EA%B8%B0%EB%B3%B8-%EB%B6%80%EB%B6%84%EA%B3%B5%EA%B0%84</guid>
            <pubDate>Wed, 06 Aug 2025 02:42:45 GMT</pubDate>
            <description><![CDATA[<h2 id="네-가지-기본-부분공간">네 가지 기본 부분공간</h2>
<p><strong>1. 열공간 (Column Space), C(A)</strong>
A의 열 벡터들이 생성하는 공간
차원 : rank(A)</p>
<p><strong>2. 행공간 (Row Space), C($A^T$)</strong>
$A^T$가 생성하는 공간
차원 : rank(A)(열공간과 동일)</p>
<p><strong>3. 영공간 (Nullspace), N(A)</strong>
Ax=0을 만족하는 모든 x의 집합
차원 : n-r (열 수 n에서 rank r을 뺌)</p>
<p><strong>4. 왼쪽 영공간 (Left Nullspace), N($A^T$)</strong>
$A^T$y=0을 만족하는 모든 y
차원 : m-r (행 수 m에서 rank r을 뺌)</p>
<p>이 네 공간이 서로 직교하는 관계를 가진다.
열공간 벡터는 왼쪽 영공간의 모든 벡터와 내적이 0이고, 행공간의 벡터는 영공간의 모든 벡터와 내적이 0이다.</p>
<h2 id="ab와-ab의-랭크">AB와 A+B의 랭크</h2>
<p><img src="https://velog.velcdn.com/images/dev_juloaa43/post/d7ec6f08-87d1-4f04-bc46-b6eb57d75916/image.png" alt="">
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/f81f5b2a-eb02-407e-986b-19bac0520311/image.png" alt=""></p>
<p>요약하자면 AB는 곱했을 때 랭크가 절대 커지지 않고, 작은 쪽보다 클 수 없다.
A+B는 더하거나 뺄 때 랭크가 커질수도, 작아질 수도 있음, 하지만 위 부등식 범위 안에서 변화한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1.2 행렬 곱셈 AB]]></title>
            <link>https://velog.io/@dev_juloaa43/%ED%96%89%EB%A0%AC-%EA%B3%B1%EC%85%88-AB</link>
            <guid>https://velog.io/@dev_juloaa43/%ED%96%89%EB%A0%AC-%EA%B3%B1%EC%85%88-AB</guid>
            <pubDate>Tue, 05 Aug 2025 08:56:51 GMT</pubDate>
            <description><![CDATA[<p><strong>1. 외적 (Outer Product)</strong>
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/ee491b0e-38df-4257-aefe-ca7830c0dff1/image.png" alt=""></p>
<ul>
<li>여러 개의 랭크 1 행렬의 합이란?
행렬의 랭크는 그 행렬의 열(또는 행)들이 생성하는 공간의 차원이다.
쉽게말해 선형독립인 열벡터(또는 행벡터의) 개수가 랭크이다. 행렬이 나타내는 선형 변환이 얼마나 많은 독립적인 방향을 갖고 있는지를 의미한다.
예를 들어 모든 열이 같은 방향이면 -&gt; 랭크 1 이고, 두개의 독립된 방향이 있으면 랭크는 2이다.</li>
</ul>
<p><strong>2. 외적 $uv^T$의 구조</strong>
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/ad379d48-2fe7-480e-a5e6-5769c61981eb/image.png" alt=""></p>
<p>즉 외적을 하여 생성되는 행렬은 랭크가 1인 행렬이 된다. 따라서 행렬 AB는 랭크 1인 행렬의 합이 된다.
AB = (m x n)(n x p)에는 mnp번의 곱셈 연산이 필요하다. (랭크가 1인 n개의 행렬이 필요하며, 각 행렬의 크기는 m x p 이다.)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1.1 행렬 A의 열을 이용한 곱셈 Ax]]></title>
            <link>https://velog.io/@dev_juloaa43/%ED%96%89%EB%A0%AC-A%EC%9D%98-%EC%97%B4%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EA%B3%B1%EC%85%88-Ax</link>
            <guid>https://velog.io/@dev_juloaa43/%ED%96%89%EB%A0%AC-A%EC%9D%98-%EC%97%B4%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EA%B3%B1%EC%85%88-Ax</guid>
            <pubDate>Tue, 05 Aug 2025 06:06:06 GMT</pubDate>
            <description><![CDATA[<p><strong>1. 행렬 곱셈을 열의 조합으로 본 관점</strong>
mxn 행렬 A = [a1, a2, ..., an]과 열벡터 $x=(x1, x2, ...xn)^T$가 있을 때, 곱 Ax는 다음과 같이 열 벡터들의 선형결합으로 해석할 수 있다.</p>
<blockquote>
<p>$$
Ax = x_1a_1 + x_2a_2 + ... + x_na_n$$</p>
</blockquote>
<p>즉, Ax 결과는 열공간안에 존재하는 벡터이다.</p>
<ul>
<li><strong>열공간이란?</strong>
행렬의 열벡터들로 생성되는 공간을 뜻한다, 즉 가능한 모든 선형 조합의 집합이다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dev_juloaa43/post/06ddb535-11c1-4da3-8ada-4103323931c1/image.png" alt=""></p>
<p>이 때 열 공간은 Col(A) = Span{$a_1, a_2, ..., a_n$} 이다. 열공간은 행렬 A의 열들이 존재하는 공간의 부분 공간이다. 
A가 mxn 행렬이면, 열 벡터는 $R^m$에 속하므로 열공간은 $R^m$의 부분공간이 된다.
열공간의 차원은 그 행렬의 계수(Rank)와 같다. (즉, 선형독립인 열 벡터들의 개수)</p>
<ul>
<li><strong>열공간이 왜 중요한가?</strong>
선형방정식 Ax=b의 해가 존재하는지 판단할 때 사용한다. 
벡터 b가 Col(A) 안에 있으면 해가 존재한다. b가 열공간 밖에 있으면 해가 없다.</li>
</ul>
<br>

<p><strong>2. 네 가지 핵심 개념</strong></p>
<ol>
<li>Column Space (열공간)</li>
<li>Row Space (행공간)</li>
<li>Rank (행렬의 계수: 독립 열벡터의 개수)</li>
<li>Gaussian Elimination (계수 및 기저 추출)</li>
</ol>
<br>

<p><strong>3. 열공간의 차원과 기저</strong>
열공간의 차원은 행렬의 랭크와 같고 이는 선형독립인 열의 개수이다.
Gaussian elimination을 통해 선형 독립인 열만 뽑아 basis로 삼으면 이 열들이 열공간을 완전히 생성한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] 자주 사용되는 서비스 정리]]></title>
            <link>https://velog.io/@dev_juloaa43/AWS-%EC%9E%90%EC%A3%BC-%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@dev_juloaa43/AWS-%EC%9E%90%EC%A3%BC-%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Thu, 01 Sep 2022 02:18:57 GMT</pubDate>
            <description><![CDATA[<p>AWS에는 다양한 서비스가 존재하고 이 서비스들을 조합하여 하나의 WEB 서비스를 만든다.</p>
<h2 id="컴퓨팅-서비스">컴퓨팅 서비스</h2>
<p><strong>1. EC2 (Elastic Compute Cloud)</strong></p>
<ul>
<li>컴퓨팅 리소스를 제공하는 서비스로, aws에서 가장 널리 쓰이는 인프라이다.</li>
<li>가상머신으로 제공되고 <strong>인스턴스</strong>라고 불린다.</li>
<li>안정성을 위해 여러 aws 리전과 가용 영역에 걸쳐 배포된다.</li>
</ul>
<p><strong>2. Lambda (Serverless Computing)</strong></p>
<ul>
<li>RestAPI 개발등 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행할 수 있는 서비스이다.</li>
<li>파이썬, 자바, nodejs등 다양한 언어를 지원한다.</li>
</ul>
<p><strong>3. ECS (EC2 Container service)</strong></p>
<ul>
<li>EC2를 <strong>Docker 컨테이너</strong>로 관리하도록 나온 서비스이다.</li>
</ul>
<h2 id="네트워킹-서비스">네트워킹 서비스</h2>
<p><strong>1. VPC</strong></p>
<ul>
<li>클라우드 가상 네트워크 구축 서비스</li>
</ul>
<p><strong>2. Route53</strong></p>
<ul>
<li>도메인 관리/설정 서비스</li>
<li>EC2 인스턴스, Elastic 로드밸런서, S3 저장소 등 aws 서비스 인프라에 효과적으로 연결한다.</li>
</ul>
<p><strong>3. ELB (Elastic Load Balancing)</strong></p>
<ul>
<li>서버에 부하가 걸리는 것을 방지하고자 트래픽을 분산해주는 역할을 한다.</li>
<li>트래픽을 EC2 인스턴스, 컨테이너, IP주소, Lambda 등에 자동으로 분산시켜준다.</li>
</ul>
<h2 id="스토리지-서비스">스토리지 서비스</h2>
<p><strong>1. S3</strong></p>
<ul>
<li>사진, 문서, 프론트엔드 코드 및 Lambda 함수 코드등 저장하는 서비스</li>
<li>url을 통해 파일 사용 가능</li>
<li>http 프로토콜과 연동되어 정적 사이트를 호스팅 할 수도 있다.</li>
</ul>
<h2 id="데이터베이스-서비스">데이터베이스 서비스</h2>
<p><strong>1. RDS</strong></p>
<ul>
<li>관계형 데이터베이스</li>
<li>Amazon Aurora, MySQL, MariaDB, PostgreSQL, Oracle 등을 지원</li>
</ul>
<p><strong>2. DynamoDB</strong></p>
<ul>
<li>NoSQL 데이터베이스 </li>
<li>key-value 형태이다.</li>
</ul>
<p><strong>3. ElastiCache</strong></p>
<ul>
<li>Database Caching 서비스</li>
<li>Memcached, Redis 을 지원한다.</li>
</ul>
<p><strong>4. DocumentDB</strong></p>
<ul>
<li>MongoDB와 호환되는 데이터베이스 설정</li>
</ul>
<h2 id="분석-서비스">분석 서비스</h2>
<ol>
<li>Kinesis</li>
</ol>
<ul>
<li>대용량 데이터를 저장 분류할 수 있는 서비스</li>
<li>스트리밍 데이터를 효율적으로 처리할 수 있다.</li>
</ul>
<ol start="2">
<li>Redshift</li>
</ol>
<ul>
<li>효율적으로 데이터를 분석할 수 있는 데이터 웨어하우스</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] Lambda로 REST API 구축하기]]></title>
            <link>https://velog.io/@dev_juloaa43/AWS-Lambda%EB%A1%9C-REST-API-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@dev_juloaa43/AWS-Lambda%EB%A1%9C-REST-API-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 12 Aug 2022 05:51:32 GMT</pubDate>
            <description><![CDATA[<p>AWS에 익숙해지고 공부할 겸 Lambda와 API GateWay를 활용하여 간단한 get, post REST API 구축하는 실습을 해보았고, 간단하게 정리할 겸 포스팅을 작성한다.</p>
<p>참고링크</p>
<blockquote>
<p><a href="https://cumulus.tistory.com/12?category=953833">https://cumulus.tistory.com/12?category=953833</a></p>
</blockquote>
<p>해당 포스팅에 마침 해보고싶었던 실습이 간단하게 잘 정리되어 있어서 많이 참고했다.</p>
<p><img src="https://velog.velcdn.com/images/dev_juloaa43/post/842cef35-b588-4f42-821d-7283c0c42ac0/image.png" alt=""></p>
<p>위의 [함수 생성] 버튼을 누르고 이름에 함수명을 기입해준다. 런타임에서 파이썬, nodejs, 자바 등 언어를 고를 수 있다.
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/88b24b23-f0fe-4071-884f-9a549fd410d1/image.png" alt=""></p>
<p>생성한 함수안에서 코드탭에 index.js에 소스코드를 기입해준다.(소스코드는 위 출처포스팅에 있다.)
소스코드 수정 후 Deploy버튼을 눌러 업데이트 시켜줘야한다.
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/6673c07c-09f4-4e9f-b149-8b8cf538aeb0/image.png" alt="">
API Gateway 서비스로 가서 API 생성 버튼을 눌러준다.
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/d3f14acd-7313-46c5-afd1-725dc667da24/image.png" alt=""></p>
<p>REST API의 구축 버튼을 눌러준다.
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/455db627-eac6-4d37-8506-854bb9427b84/image.png" alt=""></p>
<p>API이름을 작성해준 후 우측 하단 API생성 버튼을 눌러준다.
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/9718d606-b8bc-4e3d-b659-65403e3b4384/image.png" alt="">
실습이 진행된 후에 캡쳐한거라 이미 board리소스와 GET,POST 메서드가 생성되어 있다.</p>
<p><img src="https://velog.velcdn.com/images/dev_juloaa43/post/4c54b99a-0f3c-4637-9084-4491c30cfe63/image.png" alt=""></p>
<ol>
<li>작업 탭에서 리소스를 우선 생성해준다.(board라는 리소스 생성)</li>
<li>board 리소스가 선택되어 있는 채로 작업 탭에서 메서드를 생성해준다.</li>
<li>아래와 같이 선택해준 후 생성한다.</li>
</ol>
<ul>
<li>Lambda 프록시 통합 사용 체크해줘야한다.
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/42943b7f-b1bb-4829-8495-ca82b9e6fec0/image.png" alt="">
API 배포를 선택하여 배포 스테이지는 [새 스테이지], 스테이지 이름은 버전관리하기 편하게 날짜로 해준다.
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/50f6628f-68de-4c48-a8c4-dbb3284826a7/image.png" alt="">
Lambda로 넘어가보면 API Gateway가 아래처럼 포함되어 있다.
함수 개요에서 API Gateway를 클릭해보면 아래에 생성했던 메서드(get, post, put)등이 뜬다. 제공되는 API endpoint로 API를 호출할 수 있다.
<img src="https://velog.velcdn.com/images/dev_juloaa43/post/40adb5b8-8196-4ddf-821f-961d28335e73/image.png" alt=""></li>
</ul>
<p>url에 get 방식의 endpoint를 복붙해보면 코드에 설정된 Response가 출력된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] 프로그래머스 42587 ]]></title>
            <link>https://velog.io/@dev_juloaa43/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-42587</link>
            <guid>https://velog.io/@dev_juloaa43/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-42587</guid>
            <pubDate>Fri, 15 Jul 2022 05:56:28 GMT</pubDate>
            <description><![CDATA[<p><strong>문제 설명</strong>
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.</p>
<ol>
<li>인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.</li>
<li>나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.</li>
<li>그렇지 않으면 J를 인쇄합니다.
예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다.</li>
</ol>
<p>내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알고 싶습니다. 위의 예에서 C는 1번째로, A는 3번째로 인쇄됩니다.</p>
<p>현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location이 매개변수로 주어질 때, 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 solution 함수를 작성해주세요.</p>
<p>제한사항
현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다.
인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다.
location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며 대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표현합니다.</p>
<p><strong>입출력 예</strong>
priorities    location    return
[2, 1, 3, 2]      2          1
[1, 1, 9, 1, 1, 1]    0    5</p>
<blockquote>
<p>해결방법 &gt;&gt;&gt; deque를 통해서 해결하는 방법이 제일 간단해보였다.</p>
</blockquote>
<pre><code>from collections import deque
def solution(prior,loc):
    answer = 0
    temp = deque(enumerate(prior)) 
    while temp:
        ord, prio = temp.popleft()
        if any(prio &lt; temp_prio[1] for temp_prio in temp): # any 유용함
            temp.append((ord, prio))
        else:
            answer += 1
            if ord == loc:  # popleft하면서 append시킨 데이터가 돌아옴 
                break
    return answer</code></pre><p>이 문제를 통해 any를 알게되었는데 많이 유용한 기능같다.
예시1을 보면
(0,2),(1,1)이 temp의 제일 뒤로 append 된다.
(2,3)의 2와 popleft의 ord가 같으므로 answer은 1을 반환한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Solved] 커밋 내역이 github 잔디에 반영되지 않을 때!]]></title>
            <link>https://velog.io/@dev_juloaa43/Solved-%EC%BB%A4%EB%B0%8B-%EB%82%B4%EC%97%AD%EC%9D%B4-github-contributions-%EB%B0%98%EC%98%81%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C</link>
            <guid>https://velog.io/@dev_juloaa43/Solved-%EC%BB%A4%EB%B0%8B-%EB%82%B4%EC%97%AD%EC%9D%B4-github-contributions-%EB%B0%98%EC%98%81%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C</guid>
            <pubDate>Tue, 05 Jul 2022 00:54:39 GMT</pubDate>
            <description><![CDATA[<p>최근 깃허브를 잘 가꾸고 활용해야겠다는 필요성을 느껴 1일 1커밋을 목표로 공부를 하고 있다.</p>
<p>분명 잔디가 이쁘게 심어지다가 어제는 커밋을 여러번 했는데도 잔디에 적용이 안되있어서 확인해봤다.</p>
<p><img src="https://velog.velcdn.com/images/dev_juloaa43/post/b5ed4165-6e23-494d-8c9b-caf8d445b785/image.png" alt=""></p>
<p>구글링해보니 github 브랜치가 main으로 되어 있기 때문에 master로 변경해주거나 git config 이메일과 github - setting - email의 이메일이 달라서라고 했다.</p>
<p>나의 경우 push할 때 main으로 잡아놨기 때문에 첫번째 문제는 아닐 것이라고 생각했고 이메일이 달라서라고 생각했다.</p>
<pre><code>git config list</code></pre><p>명령을 command 창에 쳐보면 git config에 등록된 이메일 주소가 나온다.</p>
<pre><code>git config --glocal user.email &quot; 깃허브에 등록되어 있는 이메일&quot;</code></pre><p>로 바꾸니 커밋 내역이 잘 반영된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Solved] PowerShell (The file is not digitally signed) 오류 해결]]></title>
            <link>https://velog.io/@dev_juloaa43/Solved-PowerShell-The-file-is-not-digitally-signed-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@dev_juloaa43/Solved-PowerShell-The-file-is-not-digitally-signed-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Wed, 29 Jun 2022 04:56:23 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dev_juloaa43/post/78639fb9-eee4-4114-adb1-c10c9a1eb800/image.png" alt=""></p>
<p>윈도우에서 mecab의 사용자 사전을 업데이트 후 적용시키려고 
하는데 위와 같은 에러가 떴다.</p>
<h3 id="오류원인">오류원인</h3>
<blockquote>
<p>윈도우에서 PowerShell 실행 정책(보안)의 문제로 실행되지 않는다는 에러이다.</p>
</blockquote>
<h3 id="해결방법">해결방법</h3>
<blockquote>
<p><strong>Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine</strong> 
명령어를 위와 같이 쳐주면 실행 정책이 Restricted에서 RemoteSinged로 변경된다.</p>
</blockquote>
<p>이후 mecab 사용자 사전 업데이트 동작되는 것을 확인했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Solved] 윈도우 업데이트 후 Virtual Box 호스트 세션을 열 수 없습니다. 발생]]></title>
            <link>https://velog.io/@dev_juloaa43/%EC%98%A4%EB%A5%98%ED%95%B4%EA%B2%B0-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%ED%9B%84-Virtual-Box-%ED%98%B8%EC%8A%A4%ED%8A%B8-%EC%84%B8%EC%85%98%EC%9D%84-%EC%97%B4-%EC%88%98-%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4</link>
            <guid>https://velog.io/@dev_juloaa43/%EC%98%A4%EB%A5%98%ED%95%B4%EA%B2%B0-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%ED%9B%84-Virtual-Box-%ED%98%B8%EC%8A%A4%ED%8A%B8-%EC%84%B8%EC%85%98%EC%9D%84-%EC%97%B4-%EC%88%98-%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4</guid>
            <pubDate>Fri, 17 Jun 2022 05:18:57 GMT</pubDate>
            <description><![CDATA[<p>일주일동안 Virtual Box로 도커 기반 사이드프로젝트를 진행하고 있었는데 어느날 갑자기 Virtual Box의 호스트 세션을 열 수 없다고 에러가 나는 것.</p>
<p>모든 호스트가 해당 에러가 났고 건드린게 없는데 무엇 때문인가 고민하다가 몇시간전 윈도우 업데이트 했던게 생각났다.</p>
<p>virtual box 버전을 낮춰보기도 하고 별 짓을 했지만 안되서 절망하고 있을 때쯤, <strong>구글링해보다가 알약 프로그램과 충돌하는 경우가 있다고 하여 알약 프로그램을 제거해보았다.</strong></p>
<p><strong>컴퓨터 재부팅하니 마법같이 잘 실행이 되었다.</strong></p>
<blockquote>
<p>오늘의 교훈 : 중요한 과제 및 제출 앞두고는 윈도우 업데이트도 신중하자</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[개발] 도커 컨테이너와 로컬 파일 복사]]></title>
            <link>https://velog.io/@dev_juloaa43/%EA%B0%9C%EB%B0%9C-%EB%8F%84%EC%BB%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EB%A1%9C%EC%BB%AC-%ED%8C%8C%EC%9D%BC-%EB%B3%B5%EC%82%AC</link>
            <guid>https://velog.io/@dev_juloaa43/%EA%B0%9C%EB%B0%9C-%EB%8F%84%EC%BB%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EB%A1%9C%EC%BB%AC-%ED%8C%8C%EC%9D%BC-%EB%B3%B5%EC%82%AC</guid>
            <pubDate>Thu, 09 Jun 2022 01:32:10 GMT</pubDate>
            <description><![CDATA[<p>도커환경에서 프로젝트를 수행하다보면 컨테이너내에서 생성된 파일을 로컬로 가져오거나 반대로 로컬의 파일을 컨테이너내로 복사해야 하는 일이 종종 생긴다.</p>
<p>아래 명령어로 간단하게 해결할 수 있다.</p>
<ul>
<li>로컬 파일을 컨테이너 내로 복사
ex) /data/sample.json 파일을 test_container 컨테이너의 /data 경로에 복사하고 싶은 경우</li>
</ul>
<pre><code>        docker cp /data/sample.json test_container:/data </code></pre><ul>
<li>컨테이너 내 파일을 로컬로 복사
ex) test_container 컨테이너의 /data/sample.json 파일을 로컬의 /data 디렉토리에 복사하고 싶은 경우<pre><code>      docker cp test_container:/data/sample.json /data</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Solved] 플라스크 host='0.0.0.0'으로도 외부접속 안될 때]]></title>
            <link>https://velog.io/@dev_juloaa43/%EA%B0%9C%EB%B0%9C-%ED%94%8C%EB%9D%BC%EC%8A%A4%ED%81%AC-host0.0.0.0-%EC%99%B8%EB%B6%80%EC%A0%91%EC%86%8D-%EC%95%88%EB%90%A0-%EB%95%8C%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@dev_juloaa43/%EA%B0%9C%EB%B0%9C-%ED%94%8C%EB%9D%BC%EC%8A%A4%ED%81%AC-host0.0.0.0-%EC%99%B8%EB%B6%80%EC%A0%91%EC%86%8D-%EC%95%88%EB%90%A0-%EB%95%8C%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Thu, 13 Jan 2022 06:31:56 GMT</pubDate>
            <description><![CDATA[<p>리눅스서버에서 플라스크 웹을 띄워 app.run(host=&#39;0.0.0.0&#39;)으로 외부접속이 되는 것을 확인했었다.</p>
<p>그러나 며칠 뒤 다시 실행시켜보니 외부접속이 안되어 약 한시간정도 삽질하다가 우분투 방화벽(ufw)이 5000번 포트에 deny되어 있다는 것을 알게되었다.</p>
<p>서버를 동작시킨 후 
<strong>netstat -nlp | grep 5000</strong> 명령어를 통해 LISTEN인 것을 확인했는데도 접속이 안된다면</p>
<p><strong>ufw status</strong> 명령어를 통해 5000번이 allow 되어있는지 확인한다.</p>
<p>deny되어있다면 
<strong>ufw allow 5000</strong> 를 통해 allow 시켜준다.</p>
<p>그래도 안된다면 
<strong>ufw allow 5000/tcp</strong></p>
<p>를 통해서 해결할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[개발] 리눅스에서 구동한 플라스크 웹 외부접속하기]]></title>
            <link>https://velog.io/@dev_juloaa43/%EA%B0%9C%EB%B0%9C-%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90%EC%84%9C-%EA%B5%AC%EB%8F%99%ED%95%9C-%ED%94%8C%EB%9D%BC%EC%8A%A4%ED%81%AC-%EC%9B%B9-%EC%99%B8%EB%B6%80%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@dev_juloaa43/%EA%B0%9C%EB%B0%9C-%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90%EC%84%9C-%EA%B5%AC%EB%8F%99%ED%95%9C-%ED%94%8C%EB%9D%BC%EC%8A%A4%ED%81%AC-%EC%9B%B9-%EC%99%B8%EB%B6%80%EC%A0%91%EC%86%8D%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 30 Dec 2021 01:17:50 GMT</pubDate>
            <description><![CDATA[<p>플라스크를 공부하고자 간단한 CRUD 기능이 있는 게시판을 만들었다.</p>
<p>윈도우 로컬에서 플라스크를 띄우다가 GPU 사용 가능한 리눅스에서 웹을 띄워야하는데 외부접속이 안되서 방화벽, 포트를 열었지만 안되었다.</p>
<p>결과적으로는 아주 간단하게 app.py 코드를 수정하여 해결할 수 있었다.</p>
<p>너무 간단해서 포스팅하는 것을 고민했지만 일단 남기기로 했다.</p>
<blockquote>
<ol>
<li>가상환경 activate하기</li>
<li>python app.py (app.run()이 존재하는 파일) 실행</li>
</ol>
</blockquote>
<p>이 때 <strong>app.run(host=&#39;0.0.0.0&#39;, port=&#39;5000&#39;)</strong>
를 추가적으로 지정해주면 [리눅스 서버의 ip주소:5000]로 웹 접속이 가능하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS] 인스턴스 삭제 후에도 요금 발생할 때(해결방법)]]></title>
            <link>https://velog.io/@dev_juloaa43/AWS-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%82%AD%EC%A0%9C-%ED%9B%84%EC%97%90%EB%8F%84-%EC%9A%94%EA%B8%88-%EB%B0%9C%EC%83%9D%ED%95%A0-%EB%95%8C%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@dev_juloaa43/AWS-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%82%AD%EC%A0%9C-%ED%9B%84%EC%97%90%EB%8F%84-%EC%9A%94%EA%B8%88-%EB%B0%9C%EC%83%9D%ED%95%A0-%EB%95%8C%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Thu, 16 Dec 2021 08:59:03 GMT</pubDate>
            <description><![CDATA[<p>AWS 프리티어로 VPC, 인스턴스, 로드밸런싱 생성을 실습하던 중 과금이 
걱정되어 모두 삭제했다. </p>
<p>그런데 며칠 뒤 billings를 확인해본 결과 요금이 계속 발생하고 있는것 아닌가..?</p>
<p>*<em>나의 경우 이유가 2가지였다.
하나는 탄력적 IP 때문이고 나머지 하나는 region 때문이었다. *</em></p>
<p><img src="https://images.velog.io/images/dev_juloaa43/post/96df53b9-d0da-4bf3-bd7b-dc3e16f98861/image.png" alt=""></p>
<p>billngs페이지에서 [청구서 세부 정보] 를 클릭하면 어디에서 요금이 발생하는지 볼 수 있다. </p>
<p>요금이 발생하고 있는 부분을 찾아서 그 부분에 해당하는 서비스를 삭제해야 요금이 더 이상 발생하지 않는다.</p>
<p>탄력적 IP를 모두 삭제했는데도 계속 요금이 발생하여 세부 정보를 보니 US East(Ohio)에는 탄력적 IP가 남아있어서 요금이 발생되는 것이었다.</p>
<p>요금이 발생하는 region으로 설정을 해서 남아있는 서비스가 있는지 확인하여 모두 삭제해주면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[네트워크]서브넷마스크 /24란 무슨 뜻일까?]]></title>
            <link>https://velog.io/@dev_juloaa43/%EC%84%9C%EB%B8%8C%EB%84%B7%EB%A7%88%EC%8A%A4%ED%81%AC-24%EB%9E%80-%EB%AC%B4%EC%8A%A8-%EB%9C%BB%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@dev_juloaa43/%EC%84%9C%EB%B8%8C%EB%84%B7%EB%A7%88%EC%8A%A4%ED%81%AC-24%EB%9E%80-%EB%AC%B4%EC%8A%A8-%EB%9C%BB%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Wed, 15 Dec 2021 00:47:01 GMT</pubDate>
            <description><![CDATA[<p>최근 도커를 공부하면서 네트워크를 생성하는 실습을 했는데 ip-range overlap 에러가 떴다. </p>
<p>확인해보니 같은 대역대의 네트워크를 이미 생성해서 그런거 같은데 ip뒤에 붙은 /24, /32의 개념이 명확하지 않아서 정리하고자 한다.</p>
<p>예를들어 192.168.1.0은 32bit로 이뤄져 있다. /24가 붙으면 32자리 중 앞의 24자리만 고정값으로 두는 것이다.</p>
<p>즉 192.168.1 까지는 고정이고 마지막 8bit인 0은 0~255까지 허용되는 것이다. </p>
<p>192.168.1.0/24 =&gt; 192.168.1.0 ~ 192.168.1.255
192.168.1.0/32 =&gt; 192.168.1.0</p>
<blockquote>
<p>네트워크1
ip: 192.168.1.0
서브넷마스크: 255.255.255.0</p>
</blockquote>
<blockquote>
<p>네트워크 2
ip: 192.168.2.0
서브넷마스크: 255.255.255.0</p>
</blockquote>
<p><strong>네트워크1과 네트워크2는 서로 다른 네트워크 대역이다.</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[개발] 플라스크 TemplateNotFound Error 해결방법]]></title>
            <link>https://velog.io/@dev_juloaa43/%EA%B0%9C%EB%B0%9C-%ED%94%8C%EB%9D%BC%EC%8A%A4%ED%81%AC-TemplateNotFound-Error-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@dev_juloaa43/%EA%B0%9C%EB%B0%9C-%ED%94%8C%EB%9D%BC%EC%8A%A4%ED%81%AC-TemplateNotFound-Error-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Mon, 06 Dec 2021 08:25:51 GMT</pubDate>
            <description><![CDATA[<p>파이썬에 플라스크를 붙여서 간단한 웹을 만들기 시작했다.
플라스크를 처음 다뤄서 여러가지 에러를 많이 마주했는데 정리해두면 좋을 것 같아서 기록한다.</p>
<p><img src="https://images.velog.io/images/dev_juloaa43/post/cd2225cb-8fbe-4fab-80b4-ec03cdb1a802/image.png" alt=""></p>
<p>파일 업로드 구현 도중에 TemplateNotFound 에러가 떨어져 구글링을 해봤더니 프로젝트 root 경로의 templates/ 디렉토리 아래에 html 파일이 위치해야한다고 한다.</p>
<p>templates 디렉토리를 생성해주니깐 잘 작동한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[파이썬 코드 작성 시 지켜야 할 규칙]]></title>
            <link>https://velog.io/@dev_juloaa43/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1-%EC%8B%9C-%EC%A7%80%EC%BC%9C%EC%95%BC-%ED%95%A0-%EA%B7%9C%EC%B9%99</link>
            <guid>https://velog.io/@dev_juloaa43/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1-%EC%8B%9C-%EC%A7%80%EC%BC%9C%EC%95%BC-%ED%95%A0-%EA%B7%9C%EC%B9%99</guid>
            <pubDate>Wed, 01 Dec 2021 07:54:45 GMT</pubDate>
            <description><![CDATA[<h3 id="pep8">PEP8</h3>
<blockquote>
</blockquote>
<p>PEP8이란 파이썬 코드를 작성할 때 개발자들이 공통적으로 지키자고 약속한 룰이다. </p>
<p>최근 파이썬으로 코드를 짜다가 내 코드를 나만 보니 너무 막짠다는 생각이 들어서 프로젝트가 끝난 겸 코드를 조금 다듬기로 했다.</p>
<p>코드 작성할 때 간과하고 넘어갔거나 몰랐던 부분 위주로 포스팅할 계획이다.</p>
<blockquote>
<h4 id="1-모듈-함수에-주석-달기">1. 모듈, 함수에 주석 달기</h4>
</blockquote>
<p>팀원과 코드를 공유할 때 위주로 주석을 달아왔었는데 시간이 지나니 내 코드를 나도 못 알아보기 시작했다.
갈수록 모듈화의 중요성을 알아가면서 모듈과 함수에 둘 다 주석 다는 습관을 들여야겠다.</p>
<blockquote>
<h4 id="2-함수작성시-hint-활용">2. 함수작성시 hint 활용</h4>
</blockquote>
<p>파이썬은 동적 프로그래밍 언어이므로 변수의 타입이 고정되어 있지 않다.
덕분에 간단명료한 코드를 작성할 수 있지만 프로그램 규모가 커질수록 이 점이 위험 요소가 될 수 있다.</p>
<p>따라서 타입 힌팅(type hinting)을 해주면 이 부분이 보완된다. 
사실 내가 타입 힌팅을 해야겠다고 생각한 이유는 팀원이 이렇게 작성한 코드를 봤는데 편하게 읽혀서 나도 해야겠다고 다짐했다.</p>
<pre><code>&quot;&quot;&quot;
모듈명: Test 모듈
모듈 description: oo 테스트를 위한 모듈
&quot;&quot;&quot;
import os
import pandas as pd
import numpy as np

def sum(a,b: int) -&gt; int:
    &quot;&quot;&quot;
    기능: 덧셈 함수
    설명: 인자 a,b를 더하는 함수
    Args:
        arg1(int): oo 인자 
        arg2(int): oo 인자

    Returns:
        int
    &quot;&quot;&quot;
    result = a+b
    return result
</code></pre><p>1,2번을 보완해 대충 이런 식으로 짤 것이다 하는 예시임</p>
<blockquote>
<h4 id="3-띄어쓰기">3. 띄어쓰기</h4>
</blockquote>
<p>이 부분은 애매하게 알고 있던 부분이었는데 이번에 찾아보면서 확실하게 알게되었다.
파라미터 값을 나타낼 때는 &#39;=&#39;주변에 띄어쓰기를 하지 말자</p>
<pre><code>def sum(a=1,b=1):
    result = a+b
    return result</code></pre><p>내가 짠 코드를 보니깐 띄어쓰기가 제 멋대로였는데 앞으로는 표준에 맞춰서 작성해야겠다.</p>
<blockquote>
<h4 id="4-코드-최대길이는-79자로">4. 코드 최대길이는 79자로</h4>
</blockquote>
<p>한 줄의 코드 최대길이는 79자로 맞춰야한다. 팀마다 100자로 늘리는 경우가 있다고는 한다.</p>
<p>79자가 넘어갈경우 백슬래시(&#39;&#39;)를 활용하면 된다.</p>
<p>파이썬 개발자라면 PEP8을 쭉 훑어보는 것도 괜찮을 것 같다. 개발하면서 자연스레 알고 있었던 것도 있지만 &#39;아 이게 표준이구나&#39; 하던 것도 꽤 있었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[기록] velog를 시작하며...]]></title>
            <link>https://velog.io/@dev_juloaa43/%EA%B8%B0%EB%A1%9D-velog%EB%A5%BC-%EC%8B%9C%EC%9E%91%ED%95%98%EB%A9%B0</link>
            <guid>https://velog.io/@dev_juloaa43/%EA%B8%B0%EB%A1%9D-velog%EB%A5%BC-%EC%8B%9C%EC%9E%91%ED%95%98%EB%A9%B0</guid>
            <pubDate>Wed, 01 Dec 2021 04:59:46 GMT</pubDate>
            <description><![CDATA[<p>바쁜 일정이 끝나고 12월 한 달간 개발 공부에 집중하고자 velog를 시작하게 되었다. 
12월 한 달 동안 매일 공부하는 것을 목표로 어딘가에 기록을 해야지만 될 것 같아서 일단 시작한다.</p>
<p>아직 velog를 어떻게 작성할지에 대한 상세한 계획은 없지만 그 날 한 공부의 회고 및 기록용으로 활용한 후, 공부한 기술에 대해서는 제대로 정리하여 포스팅할 계획이다.</p>
]]></description>
        </item>
    </channel>
</rss>