<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>jace_eo.log</title>
        <link>https://velog.io/</link>
        <description>오늘한줄.</description>
        <lastBuildDate>Tue, 31 Jan 2023 00:29:39 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>jace_eo.log</title>
            <url>https://velog.velcdn.com/images/jace_eo/profile/1727f408-ba68-40f3-9e13-3bc3e0e258e1/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. jace_eo.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jace_eo" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[3-Way Handshake와 4-Way Handshake]]></title>
            <link>https://velog.io/@jace_eo/3-Way-Handshake%EC%99%80-4-Way-Handshake</link>
            <guid>https://velog.io/@jace_eo/3-Way-Handshake%EC%99%80-4-Way-Handshake</guid>
            <pubDate>Tue, 31 Jan 2023 00:29:39 GMT</pubDate>
            <description><![CDATA[<h2 id="3-way-handshake와-4-way-handshake">3-Way Handshake와 4-Way Handshake</h2>
<p>3-Way Handshake 는 TCP의 접속,4-Way Handshake는 TCP의 접속 해제 과정</p>
<h2 id="3-way-handshake">3-Way Handshake</h2>
<p>TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish) 하는 과정</p>
<h3 id="step-1-syn">Step 1 (SYN)</h3>
<p>클라이언트는 서버와 커넥션을 연결하기 위해 SYN을 보낸다. (seq : x)</p>
<p>송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.</p>
<h3 id="step-2-syn--ack">Step 2 (SYN + ACK)</h3>
<p>서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄 (seq : y, ACK : x + 1)</p>
<p>접속요청을 받은 Q가 요청을 수락했으며, 접속 요청 프로세스인 P도 포트를 열어달라는 메세지를 전송 (SYN-ACK signal bits set)
ACK Number필드를 Sequence Number + 1 로 지정하고 SYN과 ACK 플래그 비트를 1로 설정한 새그먼트 전송 (Seq=y, Ack=x+1, SYN, ACK)</p>
<h3 id="step-3-ack">Step 3 (ACK)</h3>
<p>클라이언트는 서버의 응답은 ACK(x+1)와 SYN(y) 패킷을 받고, ACK(y+1)를 서버로 보냄</p>
<p>마지막으로 접속 요청 프로세스 P가 수락 확인을 보내 연결을 맺음 (ACK)
이때, 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다.</p>
<h2 id="4-way-handshake">4-Way Handshake</h2>
<p>4-Way Handshake은 연결을 해제 (Connecntion Termination)하는 과정</p>
<h3 id="step1-client-→-server--finack">STEP1 (Client → Server : FIN(+ACK)</h3>
<p>서버와 클라이언트가 연결된 상태에서 클라이언트가 close()를 호출하여 접속을 끊는다.(으려한다.)
이때, 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.
이때 FIN 패킷에는 실질적으로 ACK도 포함되어있다.</p>
<h3 id="step2-server-→-client--ack">STEP2 (Server → Client : ACK)</h3>
<p>서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보내고 자신의 통신이 끝날때까지 기다린다. (이상태가 TIME_WAIT 상태)
Server(수신자)는 ACK Number 필드를 (Sequence Number + 1)로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송한다.
서버는 클라이언트에게 응답을 보내고 CLOSE_WAIT 상태에 들어갑니다. 그리고아직 남은 데이터가 있다면 마저 전송을 마친 후에 close( )를 호출
클라이언트에서는 서버에서 ACK를 받은 후에 서버가 남은 데이터 처리를 끝내고 FIN 패킷을 보낼 때까지 기다리게 됩니다. (FIN_WAIT_2)</p>
<h3 id="step3-server-→-client--fin">STEP3 (Server → Client : FIN)</h3>
<p>데이터를 모두 보냈다면, 서버는 연결이 종료에 합의 한다는 의미로 FIN 패킷을 클라이언트에게 보낸 후에, 승인 번호를 보내줄 때까지 기다니는 LAST_ACK 상태로 들어간다.</p>
<h3 id="step4-client-→-server--ack">STEP4 (Client → Server : ACK)</h3>
<p>클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다.
아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다. (실질적인 종료과정 CLOSED에 들어가게 된다.)
이때 TIME_WAIT 상태는 의도치 않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지
만약 에러로 인해 종료가 지연되다가 타임이 초과되면 CLOSED로 들어갑니다.</p>
<p>서버는 ACK를 받은 이후 소켓을 닫는다 (Closed)</p>
<p>TIME_WAIT 시간이 끝나면 클라이언트도 닫는다 (Closed)</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake">https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake</a></p>
<blockquote>
<p>신은 용기있는자를 결코 버리지 않는다 -켄러</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터베이스 정규화 ]]></title>
            <link>https://velog.io/@jace_eo/%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/@jace_eo/%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>Sun, 29 Jan 2023 23:42:06 GMT</pubDate>
            <description><![CDATA[<h2 id="정규화">정규화</h2>
<p>관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다.</p>
<h2 id="정규화-이점">정규화 이점</h2>
<ul>
<li>데이터베이스 크기 감소</li>
<li>쿼리 단순화</li>
<li>유지 보수</li>
<li>성능 향상</li>
</ul>
<h2 id="정규화-작동-방식">정규화 작동 방식</h2>
<h3 id="제1정규형1nf">제1정규형(1NF)</h3>
<p>첫 번째 일반 형식은 데이터베이스의 각 필드에 하나의 값만 저장해야 하고 하나의 데이터베이스에 유사하게 정보를 저장하는 두 개의 필드가 있어서는 안 된다는 것을 나타낸다. 예를 들어 더 명확해야한다. 교과목과 이를 가르치는 교수에 대한 정보를 저장하는 데이터베이스</p>
<h3 id="제2정규형2nf">제2정규형(2NF)</h3>
<p>두 번째 정규 형식은 모든 필드가 기본 키에 대해 알려주는 정보를 저장하도록 하여 중복성을 줄이는 것을 목표.</p>
<h3 id="제3정규형3nf">제3정규형(3NF)</h3>
<p>데이터베이스는 이행 종속성이 없을 때 제3정규형. 전이 종속성이란? 데이터베이스의 열 B가 기본 키에 따라 달라지는 열 A에 종속되면 전이 종속성이 있다. 세 번째 일반 형식에 따라 데이터베이스를 정규화하려면 기본 키에 직접 의존하지 않는 열 B를 제거하고 해당 정보를 자체 기본 키가 있는 두 번째 데이터베이스에 저장.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://ko.wikipedia.org/wiki/%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">https://ko.wikipedia.org/wiki/%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</a>
<a href="https://appmaster.io/ko/blog/deiteo-jeonggyuhwaran-mueosinga">https://appmaster.io/ko/blog/deiteo-jeonggyuhwaran-mueosinga</a></p>
<blockquote>
<p>먼저핀 꽃은 먼저진다 남보다 먼저 공을 세우려고 조급히 서둘것이 아니다 – 채근담</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[서포트 벡터 머신]]></title>
            <link>https://velog.io/@jace_eo/%EC%84%9C%ED%8F%AC%ED%8A%B8-%EB%B2%A1%ED%84%B0-%EB%A8%B8%EC%8B%A0</link>
            <guid>https://velog.io/@jace_eo/%EC%84%9C%ED%8F%AC%ED%8A%B8-%EB%B2%A1%ED%84%B0-%EB%A8%B8%EC%8B%A0</guid>
            <pubDate>Sun, 29 Jan 2023 11:09:49 GMT</pubDate>
            <description><![CDATA[<h2 id="서포트-벡터-머신">서포트 벡터 머신</h2>
<p>머신 러닝의 분야 중 하나로 패턴 인식, 자료 분석을 위한 지도 학습 모델이며, 주로 분류와 회귀 분석을 위해 사용한다. </p>
<p>서포트 벡터 머신(이하 SVM)은 결정 경계(Decision Boundary), 즉 분류를 위한 기준 선을 정의하는 모델이다. 그래서 분류되지 않은 새로운 점이 나타나면 경계의 어느 쪽에 속하는지 확인해서 분류 과제를 수행할 수 있게 된다.</p>
<p>SVM은 분류 알고리즘 중에 하나로 분류률이 좋은 알고리즘이다. 일반적으로 분류 알고리즘이라고 하면 Decision Tree, 인공신경망 등의 알고리즘이 존재하는데, SVM은 이 둘에 비해서 데이터, 특히 이진 데이터(binary data)를 분류(classification)하는 데 더 나은 성능을 보인다. 일반적으로 선형, 비선형 알고리즘 두 가지 종류가 존재한다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://ko.wikipedia.org/wiki/%EC%84%9C%ED%8F%AC%ED%8A%B8_%EB%B2%A1%ED%84%B0_%EB%A8%B8%EC%8B%A0">https://ko.wikipedia.org/wiki/%EC%84%9C%ED%8F%AC%ED%8A%B8_%EB%B2%A1%ED%84%B0_%EB%A8%B8%EC%8B%A0</a>
<a href="https://hleecaster.com/ml-svm-concept/">https://hleecaster.com/ml-svm-concept/</a>
<a href="https://namu.wiki/w/%EC%84%9C%ED%8F%AC%ED%8A%B8%20%EB%B2%A1%ED%84%B0%20%EB%A8%B8%EC%8B%A0">https://namu.wiki/w/%EC%84%9C%ED%8F%AC%ED%8A%B8%20%EB%B2%A1%ED%84%B0%20%EB%A8%B8%EC%8B%A0</a></p>
<blockquote>
<p>산다는것 그것은 치열한 전투이다. -로망로랑</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[페이지 교체 알고리즘]]></title>
            <link>https://velog.io/@jace_eo/%ED%8E%98%EC%9D%B4%EC%A7%80-%EA%B5%90%EC%B2%B4-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@jace_eo/%ED%8E%98%EC%9D%B4%EC%A7%80-%EA%B5%90%EC%B2%B4-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Wed, 25 Jan 2023 23:49:13 GMT</pubDate>
            <description><![CDATA[<h2 id="페이지-교체-알고리즘">페이지 교체 알고리즘</h2>
<p>페이징 기법으로 메모리를 관리하는 운영체제에서 필요한 페이지가 주기억장치에 적재되지 않았을 시(페이지 부재) 어떤 페이지 프레임을 선택하여 교체할 것인지 결정하는 방법을 페이지 교체 알고리즘이라고 한다.</p>
<p>프레임: 물리 메모리를 일정한 크기로 나눈 블록
페이지: 가상 메모리를 일정한 크기로 나눈 블록</p>
<h2 id="페이지-교체-알고리즘의-종류">페이지 교체 알고리즘의 종류</h2>
<h3 id="fifofirst-in-first-out">FIFO(first in first out)</h3>
<p>가장 간단한 알고리즘으로, 메모리에 올라온 지 가장 오래된 페이지를 교체한다. 이 알고리즘을 수행하기 위해서 각 페이지가 올라온 시간을 페이지에 기록하거나, 페이지가 올라온 순서를 큐(Queue)에 저장하는 방식</p>
<h3 id="optoptimal---앞으로-가장-오랫동안-사용되지-않을-페이지-교체">OPT(Optimal) - 앞으로 가장 오랫동안 사용되지 않을 페이지 교체</h3>
<p>최적 알고리즘은 수행하기 전에 선행되어야 할 전제조건이 있다. 프로세스가 앞으로 사용할 페이지를 미리 알아야 한다는 것이다. 이 전제 조건이 실제 활용에서는 알 방법이 없기 때문에 최적 알고리즘은 구현이 불가능한 알고리즘. 모든 페이지 교체 알고리즘 중 페이지 교체 수가 적다.</p>
<h3 id="lru---least-recently-used--가장-오랫동안-사용되지-않은-페이지-교체">LRU - Least Recently Used : 가장 오랫동안 사용되지 않은 페이지 교체</h3>
<p>가장 오래 사용되지 않은 페이지를 교체하는 알고리즘이다.</p>
<p>최적 알고리즘은 실제 구현이 불가능하므로, 최적 알고리즘의 방식과 비슷한 효과를 낼 수 있는 방법을 사용한 것이 LRU 알고리즘이다.</p>
<p>최적 알고리즘은 페이지가 사용될 시간을 미리 알고 있다. 미리 아는 것이 불가능하다면, 과거의 데이터를 바탕으로 페이지가 사용될 시간을 예측하여 교체하는 것은 가능하다. 예측 방법으로 가장 오랜 기간 사용되지 않은(least recently used) 페이지를 교체하는 방식</p>
<h3 id="lfu---least-frequently-used--참조-횟수가-가장-작은-페이지-교체">LFU - Least Frequently Used : 참조 횟수가 가장 작은 페이지 교체</h3>
<p>참조 횟수가 가장 작은 페이지를 교체하는 알고리즘이다. 만약 교체 대상인 페이지가 여러 개 일 경우, LRU 알고 리즘을 따라 가장 오래 사용되지 않은 페이지로 교체</p>
<h3 id="mfu---most-frequently-used--참조-횟수가-가장-많은-페이지-교체">MFU - Most Frequently used : 참조 횟수가 가장 많은 페이지 교체</h3>
<p>LFU 알고리즘과 반대로, 참조 횟수가 가장 많은 페이지를 교체하는 알고리즘이다. 참조 횟수가 적은 페이지가 최 근에 사용된 것이기 때문에 앞으로 사용될 가능성이 높다는 판단</p>
<p>LFU와 MFU는 실제 사용에 잘 쓰이지 않는다.
구현에 비용이 많이 들고, LRU보다 제대로 구현이 안되기 때문이다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://velog.io/@hkh1213/%ED%8E%98%EC%9D%B4%EC%A7%80-%EA%B5%90%EC%B2%B4-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Page-Replacement-Algorithm">https://velog.io/@hkh1213/%ED%8E%98%EC%9D%B4%EC%A7%80-%EA%B5%90%EC%B2%B4-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Page-Replacement-Algorithm</a>
<a href="https://medium.com/pocs/%ED%8E%98%EC%9D%B4%EC%A7%80-%EA%B5%90%EC%B2%B4-page-replacement-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-650d58ae266b">https://medium.com/pocs/%ED%8E%98%EC%9D%B4%EC%A7%80-%EA%B5%90%EC%B2%B4-page-replacement-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-650d58ae266b</a></p>
<blockquote>
<p>사람이 여행을 하는 것은 도착하기 위해서가 아니라 여행하기 위해서이다. -괴테</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTTP 문제점]]></title>
            <link>https://velog.io/@jace_eo/HTTP-%EB%AC%B8%EC%A0%9C%EC%A0%90</link>
            <guid>https://velog.io/@jace_eo/HTTP-%EB%AC%B8%EC%A0%9C%EC%A0%90</guid>
            <pubDate>Wed, 25 Jan 2023 00:07:08 GMT</pubDate>
            <description><![CDATA[<h2 id="http---hypertext-transfer-protocol">HTTP - HyperText Transfer Protocol</h2>
<ul>
<li>웹 서버와 웹 브라우저가 통신하기 위해 사용되는 규약을 의미한다.</li>
<li>HTTP는 정보를 텍스트 기반의 평문으로 주고 받기 때문에 네트워크에서 정보를 탈취/변조 할 수 있는 보안적 위험이 있다.</li>
</ul>
<h3 id="문제점">문제점</h3>
<ul>
<li>HTTP 는 평문 통신이기 때문에 도청이 가능하다.
  해결 방법 : 암호화</li>
<li>통신 상대를 확인하지 않기 때문에 위장이 가능하다.
  해결 방법 : 암호화</li>
<li>완전성을 증명할 수 없기 때문에 변조가 가능하다.
  해결 방법 : 인증</li>
</ul>
<h2 id="https---hypertext-transfer-protocol--secure-socket-layer">HTTPS - HyperText Transfer Protocol + Secure Socket Layer</h2>
<p>기본적인 사항은 HTTP와 거의 동일하지만, HTTP 메세지에 포함되는 콘텐츠 정보에 보안요소(암호화)가 추가되는 것이 가장 큰 차이점이다.</p>
<p><img src="https://velog.velcdn.com/images/jace_eo/post/5f79ebb4-bad6-4cf8-9d37-9852c7715c51/image.png" alt="">
HTTPS는 SSL(Secure Socket Layer) or TLS(Transport Layer Security)와 같은 프로토콜을 사용하여 공개키/개인키 기반으로 데이터를 암호화하고 있다. 데이터는 암호화되어 전송되기 때문에 임의의 사용자가 데이터를 조회하여도 원본의 데이터를 보는 것은 불가능하다.</p>
<h2 id="결론">결론</h2>
<p>보안이 중요한 개인정보 같은 데이터가 오가는 곳 -&gt; HTTPS</p>
<p>데이터의 노출이 상관없고 속도가 빠른게 중요하다면 -&gt; HTTP</p>
<p>HTTPS는 인증서를 발급하고 유지하기 위한 추가 비용이 발생한다.
민감한 데이터를 주고 받는 곳이 아니라면 비용이나 속도적인 측면에서 HTTP가 더 유리하다.
하지만 대부분 HTTPS를 사용한다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://wooody92.github.io/network/HTTP-%EB%B3%B4%EC%95%88-%EB%AC%B8%EC%A0%9C%EC%99%80-HTTPS/">https://wooody92.github.io/network/HTTP-%EB%B3%B4%EC%95%88-%EB%AC%B8%EC%A0%9C%EC%99%80-HTTPS/</a>
<a href="https://velog.io/@eu_nzi/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-HTTP%EC%99%80-HTTPS%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90">https://velog.io/@eu_nzi/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-HTTP%EC%99%80-HTTPS%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90</a></p>
<blockquote>
<p>성공해서 만족하는 것은 아니다. 만족하고 있었기 때문에 성공한 것이다. -알랭</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터베이스 무결성]]></title>
            <link>https://velog.io/@jace_eo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%AC%B4%EA%B2%B0%EC%84%B1</link>
            <guid>https://velog.io/@jace_eo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%AC%B4%EA%B2%B0%EC%84%B1</guid>
            <pubDate>Tue, 24 Jan 2023 12:28:17 GMT</pubDate>
            <description><![CDATA[<h2 id="데이터-무결성">데이터 무결성</h2>
<p>데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것</p>
<h2 id="데이터베이스의-무결성-제약조건">데이터베이스의 무결성 제약조건</h2>
<p>데이터의 일관성과 정확성을 위해 지켜야 하는 규칙</p>
<h2 id="무결성-제약조건의-필요성">무결성 제약조건의 필요성</h2>
<ul>
<li>스키마를 작성할 때 일관성 조건을 한 번만 명시하면 데이터베이스가 갱신될 때마다 DBMS가 자동으로 일관성 조건을 감시하므로 어플리케이션들은 일관성 조건을 일일히 검사할 필요가 없음</li>
<li>데이터를 실생활의 의미에 맞게 사용할 수 있음</li>
<li>응용 프로그램에서 직접 조건을 유지하는 경우보다 에러가 발생할 가능성이 더 낮음</li>
</ul>
<h2 id="무결성-제약조건의-종류">무결성 제약조건의 종류</h2>
<h3 id="도메인-무결성-제약조건">도메인 무결성 제약조건</h3>
<ul>
<li>릴레이션 내의 튜플들이 각 속성의 도메인에 지정된 값만을 가져야 한다는 조건. 속성에 들어갈 수 있는 데이터 타입을 지정할 수 있고, 기본값을 지정할 수 있음. 저장되는 값들의 범위를 지정할 수 있으며 NULL 구문을 통해 속상 값으로 NULL을 허용/비허용 할 수 있음.<h3 id="개체-무결성-제약-조건">개체 무결성 제약 조건</h3>
</li>
<li>릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙을 지켜야 한다는 조건. 기본키는 NULL값을 가져서는 안되며 릴레이션 내에 오직 하나의 값만 존재해야함.<h3 id="참조-무결성-제약조건">참조 무결성 제약조건</h3>
</li>
<li>테이블 간의 참조 관계를 선언하는 조건. 외래키의 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야함.</li>
</ul>
<h4 id="참고자료">참고자료</h4>
<p>개발한스푼</p>
<blockquote>
<p>해야 할 것을 하라. 모든 것은 타인의 행복을 위해서, 동시에 특히 나의 행복을 위해서이다. -톨스토이&gt;</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[1종오류 2종오류]]></title>
            <link>https://velog.io/@jace_eo/1%EC%A2%85%EC%98%A4%EB%A5%98-2%EC%A2%85%EC%98%A4%EB%A5%98</link>
            <guid>https://velog.io/@jace_eo/1%EC%A2%85%EC%98%A4%EB%A5%98-2%EC%A2%85%EC%98%A4%EB%A5%98</guid>
            <pubDate>Mon, 23 Jan 2023 00:53:02 GMT</pubDate>
            <description><![CDATA[<h2 id="1종오류--2종오류">1종오류 / 2종오류</h2>
<p>가설 검정 이론에서, 1종 오류(type I error)와 2종 오류(type II error)는 각각 귀무가설을 잘못 기각하는 오류와 귀무가설을 잘못 채택하는 오류이다.</p>
<p>1종 오류는 귀무가설이 실제로 참이지만, 이에 불구하고 귀무가설을 기각하는 오류이다. 즉, 실제 음성인 것을 양성으로 판정하는 경우이다. 거짓 양성 또는 알파 오류(α error)라고도 한다.</p>
<p>2종 오류는 귀무가설이 실제로 거짓이지만, 이에 불구하고 귀무가설을 기각하지 못하는 오류이다. 즉, 실제 양성인 것을 음성으로 판정하는 경우이다. 거짓 음성 또는 베타 오류(β error)라고도 한다.</p>
<h3 id="1종-오류-false-alarm">1종 오류: False Alarm</h3>
<p>앞서 언급한 1종 오류의 정의는 “귀무가설이 참인데 잘못 판단해 기각 해버리는 오류”라고 하였다. 이 말의 의미를 다시 한번 짚어보도록 하자</p>
<p>귀무가설이 참이라는 말은 아무 일도 일어나지 않았음을 의미한다.</p>
<p>다시 말해, 아파트에 불이 난 일은 없었다는 것이다. 그런데, 여기서 잘못 판단해 기각했다는 것은 아파트에 불이 나지 않았음에도 화재 경보 알람이 울린 경우를 말하게 된다.</p>
<p>그래서, 이 말을 한마디로 하면 False Alarm이라고 표현하고 싶다.</p>
<p>즉, 실제로는 일이 일어나지 않았는데도 기각(즉, 알람이 울리는 것) 해버린 것이다.</p>
<h3 id="2종-오류-miss">2종 오류: Miss</h3>
<p>한편 2종 오류의 정의는 “귀무가설을 거짓인데도 기각하지 않아서 생기는 오류”라고 하였다. 이 말의 의미도 하나하나 짚어보자.</p>
<p>귀무가설이 거짓이라는 말은 어떤 일이 실제로 발생했음을 의미한다.</p>
<p>다시 말해 이미 아파트에 불은 났다는 의미이다. 그런데 여기서 기각하지 않았다는 것은 아파트에 불이 났음에도 화재경보 알람이 울리지 않고 그대로 지나간 경우를 말하게 된다.</p>
<p>그래서, 이 말을 한마디로 하면 Miss 라고 표현하고 싶다.</p>
<p>실제로 일어난 일임에도 기각(즉, 알람이 울리는 것)할 타이밍을 놓친 것이다.</p>
<p><img src="https://velog.velcdn.com/images/jace_eo/post/81c99eff-ae80-440c-8548-482e1e346f42/image.png" alt=""></p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://ko.wikipedia.org/wiki/1%EC%A2%85_%EC%98%A4%EB%A5%98%EC%99%80_2%EC%A2%85_%EC%98%A4%EB%A5%98">https://ko.wikipedia.org/wiki/1%EC%A2%85_%EC%98%A4%EB%A5%98%EC%99%80_2%EC%A2%85_%EC%98%A4%EB%A5%98</a>
<a href="https://angeloyeo.github.io/2021/01/26/types_of_errors.html">https://angeloyeo.github.io/2021/01/26/types_of_errors.html</a></p>
<blockquote>
<p>하루에 3시간을 걸으면 7년 후에 지구를 한바퀴 돌 수 있다. - 사무엘존슨</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[피보나치 수열 알고리즘]]></title>
            <link>https://velog.io/@jace_eo/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%88%98%EC%97%B4-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@jace_eo/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%88%98%EC%97%B4-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Sun, 22 Jan 2023 02:04:27 GMT</pubDate>
            <description><![CDATA[<h2 id="피보나치-수열">피보나치 수열</h2>
<p>피사의 레오나르도로 널리 알려진 레오나르도 피보나치가 1202년 토끼의 번식을 언급하면서 이 수에 대하여 연구했다. 하지만, 피보나치가 최초로 연구한 것은 아니고 인도의 수학자가 최초란 기록이 남아있다. 기원전 450년 핑갈라가 쓴 책에서 최초로 이 패턴이 언급되었고 이후 인도의 수학자들이 이 수에 대하여 연구한 흔적들이 발견되었다. 그 때문에 피보나치도 동방쪽에서 넘어온 정보를 접한 적이 있지 않았을까 생각하는 무리들도 있긴 하나 공식적인 연관성은 불명. 어쨌든 서유럽에서 이 수열을 연구하고 체계화할 수 있는 업적을 세운 것은 피보나치였기 때문에 피보나치 수열이란 이름이 붙게 됐다. 다만 피보나치수열이란 이름은 19세기가 되어서야 붙여졌다.</p>
<p>제0항을 0, 제1항을 1로 두고, 둘째 번 항부터는 바로 앞의 두 수를 더한 수로 놓는다. 1번째 수를 1로, 2번째 수도 1로 놓고, 3번째 수부터는 바로 앞의 두 수를 더한 수로 정의하는 게 좀더 흔하게 알려져 있는 피보나치 수열이다. 이 둘은 시작점이 다르다는 정도를 빼면 사실상 동일하다.</p>
<p>그 중에서 16 번째 항까지만 나열해 보자면 (0), 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987
이렇게 간다.</p>
<p>피보나치 수열의 이웃한 두 항이 항상 서로소라는 것은 수학적 귀납법으로 쉽게 증명할 수 있다. 피보나치 소수가 무한히 존재하는지는 유명한 미해결 문제다.</p>
<h2 id="재귀">재귀</h2>
<p>n 이 0이나 1일 때는 값도 0, 1이기 때문에 그대로 반환하면 되고, 2 이상일 때만 재귀 함수 두개로 분기해 값을 반환한다.</p>
<p>시간 복잡도는 함수가 한 번 호출되면 다시 두 번 호출되기 때문에 지수적으로 증가해 O(2^n)이 된다.</p>
<h2 id="동적-프로그래밍">동적 프로그래밍</h2>
<p>피보나치 알고리즘에서 동적 계획법이 쓰이는 이유는 기본적인 피보나치 수 알고리즘이 너무나 비효율적이기 때문이다. </p>
<h2 id="반복적-풀이">반복적 풀이</h2>
<p>n 이 2 미만일 때는 아까와 같이 그대로 반환한다. 그 다음이 재밌는데 n 이 2 이상일 때는 n-1 번만큼 반복문을 시행한다. 그 이유는 우리가 0번째 값 a 와 첫 번째 값 b 를 계속 반복하면서 원하는 값을 만들텐데, n 이 2일 때는 단 한 번(n-1)만 계산하면 원하는 값을 만들 수 있기 때문이다.</p>
<p>그리고 한 번의 반복마다 ‘a, b = b, a + b’를 시행한다. 파이썬에서 이와 같이 대입을 사용하면, ‘a = b’, ‘b = a + b’와 같이 대입이 이루어지는데 이는 파이썬의 packing &amp; unpacking과 관련이 있다. 새로 만든 b 에 이전의 a, b 값을 더해 새로운 피보나치 값을 만들어 나간다. 반복문이 끝나면 b 가 우리가 고대하던 n 번째 피보나치 수가 되며 이를 반환하면 된다.</p>
<p>앞선 재귀에 비해 매우 효율적인 방법이며 시간 복잡도는 O(n)이 된다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://namu.wiki/w/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98%20%EC%88%98%EC%97%B4">https://namu.wiki/w/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98%20%EC%88%98%EC%97%B4</a>
<a href="https://makefortune2.tistory.com/60">https://makefortune2.tistory.com/60</a>
<a href="https://shoark7.github.io/programming/algorithm/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%84-%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94-5%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95.html">https://shoark7.github.io/programming/algorithm/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%84-%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94-5%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95.html</a></p>
<blockquote>
<p>좋은 성과를 얻으려면 한 걸음 한 걸음이 힘차고 충실하지 않으면 안 된다, -단테</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[List Set Map]]></title>
            <link>https://velog.io/@jace_eo/List-Set-Map</link>
            <guid>https://velog.io/@jace_eo/List-Set-Map</guid>
            <pubDate>Sat, 21 Jan 2023 01:02:49 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/jace_eo/post/164bb881-8629-495b-9b3e-1223034ec867/image.png" alt=""></p>
<h2 id="list">List</h2>
<ul>
<li>입력 순서를 유지하며, 데이터의 중복을 허용</li>
<li>인덱스를 통해 저장 데이터에 접근 가능</li>
</ul>
<h2 id="list의-종류와-특징">List의 종류와 특징</h2>
<h3 id="linkedlist">LinkedList</h3>
<p>양방향 포인터 구조로 데이터 삽입, 삭제가 빠르다.
ArrayList보다 검색이 느리다. </p>
<h3 id="arraylist">ArrayList</h3>
<p>단반향 포인터 구조로 데이터 순차적 접근에 강점을 가진다.
배열을 기반으로 데이터를 저장한다.
데이터 삽입, 삭제가 느리다.
데이터 검색이 빠르다.</p>
<h2 id="set">Set</h2>
<ul>
<li>입력 순서를 유지하지 안으며, 데이터의 중복 허용하지 않는다.</li>
<li>데이터에 null 입력 가능하나, 한 번만 저장하고 중복 저장은 허용하지 않음.</li>
<li>인덱스가 따로 존재하지 않기 때문에 Iterator를 사용하여 조회.</li>
</ul>
<h2 id="set의-종류와-특징">Set의 종류와 특징</h2>
<h3 id="hashset">HashSet</h3>
<p>인스턴스의 해시값을 기준으로 저장하기 때문에 순서를 보장하지 않는다.
NULL 값을 허용한다.
TreeSet보다 삽입, 삭제가 빠르다.</p>
<h3 id="linkedhashset">LinkedHashSet</h3>
<p>입력된 순서를 보장한다.</p>
<h3 id="treeset">TreeSet</h3>
<p>이진 탐색 트리(Red-Black Tree)를 기반으로 한다.
데이터들이 오름차순으로 정렬된다.
데이터 삽입, 삭제에는 시간이 걸리지만 검색, 정렬이 빠르다.</p>
<h2 id="map">Map</h2>
<ul>
<li>Key&amp;Value 구조</li>
<li>Key(키)는 입력 순서를 유지하지 않으며, 중복을 허용하지 않음, Value는 중복을 허용함.</li>
<li>인덱스가 따로 존재하지 않기 때문에 Iterator를 사용하여 조회.</li>
</ul>
<h2 id="map의-종류와-특징">Map의 종류와 특징</h2>
<h3 id="hashmap">HashMap</h3>
<p>Key에 대한 중복이 없으며 순서를 보장하지 않는다.
Key와 Value 값으로 NULL을 허용한다.
동기화가 보장되지 않는다.
검색에 가장 뛰어난 성능을 가진다.</p>
<h3 id="hashtable">HashTable</h3>
<p>동기화가 보장되어 병렬 프로그래밍이 가능하고 HashMap 보다 처리속도가 느리다.
Key와 Value 값으로 NULL을 허용하지 않는다.</p>
<h3 id="linkedhashmap">LinkedHashMap</h3>
<p>입력된 순서를 보장한다.</p>
<h3 id="treemap">TreeMap</h3>
<p>이진 탐색 트리(Red-Black Tree)를 기반으로 키와 값을 저장한다.
Key 값을 기준으로 오름차순 정렬되고 빠른 검색이 가능하다.
저장 시 정렬을 하기 때문에 시간이 다소 오래 걸린다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://brunch.co.kr/@springboot/57">https://brunch.co.kr/@springboot/57</a>
<a href="https://xzio.tistory.com/1828">https://xzio.tistory.com/1828</a>
<a href="https://cocoon1787.tistory.com/527">https://cocoon1787.tistory.com/527</a></p>
<blockquote>
<p>자신감 있는 표정을 지으면 자신감이 생긴다 -찰스다윈</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[멀티 스레딩 Multi-threading]]></title>
            <link>https://velog.io/@jace_eo/%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%94%A9-Multi-threading</link>
            <guid>https://velog.io/@jace_eo/%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%94%A9-Multi-threading</guid>
            <pubDate>Thu, 19 Jan 2023 23:38:42 GMT</pubDate>
            <description><![CDATA[<h2 id="멀티-스레드">멀티 스레드</h2>
<p>일반적으로 프로세스는 하나의 스레드를 가지고 작업을 수행한다.
멀티 스레드는 하나의 프로세스 내에서 둘 이상의 스레드를 동시에 작업을 수행하는 것을 의미.</p>
<p>멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로, 시스템 자원의 낭비가 적다. 또한, 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 높아짐.</p>
<p>멀티스레딩은 스레드 수준뿐 아니라 명령어 수준의 병렬 처리에까지 신경을 쓰면서 하나의 코어에 대한 이용성을 증가하는 것에 초점</p>
<h2 id="장점">장점</h2>
<ul>
<li>응답성의 높아짐</li>
<li>자원 공유 </li>
<li>경제성</li>
<li>멀티프로세서 활용</li>
</ul>
<h2 id="단점">단점</h2>
<ul>
<li>캐시나 버퍼와 같은 하드웨어 리소스 서로 간섭할 수 있음.</li>
<li>싱글 스레드의 시간이 지연될 수 있음.</li>
<li>스레드 스케쥴링</li>
</ul>
<h2 id="멀티스레드-모델">멀티스레드 모델</h2>
<h3 id="다-대-일many-to-one">다-대-일(Many-to-One)</h3>
<p>여러 개의 사용자 수준 스레드들이 하나의 커널 스레드(프로세스)로 매핑되는 방식으로, 사용자 수준에서 스레드 관리가 이루어진다. 주로 커널 스레드를 지원하지 않는 시스템에서 사용하며, 한 번에 하나의 스레드만이 커널에 접근할 수 있다는 단점이 있다. 하나의 스레드가 커널에 시스템 호출을 하면 나머지 스레드들은 대기해야 하기 때문에 진정한 의미의 동시성을 지원하지 못한다. 다시 말해, 여러 개의 스레드가 동시에 시스템 호출을 사용할 수 없다. 또한 커널 입장에서는 프로세스 내부의 스레드들을 인식할 수 없고 하나의 프로세스로만 보이기 때문에 다중처리기 환경이라도 여러 개의 프로세서에 분산하여 수행할 수 없다.</p>
<h3 id="일-대-일one-to-one">일-대-일(One-to-One)</h3>
<p>사용자 스레드들을 각각 하나의 커널 스레드로 매핑시키는 방식이다. 사용자 스레드가 생성되면 그에 따른 커널 스레드가 생성되는 것이다. 이렇게 하면 다-대-일 방식에서 시스템 호출 시 다른 스레드들이 중단되는 문제를 해결할 수 있으며 여러 개의 스레드를 다중처리기에 분산하여 동시에 수행할 수 있는 장점이 있다. 그러나 커널 스레드도 한정된 자원을 사용하므로 무한정 생성할 수는 없기 때문에, 스레드를 생성할 때 그 개수를 염두에 두어야 한다.</p>
<h3 id="다-대-다many-to-many">다-대-다(Many-to-Many)</h3>
<p>여러 개의 사용자 스레드를 여러 개의 커널 스레드로 매핑시키는 모델이다. 다-대-일 방식과 일-대-일 방식의 문제점을 해결하기 위해 고안되었다. 커널 스레드는 생성된 사용자 스레드와 같은 수 또는 그 이하로 생성되어 스케줄링한다. 다-대-일 방식에서 스레드가 시스템 호출시 다른 스레드가 중단되는 현상과 일-대-일 방식에서 사용할 스레드의 수에 대해 고민하지 않아도 된다. 커널이 사용자 스레드와 커널 스레드의 매핑을 적절하게 조절한다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="http://www.tcpschool.com/java/java_thread_multi">http://www.tcpschool.com/java/java_thread_multi</a>
<a href="https://ko.wikipedia.org/wiki/%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%94%A9">https://ko.wikipedia.org/wiki/%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%94%A9</a></p>
<blockquote>
<p>일하는 시간과 노는 시간을 뚜렷이 구분하라 . 시간의 중요성을 이해하고 매순간을 즐겁게 보내고 유용하게 활용하라. 그러면 젊은 날은 유쾌함으로 가득찰 것이고 늙어서도 후회할 일이 적어질 것이며 비록 가난할 때라도 인생을 아름답게 살아갈수있다 – 루이사 메이올콧</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[CORS - Cross Origin Resource Sharing]]></title>
            <link>https://velog.io/@jace_eo/CORS-Cross-Origin-Resource-Sharing</link>
            <guid>https://velog.io/@jace_eo/CORS-Cross-Origin-Resource-Sharing</guid>
            <pubDate>Wed, 18 Jan 2023 23:56:36 GMT</pubDate>
            <description><![CDATA[<h2 id="cross-origin-resource-sharing">Cross Origin Resource Sharing</h2>
<p>브라우저가 리소스 로드를 허용해야 하는 자체 출처가 아닌 다른 출처를 나타낼 수 있도록 하는 HTTP 헤더 기반 메커니즘이다. </p>
<p>그 메커니즘 중 보안적인 이유로 Cross-origin HTTP 요청들을 제한합니다. 서버의 동의에 따라 요청을 허락과 제한.</p>
<pre><code>console.log(location.origin);</code></pre><p>콘솔을 찍어서 origin 값을 알아낼 수 있다.</p>
<h2 id="cors-동작-원리">CORS 동작 원리</h2>
<p>접근제어에 사용되는 3가지 시나리오가 있다.</p>
<h3 id="단순-요청-simple-request">단순 요청 (Simple Request)</h3>
<p>메서드</p>
<ul>
<li>GET </li>
<li>POST</li>
<li>HEAD</li>
</ul>
<p>자동으로 설정되는 헤더 제외 설정할 수 있는 헤더는 다음과 같이 변경</p>
<ul>
<li>Accept</li>
<li>Accept-Language</li>
<li>Content-Language</li>
</ul>
<p>Content-Type이 다음과 같은 경우</p>
<ul>
<li>application/x-www-form-urlencoded</li>
<li>multipart/form-data</li>
<li>text/plain</li>
</ul>
<h3 id="사전-요청-preflight-request">사전 요청 (Preflight Request)</h3>
<p>단순 요청이 아닌 cross-origin 요청은 모두 prefilght 요청을 한다. 요청을 보내는 것이 안전한지 확인하기 위해 먼저 OPTIONS 메서드를 사용하여 요청. 사용자 데이터에 영향을 미칠 수 있는 요청이므로 사전에 확인</p>
<p>Preflight Request</p>
<ul>
<li>Origin : 요청 출처</li>
<li>Access-Control-Request-Method : 실제 요청의 메서드</li>
<li>Access-Control-Request-Headers : 실제 요청의 추가 헤더</li>
</ul>
<p>Preflight Response</p>
<ul>
<li>Access-Control-Allow-Origin : 허가 출처</li>
<li>Access-Control-Allow-Methods : 허가 메서드</li>
<li>Access-Control-Allow-Headers : 허가 헤더</li>
<li>Access-Control-Max-Age : Preflight 응답 캐시 시간</li>
</ul>
<h3 id="인증-요청-credentialed-request">인증 요청 (Credentialed Request)</h3>
<p>인증 관련 헤더를 포함할 때 사용하는 요청이다.</p>
<p>클라이언트
쿠키 또는 JWT 토큰을 담아 보낼 경우 credentials : include 를 포함하여 보낸다.</p>
<p>서버
Access-Control-Allow-Credentials : true 해야 클라이언트의 인증 포함 요청에 허용이 가능하다.</p>
<h3 id="cors-오류-해결-방법">CORS 오류 해결 방법</h3>
<ul>
<li><p>프론트 프록시 서버 설정
proxy 서버를 지정하여 설정</p>
</li>
<li><p>직접 헤더 설정
직접 헤더에 설정을 추가</p>
</li>
<li><p>스프링부트 설정</p>
</li>
</ul>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://evan-moon.github.io/2020/05/21/about-cors/">https://evan-moon.github.io/2020/05/21/about-cors/</a>
<a href="https://velog.io/@frankle97/CORS%EB%9E%80">https://velog.io/@frankle97/CORS%EB%9E%80</a>
<a href="https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A8_%EC%B6%9C%EC%B2%98_%EB%A6%AC%EC%86%8C%EC%8A%A4_%EA%B3%B5%EC%9C%A0">https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A8_%EC%B6%9C%EC%B2%98_%EB%A6%AC%EC%86%8C%EC%8A%A4_%EA%B3%B5%EC%9C%A0</a></p>
<blockquote>
<p>흔히 사람들은 기회를 기다리고 있지만 기회는 기다리는 사람에게 잡히지 않는 법이다. 우리는 기회를 기다리는 사람이 되기 전에 기회를 얻을 수 있는 실력을 갖춰야 한다. 일에 더 열중하는 사람이 되어야한다. -안창호</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[대표적인 SQL 3가지]]></title>
            <link>https://velog.io/@jace_eo/%EB%8C%80%ED%91%9C%EC%A0%81%EC%9D%B8-SQL-3%EA%B0%80%EC%A7%80</link>
            <guid>https://velog.io/@jace_eo/%EB%8C%80%ED%91%9C%EC%A0%81%EC%9D%B8-SQL-3%EA%B0%80%EC%A7%80</guid>
            <pubDate>Tue, 17 Jan 2023 23:32:51 GMT</pubDate>
            <description><![CDATA[<h2 id="sql---structured-query-language">SQL - Structured Query Language</h2>
<p>데이터베이스를 정의 조작 제어 하기 위해 사용되는 언어이다.</p>
<p>데이터베이스 명령어는 SQL의 기능에 따라 3가지 영역으로 나눌 수 있다.</p>
<h3 id="데이터-정의-언어ddl-data-definition-language">데이터 정의 언어(DDL: Data Definition Language)</h3>
<p>데이터베이스나 테이블 등을 생성, 삭제하거나 그 구조를 변경하기 위한 명령어.</p>
<p>각각 데이터베이스 내의 개체(스키마, 테이블, 인덱스)등을 생성하거나, 수정하거나, 삭제하기 위해 사용된다.</p>
<p>ex) CREATE, ALTER, DROP</p>
<h3 id="데이터-조작-언어dml-data-manipulation-language">데이터 조작 언어(DML: Data Manipulation Language)</h3>
<p>데이터베이스에 저장된 데이터를 처리하거나 조회, 검색하기 위한 명령어.</p>
<p>직접적으로 데이터를 수정하지 않더라고 테이블 내의 데이터를 검색하는 데에 이용되는 SELECT 문 또한 DML로 간주된다.</p>
<p>ex) INSERT, UPDATE, DELETE, SELECT 등</p>
<h3 id="데이터-제어-언어dcl-data-control-language">데이터 제어 언어(DCL: Data Control Language)</h3>
<p>데이터베이스에 저장된 데이터를 관리하기 위하여 데이터의 보안성 및 무결성 등을 제어하기 위한 명령어.</p>
<p>주로 데이터베이스 관리자(DBA)에 의해 많이 사용된다.</p>
<p>ex) GRANT, REVOKE 등</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://velog.io/@gparkkii/DatabaseSQLNoSQL">https://velog.io/@gparkkii/DatabaseSQLNoSQL</a>
<a href="https://inseok9068.github.io/oracle/oracle-sql-language/">https://inseok9068.github.io/oracle/oracle-sql-language/</a></p>
<blockquote>
<p> 너무 소심하고 까다롭게 자신의 행동을 고민하지 말라 . 모든 인생은 실험이다 . 더많이 실험할수록 더나아진다 – 랄프 왈도 에머슨</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[차원의 저주와 해결]]></title>
            <link>https://velog.io/@jace_eo/%EC%B0%A8%EC%9B%90%EC%9D%98-%EC%A0%80%EC%A3%BC%EC%99%80-%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@jace_eo/%EC%B0%A8%EC%9B%90%EC%9D%98-%EC%A0%80%EC%A3%BC%EC%99%80-%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Mon, 16 Jan 2023 23:54:38 GMT</pubDate>
            <description><![CDATA[<h2 id="차원의-저주란">차원의 저주란?</h2>
<p>차원의 저주란 차원이 증가하면서 학습데이터 수가 차원 수보다 적어져서 성능이 저하되는 현상을 말한다. 차원이 증가할수록 변수가 늘어나고, 개별 차원 내에서 학습할 데이터 양이 줄어든다.</p>
<p>이때 주의할 점은 변수가 증가한다고, 반드시 차원의 저주가 발생하지는 않는다. 관측치보다 변수 수가 많아지는 경우에 발생한다.</p>
<p>차원이 증가할 수록 개별 차원 내 학습할 데이터 수가 적어지는 형상을 sparse 현상이라고 한다.
<img src="https://velog.velcdn.com/images/jace_eo/post/14936479-89c8-49b3-9163-7c6f48d6b95d/image.png" alt=""></p>
<p>위 그림처럼 차원이 증가할수록 빈 공간이 많아진다.</p>
<p>같은 데이터지만 1차원에서는 데이터 밀도가 촘촘했지만, 2차원, 3차원으로 차원이 커질수록 점점 데이터 간 거리가 멀어진다. 이렇게 차원이 증가하면 빈 공간이 생겨 학습 시켰을 때 모델 성능이 저하될 수 밖에 없다.</p>
<h2 id="차원의-저주-해결">차원의 저주 해결</h2>
<p>차원의 저주 문제를 해결하려면 이론적인 해결책은 훈련 샘플의 밀도가 충분히 높아질 때까지 데이터를 모아 훈련 세트 크기를 키우는 것이다.
하지만 아쉽게도 일정 밀도에 도달하기 위해 필요한 훈련 샘플 수는 차원의 수가 커짐에 따라 기하급수적으로 늘어난다.</p>
<p>차원축소 기법을 통해 차원의 저주 문제를 해결한다.
특성 수를 크게 줄여 차원축소를 통해 훈련 속도가 빨라지고 시각화 하기에도 좋다. 하지만 일부 정보가 유실 될 수 있기에 성능도 나빠질 우려는 있다. </p>
<p>결론적으로 무작정 차원 축소를 하기 보다 원본 데이터로 훈련해 시간을 측정하여 필요 여부를 결정할 필요가 있다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://velog.io/@ohs2251/%EC%B0%A8%EC%9B%90%EC%9D%98-%EC%A0%80%EC%A3%BC">https://velog.io/@ohs2251/%EC%B0%A8%EC%9B%90%EC%9D%98-%EC%A0%80%EC%A3%BC</a>
<a href="https://brunch.co.kr/@jejugrapher/227">https://brunch.co.kr/@jejugrapher/227</a></p>
<blockquote>
<p>사람이 여행을 하는 것은 도착하기 위해서가 아니라 여행하기 위해서이다. -괴테</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[프림 알고리즘]]></title>
            <link>https://velog.io/@jace_eo/%ED%94%84%EB%A6%BC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
            <guid>https://velog.io/@jace_eo/%ED%94%84%EB%A6%BC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</guid>
            <pubDate>Sun, 15 Jan 2023 23:49:07 GMT</pubDate>
            <description><![CDATA[<h2 id="프림-알고리즘">프림 알고리즘</h2>
<p>프림 알고리즘은 무향 연결 그래프가 주어질 때, &#39;최소 스패닝 트리&#39;라고 부른 서브 그래프를 찾는 알고리즘. </p>
<p>가중치가 있는 연결된 무향 그래프의 모든 꼭짓점을 포함하면서 각 변의 비용의 합이 최소가 되는 부분 그래프인 트리, 즉 최소 비용 생성나무를 찾는 알고리즘이다. </p>
<h2 id="동작-순서">동작 순서</h2>
<p>초기 상태로 정점(=노드)는 서로 연결되어 있지 않다. 정점과 연결된 간선을 하나씩 추가하면서 MST를 만든다.
프림 알고리즘은 시작 정점을 정해 우선 순위 큐에 넣는다. 우선 순위 큐에는 (정점, 가중치) 형식으로 저장되며, 첫 시작은 (시작 정점, 0)으로 넣는다.</p>
<p>-그래프에서 하나의 꼭짓점을 선택하여 트리를 만든다.</p>
<p>-그래프의 모든 변이 들어 있는 집합을 만든다.</p>
<p>-모든 꼭짓점이 트리에 포함되어 있지 않은 동안 트리와 연결된 변 가운데 트리 속의 두 꼭짓점을 연결하지 않는 가장 가중치가 작은 변을 트리에 추가한다.</p>
<h3 id="크루스칼-알고리즘과의-차이">크루스칼 알고리즘과의 차이</h3>
<p>크루스칼 알고리즘과의 차이는 지난 포스팅에서 확인!
<a href="https://velog.io/@jace_eo/%EC%B5%9C%EC%86%8C%EC%8B%A0%EC%9E%A5%ED%8A%B8%EB%A6%AC-%ED%81%AC%EB%A3%A8%EC%8A%A4%EC%B9%BC-%ED%94%84%EB%A6%BC">https://velog.io/@jace_eo/%EC%B5%9C%EC%86%8C%EC%8B%A0%EC%9E%A5%ED%8A%B8%EB%A6%AC-%ED%81%AC%EB%A3%A8%EC%8A%A4%EC%B9%BC-%ED%94%84%EB%A6%BC</a></p>
<h4 id="참고-문헌">참고 문헌</h4>
<p><a href="https://ko.wikipedia.org/wiki/%ED%94%84%EB%A6%BC_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98">https://ko.wikipedia.org/wiki/%ED%94%84%EB%A6%BC_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</a>
<a href="https://www.weeklyps.com/entry/%ED%94%84%EB%A6%BC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Prims-algorithm">https://www.weeklyps.com/entry/%ED%94%84%EB%A6%BC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Prims-algorithm</a></p>
<blockquote>
<p>성공으로 가는 엘리베이터는 고장입니다. 당신은 계단을 이용해야만 합니다. 한계단 한계단씩 – 조 지라드</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[자료구조 컨테이너 종류 및 특징]]></title>
            <link>https://velog.io/@jace_eo/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%A2%85%EB%A5%98-%EB%B0%8F-%ED%8A%B9%EC%A7%95</link>
            <guid>https://velog.io/@jace_eo/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%A2%85%EB%A5%98-%EB%B0%8F-%ED%8A%B9%EC%A7%95</guid>
            <pubDate>Sun, 15 Jan 2023 05:47:22 GMT</pubDate>
            <description><![CDATA[<h2 id="컨테이너-container">컨테이너 Container</h2>
<p>C++ 표준 라이브러리에 제공하는 자료구조를 컨테이너(Container)라고 한다. 컨테이너는 모든 프로그램에 있어 자료형과 함께 프로그램 구성에 있어 기본 골격이다. 그리고 각 컨테이너 특성에 맞게 최적화 되어 있는 알고리즘들이 구현되어 있고 제너릭 알고리즘을 사용할 수 있다.</p>
<p>자료구조(資料構造, 영어: data structure)는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미</p>
<p>컨테이너는 템플릿으로 만들어져 있기 때문에 기본적인 조건만 맞으면 어떤 데이터 타입이든 수용 가능하다.</p>
<h2 id="카테고리">카테고리</h2>
<p>컨테이너는 5개의 카테고리로 나눌 수 있다.</p>
<h3 id="순차-컨테이너sequence-containers">순차 컨테이너(Sequence containers)</h3>
<p>array : 배열과 동일하게 고정된 크기의 선형 구조이다.
vector : 뒷쪽으로 자료를 추가할 수 있으며 동적으로 크기 조절이 되는 선형 구조이다.
deque : 양쪽으로 자료를 추가할 수 있으며 동적으로 크기 조절이 되는 선형 구조이다.
forward_list : 단일 연결 리스트이다.
list : 이중 연결 리스트이다.</p>
<h3 id="연관-컨테이너associative-containers">연관 컨테이너(Associative Containers)</h3>
<p>연관 컨테이너는 자료과 동시에 정렬된다. 중복 키를 사용하는 것은 이름에 multi가 붙는다.</p>
<p>set : 유일 키를 갖는 트리구조이다.
map : 유일 키와 값을 갖는 트리구조이다. 자료입력시 키로 정렬된다.
multiset : 중복 키를 갖는 트리구조이다.
multimap : 중복 키와 값을 갖는 트리구조이다.</p>
<h3 id="해시-컨테이너unordered-associative-containers">해시 컨테이너(Unordered Associative Containers)</h3>
<p>해시 키를 이용하는 자료구조이며 연관 컨테이너와 달리 정렬 없이 자료가 바로 추가된다. 연관 컨테이너에 비해 월등히 성능이 좋지만 기본 자료형이 아닌 경우 해시 키를 만드는데 주의하여야 한다.</p>
<p>unordered_set : 유일 해시 키를 갖는 해시 구조이다.
unordered_map : 유일 해시 키와 값을 갖는 해시 구조이다.
unordered_multiset : 중복 해시 키를 갖는 해시 구조이다.
unordered_multimap : 중복 해시 키와 값을 갖는 해시 구조이다.</p>
<h3 id="컨테이너-어댑터container-adapters">컨테이너 어댑터(Container Adapters)</h3>
<p>stack : 후입선출 되는 자료 구조이다(LIFO data structure).
queue : 선입선출 되는 자료 구조이다(FIFO data structure).
priority_queue : 우선순위 큐는 우선 순위 결정 방식에 맞게 만들어지는 힙(heap) 구조이다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=jidon333&amp;logNo=60212565975">https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=jidon333&amp;logNo=60212565975</a>
<a href="https://wikidocs.net/29953">https://wikidocs.net/29953</a></p>
<blockquote>
<p>문제는 목적지에 얼마나 빨리 가느냐가 아니라 그 목적지가 어디냐는 것이다. -메이벨 뉴컴버</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[커널 Kernel]]></title>
            <link>https://velog.io/@jace_eo/%EC%BB%A4%EB%84%90-Kernel</link>
            <guid>https://velog.io/@jace_eo/%EC%BB%A4%EB%84%90-Kernel</guid>
            <pubDate>Sat, 14 Jan 2023 09:40:18 GMT</pubDate>
            <description><![CDATA[<h2 id="커널">커널</h2>
<p>운영체제의 핵심이자 이를 규정하는 소프트웨어. 하드웨어의 자원을 자원이 필요한 프로세스에 나눠주고, 덩달아 프로세스 제어(작업 관리), 메모리 제어, 프로그램이 운영 체제에 요구하는 시스템 콜 등을 수행하는 부분으로 운영 체제 맨 하부에서 돌아간다. 현재 많이 사용되고 있는 운영 체제는 커널 위에 여러 가지 소프트웨어 계층을 올린 것. 이렇기 때문에 커널이 날아가게 되면 운영 체제를 못 쓰게 된다. 이 커널도 한번씩 오작동 하여 정지할 때가 있는데, 이를 가리켜 커널 패닉이라고 부른다. 요즘은 억지로 볼 수는 있지만 베타 테스트 버전이 아닌 이상 일반적인 상황에선 보기 어렵다.</p>
<p>어쨌든 커널로 운영 체제의 정체성을 결정하기에 매우 중요하다고 볼 수 있다. 페도라, 우분투 등이 리눅스로 묶이는 것도 이들이 같은 리눅스 커널을 사용하고 있기 때문.</p>
<h2 id="커널의-종류">커널의 종류</h2>
<p>커널은 단일형 커널(monolithic kernel), 마이크로커널(microkernel), 혼합형 커널(hybrid kernel), 엑소커널(exokernel), 나노커널(nanokernel) 등 여러가지가 있지만, 그 중 단일형 커널, 마이크로커널, 혼합형 커널이 많이 알려져 있다. 엑소커널은 정확히 다른 방식의 커널은 아니다. 엑소커널은 다른 커널 구조의 보너스로 들어가는 것으로, 프로그램에게 하드웨어로 직접 제어할수 있는 선택권을 준다. 나노커널은 실질적으로 모든 서비스를 책임지는 특징을 가지고 있다.</p>
<h3 id="단일형-커널">단일형 커널</h3>
<p>단일형 커널(monolithic kernel)은 입출력, 네트워크, 주변 장치 관리 등의 운영 체제에서 일어나는 모든 일들을 한 개의 커널이 다 처리하는 방식이다. 속도가 빠르고 설계도 편리하지만, 잠재적 안정성 문제에 커널의 크기도 무지막지하게 커진다. 이 방식을 따르는 운영 체제는 다음과 같다.</p>
<p>리눅스 커널
보통의 UNIX 계통
MS-DOS 및 그에 기반한 Windows 9x(윈도우 95, 98, ME)
Mac OS 8.6 이하 버전</p>
<h3 id="마이크로-커널">마이크로 커널</h3>
<p>마이크로커널(microkernel)은 시스템 콜, 그리고 주변 장치 관리는 서버라는 응용 프로그램 계층으로 제공하는 방식으로 커널에서 제외하여 안정성을 높이고 크기도 줄인 설계 방식이다. 안정성과 보안 수준이 높아지지만, 성능이 떨어진다. 이 방식을 따르는 운영 체제는 다음과 같다.</p>
<p>AmigaOS
Amoeba
Mach
Minix
L4
QNX
GNU Hurd
지르콘
심비안</p>
<h3 id="혼합형-커널">혼합형 커널</h3>
<p>혼합형 커널(hybrid kernel)은 마이크로커널에 단일형 커널의 장점을 혼합해 만든 설계 방식이다. 성능이 필요한 운영 체제 서비스를 커널에 집어넣었다. 그래서 리누스 토발즈는 이 용어가 단순히 마케팅 목적으로 만든 용어에 불과하다고 말하기도 했다. 아무튼 이 방식을 따르는 운영 체제는 다음과 같다.</p>
<p>NT 커널(Windows NT 3.1, NT 3.5, NT 3.51, NT 4.0, 2000, XP, Vista, 7, 8, 8.1, 10, 11, Windows Server 2003, 2003 R2, 2008, 2008 R2, 2012, 2012 R2, 2016, 2019)
XNU - Darwin과 이에 기반을 둔 macOS, iOS가 XNU 커널을 기반으로 한다. XNU 커널은 Mach 커널과 BSD 모놀리식 커널을 서로 합친 형태.
BeOS, 하이쿠
DragonFly BSD
Plan 9</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://namu.wiki/w/%EC%BB%A4%EB%84%90(%EC%9A%B4%EC%98%81%20%EC%B2%B4%EC%A0%9C)">https://namu.wiki/w/%EC%BB%A4%EB%84%90(%EC%9A%B4%EC%98%81%20%EC%B2%B4%EC%A0%9C)</a>
<a href="https://weicomes.tistory.com/312">https://weicomes.tistory.com/312</a></p>
<blockquote>
<p>먹고 싶은것을 다 먹는 것은 그렇게 재미있지 않다 . 인생을 경계선 없이 살면 기쁨이 덜하다 . 먹고싶은대로 다 먹을 수있다면 먹고싶은 것을 먹는데 무슨 재미가 있겠나 – 톰행크스</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[브라우저에 URL을 입력하면?]]></title>
            <link>https://velog.io/@jace_eo/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90-URL%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%98%EB%A9%B4</link>
            <guid>https://velog.io/@jace_eo/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90-URL%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%98%EB%A9%B4</guid>
            <pubDate>Fri, 13 Jan 2023 00:53:12 GMT</pubDate>
            <description><![CDATA[<h2 id="브라우저에-url을-입력하면">브라우저에 URL을 입력하면?</h2>
<h3 id="1-url-파싱">1. URL 파싱</h3>
<p>일단 브라우저 창에 URL을 입력하게 되면, 입력한 URL을 해석하여 확인합니다.</p>
<p>현재 페이지를 예를 들면 </p>
<p>protocol : https </p>
<p>hostname : velog.io</p>
<p>resource : / 이후에 있는 것들</p>
<p>브라우저는 hostname 에서 a-z, A-Z, 0-9, - 혹은 . 이 아닌 문자들을 확인합니다.
국제화 도메인 네임과 같이 유니코드가 있을 때에는 브라우저가 URL에서 호스트네임 부분에 퓨니코드 (Punycode) 인코딩을 하기도 합니다. 도메인 주소 뒤 / 부터는 특정 문자를 UTF-8로 변환하는 URL escape code를 사용합니다.
또한 프로토콜이나 유효한 도메인 이름이 주어지지 않으면, 브라우저는 주소창에 놓인 텍스트를 브라우저의 기본 웹 검색엔진에 넘겨줍니다.</p>
<h3 id="2-hsts-목록-조회">2. HSTS 목록 조회</h3>
<p>HTTP를 허용하지 않고 HTTPS를 사용하는 연결만 허용하는 기능입니다.
만약 HTTP로 요청이 왔다면 HTTP 응답 헤더에 &quot;Strict Transport Security&quot; 라는 필드를 포함하여 응답하게 되면, 이를 확인한 브라우저는 해당 서버에 요청할 때 HTTPS만을 통해 통신하게 됩니다. 그리고 자신의 HSTS 캐시에 해당 URL을 저장하는데 이를 HSTS 목록이라고 부릅니다.</p>
<p>HSTS목록에 해당 URL이 존재한다면 명시적으로 HTTP를 통해 요청한다 해도 브라우저가 이를 HTTPS로 요청합니다.</p>
<h3 id="3-url을-ip-주소로-변환">3. URL을 IP 주소로 변환</h3>
<p>브라우저는 캐시를 조회하여 해당 웹사이트의 IP주소를 가지고 있는지 확인합니다. 만약 IP 주소를 찾을 수 없다면 gethostbyname 시스템 라이브러리 함수를 호출해 OS에 IP 주소를 찾도록 요청합니다. OS가 해당 도메인 IP 주소를 확인하는 첫 번째는 로컬에 위치한 hosts 파일. 만약 hosts파일에 존재하지 않다면 DNS 서버에 요청을 보냅니다.</p>
<h3 id="4-라우터를-통해-해당-서버의-게이트웨이까지-이동">4. 라우터를 통해 해당 서버의 게이트웨이까지 이동</h3>
<p>IP 주소를 할당 받는 다면 해당 서버로 요청을 전송합니다. 네트워크 라우터의 라우팅이 경로를 설정하고, 라우터에서 라우팅 테이블을 통해 해당 요청이 어떤 경로를 통해 갈지 지정해줍니다.</p>
<h3 id="5-arp를-통해-ip-주소를-mac-주소-변환">5. ARP를 통해 IP 주소를 MAC 주소 변환</h3>
<p>ARP는 네트워크 상 IP 주소를 물리적 네트워크 주소 MAC으로 바인드 시키는 프로토콜이다.</p>
<p>ARP가 필요한 이유는 로컬 네트워크에서 단말과 단말 간 통신을 위해서 IP주소와 함께 MAC주소를 이용하는데 IP주소를 MAC주소와 매칭하여 목적지 MAC주소를 찾아가기 위함.</p>
<p>LAN을 한마디로 정의하면 네트워크 매체를 이용하여 집, 사무실, 학교 등의 건물과 같은 가까운 지역을 한데 묶는 컴퓨터 네트워크 입니다.</p>
<p>같은 IP 대역을 공유하는 LAN에서 단말간 통신을 하기 위해 IP 주소를 목적지로 지정하지만, 실질적 물리 주소(MAC)를 사용해 목적지를 찾게 됩니다.</p>
<p>BroadCasting을 통해 ARP Request를 받은 같은 IP 대역 내의 단말들 중 IP-MAC 매핑에 목표인 단말이 이에 반응하여 ARP Response(목적지 단말의 MAC 주소) 를 보냅니다.</p>
<p>이러한 ARP Response들을 받아 ARP Table에 해당 단말의 IP와 MAC 주소를 적습니다. 그 이후로는 ARP Table을 참조해 IP와 매핑되는 MAC 주소를 전달합니다.</p>
<h3 id="6-tcp-소켓-연결">6. TCP 소켓 연결</h3>
<p>서버와 통신을 위해서는 TCP 소켓 연결을 진행합니다. 
소켓 연결은 3-way-handshaking을 통해 이루어집니다. 서버에게 접속 요청을 보내면, 서버는 해당 요청을 확인하고 수락하는 메시지를 보냅니다. 또한, 클라이언트는 서버의 요청 수락 메시지를 받고 알겠다는 응답 메시지를 보내줍니다.</p>
<p>HTTPS 요청의 경우에는 암호화 통신을 위한 TLS 핸드쉐이킹이 추가됩니다. 이를 통해 서버와 클라이언트는 암호화 통신을 진행할 수 있습니다.</p>
<h3 id="7-서버가-http-응답">7. 서버가 HTTP 응답</h3>
<p>서버 응답에는 요청한 웹 페이지와 함께 상태 코드(status code), 압축 유형(Content-Encoding), 페이지 캐싱 방법(Cache-Control), 설정할 쿠키, 개인 정보 등이 포함 된다.</p>
<p>서버의 HTTP 응답 예시이다:</p>
<h3 id="8-브라우저-html-컨텐츠">8. 브라우저 HTML 컨텐츠</h3>
<p>브라우저는 응답받은 HTML을 화면에 단계별로 표시한다. HTML을 렌더링한다. 그런 다음 HTML 태그를 확인하고 이미지, CSS 스타일시트, 자바스크립트 파일 등과 같은 웹 페이지의 추가 요소에 대한 GET 요청을 보낸다. 정적 파일(Static File)은 브라우저에서 캐싱되므로 다음에 페이지를 방문할 때 다시 가져올 필요가 없다. 마지막으로,페이지가 브라우저에 나타난다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://velog.io/@wonseok97/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90-URL%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%98%EB%A9%B4-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EC%9D%BC">https://velog.io/@wonseok97/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90-URL%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%98%EB%A9%B4-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EC%9D%BC</a>
<a href="https://velog.io/@khy226/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90-url%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%98%EB%A9%B4-%EC%96%B4%EB%96%A4%EC%9D%BC%EC%9D%B4-%EB%B2%8C%EC%96%B4%EC%A7%88%EA%B9%8C">https://velog.io/@khy226/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90-url%EC%9D%84-%EC%9E%85%EB%A0%A5%ED%95%98%EB%A9%B4-%EC%96%B4%EB%96%A4%EC%9D%BC%EC%9D%B4-%EB%B2%8C%EC%96%B4%EC%A7%88%EA%B9%8C</a>
<a href="https://woojeongmin.com/2022/study-log/what-happens-when-you-type-wwwnavercom/">https://woojeongmin.com/2022/study-log/what-happens-when-you-type-wwwnavercom/</a></p>
<blockquote>
<p>되찾을 수 없는게 세월이니 시시한 일에 시간을 낭비하지 말고 순간순간을 후회 없이 잘 살아야 한다. -루소</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터 베이스의 반정규화]]></title>
            <link>https://velog.io/@jace_eo/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%9D%98-%EB%B0%98%EC%A0%95%EA%B7%9C%ED%99%94</link>
            <guid>https://velog.io/@jace_eo/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%9D%98-%EB%B0%98%EC%A0%95%EA%B7%9C%ED%99%94</guid>
            <pubDate>Wed, 11 Jan 2023 23:43:23 GMT</pubDate>
            <description><![CDATA[<h2 id="반정규화-reverse-data-modeling">반정규화 (Reverse Data Modeling)</h2>
<p>데이터베이스 성능 향상 등을 위해 정규화된 데이터를 의도적으로 정규형을 위배한 데이터 구조로 만드는 행위를 반정규화라고 한다.</p>
<p>즉, 정규화된 엔터티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법이다. 특히 조회에 대한 처리성능이 중요할 때, 부분적으로 반정규화를 수행한다.</p>
<h2 id="적용방법">적용방법</h2>
<p>컬럼 반정규화, 테이블 반정규화, 관계의 반정규화 종합적으로 고려하여 실시</p>
<p>성능을 향상 시킬수 있는 다른 방법을 먼저 고려하고 그 이후 반정규화를 수행.</p>
<p>반드시 정규화 수행 후 반정규화 수행.</p>
<p>튜닝 등 다른 개선 후 최후의 수단으로 수행.</p>
<h2 id="주요-기법">주요 기법</h2>
<h3 id="테이블-합병">테이블 합병</h3>
<p>논리적으로 구분된 엔티티들을 하나의 테이블로 합친다.
논리적 모델 상으론 구분되어야 하지만, Join 없이 하나의 테이블로 관리하는 것이 성능 측면에서 유리할 수 있다.</p>
<h3 id="중복-칼럼-추가">중복 칼럼 추가</h3>
<p>게시판 테이블에 회원 정보를 일부 저장한다.
회원 정보 테이블과 Join 하여 불러올 수 있지만, 일부 중복 데이터만으로 Join 없이 처리한다면 더 유리할 수 있다.</p>
<h3 id="계산된-칼럼-추가">계산된 칼럼 추가</h3>
<p>평균치, 계량값을 특정 필드에 추가한다.
바로바로 계산할 수 있는 값이지만, 자주 참조되는 값이라면 DB에 저장해두는 것이 유리할 수 있다.</p>
<h3 id="코드-명칭-칼럼-추가">코드 명칭 칼럼 추가</h3>
<p>남자 여자를 F, M이 아니라 그냥 남자, 여자로 저장한다.
출력 시 &#39;남자&#39; &#39;여자&#39;로 보여줘야 하는 경우 연산을 줄일 수 있다.</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://itwiki.kr/w/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EB%B0%98%EC%A0%95%EA%B7%9C%ED%99%94">https://itwiki.kr/w/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EB%B0%98%EC%A0%95%EA%B7%9C%ED%99%94</a>
<a href="https://antkdi.github.io/posts/post-license-sqld-reverse/">https://antkdi.github.io/posts/post-license-sqld-reverse/</a></p>
<blockquote>
<p>삶이 그대를 속일지라도 슬퍼하거나 노하지 말아라 슬픈 날에 참고 견디라. 즐거운 날은 오고야 말리니 마음은 미래를 바라느니 현재는 한없이 우울한 것. 모든 건 하염없이 사라지나가 버리고 그리움이 되리니 – 푸쉬킨</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신 러닝 과 데이터 마이닝의 차이]]></title>
            <link>https://velog.io/@jace_eo/%EB%A8%B8%EC%8B%A0-%EB%9F%AC%EB%8B%9D-%EA%B3%BC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%88%EC%9D%B4%EB%8B%9D%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@jace_eo/%EB%A8%B8%EC%8B%A0-%EB%9F%AC%EB%8B%9D-%EA%B3%BC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%88%EC%9D%B4%EB%8B%9D%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Wed, 11 Jan 2023 00:05:42 GMT</pubDate>
            <description><![CDATA[<h2 id="머신-러닝---현재의-데이터를-바탕으로-미래를-예측">머신 러닝 - 현재의 데이터를 바탕으로 미래를 예측</h2>
<p>머신 러닝은 훈련 데이터(Training Data)를 통해 학습된 알려진 속성을 기반으로 예측에 초점을 두고 있다.</p>
<p>머신 러닝은 데이터 마이닝이나 기타 학습 알고리즘을 통하여 지식을 추출하고 이를 학습한 경험 내용을 바탕으로 비슷한 상황의 미래 사건의 결과를 예측하는 프로그램이다.</p>
<p>인공지능의 한 분야로서 데이터의 패턴을 발견하는 핵심 알고리즘이 동일하지만, 머신러닝은 자체 학습 알고리즘을 사용하며 시간이 경과함에 따라 경험을 축적, 성능이 향상한다.</p>
<p>데이터를 모델링하는 알고리즘은 여러가지가 있다.</p>
<h3 id="지도학습-supervised-learning">지도학습 (Supervised learning)</h3>
<p>결과를 알고있는 label이 있는 데이터를 바탕으로 예측 분석하는것 ex) 회귀 분석, 분류</p>
<h3 id="비지도학습-unsupervised-learning">비지도학습 (Unsupervised learning)</h3>
<p>데이터 속에 어떤 의미가 숨겨져 있는지 정확히 모르는 경우에 사용한다. label이 없는 데이터에서 패턴을 발견하고, 구조를 찾아내는 것 ex) 군집화, 의사결정트리</p>
<h3 id="강화학습-reinforcement-learning">강화학습 (Reinforcement learning)</h3>
<p>경험과 시행착오를 통해 얻은 데이터를 바탕으로 모델을 지속적을 개선하는 방식. 어떤 상황에서 어떤 조치가 취해졌냐에 따라 점수를 부여하고 학습한다.</p>
<h2 id="데이터-마이닝---다양한-관점에서-데이터를-분석을-통해-의미-도출">데이터 마이닝 - 다양한 관점에서 데이터를 분석을 통해 의미 도출</h2>
<p>데이터 마이닝은 데이터의 미처 몰랐던 속성을 발견하는 것에 집중한다. 이는 데이터베이스의 지식 발견 부분의 분석 절차에 해당한다.</p>
<p>보유한 데이터를 다양한 관점에서 분석하며, 결과를 유용한 정보로 조합.</p>
<p>방대한 데이터 속 숨어있던 패턴들과 상관성을 통계적 수법들로 가치를 부여한다.</p>
<p>숫자가 아닌 데이터도 처리한다는 점에서 통계처리와 구분된다.</p>
<p>데이터 마이닝은 입력된 데이터의 품질에 따라 달라진다. 데이터 분류가 잘못되거나 부정확한 데이터는 그릇된 예측을 낳는다. ‘데이터 마이닝’은 이전에 발생했던 데이터의 추세에 의존한다는 점에서 응용에 한계가 있다. 지나간 사건을 기반으로 하므로 미래에 벌어질 새로운 추세를 진단하기엔 역부족이다. 머신러닝과의 차이점.</p>
<p>데이터 마이닝 기법에는 세가지 유형이 있다.</p>
<h3 id="연관-분석">연관 분석</h3>
<p>주어진 데이터 셋에서 자주 발생하는 속성값들을 연결 및 연관 규칙을 발견</p>
<p>ex) 장바구니 내 개별 상품간의 상관관계를 식별</p>
<h3 id="회귀-분석">회귀 분석</h3>
<p>독립 변수 분석을 통해 종속 변수가 무언지 밝혀내는 일</p>
<p>ex) 상품의 예상판매실적을 주요 고객의 소득 수준과 판매가격 상관관계로 예측하는 방법</p>
<h3 id="분류">분류</h3>
<p>개체들을 여러 카테고리로 분류. 의사결정 트리, 수학공식 또는 if-then 규칙 등이 사용된다.</p>
<h4 id="참고-자료">참고 자료</h4>
<p><a href="https://news.samsungdisplay.com/12538">https://news.samsungdisplay.com/12538</a>
<a href="https://ko.wikipedia.org/wiki/%EA%B8%B0%EA%B3%84_%ED%95%99%EC%8A%B5">https://ko.wikipedia.org/wiki/%EA%B8%B0%EA%B3%84_%ED%95%99%EC%8A%B5</a></p>
<blockquote>
<p>당신이 할수 있다고 믿든 할수 없다고 믿든 믿는 대로 될것이다.- 헨리 포드</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[선택 정렬 (Selection Sort)]]></title>
            <link>https://velog.io/@jace_eo/%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%AC-Selection-Sort</link>
            <guid>https://velog.io/@jace_eo/%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%AC-Selection-Sort</guid>
            <pubDate>Mon, 09 Jan 2023 23:35:44 GMT</pubDate>
            <description><![CDATA[<h2 id="선택-정렬-selection-sort">선택 정렬 (Selection Sort)</h2>
<p>선택 정렬은 제자리 정렬 중 하나이다. 알고리즘이 단순하며 사용할 수 있는 메모리가 제한적인 경우에 성능 상의 이점이 있다.</p>
<h3 id="정렬-방식">정렬 방식</h3>
<p>매 반복 pass 마다 가장 크거나 작은 자료를 선택하고, 해당 반복 패스가 끝날 때 선택한 자료를 맨 앞이나 맨 뒤로 옮기는 과정을 수행한다. 전체 자료에 대해 이러한 과정을 반복적으로 수행.</p>
<h3 id="시간복잡도">시간복잡도</h3>
<p>데이터의 개수가 n개라고 했을 때, </p>
<p>n개의 주어진 배열을 정렬하는데 최선/평균/최악 O(n^2) 만큼의 시간이 걸린다. </p>
<h3 id="공간복잡도">공간복잡도</h3>
<p>제자리 정렬 알고리즘이므로, O(n)</p>
<h3 id="장점">장점</h3>
<p>알고리즘이 단순하다.</p>
<p>데이터량이 적을때는, 비교적 좋은 성능을 보임</p>
<p>배열 안에서 교환하는 방식이므로, 다른 메모리 공간을 필요로 하지 않는다.</p>
<h3 id="단점">단점</h3>
<p>시간복잡도가 O(n^2)으로, 비효율적이다.</p>
<p>안정적이지 못한 정렬 (nonstable sort) - 정렬 전 입력 자료 순서가 유지되지 못함</p>
<h4 id="참고자료">참고자료</h4>
<p><a href="https://gyoogle.dev/blog/algorithm/Selection%20Sort.html">https://gyoogle.dev/blog/algorithm/Selection%20Sort.html</a>
<a href="http://www.ktword.co.kr/test/view/view.php?m_temp1=5888">http://www.ktword.co.kr/test/view/view.php?m_temp1=5888</a>
<a href="https://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC">https://ko.wikipedia.org/wiki/%EC%84%A0%ED%83%9D_%EC%A0%95%EB%A0%AC</a></p>
<blockquote>
<p>당신이 인생의 주인공이기 때문이다 . 그사실을 잊지마라 . 지금까지 당신이 만들어온 의식적 그리고 무의식적 선택으로 인해 지금의 당신이 있는것이다 . – 바바라 홀</p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>