<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>juno_lee96.log</title>
        <link>https://velog.io/</link>
        <description>GGMU</description>
        <lastBuildDate>Wed, 03 Dec 2025 00:30:42 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>juno_lee96.log</title>
            <url>https://velog.velcdn.com/images/juno_lee96/profile/7fcf7d89-6f85-4b6c-ac3c-27a8efef7d6c/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. juno_lee96.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/juno_lee96" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[11월 마지막 주차 오답노트 ]]></title>
            <link>https://velog.io/@juno_lee96/11%EC%9B%94-%EB%A7%88%EC%A7%80%EB%A7%89-%EC%A3%BC%EC%B0%A8-%EC%98%A4%EB%8B%B5%EB%85%B8%ED%8A%B8</link>
            <guid>https://velog.io/@juno_lee96/11%EC%9B%94-%EB%A7%88%EC%A7%80%EB%A7%89-%EC%A3%BC%EC%B0%A8-%EC%98%A4%EB%8B%B5%EB%85%B8%ED%8A%B8</guid>
            <pubDate>Wed, 03 Dec 2025 00:30:42 GMT</pubDate>
            <description><![CDATA[<p>오늘은 이번 주에 제가 겪었던 실수들을 정리 해봤어서요.</p>
<h3 id="❗️-에러메시지">❗️ 에러메시지</h3>
<pre><code>Argument of type &#39;{ id: number; email: string; nickname: string | null; ... }&#39;
is not assignable to parameter of type &#39;User&#39;</code></pre><h3 id="문제점">문제점</h3>
<pre><code class="language-ts"> passport.deserializeUser(async function (id: number, done) {

  const user = await prisma.user.findUnique({ where: { id } });
  console.log(typeof user)
  done(null, user);
</code></pre>
<h3 id="해결방법">해결방법</h3>
<p>내가 express.d.ts에 썻던 닉넴 타입과 Prisma model닉넴 타입이 안맞아서 문제 발생. express.d.ts User nickname 타입을 프리즈마 유저 모델 타입 맞춰줬어요</p>
<hr>
<h3 id="❗️에러-메시지">❗️에러 메시지</h3>
<pre><code>  Type &#39;{ url: { ...... }.....}[]&#39; is not assignable to type &#39;ImageCreateManyInput | ImageCreateManyInput[]&#39;.

  Types of property &#39;url&#39; are incompatible.</code></pre><h3 id="문제점-1">문제점:</h3>
<p> 처음에 전 분명히 하나의 게시글은 여러개의 사진을 가지고온다라는 생각을 했는데요? 제 실수는 여러 개의 사진들을 어떻게 배열화해서 가지고 오느냐 였습니다. 즉 저 문제는 객체 !== 문자열이니 객체부분을ㅇㅇ (덤으로 프리즈마 칼럼 실수도 있었음)</p>
<h3 id="해결방법-1">해결방법:</h3>
<p>우선 프리즈마에 하나의 게시글에서 여러개 사진을 업로드 할수있다라는 가정을 둡니다</p>
<pre><code class="language-prisma.ts">// prisma 모델
model Article{
    id Int
    ...
    images Image[] 
}
model Images{
    id     Int
    url String
    ...
    articleId Int 
    article Article relataion(...) // ✅ 다대일 관계 
}</code></pre>
<pre><code class="language-ts">//articleService.ts
async createArticle(
    userId:Number,
    element: ArticleDTO
):Promise&lt;ArticleDTO&gt;{
     const { title, content, ownerId, comments, images } = elements;

    const result = await prisma.article.create({
        data:{
             title: title??&quot;&quot;
              content: content ?? &quot;&quot;
            comments:{
                if (comments.length &gt; 0 &amp;&amp; comments){
                create: comments.map((c) =&gt; {
                    id :c.id,
                    content: c.content
                    })
                }
            },
          images:{
              if (images &amp;&amp; images.length&gt; 0){
                create: images.map((img)=&gt;({
                  url:img.url
                })) ✅ 객체를 배열화 해주는 과정
            }
          }
        },
          include:{
            comments: true,
            images: true
          }
    })
}
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[aws 배포 실수 ]]></title>
            <link>https://velog.io/@juno_lee96/aws-%EB%B0%B0%ED%8F%AC-%EC%8B%A4%EC%88%98</link>
            <guid>https://velog.io/@juno_lee96/aws-%EB%B0%B0%ED%8F%AC-%EC%8B%A4%EC%88%98</guid>
            <pubDate>Tue, 25 Nov 2025 02:30:14 GMT</pubDate>
            <description><![CDATA[<ol>
<li>인스턴스에 연결할 SG 가 안보였던 경우</li>
</ol>
<p>-&gt; 고급 설정에 수정하기 들어가서 올바른 SG와 연결된 vpc가 연결 되어있는지 확인으로 해결</p>
<ol start="2">
<li>분명 pem키를 생성했는데 접근 권한이 없음</li>
</ol>
<p>-&gt; 휴대폰 핫스팟으러 inbound설정한것을 까먹고 있었음 -&gt; 핫스팟 연결로 해결</p>
<p>3.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[도커를 이용한 네트워크]]></title>
            <link>https://velog.io/@juno_lee96/%EB%8F%84%EC%BB%A4%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@juno_lee96/%EB%8F%84%EC%BB%A4%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Mon, 24 Nov 2025 07:11:32 GMT</pubDate>
            <description><![CDATA[<h1 id="개요">개요</h1>
<ul>
<li>네트워크 사용하기</li>
<li>볼륨 사용하기</li>
<li>docker Compose</li>
<li>이미지 최적화</li>
</ul>
<hr>
<h1 id="내용">내용</h1>
<h2 id="네트워크-사용하기">네트워크 사용하기</h2>
<p> 도커 네트워크는 컨테이너들이 서로 통신하고, 외부 호스트나 인터넷 통신할 수있도록 해주는 가상 네트워킹 기능입니다. 도커는 리눅스 커널의 네트워킹 기능을 활용하여서 컨테이너간의 격리및 연결을 관리하는 역할을 합니다. 하지만 이렇다고 해서 전통적인 리눅스 컨테이너랑은 완전히 다른데요. 왜냐하면 존속적인 관계가 벗어낫기때문입니다.</p>
<ul>
<li><h3 id="도커-네트워크의-필요성">도커 네트워크의 필요성</h3>
<ul>
<li><p>컨테이너 사이 통신</p>
<ul>
<li>여러 컨테이너가 데이터를 주고 받기위해서 필요합니다</li>
</ul>
</li>
<li><p>서비스 접근</p>
<ul>
<li>외부 사용자나 호스트 머신이 컨테이너 내부에 접근 하려면 포트에 연결 해야 합니다.</li>
</ul>
</li>
<li><p>격리 </p>
<ul>
<li>컨테이너 간의 네트워크를 격리 시켜서 보안을 유지하고 충돌을 방지 합니다.</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><h3 id="주요-네트워크-드라이버-유형">주요 네트워크 드라이버 유형</h3>
</li>
<li><p><em>브릿지*</em></p>
<ul>
<li>설명: <pre><code>* 도커를 설치하면 기본적으로 생성되는 네트워크 유형입니다</code></pre><ul>
<li>컨테이너 들은 가상의 소프트웨어 브릿지를 통해 서로 통신을 한답니다.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>작동 원리</p>
<ul>
<li>브릿지 네트워크에서 할당된 IP 주소로 각각의 컨테이너는 서로 통신이 가능 합니다.</li>
</ul>
<ul>
<li>외부의 호스트에서 컨테이너를 접근 하려면 <strong>포트포워딩</strong>이 필요 합니다..</li>
</ul>
</li>
</ul>
<ul>
<li>사용 사례: <ul>
<li>단일 호스트 머신에서 독립적인 애플리케이션을 격리할때 자주 이용합니다.</li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>포트 포워딩</strong>이란? 
호스트의 포트와 컨테이너 포트를 연결하는 옵션입니다(p 옵션)</p>
</blockquote>
<p><strong>호스트</strong> </p>
<ul>
<li><p>설명 </p>
<ul>
<li>컨테이너가 호스트 머신의 네트워크 스택을 공유합니다</li>
</ul>
</li>
</ul>
<ul>
<li><p>작동 방식:</p>
<ul>
<li>컨테이너는 호스트와 동일한 ip 주소와 포트공간을 사용하며<ul>
<li>따라서 포트 포워딩이 필요가 없고, 컨테이너가 특정 포트를 사용중이라면, 다른 포트는 그 포트를 사용할 수 없어요.</li>
</ul>
</li>
</ul>
<ul>
<li>사용 사례:</li>
<li>네트워크 오버헤드를 줄여 최고의 성능을 발휘하지만, 보안 격리 능력에서는 떨어진다라는 ...</li>
</ul>
</li>
</ul>
<p> <strong>없음</strong></p>
<ul>
<li><p>설명: 영어로는 <strong>None</strong>인 해당 용어는 컨테이너 내부에 루프백 인터페이스에만 존재하며, 외부 네트워크와 관련없는 완전 쌩판 남인 환경을 가지고 있습니다.</p>
</li>
<li><p>사용 사례:</p>
<ul>
<li>네트워크 연결이 필요없거나, 보안상의 이유로 외부통신을 차단해야하는 컨테이너에서 자주 사용됩니다.</li>
</ul>
<blockquote>
<p>루프 백이란?
IPv4 또는 IPv6 에서 자기 자신을 가르키기 위한 목적으로 사용되는 예약된 IP 주소. 즉 현재 작업중인 컴퓨터를 대상으로 인지하기위한 설정된 IP 주소 공간으로 이더넷 장치가 물리적으로 연결 되어있지 않더라도 현재 작업중인 컴퓨터가 연결의 대상이 된다는 뜻을 가진다.</p>
</blockquote>
<p><strong>오버레이</strong></p>
<ul>
<li><p>설명:영어로는 overlay 로  여러 호스트 머신에 걸쳐 분산된 컨테이너간의 통신을 가능 하게 합니다.</p>
</li>
<li><p>사용 사례:
Docker Swarm,Kybernetes 와 같은 클러스터 환경에서 컨테이너 오케스트레이션을 위해서 사용됩니다.</p>
</li>
</ul>
<hr>
<ul>
<li><h3 id="네트워크-격리-이해하기">네트워크 격리 이해하기</h3>
</li>
</ul>
</li>
<li><p>네트워크 통신이 가능 하기 위한 조건으로는 통신을 하고자 하는 장치가 네트워크 망 내부에 존재해야 합니다</p>
</li>
<li><p>컨테이너 역시 동일 네트워크에 속하지 않는 장치로 부터 요청을 처리 할 수없습니다.</p>
<ul>
<li><h3 id="컨테이너-통신-조건">컨테이너 통신 조건</h3>
</li>
</ul>
<p>둘중에 하나라도 만족 한다면 통신이 가능합니다.</p>
<ul>
<li><p>동일한 네트워크 망에 있는가</p>
</li>
<li><p>호스트 머신네트워크에 포트 공개를 통한 네트워크 통신 </p>
</li>
<li><p><strong><em>도커 네트워크 생성</em></strong></p>
</li>
</ul>
</li>
<li><p>-d: 드라이버를 지정할수 있으며, 기본 값은 <code>브릿지</code>입니다</p>
<pre><code class="language-shell"># docker network create [네트워크 이름]
docker network create marketplace-network</code></pre>
<ul>
<li><p><strong><em>도커 네트워트 조회</em></strong></p>
<pre><code class="language-shell">docker network ls</code></pre>
</li>
<li><p><strong><em>도커 네트워트 삭제</em></strong></p>
<pre><code class="language-shell">docker network rm
docker network prune</code></pre>
</li>
<li><p><strong><em>도커 네트워트 연결(컨테이너 실행시)</em></strong>
<code>docker containter run</code>명령어의 <code>--network</code> 옵션을 연결
```shell
docker container run
...</p>
</li>
<li><p>-network marketplace-network
juno/market
```</p>
</li>
<li><p><strong><em>도커 네트워트 연결(컨테이너 실행중)</em></strong>
<code>docker network connect</code> 으로 연결 할수있다. </p>
<pre><code class="language-shell">docker netword connect[네트워크][컨테이너]
docker network connect marketplace-network marketplace-app</code></pre>
</li>
<li><p><strong><em>컨테이너가 사용중인 네트워크 확인하기</em></strong></p>
<pre><code>docker container inspect [컨테이너]
docker container inspect marketplace-app</code></pre></li>
<li><p><strong><em>네트워크 확인 해보기</em></strong>
<code>curlimages/curl</code> 이미지를 통해 curl 명령어 사용 가능 
컨테이너 실행하기
```shell
docker container run\</p>
</li>
<li><ul>
<li>network marketplace-network\</li>
</ul>
</li>
<li><ul>
<li>rm \</li>
</ul>
</li>
<li><ul>
<li>name curl-test<br>curlimages/curl</li>
</ul>
</li>
</ul>
<p>docker containter run<br>-- name curl-test<br>-- rm<br>-it<br>--network other-network<br>curlimages/curl sh</p>
<pre><code>
컨테이너에 명령어 실행
```shell
docker container exec -it curl-test

# container 내부
curl marketplace-app:3000 # DNS 로 통신
curl 172.18.0.2:3000# IP로 통신하기</code></pre><ul>
<li><p>만약 컨테이너에 별도의 네트워크를 설정하지 않으면     <code>브릿지</code>로 자동 네트워크 연결이 됩니다.</p>
</li>
<li><p>기본 네트워크와의 큰 차이점은 DNS를 통한 통신 입니다.</p>
</li>
<li><p>기본 네트워크 연결시 DNS의 값은 null 입니다.</p>
</li>
<li><p><strong><em>호스트 머신과 포트 바인딩</em></strong> 
<code>-p</code>와<code>--publish</code>
```shell
docker container run\ </p>
</li>
<li><p>p:3001:3000<br>juno/marketplace
```</p>
</li>
<li><p>콜론 <code>:</code>을 기준으로 왼쪽에는 외부 네트워크 포트작성합니다.</p>
</li>
<li><p>콜론 <code>:</code>을 기준으로 오른쪽에는 공개할 컨테이너 포트작성합니다.</p>
</li>
<li><p>해당 명령어는 3001인 호스트 포트로 들어온 네트워크 요청을 marketplace-app 의 3000번 포트에서 처리 한다 는 내용입니다</p>
</li>
<li><p><strong><em>호스트 머신 네트워크에 포트 공개</em></strong></p>
</li>
<li><p><strong>(<code>--expose</code> | <code>EXPOSE</code>) +(<code>-P</code> + <code>--publish-all</code>)*</strong></p>
</li>
</ul>
<pre><code class="language-shell">docker container run\ 
-P\
juno/marketplace
</code></pre>
<ul>
<li><p>노출된 포트를 호스트 머신의 임시 포트와 바인딩을 합니다. <code>dockerfile</code>의<code>EXPOSE</code> 명령어나 <code>docker container run --expose</code> 옵션으로 정의 하며, 노출된 해당 포트는 컨테이너 정보에서 알수 있습니다. </p>
</li>
<li><p><strong><em>통신 확인</em></strong>
curl test 컨테이너 생성</p>
</li>
</ul>
<pre><code class="language-shell">docker container run\
--name curl-test\
--rm \
-it \
--network other-network\
curlimages/curl sh</code></pre>
<blockquote>
<p>잠깐 sh 언니 설명하고 가실께요<del>~</del>
sh는 쉘 스크립트로 unix나 linux와 같은 운영체제에서 명령어를 자동으로 실행 시키기위한 스크립트입니다.</p>
</blockquote>
<pre><code class="language-shell">docker container exec -it curl-test sh
curl my-app:3000 #DNS로 통신 (X)
curl 172.18.0.2:3000 #IP로 통신(x)
curl host.docker.internal:3001 # host 머신에 네트워크 요청</code></pre>
<ul>
<li>컨테이너 내부에서 호스트 머신에 요청을 보낼때  host.docker.internal에 보내야합니다.</li>
<li>localhost 는 loofback을 의미하기에 땡~</li>
<li>저기 위에 에서 user defined-bridge가 아니므로(즉 기본값이 bridge)이므로 해당 통신들이 안된다는 점 </li>
</ul>
<hr>
<h2 id="볼륨-사용하기">볼륨 사용하기</h2>
<ul>
<li><p><strong>컨테이너의 휘발성</strong>
컨테이너에 담긴 데이터는 컨테이너가 재시작/ 종료/ 삭제 시에 휘발적으로 삭제 됩니다.  </p>
</li>
<li><p><strong>불륨</strong>
위와 같은 문제를 방지 하기 위해서 컨테이너 내부에 특정 디렉토리에 마운트 합니다</p>
</li>
</ul>
<p>컨테이너 실행간 불륨과 마운트 된 컨테이너 내부의 디렉토리에 변경이 일어나면, 불륨에 동일하게 반영 -&gt; 데이터 손실 방지 </p>
<blockquote>
<p><strong>마운트</strong>란 ? 맨유에서 No7 메이슨 마운트가 아닌 특정 디렉토리와 컨테이너와의 연결을 의미합니다. (마운트야 부상없이 잘해줘 ㅜㅜ)</p>
</blockquote>
<ul>
<li><strong><em>볼륨 생성하기</em></strong></li>
</ul>
<pre><code class="language-shell">docker volume create volume-a</code></pre>
<ul>
<li><p><strong><em>볼륨 조회하기</em></strong></p>
<pre><code class="language-shell">docker volume ls</code></pre>
</li>
<li><p><strong><em>볼륨 삭제하기</em></strong></p>
<pre><code class="language-shell">docker volume rm
docker volume prune</code></pre>
</li>
<li><p><strong><em>컨테이너에 불륨 연결하기(명령어)</em></strong></p>
<pre><code class="language-shell">docker container run -v volume-a:Users/marketplace/container:app node sh # users 내에 있는 중고 마켓 컨테이너들을 app에 연결 하겟다는 말</code></pre>
</li>
</ul>
</li>
<li><p>첫번째 값
불륨의 이름입니다. 만약 존재하지 않은 불륨이면 자동으로 생성됩니다. 생략이 가능하며, 익명 불륨이 된답니다.</p>
<ul>
<li>두번째 값 
불륨에 마운트할 컨테이너 내부 경로입니다. 생략 불가능이며, 존재 하지않는 경로 이면 자동으로 생성 됩니다.</li>
</ul>
</li>
<li><p>세번째 값</p>
<pre><code>읽기 쓰기 모드 옵션</code></pre><p><code>ro</code> <code>rw</code>두가지 값만 입력 가능. 기본값은 <code>rw</code>입니다
<code>ro</code>: 읽기 전용,<code>rw</code>: 읽기/ 쓰기 전용</p>
<ul>
<li><p><strong><em>컨테이너에 불륨 연결하기(도커 파일)</em></strong></p>
<pre><code class="language-shell">FROM ubuntu
VOLUME /Users/marketplace/container</code></pre>
<p>컨테이너 실행시 익명 불륨 생성</p>
</li>
<li><p><strong><em>컨테이너 불륨 정보확인하기</em></strong></p>
<pre><code class="language-shell">docker container inspect[컨테이너]</code></pre>
</li>
<li><p><strong><em>불륨 기능 확인 하기</em></strong></p>
</li>
<li><p>불륨연결
```shell
docker container run\</p>
</li>
</ul>
</li>
<li><p>v my-vol:/my-container\</p>
</li>
<li><p>-name volume-test</p>
</li>
<li><p>it</p>
</li>
<li><ul>
<li>rm<br>busybox sh
```</li>
</ul>
</li>
<li><p>파일 만들기</p>
<pre><code class="language-shell">docker container exec -it volume-test sh
echo &quot;hello Volume&quot; &gt; my-container/hello.txt
ls /my-container</code></pre>
</li>
<li><p>컨테이너 삭제및 생성
```shell
docker container rm -f volume-test sh
docker container run\</p>
</li>
<li><p>v my-vol:/my-container \</p>
</li>
<li><p>-name volume-test\</p>
</li>
<li><p>it\</p>
</li>
<li><p>-rm<br>busybox sh
```</p>
<ul>
<li><strong><em>바인드 마운트</em></strong>
바인드 마운트란 ? 호스트 머신의 특정 경로와 컨테이너 내부의 특정 경로를 마운트 하는 방법으로 불륨과 유사하지만 마운트 포인트가 도커에서 관리한다라는 부분에서 차이점이 존재 합니다</li>
</ul>
</li>
<li><p>불륨</p>
<ul>
<li>도커환경에서 모두 동일하게 동작을 보장하며 이식성이 뛰어남</li>
</ul>
<ul>
<li><p>바인드 마운트 </p>
<ul>
<li>호스트 머신과 종속적인 관계라 이식성이 떨어짐</li>
</ul>
</li>
<li><p><strong><em>바인드 마운트 적용하기</em></strong>
불륨 적용 방식과 동일하게 <code>-v</code> 옵션으로 적용합니다. 하지만 첫번째 값은 호스트 머신의 경로로 지정합니다</p>
</li>
</ul>
<pre><code class="language-shell">docker container run -v /Users/marketplace/host:/app:ro</code></pre>
</li>
</ul>
<hr>
<h2 id="docker-compose">docker Compose</h2>
<ul>
<li><p>컨테이너가 많아지면 불편함</p>
<ul>
<li>이미지를 각각 빌드 해야 하며, 옵션들을 각각 관리 해야며<ul>
<li>컨테이너를 각각 실행</li>
<li>컨테이너간의 구동 순서를 직접 제어</li>
<li>통일된 방식이 없다
는 단점이 있어요.</li>
</ul>
</li>
</ul>
</li>
<li><p>도커 컴포우즈 소개
위와 같은 문제를 해결하기 위해서 도커 컴포우즈가 나왔답니다.
다중 컨테이너를 도커 컨테이너 하나로 묶어서 관리하고 싶을때 쓰는 명령줄 입니다.
너무 길어서 다음 포스트에 사용 법을 올릴게요</p>
</li>
</ul>
<hr>
<h2 id="이미지-최적화">이미지 최적화</h2>
<ul>
<li><p>레이어 캐시 최대한 이용하기
dockerfile 명령 하나 하나 각각의 레이어가 됩니다. 
이미지 빌드시 이미 존재하는 레이어 인경우 그대로 사용하며 이를 <code>레이어 캐싱</code> 이라고 명명합니다. <code>레이어 캐싱</code>은 이미지 빌드 시간을 줄여주는 경향이 있기에 주로 도커 파일의 하단부에 위치 합니다.</p>
</li>
<li><p>크기가 작은 베이스 이미지 선택하기
아무리 같은 역할을 하는 이미지일지라도 크기가 작을수도 클수도 있습니다.보통은 개발용 모듈이 포함된 이미지| 배포용 이미지로 나눠집니다.</p>
</li>
<li><p>멀티 스테이지 빌드
<code>멀티 스테이지</code>란? 하나의 도커 파일에서 이미지를 빌드 하는 과정을 여러개로 나누어 정의 하는 방식 입니다. 주로 빌드를 해야하는 애플리케이션인 경우 빌드 | 실행 따라 나누어 집니다.</p>
<pre><code class="language-Docker">      # 빌드 스테이지
 ARG NODE_VERSION
 FROM node:${NODE_VERSION} AS build-stage
 # 빌드 
 WORKDIR /build
 # 이미지 빌드 간 복사할 파일: 소스 코드 복사
 COPY . /app/
 # 이미지 빌드 시 실행할 명령어: 종속성 설치 및 빌드
 RUN npm ci &amp;&amp; npm run build

 # 실행 스테이지
 FROM node:${NODE_VERSION}
 COPY --from=build-stage /build/dist /app
 RUN npm ci --only=prod
 ENV SERVER_PORT=3000
 # 컨테이너 실행 시 수행할 명령어: express 서버 실행
 ENTRYPOINT [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS - VPC 란]]></title>
            <link>https://velog.io/@juno_lee96/AWS-VPC-%EB%9E%80</link>
            <guid>https://velog.io/@juno_lee96/AWS-VPC-%EB%9E%80</guid>
            <pubDate>Mon, 24 Nov 2025 01:20:34 GMT</pubDate>
            <description><![CDATA[<h1 id="vpc-란">VPC 란??</h1>
<p>밀덕이나 역사 덕후 분들은 VPC 보다 PMC 익하실텐데요... 물론 여기서 말하는 Virtual Private Cloud인 VPC는 aws의 네트워크 환경을 말하며, Private Military Company 인 PMC는 군 사기업으로 용병회사입니다. 둘다 다른 분야 이지만 둘다 독립적인 환경에서 운영 된다는 공통점이 있습니다.</p>
<p>VPC는 퍼블릭 클라우드 내에 있는 나만의 사설 네트워크 입니다..
호스팅된 가상 환경은 내 데이터를 다른 고객과 논리적으로 완전히 격리하여, 보다 안전한 보안 환경을 구축할 수 있게 합니다.</p>
<h2 id="흐름도">흐름도</h2>
<p>하나의 가용성 영역에는 서브넷이 존재 하며, 서브넷 안에는 인스턴스가 존재합니다. 그리고 vpc 리소스와 인터넷간에 통신을 허용하는 인터넷 게이트 웨이가 존재 합니다. 
<img src="https://velog.velcdn.com/images/juno_lee96/post/99e0faa5-1473-483b-ae6c-78a4880af4f1/image.png" alt=""></p>
<h2 id="특징">특징</h2>
<ul>
<li><code>subnet</code><ul>
<li><code>subnet</code>은  VPC의 허용 IP의 범위입니다.
윗 흐름도와 같이 가용영역에 서브넷이 존재해 있어야 하며, 서브넷을 추가한 후에 vpc를 aws 리소스에 배포할수 있습니다.</li>
</ul>
</li>
</ul>
<ul>
<li><p><code>IP 주소 지정</code></p>
<ul>
<li>서브넷과 vpc는 사실상 IPv4와 IPv6 둘다 할당이 가능합니다</li>
</ul>
<blockquote>
<p>IPv4와 IPv6
<code>IPv 4</code>는  일반 유저가 볼수 있는 일반적인 IP를 말하며 32비트의 주소체계.대략 40억개의 주소를 말함 -&gt; 이미 고갈됨 -&gt; NAT가 필요하답니다
  <code>IPv6</code>는 126비트의 주소 체계이며, 사실상 무한한 주소입니다 그래서 NAT 없이도 각 기기에 고유 주소를 할당 가능합니다</p>
</blockquote>
</li>
<li><p><code>routing</code></p>
<ul>
<li>라우팅 테이블을 이용해서  서브넷 또는 게이트웨이의 네트워크 트래픽을 전달되는 위치를 결정하는 역할을 합니다.</li>
</ul>
</li>
</ul>
<ul>
<li><p><code>게이트웨이 및 엔드 포인트</code></p>
<ul>
<li><code>게이트 웨이</code>는 VPC를 다른 네트워크에 연결합니다. <code>VPC 엔드포인트</code>를 사용해서 인터넷 게이트웨이 또는 NAT장치를 사용하지 않고 aws 서비스에 비공개로 연결합니다.</li>
</ul>
</li>
<li><p><code>피어링 연결</code></p>
<ul>
<li><code>VPC 피어링 연결</code>을 통해서 두 VPC 리소스 간의 트래픽을 라우팅 합니다.</li>
</ul>
</li>
<li><p><code>트래픽 미러링</code></p>
<ul>
<li>네트워크 인터페이스에서 네트워크 트래픽을 복사하고 심층 패킷 검사를 위해 보안 및 모니터링어플라이언스로 전송합니다</li>
</ul>
</li>
</ul>
<blockquote>
<p>모니터링어플라이언스란?
시스템의 상태, 성능, 보안 등 다양한 정보를 실시간으로 감시하고 통합 관리하는 하드웨어 장비</p>
</blockquote>
<ul>
<li><p><code>전송 게이트웨이</code></p>
<ul>
<li>중앙 허브 역할을 하는  <code>전송 게이트웨이</code>를 사용하며,VPC, VPN, Direct Connect 연결 간에 트래픽을 라우팅 합니다.</li>
</ul>
</li>
<li><p><code>VPC 흐름 로그</code></p>
<ul>
<li><code>흐름로그</code>는 VPC 네트워크 인터페이스에 왕래하는 IP 트래픽에 대한 정보를 캡처 합니다.</li>
</ul>
</li>
<li><p><code>VPN 연결</code></p>
<ul>
<li><code>AWS Virtual Private Network(Site-to-Site VPN)</code>을 사용하여 온프레미스 네트워크에 VPC를 연결합니다</li>
</ul>
</li>
</ul>
<h1 id="요약">요약</h1>
<p>VPC는 퍼블릭 클라우드 내에 격리된 나만의 네트워크다. VPC 내부의 서브넷은 Internet Gateway(NAT Gateway 포함) 같은 게이트웨이를 통해
인터넷과 통신할 수 있다.
가용영역(AZ)은 서브넷이 물리적으로 위치하는 데이터센터 그룹을 의미한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[aws - 보안 그룹]]></title>
            <link>https://velog.io/@juno_lee96/aws-%EB%B3%B4%EC%95%88-%EA%B7%B8%EB%A3%B9</link>
            <guid>https://velog.io/@juno_lee96/aws-%EB%B3%B4%EC%95%88-%EA%B7%B8%EB%A3%B9</guid>
            <pubDate>Mon, 24 Nov 2025 00:13:39 GMT</pubDate>
            <description><![CDATA[<h1 id="✅-보안그룹이란">✅ 보안그룹이란?</h1>
<p>AWS에서 가장 기본이 되는 보안 그룹으로써 해당 그룹을 사용하여서 EC2 인스턴스의 인바운드 아웃바운드를 직접 설정하여서 트래픽을 직접 제어 할수있어요.</p>
<p><img src="https://velog.velcdn.com/images/juno_lee96/post/cb5eee12-ee5b-4b2f-986d-efa98fcf9149/image.jpg" alt=""></p>
<blockquote>
<p> 트래픽이란 ?
 네트워크를 통해서 일정시간 동안 이동하는 데이터의 양</p>
</blockquote>
<h2 id="1-보안-그룹-규칙">1. 보안 그룹 규칙</h2>
<ul>
<li><strong>PORT</strong> </li>
<li>인증된 범위 <code>IPv4 and IPv6</code></li>
<li>인스턴스 밖에서 안으로 들어오는 <code>Inbound Network</code></li>
<li>인스턴스 밖으로 나가는  <code>Outbound Network</code></li>
</ul>
<hr>
<h1 id="✅-port-란">✅ PORT 란?</h1>
<p>저희는 port 라는 것을 환경 변수에서 많이 봐왔을꺼에요. PORT는 네트워크 서비스 혹은 프로세스를 구분 하는 논리적인 단위입니다. 즉 IP내에서 특정 프로세스를 구별하기 위해서 사용되는 단위 입니다.</p>
<ul>
<li><p><code>well known Port</code>는 0 ~ 1023 로써</p>
<ul>
<li>IANA 에서 할당한 TCP/UDP 포트</li>
<li>22 - SH (secure shell)</li>
<li>80 - HTTP</li>
<li>433 - HTTPs</li>
</ul>
</li>
<li><p>등록된 PORT(1024 ~ 49151)</p>
<ul>
<li>특정 용도로 사용되기 위해 등록된 포트</li>
<li>1433 - MSSQL</li>
<li>3306 - MySQL</li>
</ul>
</li>
</ul>
<h1 id="요약">요약</h1>
<p>aws는 99.999퍼센트의 내구성을 자랑하는 이유가 있다.....</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[docker ]]></title>
            <link>https://velog.io/@juno_lee96/docker</link>
            <guid>https://velog.io/@juno_lee96/docker</guid>
            <pubDate>Mon, 24 Nov 2025 00:11:23 GMT</pubDate>
            <description><![CDATA[<h2 id="✅-도커-이미지-사용하기">✅ 도커 이미지 사용하기</h2>
<p>이미지와 연관된 모든 명령어는 <code>docker image</code> 로 시작합니다.</p>
<ul>
<li><p>이미지 다운로드 하기</p>
<pre><code>docker image pull [image:태그]
docker image pull node:20.13.1</code></pre><p>만약 태그를 생략한다면 노드의 최신 버젼이 기본 값이 됩니다.</p>
</li>
<li><p>이미지 목록확인 </p>
<pre><code>docker image ls</code></pre></li>
<li><p>이미지 삭제하기</p>
</li>
</ul>
<pre><code>docker image rm -f node:20.13.1</code></pre><ul>
<li><strong>rm</strong> : Remove의 약어</li>
<li><strong>-f</strong>:  forced의 약어입니다. 프롬포트 확인없이 강제 삭제입니다.</li>
<li>로컬에서만 삭제되고 레지스트리엔 그대로 있어요.</li>
</ul>
<ul>
<li><p>사용하지 않는 이미지 정리하기</p>
<ul>
<li><p>prune : 한글로 가지치기 라는 뜻으로 정리하는 명령어 입니다</p>
</li>
<li><p>이름이 이나 태그가 없는 이미지를 삭제합니다</p>
<pre><code>docker image build 깃허브 임시 레포</code></pre></li>
<li><p>이미지를 확인하면 <code>&lt;none&gt;</code> 표시를 확인 할 수 있는데 이를 <code>Dangling</code>이라고 정의 합니다.</p>
<pre><code>docker image prune [opt]
docker image prune -f -a</code></pre></li>
<li><p><strong>-f*</strong> 프롬포트 확인 없이 </p>
</li>
<li><p><strong>-a*</strong> 모든 파일 정리</p>
</li>
</ul>
</li>
</ul>
<h2 id="도커-파일-작성하기">도커 파일 작성하기</h2>
<p>도커 파일은 yaml로 프로젝트 루트 파일에 작성이 된다는 것은 앞선 포스트에서 언급을 했었습니다</p>
<pre><code class="language-yaml">
# base image
ARG NODE_VERSION
FROM node:${NODE_VERSION}

# 환경변수
ENV SEVER_PORT = 3000

#  이미지 빌드 간 현재 디렉토리 설정
WORKDIR  /src

# 이미지 빌드간 복사할 파일
COPY ./src/

# 이미지 빌드 시 실행할 명령어: 종속성 설치
RUN npm run ci

# 컨테이너 실행시 수행할 명령어: express 서버 실행
ENTRYPOINT [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]</code></pre>
<ul>
<li><p><code>ARG</code>
도커 파일에서는 빌드 시작 시점에서 함수처럼 변수로 해당값을 변수로 설정 할수있는데요? 이를 <code>ARG</code>라고 하며 <code>--build -arg</code>라는 키워드로 외부에서 초기화 가능합니다.</p>
</li>
<li><p><code>FROM</code>
베이스 이미지를 지정하는 자리이며, 이미지 빌드에 스케치 자리입니다.</p>
<ul>
<li><p>빌드하고자 하는 이미지의 기반하는 기술중 가장 고수준의 이미지를 선정하는거 강추 입니다.</p>
<ul>
<li>express 기반 애플리케이션이 동작하는 이미지를 만들고자 할 때,</li>
<li><code>ubuntu</code> 이미지에 <code>node</code>를 직접 설치하는 것보다, <code>node</code> 이미지를 바로 사용하는 것을 추천.</li>
</ul>
</li>
</ul>
</li>
<li><p><code>ENV</code>
환경변수를 지정할때 사용합니다</p>
</li>
<li><p><code>WORKDIR</code>
이미지를 빌드간의 현재 디렉토리를 말합니다.</p>
</li>
<li><p><code>COPY</code>
이미지 빌드 사이에 복사할 파일들을 말합니다.</p>
</li>
<li><p><code>RUN</code>
이미지 빌드시 실행할 명령어입니다</p>
</li>
<li><p><code>ENTRYPOINT</code>
컨테이너 실행시 수행할 명령어입니다</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[docker와 이미지]]></title>
            <link>https://velog.io/@juno_lee96/docker%EC%99%80-%EC%9D%B4%EB%AF%B8%EC%A7%80</link>
            <guid>https://velog.io/@juno_lee96/docker%EC%99%80-%EC%9D%B4%EB%AF%B8%EC%A7%80</guid>
            <pubDate>Sat, 22 Nov 2025 05:26:50 GMT</pubDate>
            <description><![CDATA[<p>앞선 포스트에서  컨테이너에 대해서 정리 했는데요...</p>
<p>오늘은 도커에대해서 정리를해봤습니다....</p>
<h2 id="이미지">이미지</h2>
<p>흥미롭게도, 영어의 ‘image’는 라틴어 imago에서 왔는데, 원래는 ‘형상’이나 ‘영혼’이라는 의미를 갖고 있었어요. 그래서 사진 기술이 처음 등장했을 때, 사람들은 사진을 찍는다는 것을 자신의 영혼이나 귀신을 찍는 것과 연결지어 생각하기도 했죠. 지금은 단순한 그림이나 사진을 뜻하지만, 옛날 사람들에게 이미지는 단순한 형상이 아니라 신비로운 존재였던 셈이에요.</p>
<p>저희가 배우고 있는 이미지는 현대 이미지의 개념보다 가상 데이터의 형상 즉 고대적인 의미를 함유하고 있습니다. 즉, “사진·그림”에서 시작한 이미지의 개념이 ‘복제 가능한 형상’으로 기술 세계에 이어졌다고 볼 수 있어요.</p>
<h2 id="⚓️-도커란">⚓️ 도커란?</h2>
<p><a href="https://www.docker.com">https://www.docker.com</a></p>
<p>docker 란 부두에서 일하는 사람 혹은 선박을 수리하는 사람을 뜻합니다. 하지만 IT 나 CS에선 완전 다른 의미인데요?. 컨테이너가 화물 컨테이너 처럼 환경과 프로그램을 묶어서 가지고 오기에 명명 되었습니다.</p>
<p><img src="https://velog.velcdn.com/images/juno_lee96/post/abd693fb-8fb8-4255-8d94-dd90c52c49d5/image.png" alt=""></p>
<p> 일단 도커 웹사이트에서 docker를 다운 받았어요(다른분들은 브루로 설치 가능 합니다)</p>
<p> <img src="https://velog.velcdn.com/images/juno_lee96/post/74a1cb55-90be-4cc1-8a87-5d2c1db364f9/image.png" alt=""></p>
<p>docker 파일은 yaml를 확장자로 쓰며, 프로젝트에 package.json 위치 즉 루트 부분에 작성 합니다. 
전 일단 dockerfile.yaml(확장자 이름이 계속 라민 야말같아서 헷갈리네요) 생성을 했구요.</p>
<p>다음 포스트엔 docker의 구조와 명령어에 대해 써볼게여.. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[How to look at the error code and googling]]></title>
            <link>https://velog.io/@juno_lee96/How-to-look-at-the-error-code-and-googling</link>
            <guid>https://velog.io/@juno_lee96/How-to-look-at-the-error-code-and-googling</guid>
            <pubDate>Fri, 21 Nov 2025 09:51:06 GMT</pubDate>
            <description><![CDATA[<p>When your ADHD medication wears off, your focus and working memory are weaker. Looking at an error code or troubleshooting becomes frustrating.</p>
<p>If a solution doesn’t immediately work, I feels stuck and might “just throw it” at ChatGPT or stop.</p>
<p>I noticed that most people search for error codes differently (translate them, analyze them step by step), which makes me feel “shameful” or like I am doing it wrong.</p>
<p>Being Korean, I finds it unfamiliar or inefficient to search in English on Google. I notice my wife can get info more easily because she uses a simpler or more direct search approach.</p>
<h3 id="a-divide-the-problem-into-pieces">A. Divide the problem into pieces</h3>
<p>Instead of trying to search the whole problem in one long sentence, break it down:</p>
<p>Error code – the exact message from the system.</p>
<p>Context – what I was doing when it appeared.</p>
<p>System / Language / Version – e.g., “Windows 11”, “Node.js 24.11”, “Python 3.12”.</p>
<p>Outcome / symptom – e.g., “app crashes”, “does not compile”, “null pointer”.</p>
<h3 id="b-use-multiple-search-strategies">B. Use multiple search strategies</h3>
<p>People often only do literal copy-paste searches. I can try:</p>
<p>Exact code search: &quot;ERROR 0x80070057&quot; → in quotes for exact matches.</p>
<p>Describe the problem: Node.js cannot read property of undefined → without quotes, Google finds similar situations.</p>
<p>Translate keywords if needed: I can search in Korean and English simultaneously:
Google often mixes results in both languages.</p>
<h3 id="c-use-simpler-keywords">C. Use simpler keywords</h3>
<p>my wife’s approach seems natural: she searches what she would say aloud. You can do this too:</p>
<p>Instead of full theory: &quot;how to fix Node.js error&quot;</p>
<p>Or describe the behavior: &quot;app crash after installing package&quot;</p>
<h3 id="d-use-adhd-friendly-methods">D. Use ADHD-friendly methods</h3>
<p>Keep a note app or text file with search keywords you’ve already tried.</p>
<p>Copy and paste error codes directly into Google to avoid memory strain.</p>
<p>Use “search, try, record, repeat” cyc</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[에러코드 잘보는 법과 에러 코드 구글링하기]]></title>
            <link>https://velog.io/@juno_lee96/%EC%97%90%EB%9F%AC%EC%BD%94%EB%93%9C-%EC%9E%98%EB%B3%B4%EB%8A%94-%EB%B2%95%EA%B3%BC-%EC%97%90%EB%9F%AC-%EC%BD%94%EB%93%9C-%EA%B5%AC%EA%B8%80%EB%A7%81%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@juno_lee96/%EC%97%90%EB%9F%AC%EC%BD%94%EB%93%9C-%EC%9E%98%EB%B3%B4%EB%8A%94-%EB%B2%95%EA%B3%BC-%EC%97%90%EB%9F%AC-%EC%BD%94%EB%93%9C-%EA%B5%AC%EA%B8%80%EB%A7%81%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 21 Nov 2025 09:31:05 GMT</pubDate>
            <description><![CDATA[<p>난 ADHD가 있어서 에러코드를 보는 부분에서 약효가 떨어지면 좀 어려움을 겪는다. 특히 에러나는 부분에서 안풀리면 그 다음 에러까지 걍 챗지피티에 던져버리는 나쁜 습관이 있어서 해당 부분을 고치고자 이렇게 글을 올린다. 난 터미널만보면 없던 영어 울렁증이 ... 생긴다.... 검색해본 결과 많은 사람들은 에러를 해석해달라고 하지 나처럼 던지지 않는다 사실을 느꼇다..  에러메시지를 분석하는 습관을 가져야겠다 또한 에러코드는 어디서 어디 부분이 에러가 났는지 말해준다는 것을 알고 있음에도 멘탈 나가서 던져버리는 이 미친짓을 어떻게 고쳐 나갈것인지 고민을 해봐야겠다..... </p>
<p>구글링 하는 방법이다. 나는 한국사람이라서 그런지 모르겠으나 구글링 하는 법이 살짝 어려웠다. 나의 아내는 영국인이라서 그런지 자기가 원하는 정보를 쉽게 구글에 검색해서 원하는 결과를 얻는 방면 난........... 사소한 정보라도 쪼개서 검색 하는 연습을 해야 한다는 판단을 내렸다. 예를 들어서 EC2를 공부한다면 EBS라던지 instace, eni등의 연관 단어들을 검색하는 습관을 길러야 하며, 어떤 결과를 만드는지에 대한 스스로의 이론을 짜는 습관도 또한 중요한것같다 . </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS - EC2  ]]></title>
            <link>https://velog.io/@juno_lee96/AWS-EC2</link>
            <guid>https://velog.io/@juno_lee96/AWS-EC2</guid>
            <pubDate>Fri, 21 Nov 2025 08:26:38 GMT</pubDate>
            <description><![CDATA[<h1 id="-ec2-이게-머람">⁇ EC2 이게 머람?</h1>
<p>Amazon Elastic Compute Cloud(EC2) 의 약자인 EC2는 탄력적인(?) 컴퓨팅 서비스 라는 의미로 aws에서 운용하고 있는 서비스 중 하나입니다. 여기서의 탄력적이란 어떤 의미일까요?? 예시 하나를 들어볼게요... 버스회사는 아침/저녁 시간을 기준으로 근무 시간을 맞추는 경향이 있어요. 왜일까요? 아침엔 출근하시는 분들/ 등교하는 초중고대학생 분들이 버스를 많이 타며, 저녁에는 하교하는 학생들, 퇴근하는 직장인들이 저녁 시간대에 많이 이용하기 때문이죠. 만약에 출퇴근 시간대에 근무하시는 버스 기사분이 적거나, 출퇴근 시간대 외에 근무 하시는 버스기사분이 너무 많을경우 인력 자원 낭비/ 과부화가 오겠죠... EC2는 이와 비슷하게 사용자가 <strong>가상 컴퓨터(인스턴스)를 가져와 원하는 만큼 리소스를 이용</strong> 할수있게 하는 아마존 웹서비스 중 하나입니다.</p>
<h2 id="특징">특징</h2>
<p>EC2 는 공유기나 와이파이 세팅 없이 인터넷만 있으면 자유록게 접속 가능하며 AMI 라는 이미지 기능도 사용할수있어요.</p>
<ul>
<li><p>컴퓨팅 요구사항을 유연하게 적용 가능하다</p>
</li>
<li><p>사용자가 원하는 만큼/ 해당 사용 부분만 지불.</p>
</li>
<li><p>OS환경 선택이 가능.</p>
</li>
<li><p>1분정도면 전세계 어디든 원하는 만큼 수백대의 데이터 서버스 컴퓨터(현재는 서버라고 불리는)를 생성 가능합니다.</p>
</li>
<li><p>다른 AWS 서비스(람다, S3등)들과 유기적인 연동가능 하다는 점입니다.</p>
</li>
</ul>
<h2 id="ec2의-구성">EC2의 구성</h2>
<p>EC2는  인스턴스로 구성되어져있으며 AMI(이미지),ENI와 EBS랑 같이 쓰입니다.</p>
<h3 id="인스턴스">인스턴스</h3>
<p>AWS에서 인스턴스는 가상 서버 컴퓨터입니다. 
즉 가상 컴퓨터의 하드웨어</p>
<ul>
<li>그래픽 연산</li>
<li>CPU</li>
<li>메모리 
로  구성되어져 있습니다.</li>
</ul>
<p>AWS는 컴퓨터 서비스 목적에따라( 고사양 게임, 쇼핑몰, 실시간서비스 etc) <strong>여러 인스턴스</strong> 들을 제공합니다.</p>
<h4 id="인스턴스의-유형">인스턴스의 유형</h4>
<p>   여러분 혹시 메이플스토리를 해보신적이 있으신가요?? 메이플 스토리 캐릭터를 생성시 쉬운 전직을 위해서 원하는 스탯들이 나오는 만큼 초기 캐릭터 스탯 리셋하고 스탯이 나온다면 캐릭터를 생성합니다. 레벨 10이나 8 이 될때까지 각각의 직업에 맞게 스탯을 찍죠.. EC2는 한정된 요금으로 인스턴스 유형(직업선택)을 선택 한다음 사이즈(스탯포인트)를 골라서 사용목적에따라 최적화 합니다.</p>
<p>   메이플의 직업과 비슷한 인스턴스 유형에도 <strong>타입</strong>이 존재합니다.</p>
<table>
<thead>
<tr>
<th>인스턴스 패밀리</th>
<th>유형 예시</th>
<th>vCPU</th>
<th>메모리 (GiB)</th>
<th>용도</th>
</tr>
</thead>
<tbody><tr>
<td>범용 (General Purpose)</td>
<td>t3, t4g, m6i</td>
<td>2 ~ 64</td>
<td>2 ~ 256</td>
<td>웹 서버, 애플리케이션 서버, 개발/테스트</td>
</tr>
<tr>
<td>컴퓨팅 최적화 (Compute Optimized)</td>
<td>c5, c6i</td>
<td>2 ~ 96</td>
<td>4 ~ 192</td>
<td>고성능 컴퓨팅, 게임 서버, 분석</td>
</tr>
<tr>
<td>메모리 최적화 (Memory Optimized)</td>
<td>r5, r6i, x1e</td>
<td>2 ~ 128</td>
<td>16 ~ 4,000</td>
<td>데이터베이스, 인메모리 캐시, 빅데이터</td>
</tr>
<tr>
<td>스토리지 최적화 (Storage Optimized)</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<h4 id="인스턴스-사이즈">인스턴스 사이즈</h4>
<p>인스턴스 크기는 인스턴스 cpu의 갯수, 메모리 크기, 성능에 따라 결정되는 것을 의미합니다.
즉, 인스턴스의 크기가 클수록 더 많은 CPU의 갯수, 더 큰 메모리 크기, 더좋은 성능을 결정한다는 의미입니다.</p>
<table>
<thead>
<tr>
<th>인스턴스 타입</th>
<th>vCPU</th>
<th>메모리 (GiB)</th>
<th>스토리지</th>
<th>네트워크 성능</th>
<th>용도</th>
</tr>
</thead>
<tbody><tr>
<td>t2.nano</td>
<td>1</td>
<td>0.5</td>
<td>EBS 전용</td>
<td>저</td>
<td>저부하 웹 서버, 테스트</td>
</tr>
<tr>
<td>t2.micro</td>
<td>1</td>
<td>1</td>
<td>EBS 전용</td>
<td>저</td>
<td>소규모 웹 서버, 개발</td>
</tr>
<tr>
<td>t2.small</td>
<td>1</td>
<td>2</td>
<td>EBS 전용</td>
<td>저 ~ 중</td>
<td>소규모 DB, 개발/테스트</td>
</tr>
<tr>
<td>t2.medium</td>
<td>2</td>
<td>4</td>
<td>EBS 전용</td>
<td>중</td>
<td>중간 부하 웹 서버, 앱 서버</td>
</tr>
<tr>
<td>t2.large</td>
<td>2</td>
<td>8</td>
<td>EBS 전용</td>
<td>중</td>
<td>더 높은 부하, 캐싱 서버</td>
</tr>
<tr>
<td>t2.xlarge</td>
<td>4</td>
<td>16</td>
<td>EBS 전용</td>
<td>높음</td>
<td>대규모 애플리케이션, DB</td>
</tr>
<tr>
<td>t2.2xlarge</td>
<td>8</td>
<td>32</td>
<td>EBS 전용</td>
<td>높음</td>
<td>고부하 웹 서버, 캐시, 앱 서버</td>
</tr>
</tbody></table>
<p>위의 표는 t2의 인스턴스 유형의 타입에 크기를 나타낸 표입니다, 보시다시피 크기가 클수록 성능이 좋아지는 부분을 알수있습니다.</p>
<h4 id="인스턴스-유형-읽는-법">인스턴스 유형 읽는 법</h4>
<p><strong>t2b.2xlarge</strong> 라는 유형이 있습니다.
t2는 인스턴스 타입이며, b 접두사, 2xlarge 로 크기로 읽습니다.</p>
<h3 id="ebs">EBS</h3>
<p>Amazon Elastice Block Store의 약자인 EBS는 가상 컴퓨터의 하드 디스크 역할을 합니다. </p>
<ul>
<li>Amazon EBS volume :EC2 인스턴스에 연결하여 로컬 하드 드라이브처럼 사용할 수 있는 영구 스토리지 </li>
</ul>
<blockquote>
<p>volume 이란 ?
한글로 부피를 뜻하나 CS에선 논리적인 저장공간을 의미  </p>
</blockquote>
<h3 id="eni">ENI</h3>
<p>Elastic Network Interface의 약어인 ENI는 VPC 에 네트워크 카드를 나타내는 네트워킹 구성요소입니다. ENIs는 주로 EC2가 네트워크에 접근 할수 있도록 도와주며 EC2 외부에서 사용될수 있습니다.</p>
<h2 id="요약">요약</h2>
<p>ec2는 아무데에서나 가상 서버 컴퓨터를 생성할수 있으며, eni, ebs, instance로 구성 됨</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컨테이너란??]]></title>
            <link>https://velog.io/@juno_lee96/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EB%9E%80</link>
            <guid>https://velog.io/@juno_lee96/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EB%9E%80</guid>
            <pubDate>Fri, 21 Nov 2025 02:58:44 GMT</pubDate>
            <description><![CDATA[<h2 id="❗️기존-배포의-문제점">❗️기존 배포의 문제점</h2>
<p>2000년 이후 애플리케이션 규모가 커짐에따라 개발기간에 대한 단축이 중요해지면서,  다양한 OS* 개발 환경 차이로 인한 오류, 복잡해진 애플리케이션 구조, 배포환경간의 불일치등 기존 배포 방식의 한계가 명확해졌습니다.</p>
<h2 id="✌️컨테이너-기술의-등장">✌️컨테이너 기술의 등장</h2>
<p>위의 문제를 해결하기위에 컨테이너 기술이 등장을 하였습니다.
컨테이너 기술은 <strong>애플리케이션과 그 실행 환경을 패키지로 묶어서 격리하는 기술</strong>입니다. 
해당 기술을 사용하면 컨테이너화된 애플리케이션을</p>
<ul>
<li><p>개발 환경</p>
</li>
<li><p>테스트 환경</p>
</li>
<li><p>배포(프로덕션) 환경</p>
</li>
</ul>
<p>*퍼블릭 클라우드/프라이빗 클라우드/온프레미스</p>
<p>간에 이동하면서 <strong>동작과 기능을 일관성</strong>있게 유지하도록 합니다.  이와 더블어 컨테이너는 가볍고 이식성이 뛰어나기에 개발속도를 높여 줍니다.</p>
<h2 id="🤖컨테이너의-작동-원리">🤖컨테이너의 작동 원리</h2>
<p>컨테이너 기술은 애플리케이션과 실행환경을 통일하여서 독립적인 프로세스 형태로 실행되는 원리입니다. </p>
<ul>
<li><p>기존의 VM </p>
<ul>
<li>호스트 os위에  게스트 os 전체를 올리는 것을 의미하며, 자원 소모가 크며 부팅시간이 꽤 오래 걸립니다. 옛날에 맥북에 윈도우 쓰던거라고 보시면 됩니다.</li>
</ul>
</li>
<li><p>컨테이너 </p>
<ul>
<li><p>컨테이너 기술에서 격리된 여러개의 컨테이너가 공유 하는 운영체제인 호스트OS 커널을 공유합니다.</p>
</li>
<li><p>애플리케이션 실행에 필요한 바이너리와 라이브러리만 격리된 환경에서 분리되서 실행됩니다.</p>
</li>
</ul>
</li>
</ul>
<h2 id="컨테이너의-핵심-기술">컨테이너의 핵심 기술</h2>
<p>** 컨테이너 이미지** : 읽기 전용 템플릿으로 애플리케이션 실행에 필요한 모든것을 포함합니다</p>
<p>** 컨테이너** : 컨테이너 이미지를 기반으로 실행된 격리된 실행환경 입니다.</p>
<p>** 컨테이너 오케스트레이션**: 대규모 환경에서 여러 컨테이너를 배포, 확장, 관리, 네트워킹을 자동화하는  시스템입니다.</p>
<h2 id="컨테이너의-깊은-개념">컨테이너의 깊은 개념</h2>
<h3 id="컨테이너">컨테이너</h3>
<ul>
<li>애플리케이션 실행을 위한 격리된 경량화 프로세스<blockquote>
<p>프로세스 란? </p>
<ul>
<li>한글로 처리하다 라는 뜻을 가진 단어로 컴퓨터 공학에서는 실행중인 프로그램을 의미 합니다.
스케줄링의 대상인 Task와 같은 의미로 쓰입니다.</li>
<li>최소 하나의 쓰레드 가지고 있으며, 스레드 단위로 스케줄링을 합니다.</li>
<li>하드디스크 프로그램 실행 -&gt; 메모리 할당 -&gt; 메모리 공간 바이너리 코드 업로드 =&gt; 프로세스 라고 불립니다</li>
</ul>
</blockquote>
</li>
</ul>
<p>프로세스에 대한 개념을 좀더 정리를 이번주 토요일에 올려야 겠네여 ㅋㅋ</p>
<h3 id="컨테이너의-필요성">컨테이너의 필요성</h3>
<ul>
<li><p>앞에서의 언급과 같이 2000년대에 이후로 컴퓨팅 자원을 효율적으로 쓰는 것에 대한 필요성이 대두됨에 따라 컨테이너라는 개념이 등장했습니다.해당 개념은 컴퓨팅 자원을 효율적으로 나누어 사용하며 타 애플리케이션에 간섭 받지 않는 격리된 환경 구축을 목표로 합니다. 컨테이너는 리눅스 컨테이너 기술을 기반으로 하며, 격리된 프로세스를 제공 합니다.</p>
</li>
<li><p>불필요한 추가 개발 리소스를 방지하기위해 다양한 실행 환경에서 모두 동일하게 실행 가능 토록 해야합니다. 컨테이너와 연관된 기술은 표준으로 관리됨에 따라 다양한 환경에서 일관성있는 실행이 가능 합니다.</p>
</li>
<li><p>빠른 배포와 스케일링을 위해 초기에 빠른 구동 속도를 가지고 있어야 하며, 컴퓨터 자원 점유를 최소화함에따라 비용절감이 가능 합니다. VM(가상머신)은 엄격한 환경인 반면, 컨테이너는 느슨한 격리된 환경이므로, 가볍게 실행이 가능합니다.</p>
</li>
</ul>
<h1 id="요약">요약</h1>
<p>컨테이너는 애플리케이션을 실행하기 위한 작은 프로세스이며, 작고 가벼워서 다양한 환경에서 통일성 있는 실행을 제공합니다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[깃헙 액션 스쿨 ]]></title>
            <link>https://velog.io/@juno_lee96/%EA%B9%83%ED%97%99-%EC%95%A1%EC%85%98-%EC%8A%A4%EC%BF%A8</link>
            <guid>https://velog.io/@juno_lee96/%EA%B9%83%ED%97%99-%EC%95%A1%EC%85%98-%EC%8A%A4%EC%BF%A8</guid>
            <pubDate>Thu, 20 Nov 2025 07:18:41 GMT</pubDate>
            <description><![CDATA[<h1 id="💻-github-action">💻 Github Action</h1>
<p>앞에선 포스트에서 언급했다시피 깃헙에서 제공하는 CI/CD 서비스입니다.</p>
<h2 id="github-action으로-테스트-자동화-하기">github action으로 테스트 자동화 하기</h2>
<ul>
<li>.github/workflows/ 폴더에 YAML 파일 작성</li>
</ul>
<h3 id="코드-준비하기">코드 준비하기</h3>
<p> <code>package.json</code>에서 <code>test</code> 명령어를 준비 
 <code>package.json</code>에서 타입체크 명령어를 준비 </p>
<pre><code class="language-package.json">    &quot;typecheck&quot;: &quot;tsc --noEmit&quot;</code></pre>
<p>해당 코드는  <strong>&quot;타입 검사만 수행하고 결과물(컴파일된 JavaScript 파일)은 생성하지 말라&quot;</strong> 라는 명령어 입니다.</p>
<h3 id="❗️❗️repo-브랜치-규칙-설정">❗️❗️repo 브랜치 규칙 설정</h3>
<p> 개인적으로 기본적으로 main 브랜치 규칙은 해당작업 말더라도 하는 게 좋을꺼 같아요 ...</p>
<ul>
<li>테스트 실패시 PR 머지 할수 없도록 설정.</li>
<li>Settings &gt; Rules 에서 규칙을 추가 <ul>
<li>target: <strong>main</strong>브랜치</li>
<li>rule: <strong>Require Status Checks to pass before merging</strong> 설정<ul>
<li>체크할 액션에서 우리가 등록한 테스트 Github action을 선택 합니당.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="github-action으로-ec2-배포-자동화">github action으로 EC2 배포 자동화</h2>
<ul>
<li><p>Github repo 준비 </p>
<ul>
<li>프로젝트 와 환경 변수 준비 하시면 오키</li>
</ul>
</li>
<li><p>aws 준비 하기
  *EC2에서 키페어를 생성</p>
<ul>
<li>github repo에서 action screte을 프라이벗 키 등록합니다</li>
</ul>
</li>
<li><p>깃헙 액션 워크 플로 작성 </p>
<ul>
<li>SSH 접속</li>
<li>git으로 소스 코드를 최신화 </li>
<li>필요한 패키지 설치, 프로젝트 빌드, 마이그레이션 진행.</li>
<li>pm2 를 실행 중이라면 재실행 </li>
</ul>
</li>
</ul>
<h2 id="모니터링">모니터링</h2>
<p>앞선 게시글에서 제가 레고 만든 영상을 유튜브로 올린다고 했잖아요. 올리기전에 유튜브나 제가 영상에 잘못된 부분이 있는지 모니터링 하고 올립니다. 이와 비슷하게 컴퓨터 공학에서의 모니터링은 <code>시스템, 애플리케이션, 인프라 상태, 성능을 지속적으로 관찰하고 수집하는 과정</code>을 일컫는 용어입니다. 해당 개념이 왜 중요하냐면 현재 시스템이 오류 없이 잘 작동 되고 있는지, 사용자에게 문제가 발생하고 있지 않은지 확인 하는것은 시스템 운영(ops)부분에 있어서 가장 기초가 되는 토대이기 때문입니다.</p>
<h3 id="📖-목적">📖 목적</h3>
<ul>
<li><p>가시성 확보</p>
<ul>
<li>시스템 내부에 어떤 일이 일어나고 있는지 확인이 가능 합니다</li>
</ul>
</li>
<li><p>장애 조기 감지</p>
<ul>
<li>사용자에게 문제가 발생하기전에 비정상 적인 상태를 조기에 감지 하여 알림을 발생시킵니다.</li>
</ul>
</li>
<li><p>성능 최적화</p>
<ul>
<li>수집된 데이터를 분석하여 <strong>시스템 병목 현상</strong>을 찾아 성능개선의 근거로 사용합니다.<blockquote>
<p> 시스템 병목 현상이란? 시스템 내부에 전체적인 속도를 저하 시키는 특정 부분을 의미합니다.</p>
</blockquote>
</li>
</ul>
</li>
<li><p>효율적인 문제 해결</p>
<ul>
<li>장애 발생시 수집된 데이터를 토대로 원인을 효율적으로 해결할수 있습니다</li>
</ul>
</li>
</ul>
<h2 id="모니터링-코어-개념">모니터링 코어 개념</h2>
<h3 id="3가지-모니터링-요소">3가지 모니터링 요소</h3>
<ul>
<li><p>메트릭 </p>
<ul>
<li>시간에 따라 측정 되는 수치 데이터로 시스템 상태를 숫자로 표현.</li>
<li>cpu 사용률, 응답시간, 디스크 io 속도 etc </li>
<li>시계열 데이터베이스(TSDB)에 저장되며, 그래프나 대시보드를 통해 추이 분석에 사용됩니다.</li>
</ul>
</li>
<li><p>로그</p>
<ul>
<li>애플리케이션이나 시스템에서 발생하는 이벤트에 대한 시간을 의미 합니다.</li>
<li>유저의 로그인 로그아웃 기록, 에러 메시지, tx성공 실패 기록 etc</li>
<li>구체적인 원인을 파악하는데 용이하며, 효율적으로 대용량 로그를 저장, 수집, 검색하는 시스템이 필요로 합니다</li>
</ul>
</li>
</ul>
<ul>
<li><p>트레이스</p>
<ul>
<li><p>유저 혹은 사용자의 요청이 여러 서비스와 컴포넌트를 통해서 완료 되기 까지 전체 흐름을 추적하는 데이터 </p>
</li>
<li><p>웹요청이 로드밸런서를 거쳐서 api 서버, 인증 서버, db 까지 도달하는 모든 과정</p>
</li>
<li><p>분산 시스템에서 어떤 서비스가 지연을 유발하는지 파악하는 역할을 합니다 </p>
</li>
</ul>
</li>
</ul>
<h3 id="모니터링과-관측-가능성의-차이">모니터링과 관측 가능성의 차이</h3>
<ul>
<li><p><strong>모니터링</strong></p>
<ul>
<li>측정할 대상을 미리 정의한 다음, 해당 문제에 대응하는 것을 의미합니다.<ul>
<li>&quot;memory 사용량이 90퍼센트 넘으면 알림&quot;&#39;</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>관측 가능성</strong></p>
<ul>
<li>시스템에서 발생하는 모든 데이터를 기반으로 문제가 왜 발생하였느지 분석, 파악하는 것을 의미 합니다.</li>
</ul>
</li>
</ul>
<h2 id="aws-cloudwatch">AWS CloudWatch</h2>
<ul>
<li>인프라 모니터링의 도구</li>
<li>연결된 aws 리소스 들이 어떻게 작동되는 가시적으로 확인이 가능.</li>
<li>복잡한 세팅없이도 많은 정보를 확인할 수 있어서 편리함</li>
<li>다른 모니터링 도구도 같이 쓸수 있어요</li>
</ul>
<h2 id="sentry">Sentry</h2>
<p> 애플리케이션 에러 모니터링 도구 입니다</p>
<ul>
<li>실시간으로 에러를 수집하고 확인 할 수 있도록 하는 서비스입니다.</li>
<li>에러 발생시 알림을 보낼수 있습니다.</li>
<li>에러에 대한 여러 기록들을 조회 할수 있습니다.</li>
<li>Jira 와 같은 트래킹 도구와 연동하여서 사용 가능 합니다</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[CI/CD에 대하여]]></title>
            <link>https://velog.io/@juno_lee96/CICD%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC</link>
            <guid>https://velog.io/@juno_lee96/CICD%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC</guid>
            <pubDate>Thu, 20 Nov 2025 06:06:05 GMT</pubDate>
            <description><![CDATA[<h1 id="💡cdci에-대해서">💡CD/CI에 대해서</h1>
<p>저는 아내랑 같이 레고를 만드는 영상을 찍어서 올린다음 보관하는 곳에 두거나 보는 것을 좋아합니다. 한번은 해리포터(아내가 영국인이라) 레고를 같이 만들어서 영상을 찍어서 올린적이 있어요. 유튜브가 자동 검토 후 영상을 올려줍니다.. (1시간 걸렸어요). 아내랑 레고 같이 만들면서 아내는 파트 2, 전 파트 1을 맡아가면서 같이 했어요 .. 그러고 다시 합쳐서 조립을 다시 합니다... 영상을 찍다가 조립하던 부분이 이상이 있으면 영상을 잠시 끊었어여 ㅋㅋㅋㅋㅋ... 해당부분을 체크후 다시 조립... 하져 .... </p>
<p>CI/CD 는 해당 과정과 비슷 합니다. 작업자 분들이 작성한 코드들을 자동으로 테스트한 후, 문제가 발생한다면 문제를 해결후, 최종 결과물을 배포하기 직전까지 도와줍니다. 마치 아내랑 제가 해리포터 레고를 조립하면서 문제가 생기면, 잠시 멈추고, 문제를 해결하고 다시 재 조립 하는 과정인 것 처럼요.</p>
<h1 id="body">BODY</h1>
<h2 id="💾--ci-continuous-integration">💾  CI (Continuous Integration)</h2>
<p>한글로 <strong>지속적인 통합을 의미하는 CI</strong>는 작성된 코드들을 지속적으로 통합한후 지속적으로 테스트 하는 과정을 의미합니다. 이를 통해서 소프트웨어 품질 개선, 버그를 신속히 찾아서 릴리즈 시간 단축 하는 데 기여를 합니다</p>
<h2 id="💾-cd-continuous-deployment">💾 CD (Continuous Deployment)</h2>
<p><strong>지속적인 배포 라는 의미를 가진 CD</strong>는 CI로 테스트가 완료된 코드를 자동 배포하는 과정을 의미합니다
일련의 자동화를 통해서 운영 리소스 절감과 멱등성을 가지고 있는 배포 결과를 통해서 코드에대한 신뢰성을 올립니다.</p>
<p>git lab, AWS CodePipeline / CodeBuild / CodeDeploy, Azure dev Ops 등등 있는데 저는 GitHub action 에대해서 좀더 공부를 해보려고합니다. </p>
<h2 id="💻-github-action이란-">💻 Github action이란 ?</h2>
<p>저희는 깃허브를 자주 써서 그런지 뭔가 익숙해 보입니다. 전세계적으로도 마찬가지 인거 같은데, 이것때문인지 모르겠으나 전세계 1등으로 쓰이는 CI/CD 서비스 입니다.</p>
<h2 id="❗️core-개념">❗️Core 개념</h2>
<p>깃헙액션을 다룰때 중요한 핵심개념들은 6가지로 구성되어져 있습니다.</p>
<ol>
<li><p>작업 흐름도(workflow)
자동화 된 전체 시스템을 의미 합니다... 여러개의 Job으로 구성되어져 있고, Event에 의해 트리거될수 있는 시스템.</p>
</li>
<li><p>Event
컴퓨터 공학에서의 이벤트는 시스템이나 프로그램에서 의미 있는 상태 변화가 발생했을 때를 말합니다. 즉 workflow를 실행할 특정 행동을 <code>이벤트</code>라고 합니다. </p>
</li>
</ol>
<ol start="3">
<li>Job</li>
</ol>
<p>Job은 하나의 가상 환경 내에서 발생하는 객체로써, 여러가지의 단계(step)으로 구성 되어져있습니다. 다른 job들과 의존적인 관계를 맺을 수 있고, 독립적으로 병렬로 실행이 가능 합니다.</p>
<ol start="4">
<li>Step </li>
</ol>
<p>Job 내에 순차적으로 실행되는 프로세스이며, step에서 명령을, 혹은 action을 실행 할수 있습니다.</p>
<ol start="5">
<li>Action </li>
</ol>
<p>Job을 구성하기 위한 step들의 작은 조합. 워크플로에서 가장 작은 작업 단위입니다</p>
<ol start="6">
<li><p>Runner</p>
<p>Gitbub Action Runner 어플리케이션이 설치된 머신으로, Workflow가 실행될 인스턴스</p>
</li>
</ol>
<h1 id="sumarry">SUMARRY</h1>
<p>step &lt; job &lt; workflow </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS - 실수 및 몰랐던 부분, 고쳐야할 부분]]></title>
            <link>https://velog.io/@juno_lee96/AWS-%EC%8B%A4%EC%88%98-%EB%B0%8F-%EB%AA%B0%EB%9E%90%EB%8D%98-%EB%B6%80%EB%B6%84-%EA%B3%A0%EC%B3%90%EC%95%BC%ED%95%A0-%EB%B6%80%EB%B6%84</link>
            <guid>https://velog.io/@juno_lee96/AWS-%EC%8B%A4%EC%88%98-%EB%B0%8F-%EB%AA%B0%EB%9E%90%EB%8D%98-%EB%B6%80%EB%B6%84-%EA%B3%A0%EC%B3%90%EC%95%BC%ED%95%A0-%EB%B6%80%EB%B6%84</guid>
            <pubDate>Thu, 20 Nov 2025 04:45:11 GMT</pubDate>
            <description><![CDATA[<ol>
<li>환경 변수 네이밍 :
난 처음에 S3_ACCESS_KEY 이렇게 썼는데 AWS에선 깐깐하게 잡는다는 사실을 몰랐다 .. </li>
</ol>
<ol start="2">
<li><p>사용자 생성</p>
<p> 난 분명 AWS S3 버켓을 생성하고 권한 다 설정 하고 사용자를 루트 계정에서 생성한후 권한을 나눠주고, access key를 발급을 받았다. 근데 미스매치 오류가 계속 났었다. 그래서 첨에 정책을 수정 하고, principal 로 {*}로 한다음 source 도 수정 했는데도 안됬다.... 그래서 구글링을 해보니 특수문자가 있으면 안된다는 말이 있어서 고쳐보기도 하였으나 빽.. 환경변수 잘못이었나 싶어서 자리도 바꿔 봄.... 빽.... </p>
<p> 문제는 사용자 생성 할때 사용 용도를 CLI 로 해서 그런 거였다.. 그래서 사용자를 재생성하고 local 로 사용 용도를 변경 해주니 해결이었다.... 하 진짜 ... </p>
</li>
</ol>
<ol start="3">
<li><p>S3 파일구조</p>
<p>난 처음에 구글링으로 S3 구조를 검색 해보았다... 공용 함수이라서 middleware에서 쓰셧고 나도 첨엔
<code>var upload = multer({
storage: multerS3({
s3: s3,
bucket: &#39;some-bucket&#39;,
cacheControl: &#39;max-age=31536000&#39;,
key: function (req, file, cb) {
  cb(null, Date.now().toString())
}
})
})</code>
출처: <a href="https://inpa.tistory.com/entry/AWS-SDK-%F0%9F%91%A8%F0%9F%8F%BB%E2%80%8D%F0%9F%92%BB-Multer-S3-%EC%97%B0%EB%8F%99-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC">https://inpa.tistory.com/entry/AWS-SDK-👨🏻‍💻-Multer-S3-연동-및-사용법-정리</a> [Inpa Dev 👨‍💻:티스토리]</p>
</li>
</ol>
<p>대략 이렇게 접근을 하였다....근데 위에 문제가 발생하니 멘탈이 나가 버린듯하다 ... s3 중복되는 코드들이 발생 한거 같다... 해당 부분을 수정을 해야 할듯 하다.....</p>
<p>정리 : 2일동안 나 머한거니?</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[aws 기초 : Bucket에대해서]]></title>
            <link>https://velog.io/@juno_lee96/aws-%EA%B8%B0%EC%B4%88-Bucket%EC%97%90%EB%8C%80%ED%95%B4%EC%84%9C</link>
            <guid>https://velog.io/@juno_lee96/aws-%EA%B8%B0%EC%B4%88-Bucket%EC%97%90%EB%8C%80%ED%95%B4%EC%84%9C</guid>
            <pubDate>Tue, 18 Nov 2025 00:02:43 GMT</pubDate>
            <description><![CDATA[<h1 id="aws란-">AWS란 ?</h1>
<p><code>AWS</code> 는 Amazon Web Service 의 약어로 Amazon 사에서 제공하는 클라우드 서비스입니다. </p>
<h2 id="cloud-computing이란">Cloud Computing이란?</h2>
<p><code>Cloud Computing</code>이란 인터넷을 통해서 서버, 스토리지, 소프트웨어등 IT자원을 빌려주는 서비스입니다.  이전 포스트에 언급했다시피 초기엔 1990년대엔 온프레미스 방식으로 물리적 관리를 하였다고 합니다. 하지만 2000년대이후로 온라인 서비스와 같은 실시간 서비스가 나옴으로 서버들이 터지거나 데이터 관리 하는데 어려움을 겪기 시작했습니다</p>
<p><code>cloud방식</code>
해당 문제들이 발생하자 여러 기업들은 대형 데이터 서비스 센터들을 짓기 시작했습니다. 해당 방식의 특징은 AWS와 같은 기업들이 직접 IDC 를 구축 하여서 인터넷을 통해 서비스를 제공 하기 시작 했고 이를 클라우드 방식이라고 합니다. </p>
<h2 id="장점">장점</h2>
<ol>
<li><p>저렴하다
온프레미스 방식은 데이터 복구 하는 방식에서 비용적인 측면 어마무시하게 들었습니다.하지만 여러 클라우드 기업들은 DR(Disaster Recovery) 기능을 서비스 형태로 제공하고 ups와 같은 장비들이 필요없어서 가격 절감이된다는 장점이 있습니다 </p>
</li>
<li><p>가용성
수요 예측 변동에 큰 영향을 받지 않습니다.</p>
</li>
<li><p>확장성
어느 나라, 지역에서든 이용 가능 합니다</p>
</li>
<li><p>다양한 서비스</p>
<ul>
<li>EC2 라는 가상 서버를 제공 함으로 어플리케이션이 생성 될수 있는 환경을 제공.</li>
<li>S3 객체 스토리지를 대규모로 제공 </li>
<li>RDS 와 같은 관계형 데이터 베이스 서비스를 손쉽게 이용 가능</li>
<li>VPC 와 같은 격리된 보안 환경 제공</li>
</ul>
</li>
</ol>
<h2 id="단점">단점</h2>
<p>물론 단점도 존재 합니다. 초기 비용은 저렴하지만, 장기적으로 내야한다는 문제가 있습니다</p>
<h2 id="s3">S3</h2>
<p>앞서 언급와 같이 <code>S3</code>는 아마존에서 제공 하는 대규모로 객체를 저장할 수 있는 스토리지를 제공합니다.</p>
<h3 id="버킷이란">버킷이란?</h3>
<p>bucket이란 한글로 양동이 입니다. 물을 한번에 담아서 물을 한군데로 모아두개하는 매개체이잖아요? 컴퓨터 공학에서의 버킷또한 마찬가지로 여러 데이터를 한군데 모아두게하는 아주 작은 단위의 기억장소로 의미합니다.
웹 호스팅시 도메인과 이름이 일치해야 합니다.</p>
<h3 id="버전-관리기능">버전 관리기능</h3>
<h3 id="내구성과-가용성">내구성과 가용성</h3>
<p>99.999999퍼센트로 서버가 다운 되지 않고 , 99.999999999퍼센트로 데이터를 잃어버리지않는다 장점이있다</p>
<h3 id="s3-api">S3 API</h3>
<ul>
<li><p>파일관련 API</p>
<ul>
<li>업로드 성공시 상태코드 200 반환</li>
<li>큰 용량의 파일을 업로드시 파일들을 잘게 나눠서 하나씩 업로드후 S3에서 합침.</li>
<li>Torrent라는 다운로드 서비스 지원.</li>
</ul>
</li>
<li><p>Bucket관련 API</p>
<h3 id="s3-객체-구성">S3 객체 구성</h3>
<ul>
<li>key : 파일 이름</li>
<li>value :  파일의 데이터</li>
<li>Version ID: 버젼 아이디</li>
<li>MetaData: 파일 정보를 담은 데이터</li>
<li>ACL : 파일 권한을 담은 데이터</li>
<li>TORRENTS: 토렌트 공유를 위한 데이터</li>
</ul>
</li>
</ul>
<h3 id="s3--버저닝">S3  버저닝</h3>
<ul>
<li>모든 버전을 관리(삭재포함) </li>
<li>활성화 해야함</li>
<li>수명 주기 관리기능과 연동이 가능하다.</li>
</ul>
<h3 id="s3-정적-호스팅">S3 정적 호스팅</h3>
<ul>
<li><p>기본적으로 두 가지의 웹 URL을 가진다</p>
<p><a href="https://bucket-name.s3.Region.amazonaws.com/keyname">https://bucket-name.s3.Region.amazonaws.com/keyname</a>
<a href="https://s3.Region.amazonaws.com/bucket0name/keyname">https://s3.Region.amazonaws.com/bucket0name/keyname</a></p>
</li>
<li><p>정적 웹 호스팅이 가능 </p>
<ul>
<li>HTML/JS 등으로 구성된 정적인 웹사이트 만 가능 하며</li>
<li>호스팅 비용이 저렴하다</li>
<li>Serverless 의 기초가 되며</li>
<li>동적 데이터는 AJAX 등으로 처리 가능하다.</li>
</ul>
</li>
</ul>
<h3 id="s3-의-일관성-모델">S3 의 일관성 모델</h3>
<ul>
<li><p>put: 읽기후 쓰기</p>
</li>
<li><p>파일을 올리고 성공한 데이터 즉시 읽기 가능 </p>
</li>
<li><p>먼저 요청한 put이 우선적으로 실행된다</p>
</li>
<li><p>update/ delete: 최종 일관성
파일을 삭제하거나 업데이트 후 일정시간 이후로 결과가 반영.. 
업데이트 사항이 완료나 반영 되지 않은 상태에서 이전 정보가 접근가능 함으로 원자성이 떨어진다는 단점</p>
</li>
</ul>
<h3 id="s3의-서비스-종류">S3의 서비스 종류</h3>
<ul>
<li><p>S3 standard</p>
<ul>
<li>S3의 장점 총집합</li>
<li>분산 저장 가능</li>
</ul>
</li>
<li><p>S3 IA </p>
<ul>
<li>덜 중요한 데이터를 저장하는 저장소</li>
<li>불러올때마다 비용 지불</li>
</ul>
</li>
<li><p>S3 OneZoneIA</p>
<ul>
<li>덜 중요하거나 자주 안 쓰는 데이터만 한곳에 저장. 재해 발생시 손해가 클수 있음.</li>
</ul>
</li>
<li><p>S3 Intelligent Tiering </p>
<ul>
<li>머신러닝을 이용한 자동으로 티어변경</li>
<li>포퍼먼스적으로 손해는 없으나 오버헤드 발생 할수 있음</li>
</ul>
</li>
<li><p>S3 Glacier</p>
<ul>
<li>아카이브 저장소</li>
<li>저렴한 가격 </li>
<li>데이터를 가지고 오는데 좀 오래걸림</li>
</ul>
</li>
<li><p>S3 Glacier Deep Archive</p>
<ul>
<li>매우 싸고 데이터 전송속드는 매우 느리다</li>
</ul>
</li>
</ul>
<h3 id="수명주기">수명주기</h3>
<ul>
<li>&quot; ~시간 지나면 ~ 해주세여&quot; 라는 명령어 </li>
<li>이전 버전과 현재 버전이 연동이 가능 하며 해당 부분을 설정가능하다.</li>
<li>파일 업로드/ 삭제/ 수정시 람다 호출 가능</li>
</ul>
<h3 id="s3-transfer-acceleration">S3 Transfer Acceleration</h3>
<ul>
<li>AWS 네트워크를 통해서 엣지 로케이션에서 빠른 업로드 가능 </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS  쌩 기초  - 데이터의 역사]]></title>
            <link>https://velog.io/@juno_lee96/AWS-%EC%8C%A9-%EA%B8%B0%EC%B4%88-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%97%AD%EC%82%AC</link>
            <guid>https://velog.io/@juno_lee96/AWS-%EC%8C%A9-%EA%B8%B0%EC%B4%88-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%97%AD%EC%82%AC</guid>
            <pubDate>Sun, 16 Nov 2025 09:00:43 GMT</pubDate>
            <description><![CDATA[<h1 id="aws와-클라우드의-등장-배경">AWS와 클라우드의 등장 배경</h1>
<p>클라우드가 왜 등장했는지를 이해하려면, <code>컴퓨터의 역사</code>를 되짚어보는 것이 도움이 된다.</p>
<h2 id="1-초기-컴퓨터와-군사적-필요">1. 초기 컴퓨터와 군사적 필요</h2>
<p>2차 세계대전 직전, 독일은 세계 최초로 핵 이론을 인지하고 있었다.
이에 대응해 영국은 암호 해독과 정보 수집을 목표로 <strong>콜로서스(Colossus)</strong>라는 컴퓨터를 개발하였다.
이를 통해 연합국은 전쟁에서 우위를 점할 수 있었고, 초기 컴퓨터가 군사적 계산과 전략적 정보 처리를 위해 개발되었음을 알 수 있다.</p>
<h2 id="19601970년대-정부와-연구-기관-그리고-개인-컴퓨터">1960~1970년대: 정부와 연구 기관, 그리고 개인 컴퓨터</h2>
<p>1960년대까지 컴퓨터는 주로 정부 기관과 연구소에서 사용되었다.
1971년, 인텔의 4004 마이크로프로세서 등장으로 컴퓨터가 점점 작아지고 저렴해졌으며, 1975년에는 개인용 컴퓨터가 등장하였다.
1980년대 이후에는 컴퓨터가 상용화되면서, 개인과 기업이 데이터를 효율적으로 저장하고 관리해야 할 필요가 생겼다.</p>
<h2 id="1990년대-인터넷과-데이터센터의-등장">1990년대: 인터넷과 데이터센터의 등장</h2>
<p>인터넷 보급이 본격화되면서, 현대적인 데이터센터 개념이 등장했다.
초기 데이터센터는 <code>24시간 운용, 냉각 시스템, UPS/발전기, 네트워크 백본, 방화벽/보안 시스템</code> 등 기본 인프라를 갖추었다.
그러나 인터넷 사용자의 폭발적 증가와 온라인 서비스 확대로 인해, 서버 수는 한 대에서 수백 대로 늘어났고, 데이터 접근과 관리 문제도 복잡해졌다.</p>
<h2 id="2000년대-이후">2000년대 이후</h2>
<p>이러한 문제를 해결하기 위해, 여러 대기업은 자체 데이터센터를 구축하였다.
점점 더 많은 데이터와 서비스 수요를 효율적으로 관리하고, 확장성, 비용 효율성, 접근성을 확보하기 위해 탄생한 것이 바로 클라우드다.
AWS와 같은 클라우드는 물리적 서버 관리 부담을 줄이고, 필요한 만큼만 리소스를 사용할 수 있는 현대적 해결책이다.</p>
<h2 id="💡-요약하면">💡 요약하면:</h2>
<p>군사적 필요 → 개인과 기업의 데이터 관리 문제 → 인터넷과 데이터센터 확장 → 클라우드 등장
이 흐름이 자연스럽게 이어지면, 클라우드가 왜 필요한지 이해하기 쉽다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹 소켓 ??]]></title>
            <link>https://velog.io/@juno_lee96/%EC%9B%B9-%EC%86%8C%EC%BC%93</link>
            <guid>https://velog.io/@juno_lee96/%EC%9B%B9-%EC%86%8C%EC%BC%93</guid>
            <pubDate>Thu, 30 Oct 2025 02:44:54 GMT</pubDate>
            <description><![CDATA[<h2 id="소켓이란-뭘까요">소켓이란 뭘까요?</h2>
<p>영어권에선 soket은 &quot;전구(電球) 따위를 끼워 넣어 전선과 접속되게 하는 기구&quot; 로 자주 사용되어집니다.</p>
<p>그렇다면 컴퓨터 공학에서의 소켓은 어떤의미일까요?
두 호스트 사이에 데이터를 주고받기위해 사용되는 양끝점 &quot;endpoint&quot; 를 의미 합니다</p>
<h2 id="기존의-http-통신-방식">기존의 HTTP 통신 방식</h2>
<p>제가 여태 배웠던 방식은 HTTP 통신 방식이었는데요. 해당 방식은 &quot;클라이언트가 데이터 요청을 하지 않으면 서버는 데이터를 먼저 보낼수 없고 한 번의 요청과 응답을 주고 받은 후 연결을 유지 하지 않는다는&quot; 단점 가지고 있었습니다</p>
<h2 id="웹소켓의-방식">웹소켓의 방식</h2>
<h3 id="양방향-통신">양방향 통신</h3>
<p>클라이언트와 서버는 언제든지 데이터를 보낼수있습니다</p>
<h3 id="지속적인-연결">지속적인 연결</h3>
<p>핸드쉐이크로 한번 연결된 http는 연결이 끊어 질때까지 유지 됩니다</p>
<h3 id="낮은-오버헤드">낮은 오버헤드</h3>
<p>최초 연결이후엔 http 헤더 없이 데이터를 주고 받기에 통신에 필요한 데이터 양이 적습니다.</p>
<h3 id="실시간성">실시간성</h3>
<p>서버에서 새로운 데이터가 생성되면 즉각 클라이언트에게 푸시할 수 있습니다</p>
<p>HTTP 가 하나의 약속인것 과 같이 웹소켓 또한 실시간 통신을 위한 하나의 약속입니다.
HTTP리퀘스트를 통해 웹소켓 연결이 이루어집니다.</p>
<p>정의 출처: Oxford Languages </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[타입스크립트에 대해]]></title>
            <link>https://velog.io/@juno_lee96/%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90-%EB%8C%80%ED%95%B4</link>
            <guid>https://velog.io/@juno_lee96/%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90-%EB%8C%80%ED%95%B4</guid>
            <pubDate>Sun, 14 Sep 2025 07:11:06 GMT</pubDate>
            <description><![CDATA[<p>Type script를 이번주에 배웠는데 <del>너무 어려웠어요</del>... 특히 타입... 그래서 다시 정리했습당..</p>
<h2 id="타입스크립트란">타입스크립트란?</h2>
<p>타입 스크립트는 자바스크립트에 정적언어를 포함한 상위 집합(syntactic superset)이라고 합니다,, </p>
<p>왜나왔을까요?  자바스크립트로 에러 처리를 하려면, 코드를 실행시키고 난다음에 에러를 확인 할수있어서, 비효율적인 문제가 발생 했어요. 이를 타입스크립트를 통해 해결 해버릴수있어요</p>
<h2 id="정적인-언어란">정적인 언어란?</h2>
<table>
<thead>
<tr>
<th>구분</th>
<th>정적 언어 (Static)</th>
<th>동적 언어 (Dynamic)</th>
</tr>
</thead>
<tbody><tr>
<td>타입 검사 시점</td>
<td><strong>컴파일 시</strong></td>
<td>런타임 시</td>
</tr>
<tr>
<td>예시</td>
<td>TypeScript, Java, C</td>
<td>JavaScript, Python, Ruby</td>
</tr>
<tr>
<td>장점</td>
<td>실행 전 오류 발견, IDE 지원 우수</td>
<td>빠른 개발, 유연성 높음</td>
</tr>
<tr>
<td>단점</td>
<td>작성 시 엄격, 초반 작성 부담</td>
<td>런타임 오류 발생 가능</td>
</tr>
</tbody></table>
<h2 id="compile">compile</h2>
<p>컴퓨터는 인간의 말을 처리하는데 애를 많이 먹어요... 왜냐하면 컴퓨터는 이진법으로 구성되어져 있는 경우가 많은데 인간의 언어는 그렇지 않아서쥬.. 그래서 변환하는 과정이 필요로 합니다.. 이런 과정을 컴파일 이라고 합니다.. 이때 인간의 말과 유사한 것들은 c언어, 자바스크립트, 파이썬. 컴퓨터언어는 &quot; 기계어&quot;....</p>
<h2 id="transpile">transpile</h2>
<p>같은 언어의 수준의 언어로 변환하는 과정을 말합니다..</p>
<p>ex) 이전버젼을 현재 버젼으로 변환하는 과정</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PRISMA ? ]]></title>
            <link>https://velog.io/@juno_lee96/PRISMA</link>
            <guid>https://velog.io/@juno_lee96/PRISMA</guid>
            <pubDate>Sat, 02 Aug 2025 02:55:18 GMT</pubDate>
            <description><![CDATA[<h1 id="📌-concept-prisma">📌 Concept: Prisma</h1>
<h2 id="🔍-intro">🔍 Intro</h2>
<ul>
<li>Prisma</li>
<li>schema in prisma</li>
<li>prisma model</li>
</ul>
<h2 id="✅--who-is-prisma-what-is-prima">✅  Who is Prisma? what is Prima?</h2>
<p>Earlier, we learned that ORM tends to play the role of bridge between RDB and Object language. ORMs have introduced several issues (less type safety, complicated queries,Mismatch between the data model and the code).The prisma addresses these shortcomings, focused on type safety and development productivity. </p>
<p>&quot;On top of being an ORM, it provide us with a complex tool kit for accessing  database.</p>
<h2 id="⚙️-core">⚙️ Core</h2>
<h3 id="install-prisma">install Prisma</h3>
<ol>
<li>Prisma CLI<pre><code class="language-bash">npm install -g prisma // without install we can use npx</code></pre>
<h3 id="install-client">install client</h3>
<pre><code class="language-bash">npm install  @prisma/client</code></pre>
</li>
</ol>
<h3 id="prisma-initialise">prisma initialise</h3>
<p>Creating <code>prisma</code> directory, make <code>.env</code> file and schema.prisma files in the project root.</p>
<h3 id="the-constitution-of-prisma">the constitution of prisma</h3>
<p>prisma is mainly consisted with 3 main factors.</p>
<ul>
<li><p>schema </p>
<ul>
<li><p>using  <code>.prisma</code> extention file defining schema as intuitive language and simplified. </p>
</li>
<li><p>Not only does Schema plays the blueprint of database, but provide information to create the prisma client.</p>
</li>
<li><p>only one schema file can manages Migration, defining relation, etc.</p>
</li>
</ul>
</li>
<li><p>client</p>
<ul>
<li><p>It is the auto generatated Type-safe database query builder based on the Prisma Schema.</p>
</li>
<li><p>It commonly use when  interacting with a database from Node.js or TypeScript code.</p>
<ul>
<li>without complicated queries or raw query strings, we can use HTTP methods.</li>
</ul>
<ul>
<li><p>Autocomplete and type inspection.</p>
<ul>
<li>In TypeScript projects, these features help catch errors during development, which improves code safety and productivity.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>prisma Migrate</p>
<ul>
<li><p>It is the managemnet tool to adopt modifcations.</p>
</li>
<li><p>when developer updates the schema file, Prisma Migrate tracks changes of database, generates essential migration scripts.</p>
</li>
<li><p>It makes data schema synchronization easy between the development and production environmnet.</p>
</li>
</ul>
</li>
</ul>
<h2 id="🧠-code">🧠 code</h2>
<h3 id="prisma-client">prisma client</h3>
<pre><code class="language-js">
// 예시: schema.prisma 파일
generator client {
  provider = &quot;prisma-client-js&quot;
}

datasource db {
  provider = &quot;postgresql&quot;
  url      = env(&quot;DATABASE_URL&quot;)
}

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  posts     Post[]   // User와 Post는 1:N 관계
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int      // 외래 키
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}</code></pre>
<h3 id="accessing-data-by-prisma">accessing data by Prisma</h3>
<pre><code class="language-js">
import {PrismaClient} from &quot;@prisma/client&quot;;

const prisma = new PrismaClient

async function main(){
    // create new user
      const newUser = await prisma.user.create({
        data:{
            name: &#39;Alice&#39;,
              email: &#39;Alice@email.com&#39;,    
        },
    })
    console.log(&#39;created user:&#39;newUser);


  // access all users
  const allUser = await prisma.user.findMany();
  console.log(&#39;
}</code></pre>
<pre><code class="language-js">
</code></pre>
<h2 id="💡-good-to-know">💡 Good to know</h2>
<p>When you visualise Prisma Table, it is easy for developer to confuse understanding or writing code. So I am fully recommend to use 3 logical statement and relationships...</p>
<p>Example:</p>
<ol>
<li>Product can have multiple tags, also the tags can have multiple tags</li>
</ol>
<ol start="2">
<li><p>there is Many - many relationship between products and tags.</p>
</li>
<li><p>this join stores pairs of productID and TagID to represent relation.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[WHAT HECK IS DATABASE? WHO ARE YOU]]></title>
            <link>https://velog.io/@juno_lee96/WHAT-HECK-IS-DATABASE-WHO-ARE-YOU</link>
            <guid>https://velog.io/@juno_lee96/WHAT-HECK-IS-DATABASE-WHO-ARE-YOU</guid>
            <pubDate>Thu, 31 Jul 2025 07:29:46 GMT</pubDate>
            <description><![CDATA[<h1 id="📌-concept">📌 Concept</h1>
<h2 id="🔍-intro">🔍 Intro</h2>
<ul>
<li><h3 id="data-base">Data base</h3>
</li>
<li><h3 id="relational-database">Relational Database</h3>
</li>
<li><h3 id="dbms">DBMS</h3>
</li>
<li><h3 id="er-basic-model">ER basic model</h3>
</li>
<li><h3 id="postgresql">Postgresql</h3>
</li>
</ul>
<hr>
<h2 id="✅-why-database-is-invented-">✅ Why database is invented ?</h2>
<p>Since the invention of the computer, we have been eager to find systems that can manage and store large amounts of structured data..</p>
<p>It&#39;s a tool for users to delete or post, get, patch the data. Nowadays, we can deal with the data efficiently(etc backup, safety, concurrency controle, data integrit). Every data stored into database.</p>
<hr>
<h2 id="⚙️-core">⚙️ core</h2>
<h3 id="sort-of-database">sort of Database</h3>
<h4 id="relational-database-it-also-calls-rdb">Relational Database (it also calls RDB):</h4>
<ul>
<li>store the data as table data type.</li>
<li>manupulate data through SQL</li>
<li>MySQL, Postgresql,Oracle..</li>
</ul>
<h4 id="no-sql">No SQL:</h4>
<ul>
<li><p>store data as differnt type of data instead of table.</p>
</li>
<li><p>It has flexible data structure</p>
</li>
<li><p>MongoDB</p>
</li>
</ul>
<h3 id="relation-database">Relation Database</h3>
<p> there are the numerous of Database, but relational Database is the most porpular database in the world. </p>
<h4 id="simple-structure">simple structure</h4>
<ul>
<li>table
  table for data
  this is consisted with rows and cols </li>
</ul>
<ul>
<li><p>cols</p>
<p>attribute of data </p>
</li>
<li><p>rows</p>
<p>information of users</p>
</li>
</ul>
<h4 id="schema">schema</h4>
<p>   ** schema** is the blue-print defining database structure. </p>
<ul>
<li><p>table </p>
<ul>
<li>basic unit for storage </li>
</ul>
</li>
<li><p>column </p>
<ul>
<li>An attribute</li>
</ul>
</li>
<li><p>type : string boolean </p>
</li>
<li><p>constraint :  PRIMARY KEY, NOT NULL, FORERIGN KEY</p>
<h3 id="dbmsdatabase-management-systems">DBMS(Database Management Systems)</h3>
<ul>
<li><p>Database :</p>
<ul>
<li><p>System which store the data and structurise.</p>
</li>
<li><p>storage unite for logical data</p>
</li>
</ul>
</li>
<li><p>Database Management Systems</p>
<ul>
<li>system for database</li>
</ul>
</li>
<li><p>RDB process</p>
<ul>
<li><p>writing query by Sql syntax</p>
</li>
<li><p>user  query =&gt; DBMS</p>
</li>
<li><p>DBMS accesss/ dealing data </p>
</li>
<li><p>return the result to user</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h3 id="er-basic-model-1">ER basic model</h3>
<p> Before desigining a database, it is essential to understand the relationships between data. 
 At the moment, we could adopt the concept of of Entity-Relationship Model to visualize the structure of the system.  This modele shows the relationships between enitity and Attribute in real world.</p>
<h4 id="consistution-of-er">consistution of ER</h4>
<h4 id="entity">entity</h4>
<ul>
<li><p>It is independence existence to express data. </p>
</li>
<li><p>It is mapping with table </p>
</li>
</ul>
<h4 id="attribute">Attribute</h4>
<p>Attribute is unique character of entity. it is located in cols in table.</p>
<h4 id="relation">Relation</h4>
<ul>
<li><p>1 to 1 relation </p>
<ul>
<li><p>An instance in enitity has a relationship with an instance in other enitity.</p>
<p><code>student</code> --- <code>seat</code></p>
</li>
</ul>
</li>
<li><p>1 to  many </p>
<ul>
<li><p>An instance of enitity  has a relationship with several instance in other enitity.</p>
<p><code>student</code> --- <code>major</code></p>
</li>
</ul>
</li>
<li><p>many to many </p>
</li>
<li><p>instances of an enitity has a relationships with other instances of enitity.</p>
</li>
</ul>
<h4 id="key">key</h4>
<ul>
<li>it is attribute to recognize each entity</li>
</ul>
<hr>
<h2 id="🧩-usage-of-erd">🧩 usage of ERD</h2>
<p>booking the seat for flights</p>
]]></description>
        </item>
    </channel>
</rss>