<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>inah-_-.log</title>
        <link>https://velog.io/</link>
        <description>Backend Developer</description>
        <lastBuildDate>Tue, 04 Apr 2023 02:54:10 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>inah-_-.log</title>
            <url>https://images.velog.io/images/inah-_-/profile/dbb772dc-77cd-474d-ac2f-65f91283731a/google_profile.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. inah-_-.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/inah-_-" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[AWS] SSH 접근 에러 이슈]]></title>
            <link>https://velog.io/@inah-_-/AWS-SSH-%EC%A0%91%EA%B7%BC-%EC%97%90%EB%9F%AC-%EC%9D%B4%EC%8A%88</link>
            <guid>https://velog.io/@inah-_-/AWS-SSH-%EC%A0%91%EA%B7%BC-%EC%97%90%EB%9F%AC-%EC%9D%B4%EC%8A%88</guid>
            <pubDate>Tue, 04 Apr 2023 02:54:10 GMT</pubDate>
            <description><![CDATA[<p>EC2 사용 중 고정 IP 지정이 안 되어 있는 테스트서버의 인스턴스 유형을 변경하였을 때다. 유형 변경 후 ssh에 접근이 안 되었다.</p>
<pre><code class="language-shell">$ ssh {ip_address} -p{port}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@</code></pre>
<p>로컬에 저장 되어있는 물리적 서버 ssh 정보가 충돌했기 때문임</p>
<br/>

<h3 id="첫번째-방법">첫번째 방법</h3>
<pre><code class="language-shell">ssh-keygen -R 1234.5.6.7</code></pre>
<hr>
<h3 id="두번째-방법">두번째 방법</h3>
<pre><code class="language-shell">$ cd Users/{username}
$ vi .ssh/known_hosts</code></pre>
<p><img src="https://velog.velcdn.com/images/inah-_-/post/6139cd3c-879d-4a13-ab90-6201319cac16/image.png" alt=""></p>
<p>충돌나는 ssh 정보 삭제 하면 끝!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터베이스 정규화]]></title>
            <link>https://velog.io/@inah-_-/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%A0%95%EA%B7%9C%ED%99%94</link>
            <guid>https://velog.io/@inah-_-/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%A0%95%EA%B7%9C%ED%99%94</guid>
            <pubDate>Mon, 18 Apr 2022 08:51:18 GMT</pubDate>
            <description><![CDATA[<h2 id="데이터베이스-정규화란">데이터베이스 정규화란?</h2>
<p>데이터베이스의 중복을 최소화하여 저장 효율을 높이고
연산 시 이상 현상을 최소화할 수 있는 논리적 구조로 변환시키는 작업</p>
<h2 id="데이터베이스-정규화의-장점">데이터베이스 정규화의 장점</h2>
<ul>
<li>데이터베이스의 일관성을 향상 시킬 수 있다.</li>
<li>데이터베이스의 확장성을 보장할 수 있다.</li>
<li>데이터베이스의 논리적 구조를 견고하게 만들 수 있다.</li>
</ul>
<h2 id="논리적-구조의-이상anomaly현상">논리적 구조의 이상(anomaly)현상</h2>
<ul>
<li><p><strong>삭제 이상(deletion anomaly)</strong>
한개의 튜플을 삭제할 경우 참조된 테이블의 유지 되어야 할 데이터가 손실되는 현상</p>
</li>
<li><p><strong>삽입 이상(insertion anomaly)</strong>
어떤 정보를 테이블에 삽입하고자 할 때 불필요한 정보까지도 삽입해야 하는 경우</p>
</li>
<li><p><strong>갱신 이상(update anomaly)</strong>
중복된 튜플들 중에 일부만 갱신함으로써 정보의 불일치성이 발생하게 되는 현상</p>
</li>
</ul>
<h2 id="함수-종속functional-dependency">함수 종속(Functional Dependency)</h2>
<ul>
<li>데이터베이스 릴레이션에서 두 개의 속성</li>
<li>릴레이션 R에서 속성들의 부분 집합을 X, Y라고 할 때
임의의 튜플에서 X의 값이 Y의 값을 함수적으로 결정한다면
Y가 X에 함수적으로 종속되었다고 한다.
<code>R.X -&gt; R.Y</code>
X = 결정자
Y = 종속자</li>
</ul>
<table border="1" style="text-align:center; margin:0 auto; width:100%">
            <caption>함수 종속의 예</caption>
            <tr>
                  <th>수강</th>
                <th>학번</th>
                <th>과목명</th>
                <th>성적</th>
                  <th>이름</th>
            </tr>
            <tr>
                  <td></td>
                <td>2022101</td>
                <td>정보통신개론</td>
                <td>90</td>
                <td>홍길동</td>
            </tr>
               <tr>
                <td></td>
                <td>2022101</td>
                <td>데이터베이스</td>
                <td>80</td>
                <td>홍길동</td>
            </tr>
               <tr>
                 <td></td>
                <td>2022100</td>
                <td>데이터베이스</td>
                <td>90</td>
                <td>아무개</td>
            </tr>
 </table>



<p>릴레이션 명이 <code>수강</code>일 때
수강 릴레이션에서 <code>학번</code>은 <code>이름</code>을 고유하게 결정한다 <code>수강.학번 -&gt; 수강.이름</code>
<code>[학번, 과목명]</code>은 <code>성적</code>을 고유하게 결정한다. <code>{수강.학번, 수강.과목명} -&gt; 수강.성적</code></p>
<Br/>

<h3 id="다중값-속성을-갖는-릴레이션">다중값 속성을 갖는 릴레이션</h3>
<table border="1" style="text-align:center; margin:0 auto; width:100%">

<pre><code>        &lt;tr&gt;
              &lt;th&gt;학번&lt;/th&gt;
            &lt;th&gt;이름&lt;/th&gt;
            &lt;th&gt;주소&lt;/th&gt;
            &lt;th&gt;취미&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
              &lt;td&gt;202201&lt;/td&gt;
            &lt;td&gt;홍길동&lt;/td&gt;
            &lt;td&gt;서울&lt;/td&gt;
            &lt;td&gt;볼링, 게임&lt;/td&gt;
        &lt;/tr&gt;
           &lt;tr&gt;
            &lt;td&gt;202202&lt;/td&gt;
            &lt;td&gt;김길동&lt;/td&gt;
            &lt;td&gt;경기&lt;/td&gt;
            &lt;td&gt;야구, 농구, 핸드볼&lt;/td&gt;
        &lt;/tr&gt;</code></pre> </table>

<h3 id="단일값-속성을-갖는-릴레이션">단일값 속성을 갖는 릴레이션</h3>
<table border="1" style="text-align:center; margin:0 auto; width:100%">

<pre><code>        &lt;tr&gt;
              &lt;th&gt;학번&lt;/th&gt;
            &lt;th&gt;이름&lt;/th&gt;
            &lt;th&gt;주소&lt;/th&gt;
            &lt;th&gt;취미&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
              &lt;td&gt;202201&lt;/td&gt;
            &lt;td&gt;홍길동&lt;/td&gt;
            &lt;td&gt;서울&lt;/td&gt;
            &lt;td&gt;볼링&lt;/td&gt;
        &lt;/tr&gt;
           &lt;tr&gt;
              &lt;td&gt;202201&lt;/td&gt;
            &lt;td&gt;홍길동&lt;/td&gt;
            &lt;td&gt;서울&lt;/td&gt;
            &lt;td&gt;게임&lt;/td&gt;
        &lt;/tr&gt;
           &lt;tr&gt;
            &lt;td&gt;202202&lt;/td&gt;
            &lt;td&gt;김길동&lt;/td&gt;
            &lt;td&gt;경기&lt;/td&gt;
            &lt;td&gt;야구&lt;/td&gt;
        &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td&gt;202202&lt;/td&gt;
            &lt;td&gt;김길동&lt;/td&gt;
            &lt;td&gt;경기&lt;/td&gt;
            &lt;td&gt;농구&lt;/td&gt;

          &lt;tr&gt;
            &lt;td&gt;202202&lt;/td&gt;
            &lt;td&gt;김길동&lt;/td&gt;
            &lt;td&gt;경기&lt;/td&gt;
            &lt;td&gt;핸드볼&lt;/td&gt;
        &lt;/tr&gt;</code></pre> </table>



<h2 id="제-1-정규형1nf">제 1 정규형(1NF)</h2>
<p>릴레이션의 모든 속성들이 단일값(atomic value)만을 갖는 형태</p>
<h2 id="제-2-정규형2nf">제 2 정규형(2NF)</h2>
<p>기본키로 여러 개의 속성이 함께 사용되는 복합키를 사용하는 릴레이션의 일반 속성이
모두 복합키에 종속되는 형태 기본적으로 제 1 정규형을 만족시키는 것을 전제로 한다.</p>
<h2 id="제-3-정규형3nf">제 3 정규형(3NF)</h2>
<p>기본키가 아닌 일반 속성들 간의 종속 관계가 존재하지 않는 형태
기본적으로 제 2 정규형을 만족시키는 것을 전제로 한다.</p>
<br/>]]></description>
        </item>
        <item>
            <title><![CDATA[운영체제(OS)]]></title>
            <link>https://velog.io/@inah-_-/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</link>
            <guid>https://velog.io/@inah-_-/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</guid>
            <pubDate>Thu, 31 Mar 2022 02:34:08 GMT</pubDate>
            <description><![CDATA[<h1 id="운영체제의-정의">운영체제의 정의</h1>
<p>컴퓨터나 노트북의 전원을 켜면 가장 먼저 만나는 소프트웨어
일반적 정의는 사용자에게 편리한 인터페이스를 제공하고 자원을 효율적으로 관리하는 소프트웨어라고 칭한다.</p>
<h3 id="운영체제의-종류">운영체제의 종류</h3>
<ul>
<li>대형 컴퓨터 : 유닉스</li>
<li>개인용 컴퓨터 : 윈도우, 맥, 리눅스 등</li>
<li>스마트폰(스마트폰 운영체제) : IOS, ANDROID<h3 id="임베디드-운영체제">임베디드 운영체제</h3>
CPU의 성능도 낮고 메모리의 크기도 작아
시스템에 내장할 수 있도록 만든 운영체제</li>
<li><em>운영체제를 내장한다는 것은?*</em>
단일 기능이 아닌 여러 기능을 <strong>확장</strong>하여 사용할 수 있다는 뜻</li>
</ul>
<p>스마트폰 : 어플을 설치함으로써 게임이나 네비게이션 등의 기능을 사용 가능함
TV : 시청뿐만 아니라 동영상 감상, 인터넷, 쇼핑 등 다양한 기능을 사용 가능함</p>
<h3 id="운영체제의-역할">운영체제의 역할</h3>
<ol>
<li>성능향상 : 새로운 기능 추가, 성능 변경이 용이 -&gt; 효율성 향상</li>
<li>자원관리 : 자원을 관리하는 중재자 역할</li>
<li>자원보호 : 악의 혹은 미숙한 사용자에게 자원을 보호</li>
<li>사용자 인터페이스 제공 : 컴퓨터 하드웨어와 소프트웨어를 편리하게 사용할 수 있도록 환경 제공</li>
</ol>
<h3 id="운영체제의-기능">운영체제의 기능</h3>
<ul>
<li>프로세스, 메인메모리, 저장장치를 관리한다.</li>
<li>주방장 CPU가 작업을 실행하는 것은 프로세스 관리</li>
<li>도마 위의 재료를 정리하는 메인 메모리 관리</li>
<li>냉장고 저장장치에 데이터를 효율적으로 관리하는 것은 저장장치 관리</li>
</ul>
<h3 id="운영체제의-구조적-특징">운영체제의 구조적 특징</h3>
<ul>
<li>모든 응용 프로그램은 운영체제 위에서 작동하기 때문에
운영체제가 불안정하면 다른 응용프로그램도 함께 불안정해진다.</li>
<li>운영체제는 바이러스나 악의적인 소프트웨어에서 하드웨어뿐 아니라 자기 자신도 보호한다.</li>
<li>운영체제는 사용자가 직접 자원에 접근하는 것을 막음으로써 자원을 보호한다.</li>
</ul>
<h3 id="운영체제의-역사">운영체제의 역사</h3>
<p><img src="https://images.velog.io/images/inah-_-/post/e38418f8-c108-4c5e-8a22-de98d76c3dfb/image.png" alt=""></p>
<h4 id="bsd">BSD</h4>
<ul>
<li>Bill Joy와 Chuck Haley가 소스코드를 수정하여 만든 유닉스</li>
<li>FreeBSD로 발전되었다.</li>
</ul>
<h4 id="리눅스">리눅스</h4>
<ul>
<li>Linus Torvalds가 개인용 컴퓨터에서 동작하는 유닉스 호환 커널을 만들어 공개하였다.</li>
<li>FreeBSD를 기반으로 개발되어 누구나 소스 코드가 참여가 가능하다.</li>
<li>구글이 리눅스 커널을 사용하여 스마트폰에서 사용할 수 있는 안드로이드 운영체제를 개발하였다.</li>
</ul>
<h4 id="맥-os">맥 OS</h4>
<ul>
<li>FreeBSD를 변형하여 매킨토시 컴퓨터에서 작동하는 운영체제를 개발</li>
<li>현재는 OS X로 발전하여 애플용 컴퓨터와 노트북에서 사용한다</li>
<li>IOS란, OS X를 스마트폰 용으로 바꾼 것이다.</li>
</ul>
<h3 id="gnugnu-is-not-unix">GNU(GNU is Not Unix)</h3>
<ul>
<li>리차드 스톨먼의 자유소프트웨어 운동</li>
<li>소프트웨어를 돈 주고 사는 대신 누구나 자유롭게 실행, 복사, 수정, 배포할 수 있게 하자고 주장</li>
<li>자원 봉사자가 개발에 참여하며 많은 소프트웨어를 개발하여 배포하였다.</li>
<li>리눅스나 안드로이드는 GNU 결과물로 만든 운영체제이다.</li>
</ul>
<h3 id="윈도우">윈도우</h3>
<ul>
<li>MS-DOS에 GUI를 접목 시킨 것</li>
<li>윈도우는 3.1부터 시작하여 현재 10버전까지 출시 되었다.</li>
<li>마이크로소프트의 몇몇 연구원이 개발하여 무겁고 불안한 특징이있다.</li>
<li>무료 사용이 가능한 리눅스는 안정적이고 강력한 운영체제이지만 일반인이 사용하기 어려워 윈도우가 보편화 되어있다.</li>
</ul>
<br/>]]></description>
        </item>
        <item>
            <title><![CDATA[통신 프로토콜]]></title>
            <link>https://velog.io/@inah-_-/%ED%86%B5%EC%8B%A0-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</link>
            <guid>https://velog.io/@inah-_-/%ED%86%B5%EC%8B%A0-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</guid>
            <pubDate>Mon, 28 Mar 2022 13:19:41 GMT</pubDate>
            <description><![CDATA[<h1 id="프로토콜의-기능">프로토콜의 기능</h1>
<h2 id="계층형-구조">계층형 구조</h2>
<ul>
<li>유지보수에는 계층형 구초가 용이하다.</li>
<li>데이터 통신을 제어하기 위한 여러 계층을 사용한다.</li>
<li>장치 및 시스템 사이의 접속을 논리적으로 연결한다.</li>
<li>대표적으로는 OSI 참조모델이 있다.</li>
</ul>
<h2 id="osi-참조-모델-논리-구성">OSI 참조 모델 논리 구성</h2>
<ul>
<li>응용 객체</li>
<li>개방형 시스템</li>
<li>물리 매체</li>
<li>접속</li>
</ul>
<br/>


<h2 id="프로토콜-기능에-필요한-것">프로토콜 기능에 필요한 것</h2>
<p>이름과 같은 고유한 형태가 있어야 통신에 대한 규악은 물론이고
데이터의 접속 및 통신이 원활하게 이루어지게 된다.</p>
<h3 id="이름">이름</h3>
<ul>
<li>전화번호</li>
<li>집 주소</li>
<li>MAC 주소 (Media Access Control Address)
네트워크에 사용되는 모든 기기의 고유 번호</li>
<li>IP 주소
인터넷 공간 상에서 네트워크에 연결되어 있는 특정 장치 디바이스의 접속에 대한
유일한 식별자(identifier)이며, 디바이스의 위치를 나타내는 식별자(locator) 역할을 하는 주소</li>
</ul>
<hr>
<br/>

<h1 id="프로토콜-구성-요소">프로토콜 구성 요소</h1>
<h2 id="구문">구문</h2>
<ul>
<li>Syntax</li>
<li>데이터의 형식, 부호화, 신호 계층으로 구성된다.</li>
</ul>
<h2 id="의미">의미</h2>
<ul>
<li>Semantics</li>
<li>데이터의 형식, 부호화에 의미를 부여한다.</li>
<li>데이터의 비트가 가지고 있는 의미 영역</li>
<li>오류 제어, 동기화, 흐름제어 등의 정보를 규정한다.</li>
<li>정확하고 효율적이고 완전한 전송을 위한 목적을 가진다.</li>
<li>문장을 문자열의 배열로 보지 않고 문장이 포함하는 내용이느 의미를 문제로 삼는 것
프로그램에 대해서는 프로그램을 어떤 기계어로 컴파일 해야 하는지를 정하는 규칙이 된다.</li>
</ul>
<h2 id="타이밍">타이밍</h2>
<ul>
<li>Timing</li>
<li>접속하는 개체 사이의 통신 속도 조정</li>
<li>데이터의 순서를 제어한다.</li>
</ul>
<h2 id="통신-매체">통신 매체</h2>
<ul>
<li>정보통신을 위해서는 정보전달의 매체가 기본이다.</li>
<li>매체 media의 종류와 특성
<img src="https://images.velog.io/images/inah-_-/post/d9133995-cea7-4c91-b6af-3e5f63ad5da0/image.png" alt=""></li>
</ul>
<hr>
<br/>

<h1 id="프로토콜-국제화">프로토콜 국제화</h1>
<h2 id="표준화">표준화</h2>
<ul>
<li>필요성 : 호환 -&gt; 약속 -&gt; 표준</li>
<li>표준의 분류<ul>
<li>지역 : 국제, 국내</li>
<li>임의성 : 강제, 임의, 권고</li>
</ul>
</li>
</ul>
<h2 id="표준화-기구">표준화 기구</h2>
<ul>
<li><p><strong>ISO [ International Organization for Standardization ]</strong>
• 국제 표준화 기구</p>
</li>
<li><p>*<em>IEC [ International Electronical Commission ] *</em>
• 국제 전기 표준 회의
• 전기 기술에 관한 국제 표준과 조정 기구
• ISO의 전기(통신) 부문으로 가입</p>
</li>
<li><p>ITU-T [ International Telecommunications Union 
Telecommunication ] 
• 국제 전기 통신 연합</p>
</li>
<li><p>IEEE [ Institute of Electrical and Electronics Engineers ]
• 전기전자학회(미국</p>
</li>
</ul>
<h2 id="osi-7-layer">OSI 7 Layer</h2>
<h3 id="계층">계층</h3>
<ol>
<li>물리</li>
<li>데이터 링크</li>
<li>네트워크</li>
<li>전송</li>
<li>세션</li>
<li>표현</li>
<li>응용</li>
</ol>
<hr>
<h2 id="tcpip-프로토콜">TCP/IP 프로토콜</h2>
<p>정보통신 프로토콜은 OSI 7 Layer가 국제표준화이다.
사실상 인터넷 사용에 많이 활용되는 것은 TCP/IP로,
컴퓨터 간의 통신을 위해 미국 국방부에서 개발한
통신 프로토콜 TCP (Transmission Control Protocol) 과 IP (Internet Protocol)을 조합한 것. 
TCP/IP는 현재 인터넷에서 사용되는 통신 프로토콜로 통신 프로토콜이
통일됨에 따라 세계 어느 지역의 어떤 기종과도 정보 교환이 가능하다.
거의 모든 운영 체계에서 구현되고 있으므로 널리 보급되어 있다. </p>
<h3 id="계층-1">계층</h3>
<ol>
<li>물리</li>
<li>데이터 링크</li>
<li>네트워크</li>
<li>전송</li>
<li>응용</li>
</ol>
<h3 id="osi-7-layer와-tcpip-상호계층-비교">OSI 7 Layer와 TCP/IP 상호계층 비교</h3>
<p><img src="https://images.velog.io/images/inah-_-/post/71e19d01-8054-4dec-a82e-e3c7e5c8bc7d/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[관계 데이터 연산]]></title>
            <link>https://velog.io/@inah-_-/%EA%B4%80%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%97%B0%EC%82%B0</link>
            <guid>https://velog.io/@inah-_-/%EA%B4%80%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%97%B0%EC%82%B0</guid>
            <pubDate>Fri, 18 Mar 2022 07:57:19 GMT</pubDate>
            <description><![CDATA[<h2 id="관계-데이터-연산">관계 데이터 연산</h2>
<ul>
<li><p>관계 데이터 구조에 적용되는 연산</p>
</li>
<li><p>릴레이션을 피연산자로 사용하여 적용되는 연산</p>
</li>
<li><p>릴레이션의 튜플들을 집합의 원소로 취급하는 집합 연산과 튜플들의 구조를 기반으로 처리하는 관계 연산으로 구분할 수 있다.</p>
<p><img src="https://images.velog.io/images/inah-_-/post/8cfb0c9f-d6c6-48ca-9ead-4278de22f87a/image.png" alt=""></p>
</li>
</ul>
<h2 id="집합-연산">집합 연산</h2>
<h3 id="합집합-union-r-∪-s">합집합 (union) R ∪ S</h3>
<ul>
<li><p>피연산자로 참여한 각각의 릴레이션의 튜플들을 모두 포함하되 중복되는 튜플들은 결과 릴레이션에서 한번만 나타나게 된다.</p>
<h3 id="차집합-difference-r---s">차집합 (difference) R - S</h3>
</li>
<li><p>첫 번째 피연산자 릴레이션에는 존재하지만 두 번째 피연산자 릴레이션에는 존재하지 않는 튜플들로만 구성된 릴레이션이 반환된다.</p>
<h3 id="교집합-intersection-r-∩-s">교집합 (intersection) R ∩ S</h3>
</li>
<li><p>피연산자로 참여한 각각의 릴레이션 모두에 중복되어 나타난 튜플로 구성된 릴레이션이 반환된다.</p>
<h3 id="카티션-프로덕트-cartesian-product-r-x-s">카티션 프로덕트 (cartesian product) R x S</h3>
</li>
<li><p>피연산자로 참여한 두 릴레이션의 모든 튜플들 간의 조합들에 대해 각 튜플들을 병합하여 연산한다.</p>
</li>
<li><p>카티션 프로덕트 연산의 예
<img src="https://images.velog.io/images/inah-_-/post/53a0a17c-0f03-4080-a662-c3747a03a244/image.png" alt=""></p>
</li>
</ul>
 <br/>

<hr>
<h2 id="관계-연산">관계 연산</h2>
<h3 id="프로젝트-project-π-column_list-r">프로젝트 (project) π column_list (R)</h3>
<ul>
<li><p>프로젝트 연산의 결과로는 피연산자로부터 수직적 부분 집합으로 구성된 별도의 릴레이션이 반환된다.</p>
<pre><code class="language-sql">A     B    C
100  Apple  10
200  Grape  20
300  Orange 30
400  Mango  15

// input
π A, C (R)

// output
A     C
100   10
200   20
300   30
400   15
</code></pre>
<br/>

<h3 id="셀렉트-select-δ-condition-r">셀렉트 (select) δ condition (R)</h3>
</li>
<li><p>피연산자 릴레이션에서 특정 조건에 맞는 튜플들의 집합을 구하는 연산으로, 그 결과는 수평적 부분 집합(set)으로 구성된 별도의 릴레이션이다.</p>
</li>
<li><p>셀렉트 연산의 예
R 릴레이션의 C 컬럼 중 15보다 값이 큰 튜플
<img src="https://images.velog.io/images/inah-_-/post/bf95ba77-fe3f-4d19-b3f8-c4a676e51afc/image.png" alt=""></p>
<Br/>

<h3 id="조인-join-r-▷◁-condition-s">조인 (join) R ▷◁ condition S</h3>
</li>
<li><p>두 개의 릴레이션으로부터 상호 관련성을 구하기 위한 연산으로, 프로덕트 연산으로 결합된 결과 릴레이션의 모든 튜플들 중 조건을 만족하는 튜플들로만 구성되어 반환한다.
<img src="https://images.velog.io/images/inah-_-/post/68732680-e745-4ac6-aafc-4556b527ecd9/image.png" alt=""></p>
<h3 id="디비전-division-r÷s">디비전 (division) R÷S</h3>
</li>
<li><p>첫 번째 피연산자 릴레이션을 두 번째 피연산자 릴레이션으로 나누어 새로운 결과 릴레이션을 반환하는 연산이다.</p>
<br/>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[관계 데이터 모델]]></title>
            <link>https://velog.io/@inah-_-/%EA%B4%80%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@inah-_-/%EA%B4%80%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Fri, 18 Mar 2022 06:44:29 GMT</pubDate>
            <description><![CDATA[<h2 id="관계-데이터-모델">관계 데이터 모델</h2>
<h3 id="관계-데이터-모델-주요-용어">관계 데이터 모델 주요 용어</h3>
<ul>
<li>릴레이션(relation) : 테이블(table) 구조</li>
<li>튜플(tuple) : 이름을 갖지 않는 행(row)</li>
<li>속성(attribute) : 이름을 갖는 열(column)</li>
<li>키(key) 속성 : <span style="color:#12B886; font-weight:600">릴레이션을 구성하는 튜플의 속성들 중에 튜플을 유일하게 식별할 수 있는 속성</span></li>
<li>기본 키(primary key) : 키 속성 중에서 튜플을 식별하는 대표적 속성으로 사용자에 의해서 지정된 속성</li>
<li>도메인(domain) : 각각의 속성들이 가질 수 있는 값의 집합, 값의 풀(pool)<blockquote>
<ul>
<li>도메인의 예
성별 : &#39;남&#39;, &#39;여&#39;
요일 : &#39;일&#39;, &#39;월&#39;, &#39;화&#39;, &#39;수&#39;, &#39;목&#39;, &#39;금&#39;, &#39;토&#39;
직급 : &#39;사장&#39;, &#39;이사&#39;, &#39;차장&#39;, &#39;과장&#39;, &#39;대리&#39;</li>
</ul>
</blockquote>
</li>
</ul>
<br/>

<h3 id="스키마schema와-인스턴스instance">스키마(schema)와 인스턴스(instance)</h3>
<ul>
<li>스키마(schema) : 해당 객체의 논리적 구조<span style="color:#12B886; font-weight:600">(속성들이 가지게 될 값의 유형을 정의해 놓은 형태)</span></li>
<li>인스턴스(instance) : 해당 객체의 물리적 구조 <span style="color:#12B886; font-weight:600">(물리적으로 실제 값을 가지고 있는 형태)</span></li>
</ul>
<br/>

<h3 id="릴레이션-스키마와-릴레이션-인스턴스">릴레이션 스키마와 릴레이션 인스턴스</h3>
<p><strong>릴레이션 스키마</strong></p>
<ul>
<li>릴레이션의 논리적 구조 (한 개의 테이블이 가지는 논리적 구조)</li>
<li>데이터베이스 테이블을 설계, 정의하는 경우 사용</li>
<li>릴레이션의 heading</li>
</ul>
<p><strong>릴레이션 인스턴스</strong></p>
<ul>
<li>해당 릴레이션이 특정 시간에 가지고 있는 실제 튜플들의 집합</li>
<li>릴레이션의 body</li>
</ul>
<br/>

<h3 id="키의-종류">키의 종류</h3>
<ul>
<li>후보 키 (Candidate Key) : 유일성과 최소성을 모두 만족하는 속성</li>
<li>기본 키 (Primary Key) : 데이터베이스 설계자에 의해 지정된 하나의 후보키, 빈번한 검색과 의미적으로 중심이 되는 후보 키 NOT NULL</li>
<li>대체 키 (Altername Key) : 기본 키를 제외한 나머지 후보 키들</li>
<li>외래 키 (Foreign Key) : 다른 릴레이션과의 관계 형성을 위해 다른 릴레이션의 기본 키를 해당 릴레이션의 속성으로 사용</li>
</ul>
<br/>

<h3 id="마치며">마치며</h3>
<ol>
<li>관계 데이터 모델의 장점은 개념적으로 단순하여 모델에 대한 이해나 구현이 직관적이고 용이하다. 수학적으로 견고한 이론을 기반으로 구현된 모델로, SQL과 같은 데이터 언어를 사용하여 데이터베이스에 접근 하는 것이 매우 용이하다.</li>
<li>관계 데이터 모델에서 릴레이션이란, 이름을 갖는 &#39;열&#39;인 &#39;속성&#39;들과 이름을 갖지 않는 &#39;행&#39;인 &#39;튜플&#39;들로 이루어진 &#39;테이블&#39;이다.</li>
<li>릴레이션을 구성하는 튜플의 속성들 중 튜플을 유일하게 식별할 수 있는 속성을 &#39;키&#39;라고 하며, 튜플을 식별하는 대표적 속성으로 데이터베이스 설계자나 DBA에 의해 지정된 속성을 &#39;기본 키&#39;라고 한다.</li>
<li>관계 데이터 모델에서 사용될 수 있는 어떤 객체의 논리적 구조를 정의해 놓은 것을 &#39;스키마&#39;라고 하며, 이런 스키마를 기반으로 생성되어 실제 값을 가지고 있는 형태의 물리적 구조를 &#39;인스턴스&#39;라고 한다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[하드웨어의 구성]]></title>
            <link>https://velog.io/@inah-_-/%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4%EC%9D%98-%EA%B5%AC%EC%84%B1</link>
            <guid>https://velog.io/@inah-_-/%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4%EC%9D%98-%EA%B5%AC%EC%84%B1</guid>
            <pubDate>Tue, 15 Mar 2022 13:21:10 GMT</pubDate>
            <description><![CDATA[<h2 id="하드웨어의-5대-장치">하드웨어의 5대 장치</h2>
<hr>
<h3 id="1-cpu중앙-처리-장치">1. CPU(중앙 처리 장치)</h3>
<ul>
<li>명령어를 해석하여 실행하는 장치</li>
<li>인간의 두뇌에 해당된다.</li>
</ul>
<h3 id="2-메인메모리">2. 메인메모리</h3>
<ul>
<li>작업에 필요한 프로그램과 데이터를 저장하는 장소</li>
<li>CPU에 데이터를 넘겨주고 처리한 데이터를 다시 저장한다.</li>
</ul>
<h3 id="3-입력-장치">3. 입력 장치</h3>
<ul>
<li>컴퓨터에 데이터를 전달하는 장치</li>
<li>스마트폰 보급으로 터치스크린과 카메라가 중요한 입력 장치가 된다.</li>
<li>개발 순서 [천공 카드 -&gt; 키보드 -&gt; 마우스]</li>
</ul>
<h3 id="4-출력-장치">4. 출력 장치</h3>
<ul>
<li>작업 결과를 나타내는 장치</li>
<li>최근에는 3D 프린터가 개발됐다.</li>
<li>개발 순서 [진공관 -&gt; 라인 프린터 -&gt; 모니터, 그래픽 카드, 사운드 카드 -&gt; 3D 프린터]</li>
</ul>
<h3 id="5-저장-장치">5. 저장 장치</h3>
<ul>
<li>전원이 꺼진 이후에도 데이터를 보관할 수 있는 장치</li>
<li>보조 저장 장치, 제 2 저장 장치, 저장 장치 등 다양하게 불린다.</li>
<li>개발 순서 [카세트 -&gt; 플로피 디스크 -&gt; 하드디스크 -&gt; SSD, USB, SD]</li>
</ul>
<h3 id="6-메인-보드">6. 메인 보드</h3>
<ul>
<li>CPU와 메모리 등 다양한 컴퓨터 부품을 연결시켜 주는 판</li>
</ul>
<h3 id="7-버스">7. 버스</h3>
<ul>
<li>메인보드 내 고정된 부품들 사이를 연결하는 선의 집합</li>
<li>전기와 데이터의 통로</li>
</ul>
<h3 id="8-포트">8. 포트</h3>
<ul>
<li>메인보드에 각종 부품을 꽂을 수 있는 단자</li>
</ul>
<h3 id="9-폰-노이만-구조von-neumann-architecture">9. 폰 노이만 구조(Von Neumann Architecture)</h3>
<p><strong>폰 노이만 구조의 도마 비유</strong></p>
<ul>
<li>도마(메인메모리)
는 주방장(CPU)이 요리를 하는 핵심적인 작업 공간이고 보관 창고(저장 장치)는 보조적인 공간이다.</li>
<li>주방장(CPU)이 요리를 하려면 보관 창고(저장 장치
)에 있는 재료를 도마(메인메모리)로 가져와야 한다.</li>
<li><span style="color:#12b886; font-weight:800;">저장장치에 있는 프로그램은 메모리로 올라와야만 실행이 가능하다.</span></li>
<li>메인 메모리의 크기는 컴퓨터 속도에 영향을 미친다.</li>
<li>메인 메모리가 필요 없이 커진다고 해도 컴퓨터가 빨라지진 않는다.</li>
</ul>
<h3 id="10-입출력-채널">10. 입출력 채널</h3>
<ul>
<li>저속 주변 장치 : 메인 메모리와 주변 장치 사이에 오고 가는 데이터의 양이 적어 데이터 전송률이 낮은 장치 ex) 프린터, 키보드, 마우스</li>
<li>고속 주변 장치 : 메인 메모리와 주변 장치 사이에 대용량의 데이터가 오고 가는 데이터 전송률이 높은 장치 ex) 그래픽 카드, 하드디스크, USB</li>
</ul>
<h3 id="11-버퍼">11. 버퍼</h3>
<ul>
<li>속도 차이가 나는 두 장치 사이에서 일정 양의 데이터를 모아 옮김으로써 속도 차이를 완화하는 장치이다.</li>
<li>같은 사양의 하드디스크라면 버퍼 용량이 큰 것이 더 빠르다.</li>
</ul>
<p><strong>버퍼의 사용 예</strong></p>
<ul>
<li>동영상 스트리밍
플레이어가 재생하는 도중에 데이터가 도착하지 않으면 동영상이 끊기게 되는데,
이러한 현상을 방지하고자 동양상 데이터의 일정한 양을 버퍼에 넣은 후 실행시킨다.
버퍼에 있는 데이터를 다 쓸 때까지 데이터가 도착하지 않으면 화면이 멈추면서 버퍼링을 다시 한다.</li>
</ul>
<h3 id="12-캐시">12. 캐시</h3>
<ul>
<li>두 장치 간 속도 차이를 완화시켜 주는 것으로, 버퍼의 한 종류이다.</li>
<li>일반 메모리보다 훨씬 빠르며 CPU 내에 있다.</li>
<li>캐시에 미리 가져다 놓으면 CPU가 일을 빨리 할 수 있다.</li>
<li>너무 많은 양의 데이터가 보관되어 있으면 데이터를 찾는 데 시간이 오히려 오래 걸려 <span style="color:#12b886; font-weight:800;">캐시 청소가 필요하다.</span></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터베이스 정의]]></title>
            <link>https://velog.io/@inah-_-/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%A0%95%EC%9D%98</link>
            <guid>https://velog.io/@inah-_-/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%A0%95%EC%9D%98</guid>
            <pubDate>Mon, 14 Mar 2022 12:51:44 GMT</pubDate>
            <description><![CDATA[<h1 id="데이터-모델">데이터 모델</h1>
<h3 id="정보-시스템-분야">정보 시스템 분야</h3>
<blockquote>
<p>데이터 모델이란, 실세계를 표현하는 형식화된 도구이다.</p>
</blockquote>
<h3 id="데이터-모델을-사용하는-목적">데이터 모델을 사용하는 목적</h3>
<p>실세계 대상에서 요구되는 모든 데이터 객체를 정보 시스템에서 처리하기 용이하도록 완벽하고 정확하게 표현하는 것</p>
<h3 id="db-설계-시-데이터-모델-사용에-대한-장점">DB 설계 시 데이터 모델 사용에 대한 장점</h3>
<ul>
<li>실세계의 대상에 대한 이해를 쉽게 할 수 있다.</li>
<li>특정 대상이나 관련성에 대한 부가적인 설명이 필요 없다.</li>
<li>실세계의 대상을 명확히 표현할 수 있다.</li>
<li>다른 사람과 정보를 쉽게 공유할 수 있다.</li>
<li>실세계의 대상을 특정 시스템으로 정확히 사상할 수 있다.</li>
</ul>
<table>
   <thead>
     <tr>
       <th>현실 [객체(Object)]</th>
       <th>개념 [개체 (Entity)]</th>
       <th>컴퓨터 [레코드 타입 (Record type)]</th>
     </tr>
  </thead>
  <tbody>
    <td>자동차</td>
    <td>제조회사 | 제조년도 | 연비 | 구동방식</td>
    <td>Tables : Cars | Birth : INT | Mileage : INT | DrvTy[e : CHAR(32)</td>
  </tbody>
</table>

<br/>

<hr>
<h3 id="데이터-모델의-개념">데이터 모델의 개념</h3>
<blockquote>
<p>데이터베이스 설계에 사용되는 데이터 모델</p>
</blockquote>
<p><strong>1. 개념적 데이터 모델</strong></p>
<ul>
<li>사용하는 데이터베이스 관리 시스템과는 독립적으로,
대상을 사용자 중심의 개념으로 표현하는 과정</li>
</ul>
<p><strong>2. 논리적 데이터 모델</strong></p>
<ul>
<li>개념적 데이터 구조 -&gt; 논리적 데이터 구조로 표현</li>
<li>채택한 데이터베이스 관리 시스템이 사용하는 논리적 모델을 이용하여 표현된 구조이지만, 해당 데이터베이스 관리 시스템의 물리적인 명세가 적용되기 이전의 중간 단계에 해당된다.</li>
</ul>
<p><strong>3. 물리적 데이터 모델</strong></p>
<ul>
<li>논리적 데이터 구조를 데이터베이스 관리 시스템에서 적용 가능한 물리적 데이터 구조로 표현하는데 사용되는 데이터 모델</li>
<li>주로 해당 데이터베이스 관리 시스템에서 제공되는 언어 인터페이스이며 설계 과정의 최종 단계에 해당된다.</li>
<li>논리적 데이터 구조 -&gt; 물리적 데이터 구조로 표현</li>
</ul>
<hr>
<h3 id="마치며">마치며</h3>
<p>실세계의 대상 객체를 표현하기 위한 데이터 모델의 구성요소로는</p>
<ul>
<li>논리적으로 표현된 데이터 구조(structure)</li>
<li>해당 구조에서 허용될 수 있는 연산(operation)</li>
<li>해당 구조와 연산에서 유지되어야 할 제약조건(constraints) 등이 있다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[RDBMS] PostgreSQL]]></title>
            <link>https://velog.io/@inah-_-/Database-PostgreSQL</link>
            <guid>https://velog.io/@inah-_-/Database-PostgreSQL</guid>
            <pubDate>Fri, 08 Oct 2021 08:33:47 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/inah-_-/post/d02bfc82-efc2-4268-9479-f44a8ff0d0f0/image.png" alt=""></p>
<h1 id="🐘-what-is-postgresql">🐘 What is PostgreSQL?</h1>
<p>PostgreSQL은 오픈 소스 객체-관계형 데이터베이스 시스템 (ORDBMS)으로, 다른 관계형 데이터베이스 시스템과 달리 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공함으로써 마치 새로운 하나의 프로그래밍 언어처럼 무한한 기능을 구현할 수 있다.</p>
<h2 id="기능">기능</h2>
<p>관계형 DBMS의 기본적인 기능인 트랜잭션과 ACID(Atomicity, Consistency, Isolation, Durability)를 지원한다.
PostgreSQL은 전부 지원하는 것을 목표로 지속적으로 기능을 추가하고 있다.</p>
<table>
  <tbody>
    <tr><th>PostgreSQL의 특징</th><th>제한 사항</th></tr>
  <tr><td>최대 DB 크기 (Database Size)</td><td>무제한</td></tr>
  <tr><td>최대 테이블 크기 (Table Size)</td><td>32TB</td></tr>
  <tr><td>최대 레코드 크기 (Row Size)</td><td>1.6TB</td></tr>
  <tr><td>최대 컬럼 크기 (Field Size)</td><td>1GB</td></tr>
  <tr><td>테이블당 최대 레코드 개수 (Rows per Table)</td><td>무제한</td></tr>
  <tr><td>테이블당 최대 컬럼 개수 (Columns per Table)</td><td>250 ~ 1600개</td></tr>
  <tr><td>테이블당 최대 인덱스 개수 (Indexes per Table)</td><td>무제한</td></tr>
</tbody></table>


<h2 id="장점">장점</h2>
<ul>
<li>BSD 라이센스로, 소스를 변경해 재배포 하더라도 법적으로 문제가 없다.</li>
<li>오래된 오픈소스로 안정성이 있고 가볍게 돌아간다.</li>
<li>대용량 처리에도 큰 문제가 없다.</li>
<li>무료 SQL이지만 지속적으로 업데이트 되고 있다.</li>
<li>Oracle DB에 버금가는 통계 함수를 제공한다.</li>
</ul>
<h2 id="설치">설치</h2>
<pre><code class="language-js">// MacOS
$ brew install postgresql

// start
pg_ctl -D /usr/local/var/postgres start &amp;&amp; brew services start postgresql

// 실행 확인
postgres -V</code></pre>
<h2 id="설정">설정</h2>
<pre><code class="language-js">// 접속
psql postgres [-U username] [-h host] [-p port] [-d database]

// user 권한 확인
postgres=# \du

// 권한 생성 및 권한 부여
postgres=#  CREATE ROLE [rolename] WITH LOGIN PASSWORD &#39;[password]&#39;;
postgres=#  ALTER ROLE [rolename] CREATEDB;

// 유저 생성
postgres=# createuser [username] --createdb

// 데이터베이스 생성
postgres=# CREATE DATABASE [db name];
postgres=# createdb [db name] [-O ownername];

// 데이터베이스 owner 변경
postgres=#  ALTER DATABASE [db name] OWNER TO [username];
</code></pre>
<h2 id="기본-명령어">기본 명령어</h2>
<table>
  <tbody><tr><th>command</th><th>설명</th></tr>
  <tr><td>\list(or \l)</td><td>전체 DB 인스턴스 목록</td></tr>
  <tr><td>\dt</td><td>접속한 DB의 테이블 목록</td></tr>
  <tr><td>\ds</td><td>Sequence 목록</td></tr>
  <tr><td>\df</td><td>Function 목록</td></tr>
  <tr><td>\dv</td><td>View 목록</td></tr>
  <tr><td>\du</td><td>User 목록</td></tr>
    <tr><td>\timing</td><td>Query 실행 시간</td></tr>
    <tr><td>\q</td><td>psql 종료</td></tr>
</tbody></table>

<h2 id="data-type">Data Type</h2>
<table>
<tbody><tr><th>Name</th><th>Aliases</th><th>설명</th></tr>
<tr><td>Bigint</td><td>int8</td><td>signed 8byte 정수형</td></tr>
<tr><td>Bigserial</td><td>serial8</td><td>자동증가 8byte 정수형</td></tr>
<tr><td>bit[(n)]</td><td></td><td>고정길이 bit string</td></tr>
<tr><td>bit varying[(n)]</td><td>Varbit</td><td>가변길이 bit string</td></tr><tr><td>Boolean</td><td>Bool</td><td>Boolean연산 (true/false)</td></tr>
<tr><td>Box</td><td></td><td>평면 위의 직사각형 상자</td></tr>
<tr><td>Bytea</td><td></td><td>이진 data ("byte array")</td></tr>
<tr><td>character [(n)]</td><td>char[(n)]</td><td>고정길이 character string</td></tr>
<tr><td>character varying [(n)]</td><td>varchar[(n)]</td><td>가변길이 character string</td></tr>
<tr><td>Cidr</td><td></td><td>IPv4 or IPv6 network address</td></tr>
<tr><td>Circle</td><td></td><td>평면 위의 면</td></tr>
<tr><td>Date</td><td></td><td>달력 날짜 (year, month, day)</td></tr>
<tr><td>double precision</td><td>float8</td><td>double precision floating-point number (8bytes)</td></tr>
<tr><td>Inet</td><td></td><td>IPv4, IPv6 host address</td></tr>
<tr><td>Integer</td><td>int, int4</td><td>signed four-byte 정수형</td></tr>
<tr><td>interval [fields] [(p)]</td><td></td><td>time 구간</td></tr>
<tr><td>Json</td><td></td><td>문자 JSON data</td></tr>
<tr><td>Jsonb</td><td></td><td>이진 JSON data, decomposed</td></tr>
<tr><td>Macaddr</td><td></td><td>MAC(Media Access Control) address</td></tr>
<tr><td>Money</td><td></td><td>현금 총액</td></tr>
<tr><td>pg_lsn</td><td></td><td>PostgreSQL Log 번호</td></tr>
<tr><td>Real</td><td>float4</td><td>single precision floating-point number</td></tr>
<tr><td>Smallint</td><td>int2</td><td>signed 2bytes 정수형</td></tr>
<tr><td>Smallserial</td><td>serial2</td><td>자동증가 2bytes 정수형</td></tr>
<tr><td>Serial</td><td>serial4</td><td>자동증가 4bytes 정수형</td></tr>
<tr><td>Text</td><td></td><td>가변길이 character string</td></tr>
<tr><td>time [(p)] [without time zone]</td><td></td><td>time of day(no time zone)</td></tr>
<tr><td>time [(p)] with time zone</td><td>timetz</td><td>time of day, including time zone</td></tr>
<tr><td>timestamp[(p)] [without time zone]</td><td></td><td>날짜와 시간 (no time zone)</td></tr>
<tr><td>timestamp[(p)] with time zone</td><td>timestamptz</td><td>날짜와 시간, including time zone</td></tr>
  <tr><td>Tsquery</td><td></td><td>text 검색 쿼리</td></tr>
  <tr><td>Tsvector</td><td></td><td>text 검색 문서</td></tr>
  <tr><td>Xml</td><td></td><td>XML data</td></tr>
</tbody></table>

<p><br/><br/><br/></p>
<h2 id="referance">Referance</h2>
<p><a href="https://www.postgresql.org/about/">PostgreSQL</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Github] MacOS git push token 403error 해결 방법]]></title>
            <link>https://velog.io/@inah-_-/Github-MacOS-git-push-token-403error-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@inah-_-/Github-MacOS-git-push-token-403error-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Wed, 18 Aug 2021 12:33:45 GMT</pubDate>
            <description><![CDATA[<p>** 해당 글은 MacOS 기반의 해결방법입니다.**</p>
<p>이번에 Github에서 ID/PW기반의 <code>Basic Authentication 인증</code>을 버리고
<code>ID/Personal Access Token</code>방식의 <code>Token Authentacation 인증</code>을 요구한다.</p>
<h3 id="토큰-발급-참고">토큰 발급 참고</h3>
<p>토큰은 발급 시 다시 토큰값을 확인할 수 없다.
복사하여 안전한 곳에 저장해두어야 한다. 꼭!
<a href="https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token">Creating a personal access token</a></p>
<p>오늘 작업 후 git push를 시도했다가 처음보는 에러를 마주했다.
<img src="https://images.velog.io/images/inah-_-/post/afb17092-b19b-4521-8cd0-fc46d713ff01/image.png" alt=""></p>
<h2 id="해결방법">해결방법</h2>
<ol>
<li><p>Mac Spotlight[<code>command</code> + <code>spacebar</code>]후 keychain(키체인 접근)을 찾아서 실행한다.
<img src="https://images.velog.io/images/inah-_-/post/1a2e17d7-ae56-4a7b-8bbc-b685413db61a/image.png" alt=""></p>
</li>
<li><p><code>github</code> 검색 후, &#39;인터넷 암호&#39; 항목 더블 클릭
<img src="https://images.velog.io/images/inah-_-/post/83a4b027-9fcf-4a7d-bc00-58f2282bdb38/image.png" alt=""></p>
</li>
<li><p>암호보기 항목 체크, 위 링크에서 명시한 <code>Access Token</code>으로 변경 후 저장한다.
<img src="https://images.velog.io/images/inah-_-/post/0241fa1b-54f0-4cf1-8a7b-e017b8888dc2/image.png" alt=""></p>
</li>
</ol>
<p>이후 다시 <code>git push</code> 해주면 끝!
<img src="https://images.velog.io/images/inah-_-/post/c0c550ae-116f-48e6-9bc2-9a3bff863cc0/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Javascript] Arrow function(화살표 함수)]]></title>
            <link>https://velog.io/@inah-_-/javascript-Arrow-function%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@inah-_-/javascript-Arrow-function%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98</guid>
            <pubDate>Wed, 18 Aug 2021 12:05:57 GMT</pubDate>
            <description><![CDATA[<h2 id="arrow-function이란">Arrow function이란?</h2>
<p>ES6부터 적용되는 함수로, <code>function</code>이라는 키워드 없이<code>arrow =&gt;</code>를 사용하여 함수를 생성한다.</p>
<pre><code class="language-javascript">// function
var sum = function(x, y) {
  return x + y
}

sum(10, 20); // output 10</code></pre>
<p>중괄호가 없는 <code>arrow function</code>은 <code>return</code> 없이도 함수를 종료시키고 값을 반환한다.
<code>arrow function</code>을 사용하여 위 함수를 아래와 같이 표현할 수 있다.</p>
<pre><code class="language-javascript">
// arrow function
var sum = (x, y) =&gt; x + y;

sum(10, 20); // output 10</code></pre>
<h2 id="arrow-function의-기본문법">Arrow function의 기본문법</h2>
<pre><code class="language-javascript">// 매개변수가 없는 경우
var arrow = () =&gt; console.log(&#39;bar&#39;);
arrow(); // output bar

// 매개변수가 여러개인 경우
// 중괄호 {}가 없는 한줄로 표현될 경우
var arrow = (x, y) =&gt; x + y;
arrow(10, 20); // output 30

// 중괄호 {}를 사용했는데 return이 없는 경우
var arrow = (x, y) =&gt; { x + y };
arrow(10, 20); // undefined

// 중괄호 {}를 사용하고 return이 있는 경우
var arrow = (x, y) =&gt; { return x + y };
arrow(10, 20); // output 30

// 여러줄로 표현될 경우
var arrow = (x, y) =&gt; {
  var c = 40;
  return a + b + c;
}
arrow(10, 20) // output 70</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MongoDB] mongoDB와 mongoose]]></title>
            <link>https://velog.io/@inah-_-/MongoDB-mongoDB%EC%99%80-mongoose</link>
            <guid>https://velog.io/@inah-_-/MongoDB-mongoDB%EC%99%80-mongoose</guid>
            <pubDate>Mon, 09 Aug 2021 12:50:31 GMT</pubDate>
            <description><![CDATA[<h2 id="mongodb와-mongoose의-큰-차이점">mongoDB와 mongoose의 큰 차이점</h2>
<br/>

<h3 id="📝-mongodb-라이브러리">📝 mongoDB 라이브러리</h3>
<ul>
<li>MongoDB의 공식 라이브러리이다.</li>
<li>Mongo 콘솔 클라이언트 명령과 동일하게 조작이 가능하다.</li>
<li>Document에 데이터를 아무거나 넣어도 에러가 발생하지 않는다.</li>
</ul>
<hr>
<h3 id="🐵-mongoose">🐵 mongoose</h3>
<ul>
<li>Node.js와 MongoDB를 연결해주는 ODM이다.<blockquote>
<p>ODM(Object Document Mapping) : 객체와 문서를 1:1로 매칭</p>
</blockquote>
</li>
<li>Document에 데이터를 아무거나 넣을 경우 에러를 발생시키는 스키마를 도입했다.</li>
<li>SQL의 Table과 Schema는 비슷한 개념이다.</li>
<li>promise와 callback 사용이 가능하다.</li>
<li>따라서 mongoose 사용이 API 개발에 더 적합하다.</li>
</ul>
<h2 id="reference">Reference</h2>
<p><a href="https://devlog-h.tistory.com/27">휴몬랩님 블로그 참조</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Javascript] Spread Operator]]></title>
            <link>https://velog.io/@inah-_-/Javascript</link>
            <guid>https://velog.io/@inah-_-/Javascript</guid>
            <pubDate>Fri, 06 Aug 2021 13:01:19 GMT</pubDate>
            <description><![CDATA[<h2 id="--spread-operator란-📟">{ ...} Spread Operator란? 📟</h2>
<p>ES6에서 추가된 새로운 연산자로, 영어 뜻 그대로 spread 즉, 펼치다의 의미를 가지고 있고
객체나 배열을 펼쳐서 나열 할 때에 사용한다.</p>
<h3 id="배열-병합">배열 병합</h3>
<pre><code class="language-javascript">// 배열 병합
const arr = [1, 2, 3, 4, 5]

console.log([...arr, 6])
// Expected Output : [1, 2, 3, 4, 5]</code></pre>
<h3 id="배열-복제">배열 복제</h3>
<pre><code class="language-javascript">// 배열 병합
const arr = [1, 2, 3, 4, 5]
const newArray = [...array];

console.log(newArray)
// Expected Output : [1, 2, 3, 4, 5]</code></pre>
<h3 id="특정-값-변경">특정 값 변경</h3>
<pre><code class="language-javascript=">const objA = [a:1, b:2, c:3, d:4, e:5]
const objB = { ...objA, b:7};

console.log(objB)
// Expected Output : [a:1, b:7, c:3, d:4, e:5]</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Node.js] Javascript ejs 템플릿 엔진]]></title>
            <link>https://velog.io/@inah-_-/Node.js-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-ejs-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%97%94%EC%A7%84</link>
            <guid>https://velog.io/@inah-_-/Node.js-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-ejs-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%97%94%EC%A7%84</guid>
            <pubDate>Fri, 06 Aug 2021 12:37:24 GMT</pubDate>
            <description><![CDATA[<h2 id="💡-ejs란">💡 EJS란?</h2>
<hr>
<p><code>Node.js</code>와 <code>Express</code>에서 많이 사용되고 있는 템플릿 엔진이다.
사용자 수가 많은 <code>Jade</code> 템플릿은 <code>HTML</code>과 작성법이 많이 다른 반면,
<code>ejs</code>는 기존의 <code>HTML</code> 문법에 한해서 <code>&lt;% %&gt;</code>를 사용하여 크게 벗어나지 않아
더욱 쉽게 서버의 데이터를 사용하거나 코드를 실행할 수 있는 장점이있다.</p>
<h3 id="ejs--">EJS &lt;% %&gt;?</h3>
<pre><code class="language-javascripy">// &lt;% js 코드 %&gt; 
&lt;% for(i=0; i &lt; board.length; i++) { %&gt;
// &lt;%= 변수명 %&gt;
&lt;%=i+1 %&gt;
&lt;a href=&#39;/board/&lt;%= board[i]._id%&gt;&#39;&gt;
</code></pre>
<h3 id="include-">Include ?</h3>
<p><code>&lt;%-include(&#39;경로입력&#39;)%&gt;</code>
경로 = <code>header</code> or <code>footer</code> 등
페이지 내 반복되는 header나 footer등의 코드는     <code>include</code>를 사용하면
간편하게 레이아웃 작업을 할 수 있다.</p>
<pre><code class="language-javascript">&lt;header&gt;
    &lt;% include ./header %&gt;
&lt;/header&gt;
 &lt;body&gt;
  &lt;p&gt;Welcome to templating using EJS&lt;/p&gt;
 &lt;/body&gt;

&lt;footer&gt;
  &lt;% include ./footer %&gt;
&lt;/footer&gt;</code></pre>
<br/>

<hr>
<h2 id="routing">routing</h2>
<pre><code class="language-javascript">// 예시
// app.js
var express = require(&#39;express&#39;);
var routes = require(&#39;./routes/index&#39;);
var app = express();

// view engine 템플릿 사용을 명시합니다.
app.set(&#39;views&#39;, path.join(__dirname, &#39;views&#39;));
app.set(&#39;view engine&#39;, &#39;ejs&#39;);

app.use(&#39;/&#39;, routes);
app.use(&#39;/test&#39;, routes);


// routes/index.js
var express = require(&#39;express&#39;);
var router = express.Router();


// /test로 uri가 들어오면 &#39;test&#39;로 render,
// title에 Hello World 출력
router.get(&#39;/test&#39;, function(req, res) {
  res.render(&#39;test&#39;, {
      title: &#39;Hello World!&#39;
  });
});

// 모듈 내보내기
module.exports = router;</code></pre>
<pre><code class="language-HTML">&lt;!-- test.ejs --&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&lt;%= title %&gt;&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;&lt;%= title %&gt;&lt;/h1&gt;
    &lt;p&gt;Welcome to &lt;%= title %&gt;&lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TIL] 8월 5일의 에러]]></title>
            <link>https://velog.io/@inah-_-/TIL-%EC%98%A4%EB%8A%98%EC%9D%98-%EC%97%90%EB%9F%AC</link>
            <guid>https://velog.io/@inah-_-/TIL-%EC%98%A4%EB%8A%98%EC%9D%98-%EC%97%90%EB%9F%AC</guid>
            <pubDate>Thu, 05 Aug 2021 04:05:55 GMT</pubDate>
            <description><![CDATA[<h2 id="mongodb">MongoDB</h2>
<h3 id="connect-error">connect error</h3>
<p>** <code>error:mongoose Server Selection Error</code>**</p>
<blockquote>
<p>시도 1) <code>brew</code> 사용하여 mongodb 패키지 설치
<code>$ brew install mongodb</code>
<img src="https://images.velog.io/images/inah-_-/post/f543604b-7344-4d47-913e-7a459918bd43/image.png" alt="">
mongodb 패키지가 brew/core/repository에 없다고 뜸</p>
</blockquote>
<blockquote>
<p>시도 2) <code>brew</code> 사용하여 mongodb-community 재설치
<code>$ brew install mongodb-community@4.4</code></p>
</blockquote>
<hr>
<h2 id="해결과-이유">해결과 이유</h2>
<p><code>mongoDB</code>가 <code>MacOS</code>의 <code>homebrew-core</code>에서 제거 되었으나 <code>mongodb</code>에서
사용자 정의 <code>homebrewTab</code>을 유지보수 하고있어 이전 <code>brew mongoDB</code>를 제거 후
새 탭에서 다시 설치해야 한다.
<code>$ brew services stop mongodb</code>
<code>$ brew uninstall homebrew/core/mongodb</code>
<code>$ brew tab mongodb/brew</code>
<code>$ brew install mongodb-community</code>
<code>$ brew services start mongodb-community</code></p>
<hr>
<br/>

<h2 id="nodejs-express-ejs-error">Node.js-Express-Ejs Error</h2>
<p><code>Error: Failed to lookup view &quot;index&quot; in views directory</code></p>
<blockquote>
<p>시도 1)</p>
</blockquote>
<pre><code class="language-javascript">// before
app.set(&#39;views&#39;, &#39;./views&#39;); // 수정
app.set(&#39;view engine&#39;, &#39;ejs&#39;);
...
res.render(&#39;index&#39;);
// after
// path 라이브러리 설치하여 경로 지정
app.set(&#39;views&#39;, path.join(__dirname, &#39;views&#39;));</code></pre>
<br/>

<blockquote>
<p>시도 2)
구글링 중 error handler를 추가하여 views에 직접적인 에러를 핸들링하라는 내용을 보게 됨</p>
</blockquote>
<pre><code class="language-javascript">// error handler
app.use(function(err, req, res, next) {
  // 에러 메시지 핸들러
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get(&#39;env&#39;) === &#39;development&#39; ? err : {};
  // error 페이지로 렌더링
  // render the error page
  res.status(err.status || 500);
  res.render(&#39;error&#39;);
});</code></pre>
<p>추가 후 <code>views directory error</code>가 없어졌고 후에 views/ 하위 파일에 에러가 날 경우에만 에러가 뜨게 됐음</p>
<p><br/><br/></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Database] What is MongoDB?]]></title>
            <link>https://velog.io/@inah-_-/Database-What-is-MongoDB</link>
            <guid>https://velog.io/@inah-_-/Database-What-is-MongoDB</guid>
            <pubDate>Mon, 07 Jun 2021 10:10:47 GMT</pubDate>
            <description><![CDATA[<h1 id="🌝-mongodb란">🌝 MongoDB란?</h1>
<p>무한에 가까운 확장성을 제공하는 <code>NoSQL Database</code>로,
<code>RDBMS</code>와는 다르게 테이블 스키마가 유동적이기 때문에
다양한 형태들의 데이터를 유연하게 처리할 수 있다.
하지만 분산형 구조이기 때문에 분산 시스템의 특징을 반영한다.</p>
<p>MongoDB는 문서지향 데이터베이스이다.
객체지향 프로그래밍과 잘 맞고 <code>JSON</code>을 사용할 때 아주 유용하다.
따라서 자바스크립트를 기반으로 하는 Node.js와 호환이 좋아
Node.js에서 가장 많이 사용되는 데이터베이스이다.</p>
<h2 id="mongodb의-특징">MongoDB의 특징</h2>
<ul>
<li>불필요한 Join 최소화</li>
<li>유연성있는 서버 구조</li>
<li>관리의 편의성</li>
<li>필드를 추가하거나 제거하는 것이 매우 쉬움</li>
<li>비정형 데이터 구조로 설계비용 감소</li>
<li>인덱싱 제공</li>
</ul>
<br/>

<h2 id="sql과-mongodb-비교">SQL과 MongoDB 비교</h2>
<table class="table table-bordered"><tbody><tr><td style="text-align: center;"><span style="color: rgb(57, 132, 198); font-weight: bold;">MySQL 용어</span></td><td style="text-align: center;"><span style="color: rgb(57, 132, 198); font-weight: bold;">MongoDB 용어/개념</span></td></tr><tr><td style="text-align: center;">database</td><td style="text-align: center;">database</td></tr><tr><td style="text-align: center;">table</td><td style="text-align: center;">collection</td></tr><tr><td style="text-align: center;">index</td><td style="text-align: center;">index</td></tr><tr><td style="text-align: center;">row</td><td style="text-align: center;">JSON document</td></tr><tr><td style="text-align: center;">column</td><td style="text-align: center;">JSON field</td></tr><tr><td style="text-align: center;">join</td><td style="text-align: center;">embedding and linking</td></tr><tr><td style="text-align: center;">primary key</td><td style="text-align: center;">_id field</td></tr><tr><td style="text-align: center;">group by</td><td style="text-align: center;">aggregation</td></tr></tbody></table>
<br/>
<table class="table table-bordered" style="text-align: center;"><tbody><tr><td style="text-align: center;"><span style="color: rgb(57, 132, 198); font-weight: bold;">SQL 구문</span></td><td style="text-align: center;"><span style="color: rgb(57, 132, 198); font-weight: bold;">MongoDB 구문</span></td></tr><tr><td style="text-align: center;">CREATE TABLE USERS(a Number, b Number)</td><td style="text-align: center;">db.createCollection("mycoll")</td></tr><tr><td style="text-align: center;">INSERT INTO USERS VALUES(3, 5)</td><td style="text-align: center;">db.users.insert({a:3, b:5})</td></tr><tr><td style="text-align: center;">SELECT * FROM users</td><td style="text-align: center;">db.users.find()</td></tr><tr><td style="text-align: center;">SELECT a,b FROM users WHERE age=20</td><td style="text-align: center;">db.users.find({age:20}, {a:1, b:1})</td></tr><tr><td style="text-align: center;">SELECT *FROM users WHERE age=20 ORDER BY name</td><td style="text-align: center;">db.users.find({age:20}).sort({name:1})</td></tr></tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[NoSQL vs RDBMS]]></title>
            <link>https://velog.io/@inah-_-/Database-NoSQL-vs-MySQL</link>
            <guid>https://velog.io/@inah-_-/Database-NoSQL-vs-MySQL</guid>
            <pubDate>Mon, 07 Jun 2021 09:40:55 GMT</pubDate>
            <description><![CDATA[<h2 id="span-style--color12b886rdbms와-nosql의-차이span"><span style = "color:#12b886">RDBMS와 NoSQL의 차이</span></h2>
<blockquote>
<h3 id="비관계형-타입-데이터-베이스란">비관계형 타입 데이터 베이스란,</h3>
<p>관계형 데이터베이스는 데이터들을 저장하기 전에 어디에 <br/>어떻게 저장할 것인지를 정의하는 반면
비관계형 데이터베이스는 데이터들을 저장하기 전에 정의 할 필요가 없다.
MongoDB, Redis, Cassandra 등이 가장 대표적인 NoSQL 데이터 베이스이다.</p>
</blockquote>
<br/>

<h2 id="➿-sqlrdbms">➿ SQL(RDBMS)</h2>
<ul>
<li><strong>장점</strong><ul>
<li>관계형 데이터베이스는 데이터를 더 효율적으로 그리고 체계적으로 저장할 수 있고 관리 할 수 있다.</li>
<li>미리 저장하는 데이터들의 구조(테이블 스키마)를 정의 함으로 데이터의 완전성이 보장할 수 있다.</li>
<li>트랜잭션(transaction)</li>
<li>정형화된 데이터들 그리고 데이터의 완전성이 중요한 데이터들을 저장하는데 유리하다.</li>
<li>ex) 전자상거래 정보. 은행 계좌 정보, 거래 정보 등등.</li>
</ul>
</li>
<li><strong>단점</strong><ul>
<li>테이블을 미리 정의해야 하므로 테이블 구조 변화 등에 덜 유연한다.</li>
<li>확장성이 쉽지 않다.</li>
<li>테이블 구조가 미리 정의 되어 있어 단순히 서버를 늘리는것 만으로 확장하기가 쉽지 않고 서버의 성능 자체도 높여야 한다.</li>
<li>서버를 늘려서 분산 저장 하는것도 쉽지 않다.</li>
<li>Scale up (서버의 성능을 높이는것)으로 확장성이 됨.</li>
</ul>
</li>
</ul>
<br/>


<h3 id="➰-nosql비관계-데이터베이스">➰ NoSQL(비관계 데이터베이스)</h3>
<ul>
<li><strong>장점</strong><ul>
<li>테이터 구조를 미리 정의하지 않아도 되므로 저장하는 데이터의 구조 변화에 유연하다.</li>
<li>확장하기가 비교적 쉽다. 그냥 서버 수를 늘리면 됨(scale out)</li>
<li>확장하기가 쉽고 테이터의 구조도 유연하다 보니 방대한 양의 데이터를 저장하는데 유리하다.</li>
<li>주로 비정형화 데이터 그리고 완전성이 상대적으로 덜 유리한 데이터를 저장하는데 유리하다.</li>
<li>ex) 로그 데이터</li>
</ul>
</li>
<li><strong>단점</strong><ul>
<li>데이터의 완전성이 덜 보장된다.</li>
<li>트랜잭션이 안되거나 비교적 불안정하다.</li>
</ul>
</li>
</ul>
<br/>]]></description>
        </item>
        <item>
            <title><![CDATA[What is node.js?]]></title>
            <link>https://velog.io/@inah-_-/What-is-node.js</link>
            <guid>https://velog.io/@inah-_-/What-is-node.js</guid>
            <pubDate>Mon, 07 Jun 2021 07:28:00 GMT</pubDate>
            <description><![CDATA[<h1 id="☘️-nodejs란">☘️ Node.js란?</h1>
<p><code>Node.js</code>는 웹서버가 아니다. 간단하게 말하자면,</p>
<blockquote>
<p> <strong><code>비동기(Asynchronous)</code> <code>이벤트-기반(event-driven)</code> <code>JavaScript 런타임 환경</code></strong>이다.</p>
</blockquote>
<hr>
<h2 id="비동기asynchronous">비동기(Asynchronous)</h2>
<p>프로그램의 다른 기능 또는 함수들이 서로 방해(Blocking)하지 않고 동시에
처리되는 것을 말한다.
예를 들어 &#39;나&#39;라는 객체가 고양이 밥과 물을 채워준다고 할 때,</p>
<h4 id="동기적으로-처리-한다면">동기적으로 처리 한다면</h4>
<ul>
<li>밥을 채워주고</li>
<li>밥을 다 채워준 후 물을 채워준다.</li>
</ul>
<h4 id="이-작업을-비동기로-처리하면">이 작업을 비동기로 처리하면</h4>
<ul>
<li>밥을 채우면서 물도 같이 채워준다.</li>
</ul>
<p>물을 주기위해 밥을 채울 때 까지 기다리지 않아도 된다는 의미이다.</p>
<br/>

<h2 id="비동기-이벤트-기반event-driven">비동기 이벤트-기반(Event-Driven)</h2>
<p><code>node.js</code> 환경에서 이벤트는 하나의 요청과 같다.
여기서의 요청은 <code>HTTP Request</code>와 같다고 볼 수 있다.
즉, node 입장에서 이벤트는 Front-end(클라이언트)에서 받는 요청이다.</p>
<blockquote>
<p>node가 비동기적으로 이벤트를 처리한다는 것은 앞선 <strong>클라이언트의 요청이
끝나기 전에 다음 클라이언트의 요청을 받을 수 있다는 의미</strong>이다.</p>
</blockquote>
<h2 id="싱글-스레드single-thread">싱글 스레드(Single-Thread)</h2>
<img src="https://csharpcorner.azureedge.net/article/node-js-event-loop/Images/1.png" alt="node.js_img">
<span style="font-size:13px;">출처 : https://www.c-sharpcorner.com/</span>

<p>클라이언트(user)가 앱에 접속할 때, 권한에 따라 인증을 받아야 한다.
인증을 할 때에 데이터 베이스에 저장되어 있는 유저의 정보를 조회 해야하고,
이 클라이언트(user)가 올린 게시물을 조회해야 한다고 가정 했을 때,
이 유저의 정보, 게시글에 담긴 사진, 댓글 정보 등 여러개의 게시물을 조회해야 한다.
이것을 <code>Heavy Load</code>라고 한다. <strong>node는 이렇게 컴퓨터의 자원이 많이 들고
시간이 오래 걸리는 일을 <code>Internal C++ Thread Pool</code>에서 처리</strong>한다.</p>
<p>따라서 node의 <code>Single-Thread</code>는 여러 요청을 한 시점에 처리할 수 있는 것이다.</p>
<br/>

<h2 id="javascript-런타임-환경-chrome-v8-엔진">JavaScript 런타임 환경 (Chrome V8 엔진)</h2>
<blockquote>
<p><strong>JavaScript 런타임 환경</strong> <br/> JavaScript로 짜여진 소스코드를 CPU가 이해할 수 있는 <code>bytecode</code>로<br/> 변환시키고 프로그램의 메모리를 관리하는 시스템이다.</p>
</blockquote>
<p>이런 환경을 가능하게 해주는 것이 Chrome V8 엔진이다.
이 Chrome V8 엔진은 google의 Chrome Web Browser에서 작동하는 엔진으로,
이 엔진이 <strong>브라우저 없이 작동할 수 있도록 만든 환경이 <code>node</code></strong>이다.</p>
<br/>

<h2 id="정리">정리</h2>
<ul>
<li>비동기 : 기다리지 않고 이벤트 처리</li>
<li>이벤트-기반 : 싱글-스레드</li>
<li>Javascript 런타임 환경 : C++ Chrome V8 엔진</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] JOIN 사용법]]></title>
            <link>https://velog.io/@inah-_-/MySQL-JOIN-%EC%82%AC%EC%9A%A9%EB%B2%95</link>
            <guid>https://velog.io/@inah-_-/MySQL-JOIN-%EC%82%AC%EC%9A%A9%EB%B2%95</guid>
            <pubDate>Sun, 02 May 2021 11:57:06 GMT</pubDate>
            <description><![CDATA[<h1 id="📚-join이란">📚 JOIN이란</h1>
<p>데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 연관관계가 있는
결과값을 조회할 때 사용되는데, 보통 <code>SELECT</code>문과 함께 사용된다.
<code>JOIN</code>의 종류 = <code>INNER JOIN</code> <code>LEFT JOIN</code> <code>RIGHT JOIN</code> <code>PULL JOIN</code></p>
<p><img src="https://images.velog.io/images/inah-_-/post/acce442d-ef12-42ad-b1a0-c1c352409738/SQL_JOIN.png" alt=""></p>
<hr>
<h2 id="💡-inner-join">💡 INNER JOIN</h2>
<p><code>ON</code> 절과 함께 사용되며, <code>ON</code>의 조건을 만족하는 데이터만 가져온다.
표준 SQL과는 달리 MySQL에서는 <code>JOIN</code>, <code>INNER JOIN</code>, <code>CROSS JOIN</code>이 모두 같은 의미로 사용된다.</p>
<blockquote>
<p><strong>INNER JOIN 문법 예시</strong></p>
</blockquote>
<pre><code class="language-python">SELECT *
FROM A_TABLE
INNER JOIN B_TABLE
ON 조건
WHERE 조건</code></pre>
<br/>

<h2 id="💡-left-join">💡 LEFT JOIN</h2>
<p>첫 번째 테이블을 기준으로 두 번째 테이블을 조합한다.
<code>ON</code> 의 조건을 만족하지 않는 경우에는 첫 번째 테이블의 필드 값은 그대로 가져오고
두 번째 테이블의 필드 값은 모두 <code>NULL</code>로 표시된다.</p>
<blockquote>
<p><strong>LEFT JOIN 문법 예시</strong></p>
</blockquote>
<pre><code class="language-python">SELECT *
FROM A_TABLE
LEFT JOIN 두번째테이블이름
ON 조건
WHERE 조건</code></pre>
<br/>

<h2 id="💡-right-join">💡 RIGHT JOIN</h2>
<p><code>LEFT JOIN</code>과 반대로 두 번째 테이블을 기준으로 첫 번째 테이블을 조합한다.
<code>ON</code> 의 조건을 만족하지 않는 경우에는 두 번째 테이블의 필드 값은 그대로 가져오고
첫 번째 테이블의 필드 값은 모두 <code>NULL</code>로 표시된다.</p>
<blockquote>
<p><strong>LEFT JOIN 문법 예시</strong></p>
</blockquote>
<pre><code class="language-python">SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE
ON 조건
WHERE 조건</code></pre>
<br/>

<h2 id="💡-full-join">💡 FULL JOIN</h2>
<p>MySQL에서는 <code>FULL JOIN</code>을 지원하지 않는다.
<code>LEFT JOIN</code>, <code>RIGHT JOIN</code>을 함께 사용하여 같은 결과를 도출할 수는 있다.</p>
<blockquote>
<p><strong><del>FUlL JOIN</del> LEFT JOIN + RIGHT JOIN 문법 예시</strong></p>
</blockquote>
<pre><code class="language-python">SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE
ON 조건
UNION
SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE
ON 조건</code></pre>
<br/>


<h3 id="✅-union이란">✅ UNION이란?</h3>
<p>중복되지 않은 유일한 값을 추출하는 경우 or 중복되는 모든 값까지 추출하는 경우에 쓰인다.</p>
<ul>
<li><strong>UNION</strong>
중복되지 않은 유일한 값을 추출<pre><code class="language-python">SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE
</code></pre>
</li>
</ul>
<p>UNION</p>
<p>SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE</p>
<pre><code>---

- **UNION ALL**
중복되는 모든 값 추출
``` python
SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE

UNION ALL

SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE</code></pre><p><br/><br/></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[스크립트와 프로그램의 차이]]></title>
            <link>https://velog.io/@inah-_-/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%99%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@inah-_-/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%99%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Wed, 28 Apr 2021 12:58:32 GMT</pubDate>
            <description><![CDATA[<h2 id="스크립트">스크립트</h2>
<p>스크립트는 수행을 위한 호스팅 애플리케이션(Hosting Application)이 필요하며,
단독으로 수행될 수 없고 프로그램과 달리 해석(Interpret)되는 것이다.</p>
<h2 id="프로그램">프로그램</h2>
<p>컴파일(compile)하는 것으로, C++나 C#과 같은 프로그래밍 언어로
작성된 프로그램은 다른 애플리케이션과 완전히 독립적으로 수행된다.
이러한 프로그램은 컴파일되어 기계어 멍령어들의 집합으로 만들어지고,
그런 다음 원할 때마다 단독으로 수행될 수 있다.</p>
]]></description>
        </item>
    </channel>
</rss>