<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hmu_uri.log</title>
        <link>https://velog.io/</link>
        <description>일단 가보면 뭐든 있겠지</description>
        <lastBuildDate>Tue, 21 May 2024 14:48:31 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hmu_uri.log</title>
            <url>https://velog.velcdn.com/images/hmu_uri/profile/a337f07d-7df5-4d27-bd5f-bdd049257ee2/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hmu_uri.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hmu_uri" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[react-big-calendar css 커스텀하기]]></title>
            <link>https://velog.io/@hmu_uri/react-big-calendar-css-%EC%BB%A4%EC%8A%A4%ED%85%80%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@hmu_uri/react-big-calendar-css-%EC%BB%A4%EC%8A%A4%ED%85%80%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 21 May 2024 14:48:31 GMT</pubDate>
            <description><![CDATA[<p>현재 내가 졸업 프로젝트를 진행하고 있는 주제는 생성형 AI를 이용해 스케줄을 관리해주는 것이다.</p>
<p>생성형 AI를 이용해 &#39;스케줄&#39;을 관리한다...</p>
<p>그래,, 스케줄 서비스에 빠질 수 없는 게 바로 무엇?</p>
<h3 id="달력">달력</h3>
<p>이다.</p>
<p>우리 서비스의 프론트엔드는, next.js를 사용하고 있는데, 이 노드 기반의 프로젝트를 진행하면서 가장 중요한 기반이 될 캘린더를 어떻게 만들어야 할지는 내게 굉장히 큰 고민이었다.</p>
<p>사실, 직접 만들까도 생각해보았는데 생각보다 시간이 촉박하여, 라이브러리를 사용하기로 하였고, 어떤 라이브러리를 사용하면 좋을지에 대해 조사를 해보았다.</p>
<p>정말정말 많은 캘린더 UI 관련 서비스가 있었지만, 내가 최종적으로 선택한 서비스는 npm 라이브러리인 react-big-calendar이다.</p>
<p>선택한 이유는 다음과 같다.</p>
<ol>
<li>npm 으로 관리가 가능한가? =&gt; 필수조건. O</li>
<li>많이 사용되어 사용성이 검증되었는가? =&gt; O (date-picker을 앞질렀다)</li>
<li>자유도가 높은가? =&gt; 상당히 많은 기능이 들어갈 것 같아, 이미 많이 만들어져 있는 것 보다는, 기본 틀만 잡혀있고, custom을 자유롭게 하길 바랐다. O</li>
</ol>
<p>위에 적은 이유와 더불어, 일정을 캘린더 위에서 드래그 앤 드랍으로 움직여서 떨어트릴 수 있는 기능이 굉장히, 매력적으로 보였고, 그렇게 나는 react-big-calendar을 사용하게 되었다.(의 늪에 빠지고 말았다.. 허우적)</p>
<p>처음, npm install react-big-calendar를 터미널 창에 쳐서 다운을 받고, (타입스크립트는 npm i --save-dev @types/react-big-calendar)</p>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/58671fe6-836e-4cf4-8882-59b17b692ff9/image.png" alt="">
이렇게 상단에 react-big-calendar라는 module로 부터 Calendar를 꺼내온다. (나는 BigCalendar라는 이름으로 명칭을 넣고 싶어서 as BigCalendar라고 한 거고, 그냥 import {Calendar} 라고 해도 된다.)</p>
<p>자, 그럼 일단 내가 만든 결과물을 살펴보자.</p>
<p>기본적으로 내가 만든 캘린더는</p>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/dc3da82d-72cb-4415-87fe-c627f4179042/image.png" alt="">
이런 형태를 가지고 있다. 여기서는 간단하게 header를 내가 따로 component로 만들어서 react-big-calendar 안에 넣어주었고,(이것이 바로 이 라이브러리의 큰 장점) 달력은 css를 커스텀하였다.</p>
<p>그리고 
<img src="https://velog.velcdn.com/images/hmu_uri/post/4feb675d-9c4b-4766-a06e-b085a6db02fa/image.png" alt=""></p>
<p>이렇게... 각 날짜 칸을 클릭하면 그 날짜에 해당하는 모달창이 뜨게끔 만들어줬다. (아주 고생했다.)</p>
<p>그래서 오늘은, 이 중에서도 가장 기본적인 css 커스터마이징에 대해 얘기해보고자 한다. 사실 이건, 앞으로 어떤 라이브러리를 다운을 받던 적용하는 방식이 비슷해서 한번 같이 알아보며 정리해보면 좋을 것 같아 준비했다.</p>
<p>그 전에, 우리가 보통 말하는 라이브러리란, 그리고 node_modules란 무엇일까? 맨날 node_modules node_modules.. 얘네는 git에 올리면 안되고, 파일 그 안에 엄청 많고 그런 건 많이 들어봤는데, 혹시 node_modules를 뜯어본 적이 있는가..!! </p>
<p>사실 나도 각 잡고 뜯어본 적은 없는데, 이번에 react-big-calendar를 적용시키면서, &#39;하도 답답해서&#39; node_modules를 뜯어보았다.</p>
<p>그 결과...</p>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/f287ac15-65c7-40f5-bf30-2db7c0c0fd96/image.png" alt=""></p>
<p>이 화면이 보이는가? 왼쪽에 보이는 게 바로 node_modules 안에 설치된 react-big-calendar인데, 우리가 보통 사용하는 바와 같이 css와 js가 고대로...! 들어있다.</p>
<p>그러니까 node_modules라고 특별한 게 있는 건 아니고, 그냥 css랑 js가 그대로 들어있고, (html은 그럼 어디있어요? =&gt; 우리가 결국 library를 설치해 가져오는 게, 화면(html, dom)이니까 그게 html이 되어주는 것 - 내 뇌피셜) 거기서 정의되어 있는 기능들을 가져오는 것이다! 그리고, 이 node_modules는 package.json 에 적혀있는 파일명들을 보고 자동적으로 설치가 되는 것이기 때문에, package.json만 있으면, 언제든 똑같이 설치가 가능. 그래서 git 같은 곳에는 괜히 무거워지게 올리지 않고, package.json만 업데이트 해주는 것이다.</p>
<p>그래서 만약, 이 react-big-calendar를 커스텀하고 싶다? 그럼 여기서 정의하고 있는 css나 기능들을 참고해서, 우리가 사용하는 쪽으로 끌어와서 위에 덮어쓰면 된다.</p>
<p>근데,, 사실 js 같은 경우는 아예 상호작용 적인 게 다 프로그래밍이 되어 있다 보니, 이미 짜여진 로직을 변경하는 게 아주아주 어렵더라. 아니, 거의 불가능에 가까워서 거의 Proxy 서버 띄우듯이 그 아이들의 로직을 속이려 노력해야 했다.</p>
<p>하지만, css는??? 바로바로 뒤늦게 선언된 아이가 승자이자, 최종적으로 적용되기 때문에, (그러니까, 만약 width: 100px; width: 200px; 이렇게 돼있으면 200px로 적용된다는 의미)</p>
<p>node_modules의 라이브러리에서 선언된 css 적인 부분은 모두모두! 우리가 커스터마이징 할 수 있다는 점!</p>
<p>그래서, 어떻게 하나요?</p>
<p>지금부터, 내가 아주 빠르게. node_modules의 css를 커스텀하는 방식을 알려주겠다.</p>
<p>일단, 기본적인 calendar를 창에 띄워보자. 내 calendar는 이미 커스텀되어 있지만, 기본 틀은 같으므로 그냥 여기서 진행을 해보겠다.</p>
<p>그리고, Fn+F12를 눌러서 크롬 개발자 도구를 켜보자.</p>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/fe3c0f2e-ad62-4bb8-aae3-700969c7a659/image.png" alt="">
그럼 대충 이런 창이 보일 거고, 오른쪽 Elements와 Network가 써져있는 왼쪽 맨 끝에, 창에 화살표가 있는 것을 클릭을 한다.</p>
<p>그리고 왼쪽의 화면 창에 갖다대면,</p>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/26c07f6f-fa58-4faf-8e5c-ca6df165289e/image.png" alt="">
이런 모습을 볼 수 있다.</p>
<p>자, 지금 나는 날짜에 커서를 갖다댔고, 거기에는 button.rbc-button-link라는 이름이 붙여져 있다. 이게 무엇이냐? 바로 className이다. className이란 무엇이냐? 바로. css를 적용하기 위해 임의로 저 숫자들에 붙여놓은 이름이란 것이다.</p>
<p>무슨 소리냐고? 아까 찾아놓은 node_modules의 css 창으로 가보자.</p>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/34f30d54-dd2d-45ae-99dc-c737461d5b37/image.png" alt="">
node_modules에서 react-big-calendar를 찾아 들어가 lib/css 창을 들어가보면, react-big-calendar.css가 보인다. 그리고, 거기서 rbc-button-link를 찾아보면, 이렇게 여기에 적용되는 css 값들이 있다!!</p>
<p>즉, npm 라이브러리를 통해 설치된 node_modules에서는 이렇게 각 부분에className을 붙여 놓고, css에서 값을 설정하는 방식으로 화면을 구성시켜놓았고, 그래서 우리는 단 몇 번의 클릭만으로 사용되는 css 값들과, className을 찾을 수 있는 것이다.</p>
<p>그러면 우리는, 그냥 우리가 직접 만드는 창으로 내려와서, 이 className을 덮어주기만 하면 된다.</p>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/8bf44ea4-6231-4d69-a096-ec8d97ed75b6/image.png" alt="">
나는 이렇게 본래의 프로젝트에서 따로 style/calendar/style.css 라는 파일을 만들어서, </p>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/4a39e7aa-a6cd-4ab5-987d-310ded862943/image.png" alt="">
이렇게 가장 기본 _app.tsx 파일에 선언을 해놓고,</p>
<p>여기서 중요한 점은 내가 react-big-calendar의 css를 덮어쓴다는 것을 확실히 하기 위해 </p>
<p>import &quot;react-big-calendar/lib/css/react-big-calendar.css&quot;;</p>
<p>이 부분도 꼭 추가해줘야 한다는 점이다.</p>
<p>그 이후에 아까 찾은 className 값을 그대로 가져와서, 배경색, 글씨 크기 등을 커스텀함으로써 나만의 캘린더를 만들었다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[13주차 컴퓨터 네트워크]]></title>
            <link>https://velog.io/@hmu_uri/13%EC%A3%BC%EC%B0%A8-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@hmu_uri/13%EC%A3%BC%EC%B0%A8-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Sun, 07 Jan 2024 14:58:32 GMT</pubDate>
            <description><![CDATA[<h2 id="전통적인-라우팅-방식의-특징">전통적인 라우팅 방식의 특징</h2>
<h3 id="1-라우터별-제어-플레인">1. 라우터별 제어 플레인</h3>
<pre><code>- 제어 플레인 : 네트워크에서 데이터를 어디로 보낼지, 트래픽이 어떻게 전달될지 결정하는 두뇌
- 각 라우터는 자신만의 제어 플레인을 가짐 =&gt; 라우터별로 독립적인 경로 계산 및 결정이 가능
- 결론적으로, 네트워크의 각 부분이 서로 다른 운영 체제와 설정을 가질 수 있고, 중앙집중식 관리가 없는 분산된 환경에서 작동.
- ex) IP, RIP, IS-IS, OSPF, BGP
- 라우터의 독립성이 네트워크 전체의 통합된 관리와 최적화를 어렵게 함.</code></pre><h3 id="2-트래픽-엔지니어링">2. 트래픽 엔지니어링</h3>
<pre><code>- 트래픽을 특정 경로로 유도하는 것.
- 전통적인 라우팅에서는 트래픽 엔지니어링이 어렵다.
- 매번 특정 경로를 위해 링크 가중치를 재정의하거나 새로운 라우팅 알고리즘을 개발해야 할 수 있다.</code></pre><p>=&gt; 전통적인 라우팅 방식은 네트워크의 다양한 요구와 유연성을 충족시키기 어렵다.
=&gt; 네트워크가 계속 발전하고 복잡해지면서, 이러한 제한 사항들이 더욱 두드러지게 되었고
=&gt; SDN이 등장하였다.</p>
<h1 id="sdnsoftware-defined-networking">SDN(Software Defined Networking)</h1>
<p>네트워크 제어 플레인과 포워딩 플레인을 분리하고, 제어 플레인을 중앙집중화하여 유연성과 효율성을 높인다.</p>
<h3 id="1-네트워크-제어-플레인과-포워딩-플레인의-분리">1. 네트워크 제어 플레인과 포워딩 플레인의 분리</h3>
<pre><code>- 네트워크의 제어 기능을 구현하고, SDN 컨트롤러가 제공하는 북바운드 API를 사용하여 작동</code></pre><h3 id="2-메인프레임에서-pc로의-진화-비유">2. 메인프레임에서 PC로의 진화 비유</h3>
<pre><code>- SDN의 개념은 메인프레임 컴퓨터에서 개인용 컴퓨터(PC)로의 진화와 비교될 수 있다.</code></pre><h3 id="3-sdn-제어-플레인의-역할">3. SDN 제어 플레인의 역할</h3>
<pre><code>- SDN에서 제어 플레인은 원격 위치의 컨트롤러에 의해 수행.
- 컨트롤러는 네트워크의 전체 상황을 파악하고, 라우터나 스위치 등의 네트워크 장치에 포워딩 테이블을 계산하여 설치</code></pre><h3 id="4-sdn의-구조">4. SDN의 구조</h3>
<pre><code>- SDN 컨트롤러, 네트워크 제어 애플리케이션, 남북방 API, 그리고 SDN 제어 스위치로 구성
- 컨트롤러는 네트워크 제어 애플리케이션과 통신하며, 남북방 API를 통해 제어 명령을 전달하고 정보를 수집. SDN 제어 스위치는 이러한 명령에 따라 데이터 플레인을 조정.</code></pre><h3 id="5-데이터-플레인-스위치">5. 데이터 플레인 스위치</h3>
<pre><code>- 데이터 플레인 스위치는 네트워크에서 데이터 패킷을 전달하는 역할을 하는 장치
- &quot;물리적 통로&quot;와 같은 역할을 하며, 네트워크에서 데이터가 이동하는 경로를 결정.
- SDN에서 데이터 플레인 스위치는 단순하고 빠른 상품 스위치로 구성</code></pre><h3 id="6-sdn-컨트롤러의-역할">6. SDN 컨트롤러의 역할</h3>
<pre><code>- SDN 컨트롤러는 네트워크 운영 체제
- 전체 네트워크 상태 정보를 유지하고 네트워크 제어 애플리케이션과 상호 작용
- 네트워크의 성능과 확장성을 고려하여 분산 시스템으로 구현</code></pre><h2 id="openflow">OpenFlow</h2>
<pre><code>- SDN 환경에서 컨트롤러와 스위치 간의 통신에 사용되는 프로토콜
-  TCP를 사용하여 메시지를 교환하며, 필요에 따라 선택적인 암호화를 제공
=&gt;  컨트롤러가 네트워크 스위치를 효율적으로 제어 및 관리 가능</code></pre><h3 id="openflow-메시지">OpenFlow 메시지</h3>
<pre><code>[메세지 유형]
1. 스위치 기능에 대한 컨트롤러의 쿼리 : 컨트롤러는 스위치의 기능 및 능력을 파악하기 위해 쿼리를 보냄
2. 스위치 설정 매개변수의 쿼리 및 설정 : 컨트롤러는 스위치의 구성을 확인하고 필요에 따라 설정을 변경
3. 플로우 엔트리의 추가, 삭제, 수정 : 컨트롤러는 네트워크 트래픽을 제어하기 위해 플로우 테이블에 엔트리를 추가, 삭제 또는 수정 (특정 트래픽 패턴을 인식하고 그에 따라 적절한 액션을 취하는 규칙)</code></pre><h3 id="제어-플레인과-데이터-플레인-간의-상호작용">제어 플레인과 데이터 플레인 간의 상호작용</h3>
<h4 id="1-링크-실패-시-">1. 링크 실패 시 :</h4>
<pre><code>- 네트워크 내의 링크에 실패가 발생하면, 데이터 플레인(스위치)는 OpenFlow 프로토콜을 사용하여 컨트롤러에게 이 상황을 알림</code></pre><h4 id="2-컨트롤러-">2. 컨트롤러 :</h4>
<pre><code>- 컨트롤러는 이 정보를 받고, Dijkstra 알고리즘과 같은 라우팅 알고리즘을 사용하여 새로운 라우팅 경로를 계산</code></pre><p>=&gt;  네트워크의 효율성을 유지하고, 장애에 신속하게 대응</p>
<h1 id="network-management">Network ManageMent</h1>
<h3 id="네트워크-관리-프로토콜--네트워크-장비-및-서비스를-모니터링-관리-유지하는-데-사용되는-일련의-규약이나-표준">네트워크 관리 프로토콜 : 네트워크 장비 및 서비스를 모니터링, 관리, 유지하는 데 사용되는 일련의 규약이나 표준</h3>
<p>=&gt; 이를 통해 트워크 장치의 상태를 파악하고, 문제를 진단하며, 네트워크 구성을 변경하고, 성능을 최적화하는 데 필요한 데이터와 명령을 전송함</p>
<p><em>Main Goal</em> : 네트워크의 효율성과 안정성을 유지하고, 잠재적 문제를 신속하게 해결하여 네트워크의 지속적인 운영을 보장하는 것</p>
<h3 id="1-snmp-simple-network-management-protocol">1. SNMP (Simple Network Management Protocol)</h3>
<pre><code>- 네트워크 장비를 모니터링하고 관리하는 데 사용되는 인터넷 표준 프로토콜
- 세 가지 주요 구성 요소: 관리 대상 장치(네트워크 장비), 에이전트(장치에 설치된 소프트웨어), 네트워크 관리 시스템(NMS)
- 에이전트는 장치의 상태 정보를 수집하고, NMS에게 SNMP 메시지를 통해 이를 보고. NMS는 네트워크의 전반적인 상태를 모니터링하고 필요한 경우 설정을 조정
- 현재 보안과 데이터 형식의 개선이 이루어진 SNMP v2가 나온 상태.</code></pre><h3 id="2-netconf-network-configuration-protocol">2. NETCONF (Network Configuration Protocol)</h3>
<pre><code>- 네트워크 장비의 구성을 관리하기 위한 프로토콜
- XML(언어)을 기반으로 하며, 네트워크 장비의 구성을 검색하고, 수정하고, 업데이트하는 기능을 제공
- SSH(Secure Shell)을 통해 안전한 연결을 지원하며, 더 나은 보안과 무결성을 제공</code></pre><h3 id="3-yang-a-data-modeling-language-for-netconf">3. YANG (A Data Modeling Language for NETCONF)</h3>
<pre><code>- NETCONF를 위한 데이터 모델링 언어로, 네트워크 장비의 구성과 상태를 모델링하는 데 사용
- 네트워크 장비의 구성을 표준화하고, 구성 데이터의 구조와 제약 조건을 명확하게 정의
- 복잡한 네트워크 장비의 구성을 단순하고 이해하기 쉬운 방식으로 표현할 수 있어, 네트워크 관리자가 보다 효과적으로 장비를 관리할 수 있음</code></pre><p>SNMP는 주로 모니터링과 관리에 초점을 맞춘 반면, NETCONF와 YANG은 네트워크 장비의 구성을 보다 정밀하게 관리하고, 네트워크의 상태와 구성을 보다 효율적으로 모델링할 수 있는 기능을 제공</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[12주차 컴네]]></title>
            <link>https://velog.io/@hmu_uri/12%EC%A3%BC%EC%B0%A8-%EC%BB%B4%EB%84%A4</link>
            <guid>https://velog.io/@hmu_uri/12%EC%A3%BC%EC%B0%A8-%EC%BB%B4%EB%84%A4</guid>
            <pubDate>Tue, 02 Jan 2024 14:35:49 GMT</pubDate>
            <description><![CDATA[<p>계층적 라우팅: Autonomous Systems (AS)</p>
<ul>
<li>Autonomous System<ul>
<li>네트워크 모음, 동일한 라우팅 정책, 단일 소유권</li>
<li>고유 32비트 정수 AS 번호(ASN)로 식별</li>
<li>ASN, Internet Assigned Numbers Authority(IANA) 관리</li>
<li>동일 AS 내 라우터, 동일한 intra-AS 라우팅 프로토콜 실행 (OSPF, RIP 등)</li>
</ul>
</li>
<li>Gateway Router<ul>
<li>AS의 &quot;edge&quot;에 위치, 다른 AS의 라우터와 링크</li>
<li>inter-AS 라우팅 프로토콜 실행 (BGP 등)</li>
</ul>
</li>
<li>ASBR(Autonomous System Border Router)<ul>
<li>IGP와 EGP 수행</li>
</ul>
</li>
<li>Transit AS<ul>
<li>여러 AS를 거쳐가는 트래픽 통과</li>
</ul>
</li>
<li>Stub AS<ul>
<li>단일 ISP와만 연결, 해당 AS로 도착 및 출발하는 트래픽만 존재</li>
</ul>
</li>
</ul>
<p>인터넷의 확장 가능한 라우팅 접근 방식</p>
<ul>
<li>Intra-AS Routing (IGP)<ul>
<li>Interior Gateway Protocol (IGP)</li>
<li>동일 AS 내 호스트, 라우터 간 라우팅</li>
<li>모든 라우터, 동일한 intra-domain 프로토콜 실행</li>
<li>RIP, OSPF, IS-IS, IGRP 등</li>
</ul>
</li>
<li>Inter-AS Routing (EGP)<ul>
<li>Exterior Gateway Protocol (EGP)</li>
<li>AS간 라우팅</li>
<li>연결된 ASes</li>
</ul>
</li>
</ul>
<p>라우터, Intra-AS(IGP) 및 Inter-AS(EGP) 라우팅 알고리즘에 의해 설정된 포워딩 테이블</p>
<ul>
<li>각 라우터, intra-AS(IGP)와 inter-AS(EGP) 둘 다 필요</li>
</ul>
<p>Intra-AS Routing: RIP(Routing Information Protocol)</p>
<ul>
<li>L5 프로토콜: &quot;routed&quot;라 불리는 응용 수준 프로세스에 의해 관리되는 RIP 라우팅 테이블</li>
<li>UDP 패킷에서 주기적으로 반복되는 광고</li>
<li>Distance-Vector (DV) 알고리즘 (B-F 알고리즘)</li>
<li>Metric = 홉 카운터(최대 15 홉), 각 링크 비용</li>
<li>15 홉 이상의 경로는 도달 불가능</li>
<li>DV(광고)는 이웃과 30초마다 교환</li>
<li>광고에 최대 25개 목적지 서브넷 포함</li>
<li>느린 수렴 문제: Count-to-Infinity -&gt; 해결: Split horizons, Split horizons with poison reverse</li>
</ul>
<p>OSPF(Open Shortest Path First)</p>
<ul>
<li>Link State (LS) 알고리즘</li>
<li>Metric = 서비스 유형에 기반 (BW, 최소 지연, 처리량, 신뢰성 등)</li>
<li>모든 라우터, 동일한 AS에 대한 글로벌 토폴로지 맵 보유</li>
<li>계산은 Dijkstra 알고리즘 사용</li>
<li>두 레벨 계층</li>
<li>AS는 지역, 하나의 백본 영역으로 나뉨</li>
<li>LSA는 지역 내에만 홍수</li>
<li>ABR(Area Border Router): 다른 ABR에게 요약, 광고</li>
<li>백본 라우터: 백본에 한정된 OSPF 라우팅 실행 (DV 사용)</li>
<li>ASBR(AS Boundary Router): 다른 AS에 연결 (OSPF + BGP)</li>
<li>백본 영역: DV 사용, count-to-infinity 발생 가능</li>
</ul>
<p>BGP(Border Gateway Protocol)</p>
<ul>
<li><p>Inter-AS 라우팅 프로토콜</p>
</li>
<li><p>여러 ISP를 거쳐 가는 경로 계산</p>
</li>
<li><p>EGP와 BGP</p>
<p>존재, 현재 모든 인터넷 라우터 BGP 사용</p>
</li>
<li><p>정책 기반 라우팅</p>
</li>
<li><p>목적지 서브넷에 도달하기 위한 경로의 전체 AS 경로 목록 광고</p>
</li>
<li><p>라우팅 루프 방지</p>
</li>
<li><p>Classless Inter Domain Routing (CIDR)</p>
</li>
<li><p>증분 업데이트: TCP 연결 수립 및 모든 후보 BGP 경로 교환 후, 이전 업데이트의 변경 사항만 광고</p>
</li>
</ul>
<p>BGP: Peering</p>
<ul>
<li>Peering: 무료로 라우팅 정보 및 트래픽 교환</li>
<li>BGP Peers (이웃): BGP 메시지 교환하는 두 라우터</li>
<li>External BGP Peering (eBGP): 다른 AS 간<ul>
<li>eBGP 피어는 다른 ASN 보유</li>
<li>eBGP는 라우팅 정책 구현</li>
<li>물리적으로 직접 연결되어야 함</li>
</ul>
</li>
<li>Internal BGP Peering (iBGP): 동일 AS 내<ul>
<li>iBGP 피어는 동일 ASN 보유</li>
<li>완전 메쉬 연결 필요 (반드시 직접 연결되지 않아도 됨) - iBGP 피어, IGP 사용하여 도달 가능해야 함</li>
</ul>
</li>
<li>게이트웨이 라우터, eBGP 및 iBGP 프로토콜 실행</li>
</ul>
<p>BGP: session</p>
<ul>
<li>두 BGP 라우터(피어)가 TCP 연결을 통해 BGP 메시지 교환</li>
<li>eBGP: 이웃 AS로부터 서브넷 도달 가능성 정보 학습</li>
<li>iBGP: AS 외부에서 학습된 접두어를 AS 내 모든 라우터에 전파</li>
<li>iBGP는 다른 iBGP로부터 학습된 접두어 전달 안 함</li>
<li>도달 가능성 정보 및 정책 기반 좋은 경로 결정</li>
</ul>
<p>BGP 메시지 유형</p>
<ul>
<li>OPEN: 원격 BGP 피어와 TCP 연결 개설, BGP 피어 인증</li>
<li>UPDATE: 새 경로 광고 (또는 기존 철회)</li>
<li>KEEPALIVE: UPDATE 부재시 연결 유지, OPEN 요청 ACK</li>
<li>NOTIFICATION: 이전 메시지의 오류 보고, 연결 종료</li>
<li>Marker: BGP 메시지 시작 구별, TCP byte-stream 전송 방식 때문에 필요</li>
</ul>
<p>BGP 경로</p>
<ul>
<li>광고 접두사에 BGP 경로 속성 포함</li>
<li>BGP 경로 = (목적지 접두사 + 해당 목적지로 가는 경로 속성)</li>
<li>BGP 경로 속성<ul>
<li>AS-PATH: 목적지 서브넷에 도달하기 위한 ASN 목록</li>
<li>NEXT-HOP: 다음 홉 AS의 eBGP 피어 IP 주소</li>
</ul>
</li>
</ul>
<p>BGP: 정책 기반 라우팅</p>
<ul>
<li>import 정책: 게이트웨이 수신 경로 광고, import 정책 사용하여 경로 수락/거부<ul>
<li>외부 AS에서 얻은 라우터 정보 내부 AS 전달 결정</li>
</ul>
</li>
<li>export 정책: 인접 AS에 경로 광고 여부 결정<ul>
<li>내부 AS 라우터 정보 이웃 AS에 알릴지 결정</li>
</ul>
</li>
<li>ASBR은 다른 ASBR이 알려준 모든 inter-AS 경로 정보를 iBGP 세션으로 전달한다? (X) → 정책에 기반한 선택된 경로 정보만 전달</li>
</ul>
<p>BGP 라우트 선택: Hot Potato Routing</p>
<ul>
<li>외부 AS에 연결된 목적지로 가는 경로 중 AS 내부 비용이 가장 적은 라우트</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[12주차 데이터베이스]]></title>
            <link>https://velog.io/@hmu_uri/12%EC%A3%BC%EC%B0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@hmu_uri/12%EC%A3%BC%EC%B0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Tue, 02 Jan 2024 14:24:54 GMT</pubDate>
            <description><![CDATA[<p>데이터 과학은 데이터의 큰 규모, 다양한 형태와 데이터 활용 증가에 대응하기 위해 발전한 분야. 이 분야는 데이터 수집, 저장, 분석, 표현의 전 과정을 포함.</p>
<p>주요 목적은 데이터를 통해 숨겨진 새로운 지식을 발견하고, 문제 해결에 활용하는 것. 이를 위해 데이터 과학은 컴퓨터 과학, 통계학, 특정 적용 분야에 대한 이해를 필요로 하는 복합적 기술을 사용.</p>
<p><strong>DIKW(DIWK) 계층 구조</strong>는 데이터 과학의 중요한 개념 중 하나. 이 구조는 데이터, 정보, 지식, 지혜의 네 단계로 구성:</p>
<ol>
<li><p><strong>데이터(Data)</strong>: 관찰이나 측정을 통해 수집된 사실이나 값. 예를 들어, 온도 측정값이나 판매 데이터 등이 해당.</p>
</li>
<li><p><strong>정보(Information)</strong>: 데이터를 상황에 맞게 가공하여 얻은 의미 있는 형태. 예를 들어, 특정 기간의 평균 온도나 월별 판매량 증감 등의 데이터가 정보에 해당.</p>
</li>
<li><p><strong>지식(Knowledge)</strong>: 정보 분석을 통해 발견된 규칙이나 패턴. 의미 있고 유용한 정보로, 시장 추세나 소비자 행동 패턴 이해에 포함.</p>
</li>
<li><p><strong>지혜(Wisdom)</strong>: 지식에 통찰력을 더한 새롭고 창의적인 아이디어. 문제 해결이나 새로운 전략 개발에 활용될 수 있음.</p>
</li>
</ol>
<p>이 계층 구조는 데이터로부터 시작해 지혜에 이르는 정보의 가치 증대 과정을 나타냄. 데이터 과학자들은 이 구조를 이해하고 활용해 데이터에서 가치 있는 통찰을 도출하고 실제 세계의 문제를 해결하는 데 중요한 역할을 함.</p>
<p>빅데이터(Big Data)는 기존 데이터베이스의 저장 및 관리 능력을 초과하는 대규모의 다양한 데이터를 뜻함. 이는 대규모 데이터의 저장, 관리 기술과 가치 있는 정보를 만들기 위한 분석 기술을 포함. 빅데이터의 특징은 &#39;3V&#39;로 요약:</p>
<ol>
<li><p><strong>데이터양(Volume)</strong>: 테라바이트(TB) 단위 이상의 대량 데이터를 포함하며, 여러 경로를 통해 지속적으로 생성되는 많은 양의 데이터.</p>
</li>
<li><p><strong>속도(Velocity)</strong>: 데이터의 수집과 분석을 정해진 시간 내에 처리하는 것으로, 많은 양의 데이터가 빠르게 생성되고 전달됨으로써 수집 및 분석 작업이 실시간으로 진행됨.</p>
</li>
<li><p><strong>다양성(Variety)</strong>: 정형, 반정형, 비정형 등 다양한 형태의 데이터를 포함. 이는 빅데이터를 단순한 양적 대규모 데이터를 넘어서 질적 측면의 다양한 형태를 포함하는 대규모 데이터로 이해하는 것을 의미.</p>
</li>
</ol>
<p>빅데이터 기술은 저장 기술, 분석 기술, 표현 기술을 포함:</p>
<p><strong>빅데이터 저장 기술</strong>:</p>
<ul>
<li><strong>하둡(Hadoop)</strong>: 대용량 데이터를 분산 처리할 수 있는 자바 기반의 오픈 소스 프레임워크. 분산 파일 시스템인 HDFS에 데이터를 저장하고, 맵리듀스를 이용해 데이터 처리. 오픈 소스이며, 여러 대의 서버에 데이터를 분산해서 저장해 처리 속도가 빠름.</li>
<li><strong>NoSQL</strong>: 관계 데이터 모델과 SQL을 사용하지 않는 데이터베이스 시스템. 가용성과 확장성에 중점을 둠. 비정형 데이터 저장을 위해 유연한 데이터 모델을 지원하며, 분산 처리와 병렬 처리가 가능함. 예: H베이스, 카산드라, 몽고DB, 카우치DB 등.</li>
</ul>
<p><strong>빅데이터 분석 기술</strong>:</p>
<ul>
<li><strong>텍스트 마이닝</strong>: 반정형 또는 비정형 텍스트에서 자연어 처리 기술로 정보를 추출하고 가공.</li>
<li><strong>오피니언 마이닝</strong>: SNS, 블로그, 게시판 등에 기록된 사용자들의 의견을 수집하고 분석하여 제품이나 서비스에 대한 선호도를 추출.</li>
<li><strong>소셜 네트워크 분석</strong>: 소셜 네트워크의 연결 구조나 강도 등을 바탕으로 영향력, 관심사, 성향, 행동 패턴 등을 추출.</li>
<li><strong>군집 분석</strong>: 데이터 간 유사도를 측정한 후 특성이 비슷한 데이터를 합쳐 최종적으로 유사 특성의 데이터 집합을 추출.</li>
</ul>
<p><strong>빅데이터 표현 기술</strong>:</p>
<ul>
<li><strong>R 언어</strong>: 데이터 분석을 통해 추출한 의미와 가치를 시각적으로 표현하기 위해 사용됨. 다양한 프로그래밍 언어와 연동 가능하고 다양한 운영체제를 지원하며, 하둡 환경에서 분산 처리를 지원하는 라이브러리를 제공.</li>
</ul>
<p>빅데이터 저장 기술: NoSQL(Not Only SQL)</p>
<p>대량의 비정형 데이터를 빠른 속도로 저장, 처리
ACID(원자성, 일관성, 격리성, 지속성) 위한 트랜잭션 기능 미제공
저렴한 비용으로 여러 대의 컴퓨터에 데이터 분산, 저장, 처리 가능
융통성 있는 데이터 모델 사용
스키마 없이 동작, 데이터 구조 변경 용이
비정형 데이터 저장 적합</p>
<p>관계 데이터베이스 vs. NoSQL</p>
<ul>
<li>관계 데이터베이스<ul>
<li>장점: 트랜잭션 일관성 유지, 테이블 간 관계 표현, 복잡한 질의 처리</li>
<li>단점: 대량 비정형 데이터 저장 확장성 비효율</li>
</ul>
</li>
<li>NoSQL<ul>
<li>장점: 트랜잭션 기능 미제공, 스키마 변경 자유, 대량 비정형 데이터 빠른 저장, 처리</li>
<li>단점: SQL 대신 별도 분석 기술 필요</li>
</ul>
</li>
</ul>
<p>NoSQL 종류</p>
<ul>
<li>키-값(key-value) 데이터베이스<ul>
<li>키와 값 쌍 저장, 다양한 형태 값 저장 가능</li>
<li>질의 처리 속도 빠름</li>
<li>키 이용 전체 검색 가능, 값 일부 검색 및 내용 기반 질의 별도 처리 필요</li>
<li>예: 아마존 다이나모DB(DynamoDB), 레디스(Redis)</li>
</ul>
</li>
<li>문서 기반(document-based) 데이터베이스<ul>
<li>키와 문서 쌍 저장, JSON, XML 등 반정형 형태 문서 저장</li>
<li>문서 객체지향 개념 유사</li>
<li>문서 전체 검색 및 특별한 문서 대상 질의 언어 이용 부분 검색 가능</li>
<li>예: 몽고DB(MongoDB), CouchDB</li>
</ul>
</li>
<li>컬럼 기반(column-based) 데이터베이스<ul>
<li>컬럼 패밀리와 키 쌍 저장, 관련 컬럼 값들 모음</li>
<li>관계 데이터 모델 테이블 유사성 및 차별성</li>
<li>다양한 형태 데이터 저장, 컬럼 패밀리별 구성 다양화</li>
<li>예: 구글 빅테이블(BigTable), H베이스(HBase), 카산드라(Cassandra)</li>
</ul>
</li>
<li>그래프 기반(graph-based) 데이터베이스<ul>
<li>노드 데이터 저장, 간선 데이터 관계 표현</li>
<li>질의 그래프 순회 처리</li>
<li>연관 데이터 추천, 소셜 네트워크 친구 찾기 적합</li>
<li>ACID 지원, 클러스터 환경 부적합</li>
<li>예: Neo4J, OrientDB</li>
</ul>
</li>
</ul>
<p>빅데이터 분석 기술: 데이터 마이닝</p>
<p>기존 데이터 분석 기술 + 빅데이터 특징: 다양한 형태 비정형 데이터 기반 대량 데이터 처리
대표 기술: 데이터 마이닝, 기계 학습</p>
<ul>
<li>데이터 마이닝: 숨겨진 규칙, 패턴 발견</li>
<li>기계 학습: 수집된 데이터 학습, 새로운 데이터 결과 예측</li>
</ul>
<p>데이터 마이닝 분석 기법</p>
<ul>
<li>분류 분석: 새로운 데이터 그룹, 등급 예측, 기존 데이터 그룹 기준 정의<ul>
<li>기법: 로지스틱 회귀모형, 의사결정나</li>
</ul>
</li>
</ul>
<p>무, K-최근접 이웃모형, 베이즈분류모형, 인공신경망, 지지벡터기계, 유전 알고리즘</p>
<ul>
<li>군집 분석: 유사한 특성 데이터 독립적 군집 나눔, 군집 특성 및 관계 분석<ul>
<li>계층적: 유사 데이터 묶기, 최단/최장/평균/중심/와드 연결법</li>
<li>비계층적: 최적화된 군집 형성, K-중심 군집</li>
</ul>
</li>
<li>연관 분석: 데이터 발생 빈도 분석, 숨겨진 연관 규칙 파악<ul>
<li>예: 상품 동시 구매 분석, Apriori 알고리즘 사용</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[11주차 컴퓨터 네트워크]]></title>
            <link>https://velog.io/@hmu_uri/11%EC%A3%BC%EC%B0%A8-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@hmu_uri/11%EC%A3%BC%EC%B0%A8-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Tue, 26 Dec 2023 14:59:12 GMT</pubDate>
            <description><![CDATA[<p>1) Per-Router Control (전통적인 라우팅 알고리즘)
Routing Algorithm Classification (라우팅 알고리즘 분류)</p>
<p>Link State Routing Algorithm: 전체 네트워크의 링크 상태를 파악하여 경로를 결정. 대표적인 예는 Dijkstra&#39;s algorithm (다익스트라 알고리즘).
Distance Vector Algorithm: 각 라우터가 주변 라우터와의 거리 정보를 기반으로 경로를 계산. 예로는 Bellman-Ford algorithm (벨만-포드 알고리즘)이 있음.
Hierarchical Routing: 대규모 네트워크를 여러 영역으로 나누어 관리하는 방식.
Routing Protocols (라우팅 프로토콜)</p>
<p>RIP, OSPF (IGP; Interior Gateway Protocol): 내부 네트워크 라우팅을 위해 사용.
BGP (EGP; Exterior Gateway Protocol): 서로 다른 네트워크 사이의 라우팅에 사용.
Data Plane (데이터 평면)과 Control Plane (제어 평면)</p>
<p>FIB (Forwarding Information Base): 데이터 평면에서 패킷을 적절한 출력 포트로 전송.
RIB (Routing Information Base): 제어 평면에서 소스에서 목적지까지의 경로를 결정.
Per-router Control Plane (라우터별 제어 평면)</p>
<p>각 라우터에는 독립적으로 라우팅 알고리즘 구성 요소가 있으며, 이들은 제어 평면에서 서로 상호 작용하여 포워딩 테이블을 계산.
2) Logically Centralized Control: SDN Controllers (논리적 중앙 집중식 제어: SDN 컨트롤러)
OpenFlow Controllers
SDN (Software-Defined Networking) 환경에서 네트워크를 중앙에서 효율적으로 제어할 수 있는 컨트롤러.
Traditional Routing Algorithm (전통적인 라우팅 알고리즘)
Routing Algorithms (라우팅 알고리즘)</p>
<p>라우터 간에 교환되는 메시지의 형식과 순서를 정의하고, 경로 선택 알고리즘을 포함.
목표: 송신 호스트에서 수신 호스트까지 좋은 경로(최소 비용, 가장 빠른, 최소 혼잡 등)를 결정.
Routing Algorithm Classification (라우팅 알고리즘 분류)</p>
<p>Global vs. Decentralized: 전체 네트워크 구조를 알고 있는지 여부에 따라 분류.
Static vs. Dynamic: 경로가 시간에 따라 얼마나 자주 변경되는지에 따라 분류.
Load-sensitive vs. Load-insensitive: 링크 비용이 현재의 혼잡도를 반영하는지 여부에 따라 분류.
Problem of Dijkstra&#39;s Algorithm</p>
<p>네트워크 상황에 따라 경로가 반복적으로 변할 수 있으며, 이로 인해 네트워크 성능 저하가 발생할 수 있음.
Distance Vector (DV) Algorithm
Bellman-Ford Equation</p>
<p>최소 비용 경로 계산을 위한 주요 방정식.
DV 알고리즘은 라우터가 직접 연결된 링크만 정확하게 알고 있음.
Count to Infinity Problem</p>
<p>나쁜 뉴스(예: 링크 비용 증가)가 천천히 퍼져서 라우팅 루프 발생 가능.
이를 방지하기 위해 &#39;Split Horizon&#39;과 &#39;Poisoned Reverse&#39; 기법이 사용됨.</p>
<p>LS (Link-State) 라우팅 대비 DV (Distance-Vector) 라우팅
메시지 교환 방식: LS는 전체 네트워크에 걸쳐 작은 메시지를 브로드캐스트하는 반면, DV는 이웃 라우터들 사이에서만 큰 메시지를 교환함.
네트워크 인식 능력: LS는 전체 네트워크의 상태를 인식하는 반면, DV는 오직 국소적인 정보만을 인식함.
경로 계산 방식: LS는 일반적으로 보다 정확하고 효율적인 경로를 계산하지만, 더 많은 연산 자원을 요구함. DV는 계산이 간단하고 자원 사용이 적지만, 때때로 비효율적인 경로를 계산할 수 있음.
동적 반응성: LS는 네트워크 변화에 빠르게 반응하지만, DV는 정보 전파의 지연으로 인해 느린 반응을 보일 수 있음.</p>
<p>(추가 조사)</p>
<p>Link-State (LS) 라우팅
메시지 전송: LS 라우팅에서는 각 라우터가 자신의 직접 연결된 링크의 상태(비용, 속도 등) 정보를 전체 네트워크에 브로드캐스트합니다. 이 정보는 작은 메시지들로 구성되어 전송됩니다.
전체 네트워크 인식: 각 라우터는 전체 네트워크의 링크 상태 정보를 수집하여 로컬 데이터베이스에 저장합니다. 이를 통해 네트워크의 전체 구조를 파악할 수 있습니다.
경로 계산: Dijkstra 알고리즘을 사용하여 소스 라우터로부터 네트워크 내의 모든 다른 라우터까지의 최소 비용 경로를 계산합니다.
동적 반응성: 네트워크 상태 변화에 신속하게 반응하여 라우팅 정보를 업데이트합니다.
복잡도와 부하: 라우터가 많은 정보를 처리해야 하므로 연산 복잡도가 높고, 네트워크에 부하를 줄 수 있습니다.
Distance-Vector (DV) 라우팅
메시지 전송: DV 라우팅에서는 각 라우터가 자신의 이웃 라우터에게만 자신의 최소 비용 추정치를 전송합니다. 이 정보는 일반적으로 더 크고, 전체 네트워크에 걸쳐 전송되지 않습니다.
국소적 인식: 라우터는 오직 직접 연결된 이웃 라우터에 대한 정보만을 알고 있으며, 이웃으로부터 수신한 정보를 통해 전체 네트워크에 대한 추정을 합니다.
경로 계산: Bellman-Ford 알고리즘을 사용하여 최소 비용 경로를 계산합니다. 이 과정은 이웃 라우터 간의 정보 교환을 기반으로 합니다.
반복적인 업데이트: 네트워크 상태의 변화에 따라 라우터들은 지속적으로 정보를 교환하며 라우팅 테이블을 업데이트합니다.
문제점: &quot;Count to Infinity&quot; 문제와 같은 문제가 발생할 수 있습니다. 이는 라우팅 정보의 느린 전파로 인해 발생하며, 네트워크의 불안정성을 초래할 수 있습니다.
LS vs DV
메시지 교환: LS는 전체 네트워크에 걸쳐 작은 메시지를 브로드캐스트합니다. 반면, DV는 이웃 라우터 간에만 큰 메시지를 교환합니다.
네트워크 인식: LS는 네트워크의 전체적인 상태를 인식하지만, DV는 오직 국소적인 정보만을 인식합니다.
경로 계산: LS는 일반적으로 보다 정확하고 효율적인 경로를 계산하지만, 더 많은 연산 자원을 요구합니다. DV는 간단하고 자원 사용이 적지만, 때때로 비효율적인 경로를 계산할 수 있습니다.
동적 반응성: LS는 네트워크 변화에 빠르게 반응하지만, DV는 정보 전파의 지연으로 인해 느린 반응을 보일 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[11주차 데이터 베이스]]></title>
            <link>https://velog.io/@hmu_uri/11%EC%A3%BC%EC%B0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@hmu_uri/11%EC%A3%BC%EC%B0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Tue, 26 Dec 2023 14:49:04 GMT</pubDate>
            <description><![CDATA[<p>객체지향 데이터베이스
정의: 객체지향 프로그래밍 개념에 기반한 데이터 모델을 사용하는 데이터베이스.
응용: 특수 분야 데이터 모델링, 의미적으로 관련된 데이터베이스 구조 표현에 적합.
객체
정의: 현실 세계의 개체를 추상적으로 표현한 단위.
특징: 고유한 식별자를 가지고, 속성(상태)과 메서드(행동)로 구성.
속성
정의: 객체의 상태를 정의하는 요소, 여러 값을 가질 수 있음.
확장: 사용자 정의 클래스와 하위 클래스도 도메인으로 사용 가능.
메서드
정의: 객체 내부의 데이터를 조작하고 객체의 행위를 정의하는 함수와 유사한 구조.
기능: 객체의 상태를 조회하거나 변경하는 데 사용. 객체의 캡슐화된 데이터에 대한 접근과 조작을 안전하고 제어된 방식으로 수행.
사용: 클래스 정의 내에서 메서드를 정의하고, 객체 인스턴스를 통해 이 메서드를 호출하여 실행.
메시지
역할: 객체 간의 통신을 위한 수단. 한 객체가 다른 객체의 메서드를 호출할 때 사용되는 메커니즘.
작동 방식: 객체에 메시지를 보내면, 객체는 해당 메시지와 일치하는 메서드를 실행. 메시지는 메서드 이름과 필요한 매개변수를 포함할 수 있음.
클래스
정의: 공통의 속성과 메서드를 공유하는 객체의 집합을 정의하는 틀 또는 설계도.
특징: 클래스는 객체의 구조와 행위를 정의하며, 인스턴스화를 통해 실제 객체 생성.
내용: 데이터 멤버(속성)과 멤버 함수(메서드)를 포함하여 객체의 구조와 행위를 정의.
클래스 계층
정의: 클래스들 사이의 계층적 구조. 클래스 간에 상속 관계를 형성.
IS-A 관계: 하위 클래스는 상위 클래스의 모든 특성을 상속받으며, 추가적인 특성이나 기능을 가질 수 있음.
상속
정의: 하나의 클래스(상위 클래스)의 속성과 메서드를 다른 클래스(하위 클래스)가 받아 사용하는 것.
유형:
단일 상속: 하위 클래스가 단 하나의 상위 클래스로부터만 상속.
다중 상속: 하나의 하위 클래스가 여러 상위 클래스로부터 속성과 메서드를 상속.
복합 객체
정의: 여러 객체가 결합하여 형성된 복잡한 객체. 사용자 정의 클래스로 구성된 속성을 포함할 수 있음.
Is-Part-Of 관계: 복합 객체 내의 각 부분은 전체 객체의 일부로, 이러한 관계는 객체 간의 복잡한 연결을 나타냄.
객체지향 질의 모델
역할: 객체지향 데이터베이스에서 데이터를 검색하고 조작하기 위한 언어 또는 표현식.
유형:
단일 오퍼랜드 질의: 특정 클래스 또는 클래스 계층에 대한 질의.
다중 오퍼랜드 질의: 여러 클래스 간의 관계를 기반으로 하는 질의.
객체관계 데이터베이스
정의: 객체지향 특성을 통합한 관계 데이터베이스 시스템.
특징: SQL을 사용하여 데이터 관리와 객체지향 특성을 제공. 관계 모델의 확장으로 볼 수 있음.
분산 데이터베이스 시스템
중앙 집중식: 하나의 위치에 모든 데이터를 집중시켜 관리.
분산 시스템: 데이터를 여러 위치에 분산시켜 저장하고, 이를 통합적으로 관리.
투명성 유형
위치 투명성: 사용자가 데이터의 물리적 위치를 몰라도 접근할 수 있음.
중복 투명성: 데이터가 여러 위치에 중복되어 있어도 사용자에게는 단일 데이터처럼 보임.
단편화 투명성: 데이터가 여러 부분으로 나뉘어 있어도 사용자에게는 통합된 데이터처럼 보임.
병행 투명성: 여러 트랜잭션이 동시에 수행되어도 서로 간섭 없이 일관된 데이터 상태 유지.
장애 투명성: 시스템의 일부에 장애가 발생해도 전체 시스템의 작동에 영향을 주지 않음.
멀티미디어 데이터베이스 시스템
멀티미디어 데이터: 다양한 형태의 미디어(텍스트, 이미지, 비디오 등)를 포함하는 데이터.
질의 처리: 복잡한 멀티미디어 데이터에 대한 효율적인 검색과 관리를 위한 여러 기술(내용 기반 검색, 매칭 등) 사용.
웹 데이터베이스
정의: 웹 기반 어플리케이션과 데이터베이스 시스템을 통합한 시스템.
미들웨어: 웹 서버와 데이터베이스 간의 상호작용을 중재하고 데이터 전송을 담당.
데이터 웨어하우스
정의: 다양한 출처의 데이터를 수집, 통합, 변환하여 분석용으로 저장하는 시스템.
특징: 주제 중심, 시간 변화에 따른 데이터 유지, 비소멸성, 통합된 내용으로 구성.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[11주차 운영체제]]></title>
            <link>https://velog.io/@hmu_uri/11%EC%A3%BC%EC%B0%A8-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</link>
            <guid>https://velog.io/@hmu_uri/11%EC%A3%BC%EC%B0%A8-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</guid>
            <pubDate>Tue, 26 Dec 2023 13:54:15 GMT</pubDate>
            <description><![CDATA[<p>Logical Block: 디스크에서 데이터를 저장하는 기본 단위, 주소를 가진 1차원 배열처럼 사용됨.
Sector: Logical block이 물리적 디스크에 매핑되는 위치, 정보 전송의 최소 단위임.
Track: 플래터 상의 동심원으로 구성, 섹터로 이루어져 데이터를 저장함.
Cylinder: 각 플래터의 동일 번호 트랙의 집합, 헤드는 실린더 번호를 참조함.
Disk Management:
Physical Formatting: 디스크를 섹터로 나누는 과정, 각 섹터는 header, data, trailer로 구성됨.
Partitioning: 디스크를 여러 실린더 그룹으로 나누어 OS가 독립적 디스크로 인식하게 함.
Logical Formatting: 파일 시스템 생성, FAT, inode 등의 구조 포함함.
Booting: ROM의 bootstrap loader 실행, OS를 디스크에서 로드하여 실행함.
Swap-Space Management: 디스크를 메모리의 연장 공간으로 사용, 일반 파일 시스템과 다른 저장 방식을 적용함.
RAID (Redundant Array of Independent Disks):
디스크 처리 속도와 신뢰성 향상을 위해 여러 디스크를 묶어 사용.
정보를 여러 디스크에 분산 저장하거나 중복 저장함.
Disk Scheduling:
목적: Access time 최소화, 특히 seek time.
Algorithm:
FCFS (First Come First Served):
특징: 요청이 들어온 순서대로 처리.
장점: 단순하고 공정함.
단점: 긴 대기 시간 발생 가능, 효율성이 낮을 수 있음.
SSTF (Shortest Seek Time First):
특징: 현재 헤드 위치에서 seek time이 가장 짧은 요청을 먼저 처리.
장점: 평균 대기 시간 감소.
단점: Starvation 발생 가능, 즉 일부 요청이 오랫동안 대기할 수 있음.
SCAN:
특징: 헤드가 디스크의 한쪽 끝에서 다른 쪽 끝까지 이동하면서 중간에 있는 요청을 처리.
장점: 더 균일한 대기 시간 제공.
단점: 디스크의 끝 부분에 있는 요청은 더 긴 대기 시간을 가질 수 있음.
C-SCAN (Circular SCAN):
특징: SCAN과 유사하지만, 한 방향으로만 이동하고 끝에 도달하면 반대쪽 끝으로 바로 이동하여 반복.
장점: 더 균등한 서비스 시간 제공.
단점: 헤드 이동 시 불필요한 시간 소요 가능.
N-SCAN:
특징: SCAN의 변형, 정해진 숫자의 요청만큼만 처리한 후 방향 전환.
장점: 대기 시간을 더욱 균일하게 관리.
단점: 구현이 복잡하고 조절이 필요.
LOOK:
특징: SCAN과 비슷하지만, 대기 중인 요청이 없으면 이동 방향을 즉시 바꿈.
장점: 불필요한 헤드 이동 감소.
단점: 구현 복잡성.
C-LOOK:
특징: C-SCAN과 유사하지만, 요청이 더 이상 없으면 즉시 반대쪽 끝으로 이동.
장점: C-SCAN보다 헤드 이동 최소화.
단점: 더 복잡한 로직 필요.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[컴퓨터네트워크 ipv6 sdn]]></title>
            <link>https://velog.io/@hmu_uri/%EC%BB%B4%ED%93%A8%ED%84%B0%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-ipv6-sdn</link>
            <guid>https://velog.io/@hmu_uri/%EC%BB%B4%ED%93%A8%ED%84%B0%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-ipv6-sdn</guid>
            <pubDate>Tue, 19 Dec 2023 10:11:32 GMT</pubDate>
            <description><![CDATA[<h2 id="ipv6">IPv6</h2>
<h3 id="ipv6-주소-지정-ipv6-addressing">IPv6 주소 지정 (IPv6 Addressing)</h3>
<ol>
<li><p><strong>다중 주소 설정</strong>: IPv4와 달리, IPv6에서는 하나의 네트워크 인터페이스 카드(NIC)에 여러 종류의 IPv6 주소가 설정될 수 있다.</p>
</li>
<li><p><strong>브로드캐스트 주소 미정의</strong>: IPv6에서는 브로드캐스트 주소가 정의되지 않고, 대신 멀티캐스트 주소(0xff로 시작)가 사용된다.</p>
</li>
<li><p><strong>루프백 주소</strong>: IPv4의 127.0.0.1과 같은 루프백 주소는 IPv6에서 0x::1/128로 정의되며, 네트워크 프로그램 테스트용으로 사용된다.</p>
</li>
<li><p><strong>링크-로컬 주소</strong>: 0xfe80로 시작하는 링크-로컬 주소는 한 서브넷 내의 패킷 전달에 사용된다.</p>
</li>
<li><p><strong>글로벌 유니캐스트 주소</strong>: 0x2001로 시작하는 글로벌 유니캐스트 주소는 IPv4의 공개 주소와 유사하다.</p>
</li>
<li><p><strong>6to4 주소</strong>: 0x2002로 시작하는 6to4 주소는 IPv4 주소를 포함하며 6to4 터널링에 사용된다.</p>
</li>
</ol>
<h3 id="ipv4-헤더와-ipv6-헤더의-차이점">IPv4 헤더와 IPv6 헤더의 차이점:</h3>
<p><strong>공통 기능</strong>: TTL(홉 제한)은 IPv6에서 홉 제한으로, 전체 길이는 페이로드 길이로, 상위 계층 프로토콜은 다음 헤더로, ToS는 우선순위로 표현된다.</p>
<h3 id="ipv6의-설계-목표">IPv6의 설계 목표:</h3>
<p><strong>빠른 처리(전달)</strong>: 헤더 체크섬이 없고 라우터에서의 조각화가 없다.
<strong>서비스 품질</strong>: 기대에 미치지 못함.</p>
<h3 id="ipv4에서-ipv6로의-전환-기술">IPv4에서 IPv6로의 전환 기술:</h3>
<p><strong>듀얼 스택</strong>: 모든 노드(라우터 및 호스트)는 IPv4와 IPv6을 모두 가지고 있다.
<strong>NAT64(DNS64)</strong>: IPv4와 IPv6 사이의 주소와 프로토콜 헤더를 변환한다.
<strong>6to4 터널링</strong>: IPv6 패킷이 IPv4 페이로드에 캡슐화되어, IPv4가 IPv6 전송을 위한 링크 계층으로 작동한다.</p>
<h2 id="sdn">SDN</h2>
<ol>
<li><p><strong>프레임워크</strong> : &quot;중앙집중식 네트워크 제어&quot; =&gt; SDN은 네트워크 제어 기능을 네트워크 장비로부터 분리하여 중앙화된 서버(컨트롤러)에서 관리.</p>
</li>
<li><p><strong>프로그래밍 가능성</strong> : 고급 API를 통해 네트워크 관리자는 네트워크 장치의 동작을 프로그래밍할 수 있다. 이를 통해 더 유연하고 효율적인 네트워크 관리가 가능함.</p>
</li>
<li><p><strong>전통적 라우터와의 비교</strong>:</p>
</li>
</ol>
<ul>
<li>메인프레임 컴퓨터: 전통적인 라우터는 메인프레임 컴퓨터에 비유될 수 있음. 여기서 제어 평면(control plane)과 데이터 평면(data plane)은 하나의 장치에서 통합되어 처리됨.</li>
<li>언번들 시스템: 반면, SDN은 &#39;언번들 시스템&#39;과 같음. 제어 평면과 데이터 평면이 분리되어 있어, 각각이 서로 다른 역할을 수행함.</li>
</ul>
<ol start="4">
<li><strong>네트워크 제어 애플리케이션 레이어</strong>:</li>
</ol>
<ul>
<li>알고리즘과 기능: 네트워크 제어 애플리케이션 레이어에서는 다양한 네트워크 관리 알고리즘과 기능이 구현됨. 
ex) Dijkstra 알고리즘은 최적의 경로를 찾는 데 사용되고, NAT 알고리즘은 네트워크 주소 변환에 사용.</li>
</ul>
<ol start="5">
<li><strong>SDN 컨트롤러</strong> (네트워크 운영 체제):</li>
</ol>
<ul>
<li>중앙 관리점: SDN 컨트롤러는 네트워크의 중앙 관리점으로, 네트워크 전반의 상태를 모니터링하고 제어함.</li>
<li>패킷 스위치 제어: 컨트롤러는 네트워크 제어 애플리케이션의 출력을 사용하여 패킷 스위치(예: 라우터, 스위치)를 관리함.</li>
</ul>
<ol start="6">
<li><strong>패킷 스위치</strong>:</li>
</ol>
<ul>
<li>단순하고 빠른 처리: 데이터 평면에 위치하는 패킷 스위치는 네트워크 트래픽을 처리하는 데 중점을 둡니다. 이들은 단순하고 빠르게 설계되어, 최종 호스트의 메시지를 효율적으로 전달합니다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[운영체제 파일 시스템 구현]]></title>
            <link>https://velog.io/@hmu_uri/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%ED%98%84</link>
            <guid>https://velog.io/@hmu_uri/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%ED%98%84</guid>
            <pubDate>Tue, 19 Dec 2023 09:56:13 GMT</pubDate>
            <description><![CDATA[<p>Directory Implementation
**파일 보관 방법
Linear list
-filename, metadata의 리스트
-구현이 간단</p>
<ul>
<li>디렉토리 내에 파일이 있는지 찾기 위해 linear search 필요
<img src="https://velog.velcdn.com/images/hmu_uri/post/9670b18e-fe50-4113-84bc-856579c75c44/image.png" alt=""></li>
</ul>
<p>Hash Table
-Linear list + hashing</p>
<ul>
<li>file name을 파일의 linear list의 위치로 바꾸어줌.</li>
<li>search time 없앰.</li>
<li>collision 발생 가능(hashing 단점)
<img src="https://velog.velcdn.com/images/hmu_uri/post/819eb9d6-e1b4-4df3-8ce4-49208ced8496/image.png" alt=""></li>
</ul>
<p>**메타데이터 보관 방법</p>
<ol>
<li>디렉토리 내에 직접 보관</li>
<li>디렉토리에는 포인터 두고 다른 곳에 보관</li>
</ol>
<p>=&gt; Long file name의 지원</p>
<ul>
<li>&lt;file name, file metadata&gt; list에서 각 entry 크기는 일반적으로 고정</li>
<li>file name이 고정 크기 entry 길이보다 길어지는 경우 entry의 마지막 부분에 이름의 뒷부분이 위치한 곳의 포인터를 두는 방법 사용</li>
<li>이름의 나머지 부분은 동일한 directory file의 일부에 존재</li>
</ul>
<h4 id="가상-파일-시스템-vfs">가상 파일 시스템 (VFS)</h4>
<p>목적: 다양한 파일 시스템에 대해 동일한 시스템 콜 인터페이스(API)를 통해 접근할 수 있도록 하는 운영체제</p>
<p>기능: 어떤 파일 시스템을 사용하든 간에 VFS 인터페이스를 통해 이를 사용할 수 있게 함. 이는 파일 시스템의 종류에 관계없이 일관된 방식으로 파일 시스템에 접근 가능.</p>
<h4 id="네트워크-파일-시스템-nfs">네트워크 파일 시스템 (NFS)</h4>
<p>목적: 분산 시스템에서 네트워크를 통해 파일을 공유할 수 있게 해주는 방법
작동 방식: NFS는 분산 환경에서 파일을 공유하는 대표적인 방법으로, NFS 클라이언트와 NFS 서버를 사용하여 작동</p>
<h4 id="페이지-캐시-page-cache">페이지 캐시 (Page Cache)</h4>
<p>정의: 가상 메모리의 페이징 시스템에서 사용하는 페이지 프레임을 캐싱의 관점에서 설명하는 용어</p>
<p>활용: 메모리 매핑된 I/O에서 파일의 I/O를 위해 페이지 캐시를 사용</p>
<h4 id="메모리-매핑된-io-memory-mapped-io">메모리 매핑된 I/O (Memory-Mapped I/O)</h4>
<p>작동 방식: 파일의 일부를 가상 메모리에 매핑 =&gt; 이 매핑된 영역에 대한 메모리 접근 연산으로 파일의 입출력을 수행</p>
<p>특징: 메모리 매핑된 I/O를 사용할 경우 요청된 데이터가 메모리에 없으면 스왑 영역이 아닌 파일 시스템을 접근</p>
<h4 id="버퍼-캐시-buffer-cache">버퍼 캐시 (Buffer Cache):</h4>
<p>용도: 파일 시스템을 통한 I/O 연산 시 메모리의 특정 영역인 버퍼 캐시를 사용</p>
<p>특징: 파일 사용의 지역성 활용 =&gt; 한 번 읽어온 블록에 대한 후속 요청 시 버퍼 캐시에서 즉시 데이터를 전달 =&gt; 모든 프로세스가 이를 공동으로 사용</p>
<p>버퍼 캐시에서는 LRU (최근에 가장 적게 사용된 페이지 교체), LFU (가장 자주 사용되지 않는 페이지 교체) 등의 대체 알고리즘이 필요함.</p>
<h4 id="통합-버퍼-캐시-unified-buffer-cache">통합 버퍼 캐시 (Unified Buffer Cache):</h4>
<p>최근의 운영체제에서는 기존의 버퍼 캐시가 페이지 캐시에 통합되었다. 이를 통해 두 캐시 시스템의 중복을 제거하고 효율성을 높일 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[7주차 운영체제]]></title>
            <link>https://velog.io/@hmu_uri/7%EC%A3%BC%EC%B0%A8-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</link>
            <guid>https://velog.io/@hmu_uri/7%EC%A3%BC%EC%B0%A8-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</guid>
            <pubDate>Tue, 28 Nov 2023 09:43:52 GMT</pubDate>
            <description><![CDATA[<p>메모리 주소 유형</p>
<ol>
<li>논리적 주소</li>
</ol>
<ul>
<li>프로세스가 독립적으로 가지는 주소 공간</li>
<li>0번지부터 시작하는 자신만의 주소 공간을 가짐</li>
<li>cpu는 이 논리적 주소를 참조함.</li>
</ul>
<ol start="2">
<li>물리적 주소</li>
</ol>
<ul>
<li>메모리에 실제로 존재하는 위치, 즉 dram 상의 변하지 않는 실제 주소.</li>
</ul>
<ol start="3">
<li>기호적 주소</li>
</ol>
<ul>
<li>프로그래머가 사용하는 변수나 레이블 등 기호적 이름으로 표현된 주소.</li>
</ul>
<h3 id="주소-바인딩">주소 바인딩</h3>
<p>기호적 주소에서 논리적 주소, 그리고 물리적 주소로의 변환 과정.</p>
<ol>
<li>컴파일 시간 바인딩</li>
</ol>
<ul>
<li>컴파일 시 정적으로 물리적 주소가 결정</li>
<li>컴파일러는 절대 코드를 생성하여, 프로그램이 메모리에 로드되면 주소가 변경되지 않음.</li>
</ul>
<ol start="2">
<li>로드 시간 바인딩</li>
</ol>
<ul>
<li>로더가 프로그램이 메모리에 로드될 때 물리적 주소를 부여.</li>
<li>재배치 가능한 코드를 생성한 경우, 프로그램의 시작 위치를 변경하더라도 로더가 물리적 주소를 조정할 수 있다.</li>
</ul>
<ol start="3">
<li>실행 시간 바인딩</li>
</ol>
<ul>
<li>프로그램이 실행된 이후에도 프로세스의 메모리 상 위치를 옮길 수 있음.</li>
<li>CPU가 주소를 참조할 때마다 주소 매핑 테이블을 검사하여 실제 메모리 주소를 변환함.</li>
<li>하드웨어적인 지원이 필요하고, 주로 MMU(메모리 관리 장치)에 의해 수행된다.</li>
</ul>
<h3 id="mmumemory-management-unit">MMU(Memory-Management Unit)</h3>
<ul>
<li>논리적 주소를 물리적 주소로 매핑하는 하드웨어 장치.</li>
<li>사용자 프로세스가 cpu에서 수행되며 생성하는 모든 주소값에 대해 기준 레지스터의 값을 더한다.</li>
<li>컨텍스트 스위치가 발생하면 mmu의 기준 레지스터 값도 변경된다</li>
<li>사용자 프로그램은 논리적 주소만을 다무려, 물리적 주소를 알 필요가 없다.</li>
</ul>
<p>=&gt; 프로그램이 메모리에 어떻게 매핑되는지, 어떻게 cpu에 의해 참조되는지를 결정하는 중요한 역할을 한다. 각 단계는 메모리 관리의 유연성과 효율성을 높이기 위해 설계되었으며, 프로그램의 실행과 메모리 관리를 최적화하기 위한 중요한 기술.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[7주차 데이터베이스]]></title>
            <link>https://velog.io/@hmu_uri/7%EC%A3%BC%EC%B0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@hmu_uri/7%EC%A3%BC%EC%B0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Tue, 28 Nov 2023 09:37:01 GMT</pubDate>
            <description><![CDATA[<p>데이터 베이스 설계 : 사용자의 다양한 요구사항을 고려하여 데이터베이스를 생성하는 과정.</p>
<h3 id="설계-과정">설계 과정</h3>
<ul>
<li>요구사항 분석 : 사용자의 요구사항을 수집하고 분석하여 데이터베이스의 용도를 파악한다. =&gt; 요구사항 명세서</li>
</ul>
<ol>
<li>데이터베이스 주요 사용자 범위 결정</li>
<li>사용자가 조직에서 수행하는 업무 분석</li>
<li>요구사항 수집 수 분석 결과를 바탕으로 요구 사항 명세서 작성</li>
</ol>
<ul>
<li>개념적 설계 : 분석 결과를 바탕으로 개념적 모델링을 통해 독립적인 개념적 스키마 설계. =&gt; ER 다이어그램</li>
<li><em>개체*</em> : 저장할 만한 가치가 있는 중요 데이터를 가진 사람이나 사물. 요구 사항에서 의미 있는 명사를 찾고, 찾은 명사를 개체와 속성으로 분류하여 개체를 추출한다.</li>
<li><em>관계*</em> : 개체 간의 의미 있는 연관성. 요구 사항에서 연관성을 표현한 동사를 찾고, 매핑 카디널리티와 참여특성을 결정해 관계를 추출한다.</li>
<li>논리적 설계 : 개념적 스키마를 관계 데이터 모델에 맞게 논리적 스키마로 변환. 이 과정에서 속성의 데이터 타입, 길이, 널 값 허용 여부 등을 결정하고 릴레이션 스키마를 문서화함.</li>
<li><em>논리적 설계 규칙*</em></li>
</ul>
<ol>
<li><p>모든 개체는 릴레이션으로 변환한다.</p>
</li>
<li><p>다대다 관계는 릴레이션으로 변환한다.
<img src="https://velog.velcdn.com/images/hmu_uri/post/26acfa28-e3b3-49ab-8798-5150d650a4a0/image.png" alt=""></p>
</li>
<li><p>일대다 관계는 외래키로 표현한다.
<img src="https://velog.velcdn.com/images/hmu_uri/post/e473df73-0d3d-49e4-a477-7be1db328d8c/image.png" alt=""></p>
</li>
<li><p>일대일 관계는 외래키로 표현한다.
<img src="https://velog.velcdn.com/images/hmu_uri/post/bfebd8bf-8c64-4b76-959e-eb648de7f8f1/image.png" alt=""></p>
</li>
<li><p>다중 값 속성은 릴레이션으로 변환한다.
<img src="https://velog.velcdn.com/images/hmu_uri/post/2968c065-f8ef-4e54-9725-1eb1630f1281/image.png" alt=""></p>
</li>
</ol>
<ul>
<li><p>물리적 설계 : 하드웨어나 운영체제의 특성을 고려하여 데이터베이스의 물리적 구조를 설계함. 인덱스 구조나 내부 저장 구조를 결정.</p>
</li>
<li><p>구현 : SQL 문을 작성하여 DBMS에서 실행함으로써 데이터베이스를 실제로 생성함. 오류 발생 시 이전 단계로 되돌아가 설계 내용을 수정. </p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[모던 자바스크립트 14~15장 정리]]></title>
            <link>https://velog.io/@hmu_uri/%EB%AA%A8%EB%8D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-1415%EC%9E%A5-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hmu_uri/%EB%AA%A8%EB%8D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-1415%EC%9E%A5-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Tue, 28 Nov 2023 06:30:01 GMT</pubDate>
            <description><![CDATA[<h3 id="변수의-생명주기">변수의 생명주기</h3>
<p>변수는 생명주기가 있다. 만약 없다면?  한 번 선언된 변수가 프로그램을 종료하지 않는 한 영원히 메모리 공간을 점유한다.</p>
<ul>
<li>전역 변수의 생명 주기  = 애플리케이션의 생명 주기</li>
<li>지역 변수(함수 내부)는 함수가 호출되면 생성되고, 함수가 종료하면 소멸.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/e5d9b617-1b39-435e-8b7e-b8fd10bf2b61/image.png" alt=""></p>
<p>foo 함수를 호출해야만 함수 안 변수 선언문 실행 =&gt; 이전까지는 x가 생성되지 않는다.</p>
<h4 id="변수-선언은-가장-먼저-선언된다--전역-변수-한정">변수 선언은 가장 먼저 선언된다? =&gt; 전역 변수 한정.</h4>
<p>함수 내부에서 선언한 변수는 함수 호출 직후, 함수 안의 코드 줄들을 읽기 전 먼저 실행. </p>
<p>foo 호 출 =&gt; x 변수 선언 및 undefined 초기화 =&gt; 변수 x에 할당.
함수 종료 =&gt; x 변수 소멸.</p>
<h4 id="지역-변수의-생명주기--생명주기">지역 변수의 생명주기 = 생명주기.</h4>
<p>변수의 생명주기 : 메모리 공간 확보 ~ 메모리 공간 해제 및 가용 메모리 풀에 반환.
지역 변수는 함수가 생성한 스코프(물리적인 실체)에 등록. =&gt; 스코프가 소멸될 때까지 변수는 유효.
=&gt; 누군가 스코프를 참조하고 있으면 소멸하지 않고 생존.</p>
<h4 id="-누군가-스코프를-참조하고-있다면-함수가-종료하더라도-스코프는-해제되지-않고-생존">=&gt; 누군가 스코프를 참조하고 있다면, 함수가 종료하더라도 스코프는 해제되지 않고 생존.</h4>
<h3 id="호이스팅">호이스팅</h3>
<p>변수 선언이 스코프의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징.
<img src="https://velog.velcdn.com/images/hmu_uri/post/6ee6b3b5-23af-4c97-91d2-0a21c7479483/image.png" alt=""></p>
<h2 id="전역변수">전역변수</h2>
<p>**var 키워드로 선언한 전역 변수의 생명 주기는 전역 객체(window)의 생명 주기와 일치한다.</p>
<h3 id="문제점">문제점</h3>
<ul>
<li>암묵적 결합 : 전역 변수를 선언 =&gt; 코드 어디서든 참조하고 할당할 수 있는 변수를 사용하겠다 =&gt; 변수의 유효 범위가 커질 수록 코드의 가독성은 나빠지고 의도치 않은 상태 변경이 일어날 수 있음.</li>
<li>긴 생명 주기 : 메모리 리소스를 오랜 시간 소비함. 변수의 중복 선언을 허용하기 때문에 의도치 않은 재할당이 이뤄질 수 있음.</li>
<li>스코프 체인 상에서 종점에 존재 : 전역 변수의 검색 속도가 가장 느리다</li>
<li>네임 스페이스 오염 : 자바스크립트에서는 파일이 분리되어 있어도 하나의 전역 스코프를 공유한다 =&gt; 다른 파일 내에서 동일한 이름으로 명명된 전역 변수나 함수가 같은 스코프 내에 존재할 경우 잘못된 결과 도출.</li>
</ul>
<h3 id="전역-변수의-사용을-억제하는-방법">전역 변수의 사용을 억제하는 방법</h3>
<ul>
<li>변수의 스코프는 좁을수록 좋다.</li>
<li>즉시 실행 함수 : 즉시 실행 함수는 단 한 번만 호출된다. =&gt; 모든 코드를 즉시 실행 함수로 감싸면 모든 변수는 즉시 실행 함수의 지역 변수가 된다. (라이브러리 등에 자주 사용됨)</li>
<li>네임 스페이스 객체 : 전역에 네임스페이스 역할을 담당할 객체를 생성하고 전역  변수처럼 사용하고 싶은 변수를 프로퍼티로 추가한다. =&gt; 계층적 구성 가능.
<img src="https://velog.velcdn.com/images/hmu_uri/post/ca754f1d-78e6-4372-8044-49bb52057ddb/image.png" alt=""></li>
<li>모듈 패턴 : 클래스를 모방해 관련이 잇는 변수와 함수를 하나의 실행 함수로 감싸 모듈을 만든다.</li>
<li><em>캡슐화*</em> 객체의 상태를 나타내는 프로퍼티와 메서드를 하나로 묶는것.
외부에 노출하고 싶은 변수나 함수만 담아 반환한다.(퍼블릭) 외부로 노출하고 싶지 않은 반환되는 객체에 추가하지 않은 변수나 함수는 외부에서 접근할 수 없다. (프라이빗)</li>
<li>ES6 : 이걸 사용하면 더는 전역 변수를 사용할 수 없음. <strong>파일 자체의 독자적인 모듈 스코프를 제공하기 때문</strong> 
<script/> 태그에 type=&quot;module&quot;을 추가하면 파일이 모듈로서 동작한다.
아직 구형 브라우저에는 동작하지 않고, 트랜스파일링이나 번들링이 필요하기 때문에 아직까지는 webpack 등의 모듈 번들러를 사용한다.</li>
</ul>
<h2 id="16장">16장</h2>
<h3 id="var-변수의-문제점">var 변수의 문제점</h3>
<ul>
<li>변수 중복 선언 허용</li>
<li>함수 레벨 스코프 : 함수 외부에서 var 키워드로 선언한 변수는 코드 블록 내에서 선언해도 모두 전역 변수가 된다.
<img src="https://velog.velcdn.com/images/hmu_uri/post/01134ba9-3375-4fff-b44c-6fd8f2b9cc98/image.png" alt=""></li>
<li>변수 호이스팅 : 할당 이전에 변수 선언 =&gt; 프로그램의 흐름상 맞지 않고, 가독성을 떨어뜨리고 오류를 발생시킬 수 있다.</li>
</ul>
<h3 id="let">let</h3>
<ul>
<li>변수 중복 선언 금지 SyntaxError</li>
<li>블록 레벨 스코프 : 모든 코드 블록을 지역 스코프로 인정함. 전역에서는 지역 변수를 참조할 수 없다.
<img src="https://velog.velcdn.com/images/hmu_uri/post/3381d68d-2449-40cc-a957-ab20d45b8a71/image.png" alt=""></li>
<li>변수 호이스팅 : 발생하지 않는 것처럼 보임. because,
let은 선언단계와 초기화 단계가 분리되어 진행. 초기화 단계는 변수 선언문에 도달했을 때 실행. (<strong>일시적 사각지대</strong>)
However,
<img src="https://velog.velcdn.com/images/hmu_uri/post/57b5a88a-9720-4fb7-8089-03dd0e0d074f/image.png" alt="">
여기서 전역변수 1이 아닌, undefined가 출력
자바스크립트는 let, const를 포함한 모든 선언을 호이스팅한다. 하지만, let, const, class는 호이스팅이 발생하지 않는 것처럼 동작.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[06. 컴퓨터 네트워크]]></title>
            <link>https://velog.io/@hmu_uri/06.-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@hmu_uri/06.-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Tue, 21 Nov 2023 09:22:54 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[06. 운영체제]]></title>
            <link>https://velog.io/@hmu_uri/06.-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</link>
            <guid>https://velog.io/@hmu_uri/06.-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</guid>
            <pubDate>Tue, 21 Nov 2023 09:22:33 GMT</pubDate>
            <description><![CDATA[<p><em>데드락(Deadlock)</em> 은 멀티태스킹 시스템에서 발생하는 주요 문제 중 하나. 데드락이 발생하면 여러 프로세스들이 서로 필요로 하는 자원을 가지고 있어서 상호간에 무한히 기다리는 상황이 발생. 데드락을 이해하고 해결하기 위해서는 먼저 그 원인과 특성을 파악하는 것이 중요.</p>
<h3 id="데드락의-특성-및-필요-조건">데드락의 특성 및 필요 조건</h3>
<p>데드락은 다음 네 가지 기본적인 조건이 모두 충족될 때 발생:</p>
<h4 id="상호-배제mutual-exclusion-자원은-한-번에-하나의-프로세스에-의해서만-사용될-수-있음">상호 배제(Mutual Exclusion): 자원은 한 번에 하나의 프로세스에 의해서만 사용될 수 있음.</h4>
<h4 id="보유-대기hold-and-wait-최소한-하나의-자원을-보유한-상태에서-다른-프로세스가-사용-중인-추가-자원을-기다림">보유 대기(Hold and Wait): 최소한 하나의 자원을 보유한 상태에서 다른 프로세스가 사용 중인 추가 자원을 기다림.</h4>
<h4 id="비선점no-preemption-프로세스가-자원을-스스로-내어놓을-때까지-다른-프로세스에-의해-자원이-강제로-빼앗길-수-없음">비선점(No Preemption): 프로세스가 자원을 스스로 내어놓을 때까지 다른 프로세스에 의해 자원이 강제로 빼앗길 수 없음.</h4>
<h4 id="순환-대기circular-wait-프로세스의-집합에서-각-프로세스는-다음-프로세스가-요구하는-자원을-보유하고-있어서-순환적인-대기-관계를-형성">순환 대기(Circular Wait): 프로세스의 집합에서 각 프로세스는 다음 프로세스가 요구하는 자원을 보유하고 있어서 순환적인 대기 관계를 형성.</h4>
<h4 id="데드락의-처리-방법">데드락의 처리 방법</h4>
<p>데드락을 처리하는 방법은 크게 세 가지로 나뉨: 예방(Prevention), 회피(Avoidance), 탐지 및 복구(Detection and Recovery).</p>
<h4 id="데드락-예방deadlock-prevention">데드락 예방(Deadlock Prevention):</h4>
<p>데드락이 발생하지 않도록 시스템 설계 단계에서부터 조치를 취하는 방법. 상기 네 가지 필요 조건 중 하나 이상을 제거함으로써 데드락을 예방할 수 있음.</p>
<h3 id="데드락-회피deadlock-avoidance">데드락 회피(Deadlock Avoidance):</h3>
<p>시스템 상태를 지속적으로 체크하면서 자원 할당이 데드락을 유발할 수 있는 상태로 가지 않도록 관리하는 방법. 가장 유명한 데드락 회피 알고리즘 중 하나는 &#39;은행원 알고리즘(Banker&#39;s Algorithm)&#39;.</p>
<h4 id="데드락-탐지-및-복구deadlock-detection-and-recovery">데드락 탐지 및 복구(Deadlock Detection and Recovery):</h4>
<p>데드락이 발생한 후에 이를 탐지하고 해결하는 방법. 자원 할당 그래프를 사용하여 데드락을 탐지하고, 이후 프로세스를 종료하거나 자원을 선점하여 문제를 해결.</p>
<h4 id="데드락-무시deadlock-ignorance-">데드락 무시(Deadlock Ignorance) :</h4>
<p>일부 운영 시스템은 데드락을 무시하는 전략을 사용. 이는 데드락이 드물게 발생하고, 데드락에 대한 대처가 더 큰 오버헤드를 유발할 수 있기 때문. 이 경우, 사용자가 시스템의 비정상적인 동작을 감지하고 직접 프로세스를 종료하는 방식으로 대처.</p>
<h4 id="추가-설명">추가 설명</h4>
<p>자원 종류와 인스턴스 수: 시스템에서 관리해야 하는 자원의 종류와 각 자원별 인스턴스 수도 데드락 처리 전략을 선택하는 데 중요한 요소. 예를 들어, 한 자원 유형당 단일 인스턴스만 있는 경우와 여러 인스턴스가 있는 경우에는 데드락 회피 전략이 달라질 수 있음.
시스템 성능과 자원 활용: 데드락 예방 및 회피 전략은 시스템 성능과 자원 활용에 영향을 줄 수 있음. 예방 전략은 일반적으로 자원 활용도를 낮출 수 있고, 회피 전략은 시스템의 복잡성을 증가시킬 수 있음.
데드락과 스타베이션(Starvation): 데드락을 처리하는 과정에서 발생할 수 있는 또 다른 문제는 스타베이션. 스타베이션은 특정 프로세스가 자원을 무기한 대기하는 상황을 의미하며, 데드락 해결 과정에서 이러한 상황이 발생하지 않도록 주의해야 함.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[06. 데이터베이스]]></title>
            <link>https://velog.io/@hmu_uri/06.-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@hmu_uri/06.-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Tue, 21 Nov 2023 09:22:18 GMT</pubDate>
            <description><![CDATA[<h3 id="sql-structured-query-language">SQL (Structured Query Language)</h3>
<p>RDB (관계 데이터베이스)를 위한 표준 질의어, 비절차적 데이터 언어
대화식 SQL: 데이터베이스 관리 시스템에 직접 접근해 질의를 작성하여 실행
삽입 SQL: 프로그래밍 언어로 작성된 응용 프로그램에 삽입
SQL의 분류</p>
<h4 id="ddl-테이블을-생성-변경-제거하는-기능-제공">DDL: 테이블을 생성, 변경, 제거하는 기능 제공</h4>
<h4 id="dml-테이블에-데이터를-삽입하거나-저장된-데이터를-수정-삭제-검색하는-기능-제공">DML: 테이블에 데이터를 삽입하거나, 저장된 데이터를 수정, 삭제, 검색하는 기능 제공</h4>
<h4 id="dcl-보안을-위해-데이터에-대한-접근-및-사용-권한을-사용자-별로-부여하거나-취소하는-기능-제공">DCL: 보안을 위해 데이터에 대한 접근 및 사용 권한을 사용자 별로 부여하거나 취소하는 기능 제공</h4>
<h3 id="sql을-이용한-데이터-정의">SQL을 이용한 데이터 정의</h3>
<p>테이블 생성: CREATE TABLE</p>
<p>UNIQUE 속성 값은 기본키 속성 값과 달리 널 값이 허용됨
참조 무결성 제약조건 유지를 위해 참조되는 테이블에서 투플 삭제 시 처리 방법을 지정하는 옵션
ON DELETE/UPDATE NO ACTION: 투플을 삭제하지 못하게 함
ON DELETE/UPDATE CASCADE: 관련 투플을 함께 삭제함
ON DELETE/UPDATE SET NULL: 관련 투플의 외래키 값을 NULL로 변경
ON DELETE/UPDATE SET DEFAULT: 관련 투플의 외래키 값을 미리 지정한 기본 값으로 변경
CHECK: 특정 속성에 대한 제약조건을 지정, CONSTRAINT 키워드와 함께 고유한 이름을 부여할 수 있음
ex. CHECK(재고량 &gt;= 0 AND 재고량 &lt;= 10000)
속성의 데이터 타입</p>
<p>테이블 변경: ALTER TABLE
새로운 속성 추가</p>
<p>ALTER TABLE 테이블_이름
ADD 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값];</p>
<p>기존 속성 삭제</p>
<p>ALTER TABLE 테이블_이름
DROP COLUMN 속성_이름;
만약 삭제할 속성과 관련된 제약 조건이 존재한다면? 관련된 제약조건을 먼저 삭제해야 함
새로운 제약 조건 추가</p>
<p>ALTER TABLE 테이블_이름
ADD CONSTRAINT 제약조건_이름 제약조건_내용;</p>
<p>기존 제약 조건 삭제</p>
<p>ALTER TABLE 테이블_이름
DROP CONSTRAINT 제약조건_이름;</p>
<h4 id="테이블-삭제-drop-table">테이블 삭제: DROP TABLE</h4>
<p>DROP TABLE 테이블_이름;
삭제할 테이블을 참조하는 테이블이 있다면? 관련된 외래키 제약조건을 먼저 삭제해야 함
SQL을 이용한 데이터 조작
데이터 검색: SELECT
SELECT [ALL | DISTINCT] 속성_리스트
FROM 테이블_리스트;
ALL: 기본 값 / DISTINCT: 중복 제거 옵션
DISTINCT: NULL 값 포함</p>
<p>NULL 값도 제거하고 싶다면? WHERE 절을 추가해서 NOT NULL 조건을 부여하는 방법 사용</p>
<p>모든 속성을 검색하고 싶을 때</p>
<p>SELECT * FROM 테이블</p>
<p>ALIAS: AS 키워드를 사용해 결과 테이블에서 속성의 이름을 바꾸어 출력 가능</p>
<p>새로운 이름에 공백이 포함되어 있으면 큰따옴표 or 작은따옴표로 묶어주어야 함
AS 키워드 생략 가능
SELECT 제품명, 단가 AS 가격 
FROM 제품;</p>
<p>산술연산자</p>
<p>(), *, /, +, -
산술식을 이용한 검색 -&gt; 속성값이 실제로 변경되는 것이 아니라 결과 테이블에서만 계산된 결과 값이 출력됨
합성 연산자</p>
<p>문자와 문자를 연결: +, CONCAT(str1, str2)
SELECT name + &#39;학생은 &#39; + dept_name + &#39;학과에 재학중입니다.&#39; 
FROM student;</p>
<h4 id="where-조건-검색">WHERE 조건 검색</h4>
<p>WHERE 키워드와 함께 검색 조건 제시
숫자뿐만 아니라 문자나 날짜 값 비교 연산도 가능 ex. &#39;A&#39; &lt; &#39;C&#39;
조건에서 문자나 날짜 값은 작은따옴표로 묶어서 표현
비교 연산자: =, &lt;&gt;(다르다), &lt;, &gt;, &lt;=, &gt;=
논리 연산자: AND, OR, NOT
SELECT 주문제품, 수량
FROM 주문
WHERE 주문고객 = &#39;suji&#39; AND 수량 &gt; 15;</p>
<h4 id="like를-이용한-조건-검색">LIKE를 이용한 조건 검색</h4>
<p>부분적으로 일치하는 데이터 검색, 문자열을 이용하는 조건에만 LIKE 사용 가능
%: 0개 이상의 문자 (문자 내용과 개수 상관 없음), _ : 1개의 문자 (문자 내용은 상관없음)
ex. LIKE &#39;%데이터%&#39;: 데이터가 포함된 문자열 , LIKE &#39;데이터_&#39; : 데이터로 시작하는 4자 길이의 문자열
NULL을 이용한 조건 검색</p>
<p>IS NULL / IS NOT NULL
검색 조건에서 널 값은 다른 값과 크기를 비교하면 결과가 모두 거짓이 됨
ORDER BY 정렬 검색</p>
<p>정렬 기준이 되는 속성과 정렬 방식을 지정해 결과 테이블을 사용자가 원하는 순서로 출력
ASC: 오름차순 (디폴트값), DESC: 내림차순
여러 기준에 따라 정렬하는 것도 가능
SELECT [ALL | DISTINCT] 속성_리스트
FROM 테이블_리스트
[WHERE 조건]
[ORDER BY 속성_리스트 [ASC | DESC]];</p>
<p>집계 함수를 이용한 검색</p>
<p>집계 함수(aggregate function) == 열 함수(column function)
NULL인 속성 값은 제외하고 계산
WHERE절에서는 사용할 수 없고, SELECT 절이나 HAVING 절에서만 사용 가능</p>
<p>SELECT AVG(단가) FROM 제품;</p>
<p>GROUP BY 그룹별 검색</p>
<p>JOIN 검색</p>
<p>조인 검색: 여러 개의 테이블을 연결하여 데이터를 검색하는 것
조인 속성: 조인 검색을 위해 테이블을 연결해주는 속성 - 일반적으로 외래키를 조인 속성으로 이용, 도메인이 같아야함
SELECT 제품.제품명
FROM 제품, 주문
WHERE 제품.제품번호 = 주문.주문제품</p>
<p>SELECT 제품.제품명
FROM 고객, 제품, 주문
WHERE 고객.고객이름 = &#39;suji&#39; AND 고객.고객아이디 = 주문.주문고객 AND 제품.제품번호 = 주문.주문제품;</p>
<h4 id="데이터-삽입-insert">데이터 삽입: INSERT</h4>
<p>INSERT
INTO 테이블_이름[(속성_리스트)]
VALUES (속성값_리스트);
속성 키워드 생략하면 테이블 정의할 때 지정한 속성의 순서대로 값 삽입
전달하지 않은 속성 값은 NULL 삽입
부속 질의문을 이용한 데이터 삽입</p>
<p>SELECT 문을 이용해 다른 테이블에서 검색한 데이터 삽입
INSERT INTO 한빛제품(제품명, 재고량, 단가) SELECT 제품명, 재고량, 단가 FROM 제품 WHERE 제조업체 = &#39;한빛제과&#39;;</p>
<h4 id="데이터-수정-update">데이터 수정: UPDATE</h4>
<p>UPDATE 테이블_이름
SET 속성_이름1 = 값1, 속성_이름2 = 값2, ...
[WHERE 조건];
WHERE 절에 제시된 조건을 만족하는 투플에 대해서만 속성 값 수정, 생략하면 모든 투플 수정
부속 질의문을 이용한 UPDATE 문</p>
<h4 id="update-주문">UPDATE 주문</h4>
<p>SET 수량 = 5
WHERE 주문고객 IN (SELECT 고객아이디
                 FROM 고객
                 WHERE 고객이름 = &#39;suji&#39;);           </p>
<h4 id="데이터-삭제-delete">데이터 삭제: DELETE</h4>
<p>DELETE
FROM 테이블_이름
[WHERE 조건];
WHERE 절에 제시한 조건을 만족하는 투플만 삭제, 생략하면 테이블에 존재하는 모든 투플을 삭제해 빈 테이블이 됨
부속 질의문을 이용한 DELETE 문</p>
<h3 id="뷰">뷰</h3>
<p>뷰(View)</p>
<p>다른 테이블을 기반으로 만들어진 논리적으로만 존재하는 가상 테이블
뷰를 통해 기본 테이블(뷰를 만드는 기반이 되는 물리적인 테이블)의 내용을 쉽게 검색할 수 있지만, 기본 테이블의 내용을 변화시키는 작업은 제한적으로 이루어짐
기본 테이블을 들여다 볼 수 있는 창의 역할
뷰의 장점</p>
<p>질의문을 더 쉽게 작성할 수 있다.
미리 뷰를 만들어 놓으면, 복잡한 SQL 문을 작성하지 않아도 SELECT 절과 FROM 절만으로도 원하는 데이터 검색이 가능
데이터 보안 유지에 도움이 된다.
자신에게 제공된 뷰를 통해서만 데이터에 접근하도록 권한 설정 가능
데이터를 좀 더 편리하게 관리할 수 있다.
제공된 뷰와 관련이 없는 다른 내용에 대해 사용자가 신경 쓸 필요가 없음</p>
<h4 id="뷰-생성-create-view">뷰 생성: CREATE VIEW</h4>
<p>CREATE VIEW 뷰_이름[(속성_리스트)]
AS SELECT 문
[WITH CHECK OPTION];
속성 리스트를 생략하면 SELECT 절에 나열된 속성 이름을 그대로 사용
AS 키워드와 함께 기본 테이블에 대한 SELECT 문 작성: 생성하려는 뷰의 정의를 표현, ORDER BY는 사용 불가
WITH CHECK OPTION: 뷰에 삽입, 수정 연산을 할 때 SELECT 문에서 제시한 뷰의 정의 조건을 위반하면 수행되지 않도록 하는 제약 조건 지정
CREATE VIEW 업체별제품수(제조업체, 제품수)
AS SELECT 제조업체, COUNT(*)
FROM 제품
GROUP BY 제조업체
WITH CHECK OPTION;</p>
<p>뷰 활용: SELECT, INSERT, UPDATE, DELETE 문
SELECT 문</p>
<p>일반 테이블과 동일한 방법으로 데이터 검색
뷰에 대한 SELECT 문이 내부적으로는 기본 테이블에 대한 SELECT 문으로 변환되어 수행
검색 연산은 모든 뷰에 수행 가능
INSERT, UPDATE, DELETE 문</p>
<p>뷰에 대한 삽입, 수정, 삭제 연산은 실제로 기본 테이블에 수행되므로 결과적으로는 기본 테이블이 변경됨
뷰에 대한 삽입, 수정, 삭제 연산은 제한적으로 수행 됨: 변경 가능한 뷰 vs 변경 불가능한 뷰
변경 불가능한 뷰의 특징
기본 테이블의 기본키를 구성하는 속성이 포함되어 있지 않은 뷰
기본 테이블에 있던 내용이 아닌 집계 함수로 새로 계산된 내용을 포함하는 뷰
DISTINCT 키워드를 포함하여 정의한 뷰
GRPUP BY 절을 포함하여 정의한 뷰
여러 개의 테이블을 조인하여 정의한 뷰는 변경이 불가능한 경우가 많음</p>
<p>뷰 삭제: DROP VIEW
DROP VIEW 뷰_이름;
뷰를 삭제해도 기본 테이블은 영향을 받지 않는다.
삭제할 뷰를 참조하는 제약조건이 존재한다면? 관련된 제약조건을 먼저 삭제해야 함
삽입 SQL
삽입 SQL(ESQL; Embedded SQL)</p>
<p>프로그래밍 언어로 작성된 응용 프로그램 안에 삽입하여 사용하는 SQL 문
특징</p>
<p>프로그램 안에서 일반 명령문이 위치할 수 있는 곳이면 어디든 삽입 가능
일반 명령문과 구별하기 위해 삽입 SQL 문 앞에 EXEC SQL을 붙임
프로그램에 선언된 일반 변수를 삽입 SQL 문에서 사용할 때는 이름 앞에 콜론(:)을 붙여서 구분
커서(cursor)</p>
<p>수행 결과로 반환된여러 행을 한 번에 하나씩 가리키는 포인터
여러 개의 행을 결과로 반환하는 SELECT 문을 프로그램에서 사용할 때 필요
삽입 SQL 문에서 사용할 변수 선언 방법</p>
<p>커서를 이동
커서를 이동하여 처리할 다음 행을 가리키도록 하고, 커서가 가리키는 행으로부터 속성값을 가져와 변수에 저장
결과 테이블에는 여러 행이 존재하므로 FETCH 문을 반복해서 여러 번 수행해야 함
EXEC SQL FETCH 커서_이름 INTO 변수_리스트;</p>
<p>EXEC SQL FETCH product_cursor into :p_name, :price;</p>
<p>커서 사용 종료
EXEC SQL CLOSE 커서_이름;</p>
<p>EXEC SQL CLOSE product_cursor;</p>
<p>JOIN
EQUI JOIN
EQUI JOIN</p>
<p>두 개의 테이블 간에 특정 열(칼럼) 값이 서로 동일한 경우에 해당 행을 결합하는 방법
SELECT PLAYER_NAME AS 선수명, TEAM_NAME AS 소속팀명
FROM PLAYER JOIN TEAM
ON TEAM.TEAM_ID = PLAYER.TEAM_ID
JOIN 키워드는 내부적으로 INNER JOIN이 수행된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[5주차 운영체제]]></title>
            <link>https://velog.io/@hmu_uri/5%EC%A3%BC%EC%B0%A8-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</link>
            <guid>https://velog.io/@hmu_uri/5%EC%A3%BC%EC%B0%A8-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C</guid>
            <pubDate>Tue, 14 Nov 2023 09:22:35 GMT</pubDate>
            <description><![CDATA[<h2 id="video-streaming">Video Streaming</h2>
<p>스트리밍을 할 때 수많은 컨텐츠를 어떻게 관리하는가? 사용자마다 다른 기기를 사용하는데 어떤 대역폭으로 미디어를 전송하는가?</p>
<h3 id="video란">video란?</h3>
<p>sequence of images. images = bit로 표현되는 픽셀들의 배열.</p>
<p>-비디오의 bit rate가 높을 수록 비디오 품질이 높아지며 비디오는 품질과 bit rate 간 trade off를 통해 압축 가능.</p>
<ul>
<li>압축 알고리즘을 이용해 다양한 Bit rate로 비디오를 압축할 수 있고, 사용자는 대역폭에 맞는 버전을 선택하여 시청한다.</li>
</ul>
<h2 id="dash">DASH</h2>
<p>기존 http 방식에서 발전된 것.
기존 http</p>
<ul>
<li>모든 클라이언트가 동일한 bit rate로 압축된 비디오 수신</li>
<li>클라이언트마다 사용 가능한 대역폭이 다름에도 유연하게 대처 불가</li>
</ul>
<p>DASH (dynamic adaptive Streaming over HTTP)</p>
<ul>
<li>비디오를 각각 다른 bit rate로 인코딩하여 다양한 버전의 비디오 스트리밍을 제공하는 것.</li>
</ul>
<p><em>SERVER</em></p>
<ol>
<li>비디오 파일을 여러 개의 chunk로 분할</li>
<li>각각의 chunk를 서로 다른 rate로 인코딩</li>
<li>manifest file을 통해 각각의 chunk 파일에 대한 url wprhd</li>
</ol>
<p><em>CLIENT</em></p>
<ol>
<li>서버에 manifest file 요청해 비디오 버전 정보 획득</li>
<li>받고자 하는 chunk 선택하고 해당 url에 http get 요청</li>
<li>chunk 다운하면서 대역폭 측정</li>
<li>측정한 대역폭에 맞게 다음에 받을 chunk 선택</li>
</ol>
<h2 id="cdn">CDN</h2>
<p>content distribution network.
대규모 비디오 데이터를 전 세계에 분산된 사용자들에게 효과적으로 전달하기 위한 기술. 지리적으로 분산되어 있는 기점 서버에서 비디오 copy들을 저장하고 제공한다.
지역마다 선호하는 비디오가 다를 수 있기 때문에 push(CND→노드)가 아닌 pull(노드←CDN) 방식을 사용한다. 
웹 캐싱과 유사한 방식으로 관리하여, 공간이 차면 오래된 비디오부터 삭제된다.</p>
<h3 id="netflix">Netflix</h3>
<ol>
<li>넷플릭스가 아마존 클라우드의 호스트에 비디오 업로드</li>
<li>아마존 클라우드가 업로드된 비디오를 다양한 형시고가 bit rate로 변환</li>
<li>여러 버전의 비디오 CDN 서버에 업로드</li>
</ol>
<p>사용자는?</p>
<ol>
<li>넷플릭스 로그인</li>
<li>시청할 비디오 검색</li>
<li>비디오 선택하면 넷플릭스가 최적 cdn 서버 결정, 사용자는 해당 비디오에 대한 manifest file 획득</li>
<li>사용자는 manifest file 통해 dash 서버에 청크 요청.</li>
</ol>
<h2 id="transport-layer">Transport Layer</h2>
<h3 id="tcp-vs-udp">TCP vs UDP</h3>
<h3 id="transport-layer-vs-network-layer">Transport Layer vs Network Layer</h3>
<p>Network Layer : 두 호스트 간 logical communication 제공
Transport Layer : 두 호스트에서 실행 중인 프로세스 간 logical communication 제공</p>
<p>transport layer는 multiplexing and demuliplexing으로 network layer의 host-host logical communication을 process-process로 연장한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[5주차 컴퓨터 네트워크]]></title>
            <link>https://velog.io/@hmu_uri/5%EC%A3%BC%EC%B0%A8-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@hmu_uri/5%EC%A3%BC%EC%B0%A8-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Tue, 14 Nov 2023 09:22:07 GMT</pubDate>
            <description><![CDATA[<h2 id="race-condition">Race Condition</h2>
<p>Storage-box를 공유하는 Execution-box가 여럿 있는 경우 데이터의 불일치 문제를 발생시킬 수 있음.</p>
<ul>
<li>kernel 수행 중 인터럽트 발생 시</li>
<li>Process 가 system call을 하여 kernel mode로 수행중인데, context switch 가 일어나는 경우</li>
<li>Multiprocesser에서 shared memory 내의 kernel data</li>
</ul>
<h3 id="kernel-수행-중-인터럽트-발생-시">kernel 수행 중 인터럽트 발생 시</h3>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/5751eddc-d699-4acb-b099-0335c6749396/image.png" alt=""></p>
<p>kernel 사이의 context switch 상황 =&gt; 둘 다 같은 주소 공간을 공유해서 일어난 문제</p>
<p>=&gt; 커널 모드의 수행이 끝나기 전에는 인터럽트를 받지 않도록 하는 방법(disable/enable)으로 해결 가능</p>
<h3 id="process-가-system-call을-하여-kernel-mode로-수행중인데-context-switch-가-일어나는-경우">Process 가 system call을 하여 kernel mode로 수행중인데, context switch 가 일어나는 경우</h3>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/955be2e0-4944-42e3-a917-ddbda6db91a9/image.png" alt=""></p>
<p>시스템 콜을 하는 중에 커널 주소 공간 데이터에 접근하여 cpu를 preempt.</p>
<p>=&gt; 커널 모드에서 수행중일 때는 CPU를 preempt 하지 않고, 사용자 모드로 돌아갈 때 preempt를 한다.</p>
<h3 id="multiprocesser에서-shared-memory-내의-kernel-data">Multiprocesser에서 shared memory 내의 kernel data</h3>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/7dbf97d4-1de9-40c6-85f1-980ac2f458f8/image.png" alt=""></p>
<p>여러 개의 cpu가 함께 작동할 때, 어떤 cpu가 마지막으로 count&amp;store 했는지에 따라 결과값이 달라진다.</p>
<p>=&gt; </p>
<ol>
<li>한번에 하나의 CPU만 커널에 들어갈 수 있게 
 =&gt; 비효율적임. 사용❌</li>
<li>커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대해 lock/unlock</li>
</ol>
<h3 id="결론">결론</h3>
<ul>
<li>공유 데이터의 동시 접근은 데이터 불일치를 야기시킬 수 있다.
=&gt; 데이터의 일관성 유지를 위해 협력 프소세스 간의 실행순서를 정리해주는 매커니즘이 필요하다.</li>
<li>race condition 상황에서 데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라진다.</li>
<li>이러한 race condition을 막기 위해서 concurrent process는 동기화(synchronize)되어야 한다.</li>
</ul>
<h2 id="the-critical-section-problem">The Critical-Section Problem</h2>
<p>critical section : 코드 상에서 Race condition이 발생할 수 있는 특정 부분(공유 데이터를 접근하는 코드 부분)</p>
<h4 id="해결-방법">해결 방법</h4>
<ol>
<li>Mutual Exclusion</li>
<li>Progress</li>
<li>Bounded Waiting</li>
</ol>
<h2 id="dining-philosophers-problem">Dining-Philosophers Problem</h2>
<ul>
<li>5명의 철학자가 원탁에 둘러앉아있고, 젓가락은 5개만</li>
<li>각 철학자는 식사를 하기를 원하고, 철학자가 식사를 하기 위해서는 양쪽 젓가락을 모두 집어야 함</li>
</ul>
<h4 id="deadlock">Deadlock</h4>
<p>만약 모든 철학자가 식사를 하기를 원해서 각자 왼쪽에 있는 젓가락을 들었다면, 더 이상 아무런 작업도 수행할 수 없음</p>
<p>=&gt; 4명의 철학자만이 테이블에 동시에 앉도록 제한</p>
<ul>
<li>젓가락을 두 개 집을 수 있을 때만 젓가락을 집도록 제한</li>
<li>짝수/홀수 철학자는 왼쪽/오른쪽 젓가락을 먼저 집도록 제한</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[5주차 데이터베이스]]></title>
            <link>https://velog.io/@hmu_uri/5%EC%A3%BC%EC%B0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@hmu_uri/5%EC%A3%BC%EC%B0%A8-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Tue, 14 Nov 2023 09:21:36 GMT</pubDate>
            <description><![CDATA[<h2 id="관계-데이터-연산">관계 데이터 연산</h2>
<h3 id="데이터-모델--데이터-구조--연산--제약조건">데이터 모델 = 데이터 구조 + 연산 + 제약조건</h3>
<ul>
<li>데이터 구조 : 각 항목과 값으로 이루어져 있는 테이블</li>
<li>제약 조건 : 무결성 제약 조건 등 데이터베이스를 사용하는 사람들과 데이터 베이스를 작동시키는 프로그램에게 일관성을 가져다주는 최소한의 규칙</li>
</ul>
<p>관계 데이터 연산 = 관계 대수(순서 중요) + 관계 해석(논리 중요)
관계 대수 = 일반 집합 연산자 + 순수 관계 연산자
관계 해석 = 투플 관계 해석 + 도메인 관계 해석</p>
<h3 id="일반-집합-연산자">일반 집합 연산자</h3>
<p>릴레이션은 투플의 집합.
합병이 가능하려면</p>
<ol>
<li>두 릴레이션의 차수가 같아야 함</li>
<li>두 릴레이션에서 서로 대응되는 속성의 도메인이 같아야 함.</li>
</ol>
<p>순수 관계 연산자</p>
<ol>
<li>Selection</li>
<li>Projection</li>
</ol>
<hr>
<p>Selection과 Projection의 차이점은 수평적 부분집합인가, 수직적 부분집합인가.</p>
<ol start="3">
<li>Join</li>
</ol>
<ul>
<li>자연 조인</li>
<li>외부 조인(해당되지 않는 항목도 무조건 추가)</li>
<li>세미 조인(일차로 필터링 하고 남은 것을 자연조인 시킴)</li>
</ul>
<ol start="4">
<li>Division</li>
</ol>
<h3 id="관계-해석">관계 해석</h3>
<p>처리를 원하는 데이터가 무엇인지만 기술하는 언어. (비절차 언어)</p>
<ul>
<li>투플 관계 해석 (투플, 행 기준)</li>
<li>도메인 관계 해석 (도메인(열) 기준 변수)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[04. 데이터베이스 데이터 모델링]]></title>
            <link>https://velog.io/@hmu_uri/04.-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81</link>
            <guid>https://velog.io/@hmu_uri/04.-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81</guid>
            <pubDate>Tue, 07 Nov 2023 09:59:51 GMT</pubDate>
            <description><![CDATA[<h2 id="데이터-모델링">데이터 모델링</h2>
<ul>
<li>현실 세계에 존재하는 데이터를 컴퓨터 세계의 db로 옮기는 변환 과정. 필요한 정보들만 모아 가상화!</li>
</ul>
<h3 id="데이터-모델">데이터 모델</h3>
<ul>
<li>데이터 모델링의 결과물을 표현하는 도구</li>
<li>개념적 데이터 모델 vs 논리적 데이터 모델</li>
<li>데이터 구조와 연산, 제약조건으로 이루어져 있음</li>
</ul>
<h4 id="개체-관계-모델-개체-관계-다이어그램--er-다이어그램">개체-관계 모델/ 개체-관계 다이어그램 = ER 다이어그램</h4>
<p>개체 : 저장할 가치가 있는 중요 데이터를 가지고 있는 사람이나 사물, 개념, 사건 등
ER 다이어그램에서 네모 안에 적고, 속성은 원으로 그림.</p>
<h3 id="속성">속성</h3>
<ul>
<li>단일값 속성 vs 다중값 속성</li>
<li>단순 속성 vs 복합 속성</li>
<li>유도 속성 : 값이 별도로 저장되지 않음. if, 책과 할인율이 있을 때 가격은 유도 속성</li>
<li>키 속성: 각 개체 인스턴스를 식별하는 데 사용되는 속성(id)</li>
</ul>
<h3 id="관계">관계</h3>
<p>개체와 개체가 맺고 있는 의미 있는 연관성. er 다이어그램에서 다이아몬드로 되어있음</p>
<ul>
<li>일대일 관계</li>
<li>일대다 관계</li>
<li>다대다 관계</li>
<li>필수적 참여(두줄) vs 선택적 참여</li>
<li>관계의 종속성 약한 개체 vs 강한 개체</li>
</ul>
<h2 id="논리적-데이터-모델">논리적 데이터 모델</h2>
<p>사용자가 생각하는 데이터베이스의 모습 또는 구조</p>
<ul>
<li>관계 데이터 모델 vs 계층 데이터 모델(트리 형태, 사이클 없음)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[04. 운영체제 cpu scheduling]]></title>
            <link>https://velog.io/@hmu_uri/04.-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-cpu-scheduling</link>
            <guid>https://velog.io/@hmu_uri/04.-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-cpu-scheduling</guid>
            <pubDate>Tue, 07 Nov 2023 09:49:14 GMT</pubDate>
            <description><![CDATA[<p>다중 프로세서 운영체제 설계의 핵심 : CPU 이용률 최대화. =&gt; 항상 실행 중인 프로세스를 가지게 하는 것. </p>
<p><img src="https://velog.velcdn.com/images/hmu_uri/post/93495873-8f5d-4c50-9816-5cd5c3655806/image.png" alt=""></p>
<ul>
<li>CPU Scheduler : 레디 큐에 있는 프로세스(준비 상태) 중에 하나를 선택해 cpu 할당</li>
<li>Dispatcher : cpu의 제어권을 cpu scheduler가 선택한 프로세스에게 넘겨주는 모듈.</li>
<li>Preemptive &amp; NonPreemptive: 선점 스케줄링(우선 순위 프로세스가 발생되면 강제 반납), 비선점 스케줄링(자진 반납)</li>
</ul>
<p>cpu 스케쥴링이 필요한 프로세스의 상태 변화</p>
<ol>
<li>I/O 발생 || 종료 Running=&gt; Blocked || Blocked=&gt; Ready</li>
<li>Interrupt 발생 Running=&gt; Ready</li>
<li>I/O 종료 Blocked =&gt; Ready</li>
<li>Terminate</li>
</ol>
<p>Utilization 높고, Throughput 높고, 처리시간 짧고, 응답시간 짧을 수록 좋다.</p>
<h2 id="schedulign-algorithm">Schedulign Algorithm</h2>
<ul>
<li>FCFS (First come First )</li>
<li>SJF (Shortest Job First)</li>
<li>Priority Scheduling</li>
<li>Round Robin : FCFS에 선점 개념을 추가함.</li>
<li>Multilevel Queue</li>
<li>Multilevel Feedback Queue</li>
</ul>
<h3 id="scheduling-type">Scheduling Type</h3>
<ul>
<li>Multiple-Processor Scheduling : cpu 여러개. Load Sharing 필요.</li>
<li>Real-time Scheduling : hard(정해진 시간 안에  task 반드시 끝내도록 보장) soft(일반 프로세스에 비해 높은 priority 보장)</li>
<li>Thread Scheduling : local / global</li>
</ul>
<h3 id="algorithm-evaluation">Algorithm Evaluation</h3>
<ul>
<li>Queueing models</li>
<li>Implementation &amp; Measurement</li>
<li>Simulation</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>