<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>thingzoo.log</title>
        <link>https://velog.io/</link>
        <description>공부한 내용은 바로바로 기록하자!</description>
        <lastBuildDate>Fri, 15 Mar 2024 14:21:44 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>thingzoo.log</title>
            <url>https://velog.velcdn.com/images/thing-zoo/profile/94025eb6-48d6-4ca8-b586-f580509df27f/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. thingzoo.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/thing-zoo" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Java] Garbage Collection]]></title>
            <link>https://velog.io/@thing-zoo/Java-Garbage-Collection</link>
            <guid>https://velog.io/@thing-zoo/Java-Garbage-Collection</guid>
            <pubDate>Fri, 15 Mar 2024 14:21:44 GMT</pubDate>
            <description><![CDATA[<h1 id="가비지-컬렉션garbage-collection">가비지 컬렉션(Garbage Collection)</h1>
<p>힙 영역에서 사용하지 않는 객체들을 제거하는 작업</p>
<ul>
<li>이 객체를 제거하는 작업이 필요한 이유는 자바는 개발자가 메모리를 직접 해제해줄 수 없는 언어이기 때문</li>
</ul>
<h1 id="gc의-동작방식">GC의 동작방식</h1>
<p>가장 기본적인 알고리즘인 Serial GC 방식을 알아보자
(좀 더 진보된 GC는 G1 GC, ZGC가 있음)</p>
<ul>
<li>GC는 Minor GC, Major GC로 구분됨</li>
<li>Minor GC는 young 영역에서, Major GC는 old 영역에서 일어난다고 정의</li>
<li>GC를 수행할 때는 GC를 수행하는 스레드 이외의 스레드는 모두 정지하며, 이를 Stop-the-world라고 함</li>
</ul>
<h2 id="minor-gc">Minor GC</h2>
<ul>
<li>young 영역에서 일어남</li>
<li>Eden 영역이 가득 참에서 부터 시작 </li>
<li>Eden 영역에서 참조가 남아있는 객체를 mark하고 survivor 영역으로 복사하고 비움</li>
<li>Survivor 영역도 가득차면 같은 방식으로 다른 Survivor 영역에 복사하고 비움</li>
<li>이를 반복하다 보면 계속 해서 살아남는 객체는 old 영역으로 이동</li>
</ul>
<h2 id="major-gc">Major GC</h2>
<ul>
<li>old 영역에서 일어남</li>
<li>위와 반대로 삭제되어야 하는 객체를 mark하고 지움(sweep) </li>
<li>메모리는 단편화 된 상태이므로 이를 한 군데에 모아주는 것을 Compaction이라 하며 compact라고 함</li>
<li>그래서 Mark-Sweep-Compact 알고리즘이라고 함</li>
<li>이것이 중요한 이유는 GC 수행시 시스템이 멈추기 때문에 의도치 않은 장애의 원인이 될 수 있음. </li>
<li>따라서 이를 위해 힙 영역을 조정하는 것을 GC 튜닝이라고 하고 JVM 메모리는 절대 마음대로 조정해선 안됨!</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java] JVM]]></title>
            <link>https://velog.io/@thing-zoo/Java-JVM</link>
            <guid>https://velog.io/@thing-zoo/Java-JVM</guid>
            <pubDate>Fri, 15 Mar 2024 14:04:09 GMT</pubDate>
            <description><![CDATA[<h1 id="jvmjava-virtual-machine">JVM(Java Virtual Machine)</h1>
<ul>
<li>가상 머신이란 프로그램을 실행하기 위해 물리적인 머신과 유사한 머신을 소프트웨어로 구현한 것<ul>
<li>즉, 여러가지의 기기위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는 것</li>
</ul>
</li>
<li>JVM의 역할은 <strong>자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행</strong>하는 것<h2 id="jvm의-특징">JVM의 특징</h2>
</li>
<li>컴파일된 바이트 코드(.class파일)를 기계가 이해할 수 있는 기계어로 변환</li>
<li>스택 기반의 가상 머신</li>
<li>메모리 관리와 GC를 수행<h1 id="jvm-구조">JVM 구조</h1>
<h2 id="클래스-로더class-loader🚚">클래스 로더(Class Loader)🚚</h2>
JVM으로 class(바이트 코드)를 불러와서 메모리영역에 저장<h2 id="실행-엔진execution-engine📇">실행 엔진(Execution Engine)📇</h2>
.class파일과 같은 바이트 코드를 기계어로 번역해 실행<h3 id="인터프리터interpreter">인터프리터(Interpreter)</h3>
운영체제가 읽은 바이트 코드를 기계어로 번역<h3 id="jit-컴파일러just-in-time-compiler">JIT 컴파일러(Just-In-Time Compiler)</h3>
인터프리터의 효율을 높이기 위한 컴파일러</li>
<li>인터프리터가 반복되는 코드를 발견하면, JIT 컴파일러가 반복되는 코드를 네이티브 코드로 바꿔줌<h2 id="gcgarbage-collector🗑️">GC(Garbage Collector)🗑️</h2>
Heap 영역에 참조되지 않는 객체들을 제거해주는 모듈
 <h2 id="메모리-영역runtime-data-area🗂️">메모리 영역(Runtime Data Area)🗂️</h2>
운영체제로부터 JVM이 할당받은 메모리 영역</li>
<li>런타임 시, 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳<h3 id="pc-register">PC Register</h3>
Thread가 시작될 때 생성되며 현재 수행 중인 JVM 명령의 주소를 갖고 있음</li>
<li>JVM은 스택 기반의 가상 머신으로, CPU에 직접 접근하지 않고 Stack에서 주소를 가져와 PC Register에 저장<h3 id="stack-area">Stack Area</h3>
지역 변수, 파라미터 등이 저장되는 영역</li>
<li>실제 객체는 Heap에 할당되고 해당 레퍼런스만 Stack에 저장됨<h3 id="heap-area">Heap Area</h3>
동적으로 생성된 오브젝트와 배열이 저장되는 곳으로 GC의 대상 영역<h3 id="method-area">Method Area</h3>
클래스 정보를 처음 메모리에 올릴 때 초기화되는 대상을 저장하기 위한 영역</li>
<li>클래스 멤버 변수, 메소드 정보, Type 정보, Constant Pool, static, final 변수 등</li>
<li>상수 풀(Constant Pool)은 모든 Symbolic Reference를 포함</li>
</ul>
<h1 id="jvm의-실행방식">JVM의 실행방식</h1>
<ol>
<li>자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어 자바 바이트코드(.class)로 변환시킵니다.</li>
<li>Class Loader를 통해 class 파일들을 JVM으로 로딩합니다.</li>
<li>로딩된 class파일들은 Execution engine을 통해 해석됩니다.</li>
<li>해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어집니다</li>
</ol>
<blockquote>
<p><strong>단계별 산출물</strong>
개발자가 읽을 수 있는 Java 코드들(.java 파일)
(컴파일러 후)
운영체제가 읽을 수 있는 바이트 코드(.class 파일)
(실행엔진 후)
기계가 읽을 수 있는 기계어</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MySQL] 연산자]]></title>
            <link>https://velog.io/@thing-zoo/MySQL-%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@thing-zoo/MySQL-%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Thu, 07 Mar 2024 13:47:40 GMT</pubDate>
            <description><![CDATA[<p>MySQL은 대부분의 프로그래밍 언어에서 지원하는 기본적인 연산자를 모두 제공한다.</p>
<h1 id="산술-연산자">산술 연산자</h1>
<table>
<thead>
<tr>
<th>산술 연산자</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>+</td>
<td>왼쪽 피연산자에 오른쪽 피연산자를 더함.</td>
</tr>
<tr>
<td>-</td>
<td>왼쪽 피연산자에서 오른쪽 피연산자를 뺌.</td>
</tr>
<tr>
<td>*</td>
<td>왼쪽 피연산자에 오른쪽의 피연산자를 곱함.</td>
</tr>
<tr>
<td>/</td>
<td>왼쪽 피연산자를 오른쪽 피연산자로 나눔(실수 나눗셈).</td>
</tr>
<tr>
<td>DIV</td>
<td>왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 소수 부분을 버림(정수 나눗셈).</td>
</tr>
<tr>
<td>% 또는 MOD</td>
<td>왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 그 나머지를 반환함.</td>
</tr>
</tbody></table>
<h1 id="대입-연산자">대입 연산자</h1>
<p>대입 연산자 | 설명
= | 왼쪽 피연산자에 오른쪽 피연산자를 대입함. (SET 문이나 UPDATE 문의 SET 절에서만 대입연산자로 사용됨)
:= | 왼쪽 피연산자에 오른쪽 피연산자를 대입함.</p>
<h1 id="비교-연산자">비교 연산자</h1>
<table>
<thead>
<tr>
<th>비교 연산자</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>=</td>
<td>왼쪽 피연산자와 오른쪽 피연산자가 같으면 참을 반환함.</td>
</tr>
<tr>
<td>!=, &lt;&gt;</td>
<td>왼쪽 피연산자와 오른쪽 피연산자가 같지 않으면 참을 반환함.</td>
</tr>
<tr>
<td>&lt;</td>
<td>왼쪽 피연산자가 오른쪽 피연산자보다 작으면 참을 반환함.</td>
</tr>
<tr>
<td>&lt;=</td>
<td>왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같으면 참을 반환함.</td>
</tr>
<tr>
<td>&gt;</td>
<td>왼쪽 피연산자가 오른쪽 피연산자보다 크면 참을 반환함.</td>
</tr>
<tr>
<td>&gt;=</td>
<td>왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같으면 참을 반환함.</td>
</tr>
<tr>
<td>&lt;=&gt;</td>
<td>양쪽의 피연산자가 모두 NULL이면 참을 반환하고, 하나의 피연산자만 NULL이면 거짓을 반환함.</td>
</tr>
<tr>
<td>IS</td>
<td>왼쪽 피연산자와 오른쪽 피연산자가 같으면 참을 반환함.(오른쪽 피연산자가 불리언 값인 TRUE, FALSE, UNKNOWN 값일 때 사용함)</td>
</tr>
<tr>
<td>IS NOT</td>
<td>왼쪽 피연산자와 오른쪽 피연산자가 같지 않으면 참을 반환함.(오른쪽 피연산자가 불리언 값인 TRUE, FALSE, UNKNOWN 값일 때 사용함)</td>
</tr>
<tr>
<td>IS NULL</td>
<td>피연산자의 값이 NULL이면 참을 반환함.</td>
</tr>
<tr>
<td>IS NOT NULL</td>
<td>피연산자의 값이 NULL이 아니면 참을 반환함.</td>
</tr>
<tr>
<td>BETWEEN min AND max</td>
<td>피연산자의 값이 min 값보다 크거나 같고, max 값보다 작거나 같으면 참을 반환함.</td>
</tr>
<tr>
<td>NOT BETWEEN min AND max</td>
<td>피연산자의 값이 min 값보다 작거나 max 크면 참을 반환함.</td>
</tr>
<tr>
<td>IN()</td>
<td>피연산자의 값이 인수로 전달받은 리스트에 존재하면 참을 반환함.</td>
</tr>
<tr>
<td>NOT IN()</td>
<td>피연산자의 값이 인수로 전달받은 리스트에 존재하지 않으면 참을 반환함.</td>
</tr>
</tbody></table>
<h1 id="논리-연산자">논리 연산자</h1>
<table>
<thead>
<tr>
<th>논리 연산자</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>AND 또는 &amp;&amp;</td>
<td>논리식이 모두 참이면 참을 반환함.</td>
</tr>
<tr>
<td>OR 또는 ||</td>
<td>논리식 중에서 하나라도 참이면 참을 반환함.</td>
</tr>
<tr>
<td>NOT    또는 !</td>
<td>논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함.</td>
</tr>
<tr>
<td>XOR</td>
<td>논리식이 서로 다르면 참을 반환함.</td>
</tr>
</tbody></table>
<h1 id="비트-연산자">비트 연산자</h1>
<table>
<thead>
<tr>
<th>비트 연산자</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>&amp;</td>
<td>대응되는 비트가 모두 1이면 1을 반환함. (AND 연산)</td>
</tr>
<tr>
<td>|</td>
<td>대응되는 비트 중에서 하나라도 1이면 1을 반환함. (OR 연산)</td>
</tr>
<tr>
<td>^</td>
<td>대응되는 비트가 서로 다르면 1을 반환함. (XOR 연산)</td>
</tr>
<tr>
<td>~</td>
<td>비트를 1이면 0으로, 0이면 1로 반전시킴. (NOT 연산)</td>
</tr>
<tr>
<td>&lt;&lt;</td>
<td>지정한 수만큼 비트를 전부 왼쪽으로 이동시킴. (left shift 연산)</td>
</tr>
<tr>
<td>&gt;&gt;</td>
<td>부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산)</td>
</tr>
</tbody></table>
<h1 id="연산자-우선순위">연산자 우선순위</h1>
<table>
<thead>
<tr>
<th>우선순위</th>
<th>연산자</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>INTERVAL</td>
</tr>
<tr>
<td>2</td>
<td>BINARY, COLLATE</td>
</tr>
<tr>
<td>3</td>
<td>!</td>
</tr>
<tr>
<td>4</td>
<td>- (단항 연산자), ~ (비트 연산자)</td>
</tr>
<tr>
<td>5</td>
<td>^</td>
</tr>
<tr>
<td>6</td>
<td>*, /, DIV, %, MOD</td>
</tr>
<tr>
<td>7</td>
<td>- (이항 연산자), +</td>
</tr>
<tr>
<td>8</td>
<td>&lt;&lt;, &gt;&gt;</td>
</tr>
<tr>
<td>9</td>
<td>&amp;</td>
</tr>
<tr>
<td>10</td>
<td>|</td>
</tr>
<tr>
<td>11</td>
<td>= (관계 연산자), &lt;=&gt;, &gt;=, &gt;, &lt;=, &lt;, &lt;&gt;, !=, IS, LIKE, REGEXP, IN</td>
</tr>
<tr>
<td>12</td>
<td>BETWEEN, CASE, WHEN, THEN, ELSE</td>
</tr>
<tr>
<td>13</td>
<td>NOT</td>
</tr>
<tr>
<td>14</td>
<td>AND, &amp;&amp;</td>
</tr>
<tr>
<td>15</td>
<td>XOR</td>
</tr>
<tr>
<td>16</td>
<td>OR, ||</td>
</tr>
<tr>
<td>17</td>
<td>= (대입 연산자), :=</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MySQL] 날짜 관련 함수]]></title>
            <link>https://velog.io/@thing-zoo/MySQL-%EB%82%A0%EC%A7%9C-%EA%B4%80%EB%A0%A8-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@thing-zoo/MySQL-%EB%82%A0%EC%A7%9C-%EA%B4%80%EB%A0%A8-%ED%95%A8%EC%88%98</guid>
            <pubDate>Wed, 06 Mar 2024 10:58:06 GMT</pubDate>
            <description><![CDATA[<h1 id="날짜시간-계산-함수">날짜/시간 계산 함수</h1>
<h2 id="date_add">DATE_ADD()</h2>
<ul>
<li>날짜, 시간 더하기<pre><code class="language-sql">DATE_ADD(기준날짜, INTERVAL)</code></pre>
<pre><code class="language-sql">SELECT DATE_ADD(NOW(), INTERVAL 1 SECOND)
SELECT DATE_ADD(NOW(), INTERVAL 1 MINUTE)
SELECT DATE_ADD(NOW(), INTERVAL 1 HOUR)
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY)
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH)
SELECT DATE_ADD(NOW(), INTERVAL 1 YEAR)
SELECT DATE_ADD(NOW(), INTERVAL -1 YEAR)</code></pre>
<h2 id="date_sub">DATE_SUB()</h2>
</li>
<li>날짜, 시간 빼기<pre><code class="language-sql">DATE_SUB(기준날짜, INTERVAL)</code></pre>
<pre><code class="language-sql">SELECT DATE_SUB(NOW(), INTERVAL 1 SECOND)</code></pre>
</li>
</ul>
<h2 id="datediff">DATEDIFF()</h2>
<ul>
<li>두 기간 사이의 일수 계산(종료일 - 시작일)<ul>
<li>날짜 포맷에 시간이 포함되어 있는 경우, 시간은 계산에 포함하지 않음</li>
<li>날짜 범위에서 벗어나는 값을 입력하는 경우 NULL을 반환<pre><code class="language-sql">DATEDIFF(종료일, 시작일)</code></pre>
<pre><code class="language-sql">SELECT DATEDIFF(&#39;2021-12-31&#39;,&#39;2021-01-02&#39;);
&gt;&gt; 345</code></pre>
</li>
</ul>
</li>
</ul>
<h2 id="timediff">TIMEDIFF()</h2>
<ul>
<li>두 기간 사이의 시간 계산(종료시간 - 시작시간)<ul>
<li>시간 또는 날짜 범위에서 벗어난 값을 입력하는 경우 NULL을 반환<pre><code class="language-sql">TIMEDIFF(종료시간, 시작시간)</code></pre>
<pre><code class="language-sql">SELECT TIMEDIFF(&#39;2022-02-01 23:00:00&#39;,&#39;2022-01-30 00:00:00&#39;);
&gt;&gt; 71:00:00</code></pre>
</li>
</ul>
</li>
</ul>
<h2 id="peroid_diff">PEROID_DIFF()</h2>
<ul>
<li>두 기간 사이의 개월 수 차이 계산(종료년월 - 시작년월)<ul>
<li>형식: YYYYMM 또는 YYMM<pre><code class="language-sql">PERIOD_DIFF(종료년원,시작년월)</code></pre>
<pre><code class="language-sql">SELECT PERIOD_DIFF(&#39;202202&#39;,&#39;202112&#39;);
&gt;&gt; 2
SELECT PERIOD_DIFF(&#39;202202&#39;,&#39;201212&#39;);
&gt;&gt; -10
SELECT PERIOD_DIFF(&#39;2202&#39;,&#39;1912&#39;);
&gt;&gt; 26</code></pre>
</li>
</ul>
</li>
</ul>
<h2 id="timestampdiff">TIMESTAMPDIFF()</h2>
<ul>
<li>시간, 개월 수 등 여러 가지 형태의 계산을 할 수 있는 함수</li>
<li>단위(반환 값 형식): MONTH, YEAR, HOUR ...<pre><code class="language-sql">TIMESTAMPDIFF(단위, 시작일, 종료일)</code></pre>
<pre><code class="language-sql">SELECT TIMESTAMPDIFF(MONTH,&#39;2021-02-01&#39;,&#39;2022-03-01&#39;);
&gt;&gt; 13</code></pre>
</li>
</ul>
<h1 id="기타-관련-함수">기타 관련 함수</h1>
<h2 id="date_format">DATE_FORMAT()</h2>
<ul>
<li>날짜 형식 설정 함수<pre><code class="language-sql">DATE_FORMAT(date, format)</code></pre>
<pre><code class="language-sql">SELECT DATE_FORMAT(now(), &#39;%Y-%m-%d&#39;);
&gt;&gt; 2012-03-14</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MySQL] 문자열 함수]]></title>
            <link>https://velog.io/@thing-zoo/MySQL-%EB%AC%B8%EC%9E%90%EC%97%B4-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@thing-zoo/MySQL-%EB%AC%B8%EC%9E%90%EC%97%B4-%ED%95%A8%EC%88%98</guid>
            <pubDate>Wed, 06 Mar 2024 10:45:27 GMT</pubDate>
            <description><![CDATA[<h1 id="substring">SUBSTRING</h1>
<p>SUBSTR, SUBSTRING 모두 가능</p>
<ul>
<li><strong><code>SUBSTR(str, pos, len)</code></strong><ul>
<li>str: 원본 문자열</li>
<li>pos: 시작 위치값(음수는 뒤에서부터 체크)</li>
<li>len: 가져올 길이값(생략 시 나머지 전부)</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MySQL] 조건문 - IF문, CASE문]]></title>
            <link>https://velog.io/@thing-zoo/MySQL-%EC%A1%B0%EA%B1%B4%EB%AC%B8-IF-CASE</link>
            <guid>https://velog.io/@thing-zoo/MySQL-%EC%A1%B0%EA%B1%B4%EB%AC%B8-IF-CASE</guid>
            <pubDate>Wed, 06 Mar 2024 10:30:58 GMT</pubDate>
            <description><![CDATA[<h1 id="if">IF</h1>
<ul>
<li><p>문법</p>
<pre><code class="language-sql">IF (조건문, 참일때 값, 거짓일때 값)</code></pre>
</li>
<li><p>예제</p>
<pre><code class="language-sql">SELECT  NAME,
      IF (PHONE_NUMBER IS NULL, &#39;NONE&#39;, PHONE_NUMBER) AS PHNO
FROM USER</code></pre>
</li>
</ul>
<h1 id="ifnull">IFNULL</h1>
<ul>
<li><p>문법</p>
<pre><code class="language-sql">IFNULL (널이 아닐때 값, 널일때 값)</code></pre>
</li>
<li><p>예제</p>
<pre><code class="language-sql">SELECT  NAME,
      IFNULL (PHONE_NUMBER, &#39;NONE&#39;) AS PHNO
FROM USER</code></pre>
</li>
</ul>
<h1 id="nullif">NULLIF</h1>
<p>표현식1과 표현식2의 값이 서로 같으면 NULL을 반환하고, 같지 않으면 표현식1을 반환</p>
<ul>
<li><p>문법</p>
<pre><code class="language-sql">NULLIF (표현식1, 표현식2)</code></pre>
</li>
<li><p>예제</p>
<pre><code class="language-sql">SELECT NULLIF (3, 3)
&gt;&gt; NULL</code></pre>
</li>
</ul>
<h1 id="case">CASE</h1>
<ul>
<li>문법<ul>
<li>else절 생략 시, 널 반환
```sql</li>
</ul>
</li>
<li><ul>
<li>특정값과 비교값이 같으면 THEN절 값 반환
CASE 특정값 
 WHEN 비교값1 THEN &#39;반환값1&#39;
 WHEN 비교값2 THEN &#39;반환값2&#39;
 ...
 [ELSE &#39;만족하는 조건이 없을 경우 반환값&#39;]
END</li>
</ul>
</li>
</ul>
<p>-- 조건식이 참이면 THEN절 값 반환
CASE 
    WHEN 조건1 THEN &#39;반환값1&#39;
    WHEN 조건2 THEN &#39;반환값2&#39;
    ...
    [ELSE &#39;만족하는 조건이 없을 경우 반환값&#39;]
END</p>
<pre><code>
- 예제
```sql
SELECT  ID,
        CASE 
            WHEN (AGE &gt; 19) THEN &#39;Adult&#39;
            WHEN (19 &gt;= AGE &gt; 9) THEN &#39;Teenager&#39;
            ELSE &#39;Child&#39;
        END AS AGE_GROUP
FROM USER</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[MySQL] 타입]]></title>
            <link>https://velog.io/@thing-zoo/MySQL-%ED%83%80%EC%9E%85</link>
            <guid>https://velog.io/@thing-zoo/MySQL-%ED%83%80%EC%9E%85</guid>
            <pubDate>Wed, 06 Mar 2024 10:16:48 GMT</pubDate>
            <description><![CDATA[<h1 id="숫자-타입">숫자 타입</h1>
<p>MySQL은 SQL 표준에서 지원하는 모든 숫자 타입을 제공</p>
<h2 id="정수-타입integer-types">정수 타입(integer types)</h2>
<table>
<thead>
<tr>
<th>문법</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>BIT(M)</td>
<td>명시한 M 비트의 값을 저장(M : 1~64, 생략 시 기본값은 1 로 설정)</td>
</tr>
<tr>
<td>BOOL</td>
<td>0은 false, 0이 아닌 값은 true 로 간주하는 논리형 데이터(ENUM(Y,N) 또는 TINYINT(1) 로 대체하여 사용하는 것을 권장)</td>
</tr>
<tr>
<td>TINYINT(M)</td>
<td>1바이트</td>
</tr>
<tr>
<td>SMALLINT(M)</td>
<td>2바이트</td>
</tr>
<tr>
<td>MEDIUMINT(M)</td>
<td>3바이트</td>
</tr>
<tr>
<td>INT(M)/INTEGER(M)</td>
<td>4바이트</td>
</tr>
<tr>
<td>BIGINT(M)</td>
<td>8바이트</td>
</tr>
</tbody></table>
<h2 id="고정-소수점-타입fixed-point-types">고정 소수점 타입(fixed-point types)</h2>
<p>MySQL에서 DECIMAL 타입은 NUMERIC을 구현하여 만들어짐
따라서 대부분의 경우 DECIMAL 대신 NUMERIC을 사용해도 똑같이 동작함
→ 실수의 값을 정확하게 표현하기 위해 사용</p>
<ul>
<li><strong><code>DECIMAL(M,D)</code></strong><ul>
<li>M: 소수 부분을 포함한 실수의 총 자릿수(최대 65자리까지 표현)</li>
<li>D: 소수 부분의 자릿수, 0이면 소수부분 없음<h2 id="부동-소수점-타입floating-point-types">부동 소수점 타입(floating-point types)</h2>
→ 실수의 값을 대략적으로 표현하기 위해 사용</li>
</ul>
</li>
<li><strong><code>FLOAT(M,D)</code></strong>: 4바이트를 사용</li>
<li><strong><code>DOUBLE(M,D)</code></strong>: 8바이트를 사용</li>
<li>MySQL 8.0.17 이후 버전부터 사용 안함</li>
</ul>
<h1 id="문자열-타입">문자열 타입</h1>
<table>
<thead>
<tr>
<th>문법</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>CHAR(M)</td>
<td>고정 길이 문자열(0~255)</td>
</tr>
<tr>
<td>VARCHAR(M)</td>
<td>가변 길이 문자열(0~65,535)</td>
</tr>
<tr>
<td>TINYBLOB, TINYTEXT</td>
<td>1~255개의 가변 길이를 가지는 문자열을 저장(문자길이+1byte)</td>
</tr>
<tr>
<td>BLOB, TEXT</td>
<td>1~65,535개의 가변 길이를 가지는 문자열을 저장(문자길이+2byte)(BLOB는 바이너리 데이터, TEXT는 문자 데이터 저장에 유리)</td>
</tr>
<tr>
<td>MEDIUMBLOB, MEDIUMTEXT</td>
<td>1~16,777,215개의 가변 길이를 가지는 문자열을 저장(문자길이+3byte)</td>
</tr>
<tr>
<td>LONGBLOB, LONGTEXT</td>
<td>1~429,496,729개의 가변 길이를 가지는 문자열을 저장(문자길이+4byte)</td>
</tr>
<tr>
<td>ENUM</td>
<td>문자 형태인 value 를 숫자로 저장하여 최대 65,535 개의 문자열 중 한가지를 반환(255 이하 value 는 1바이트, 65,535 이하 value 는 2바이트)</td>
</tr>
<tr>
<td>SET</td>
<td>비트 연산 열거형, ENUM 형과 동일하게 문자열 값을 정수값으로 매핑하여 저장</td>
</tr>
</tbody></table>
<h1 id="날짜와-시간-타입">날짜와 시간 타입</h1>
<table>
<thead>
<tr>
<th>문법</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td>DATE</td>
<td>날짜를 표현하는 타입(&#39;YYYY-MM-DD&#39;)(3바이트)</td>
</tr>
<tr>
<td>DATETIME</td>
<td>날짜와 시간을 같이 나타내는 타입(&#39;YYYY-MM-DD HH:MM:SS&#39;)(8바이트)</td>
</tr>
<tr>
<td>TIMESTAMP</td>
<td>날짜와 시간을 나타내는 타임스탬프를 저장할 수 있는 타입(사용자가 별다른 입력을 주지 않으면, 데이터가 마지막으로 입력되거나 변경된 시간이 저장됨)(4바이트)</td>
</tr>
<tr>
<td>TIME</td>
<td>시간을 표현하는 타입 (3바이트)</td>
</tr>
<tr>
<td>YEAR</td>
<td>연도를 표현하는 타입 (1바이트)</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래밍언어활용] 인터넷 및 OSI 참조 모델]]></title>
            <link>https://velog.io/@thing-zoo/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%96%B8%EC%96%B4%ED%99%9C%EC%9A%A9-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%B0%8F-OSI-%EC%B0%B8%EC%A1%B0-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@thing-zoo/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%96%B8%EC%96%B4%ED%99%9C%EC%9A%A9-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%B0%8F-OSI-%EC%B0%B8%EC%A1%B0-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Sun, 18 Feb 2024 12:21:28 GMT</pubDate>
            <description><![CDATA[<h1 id="ip-주소internet-protocol-address">IP 주소(Internet Protocol Address)</h1>
<ul>
<li>인터넷에 연결된 모든 컴퓨터 자원을 구분하기 위한 고유한 주소</li>
<li>주소 형식: IPv4, IPv6</li>
</ul>
<h2 id="ipv4">IPv4</h2>
<h3 id="ipv4의-표시형식">IPv4의 표시형식</h3>
<p><img src="https://velog.velcdn.com/images/thing-zoo/post/dcb39c62-07bf-45c3-854c-ec53c69c4702/image.png" alt=""></p>
<ul>
<li><strong>8비트씩 4부분, 총 32비트</strong> 구성 → 현재 널리 사용</li>
<li><strong>점(.)</strong>으로 구분된 <strong>10진수</strong>로 표기</li>
<li>네트워크 부분과 호스트 부분으로 구성</li>
</ul>
<h3 id="ipv4-주소-분류">IPv4 주소 분류</h3>
<ul>
<li>유니캐스트(Unicast): 단일 송신자와 단일 수신자 간 통신</li>
<li>멀티캐스트(Multicast): 단일 송신자와 다중 수신자 간 통신</li>
<li><strong>브로드캐스트(Broadcast)</strong>: 같은 네트워크의 모든 장비에게 보내는 통신</li>
</ul>
<h3 id="ipv4-주소-클래스">IPv4 주소 클래스</h3>
<blockquote>
<p>옥텟이란</p>
</blockquote>
<ul>
<li>IP를 표현하는 방식은 옥텟이란 단위로 나뉨</li>
<li><code>1바이트(byte)=8비트(bit)=1옥텟(octet)</code></li>
<li>IPv4 주소는 4개의 옥텟으로 구성됨</li>
</ul>
<p><img src="https://velog.velcdn.com/images/thing-zoo/post/fce58f63-5bd9-46fb-b7e2-b5a94bc831ad/image.png" alt=""></p>
<ul>
<li>A클래스: 국가나 대형 통신망에 사용(0~127)</li>
<li>B클래스: 중대형 통신망에 사용(128~191)</li>
<li>C클래스: 소규모 통신망에 사용(192~223)</li>
<li>D클래스: 멀티캐스트용으로 사용(224~239)</li>
<li>E클래스: <strong>실험적 주소</strong>이며 공용되지 않음(240~255)</li>
</ul>
<h2 id="ipv6">IPv6</h2>
<ul>
<li>IPv4 주소 고갈 문제를 해결하기 위해 개발된 차세대 인터넷 프로토콜 주소</li>
</ul>
<h3 id="ipv6의-특징">IPv6의 특징</h3>
<ul>
<li>계층적 주소 할당 체계</li>
<li><strong>주소 자동 설정 기능 제공</strong></li>
<li><strong>기본 보안 기능 제공</strong></li>
<li>개선된 품질 보장 지원</li>
<li><strong>확장성 있는 헤더 구조</strong></li>
<li>패킷 크기 확장 가능성</li>
<li>IPv6 기본 헤더: 확장 헤더 없이 기본 <strong>40바이트(옥텟)</strong></li>
</ul>
<h3 id="ipv6의-표시형식">IPv6의 표시형식</h3>
<ul>
<li><strong>16비트씩 8부분, 총 128 비트</strong></li>
<li><strong>콜론(:)</strong>으로 구분된 <strong>16진수</strong>로 표기</li>
</ul>
<h3 id="ipv6-주소-분류">IPv6 주소 분류</h3>
<ul>
<li>유니캐스트(Unicast): 단일 송신자와 단일 수신자 간 통신</li>
<li>멀티캐스트(Multicast): 단일 송신자와 다중 수신자 간 통신</li>
<li><strong>애니캐스트(Anycast)</strong>: 그룹 내 가장 가까운 수신자에게 전달</li>
</ul>
<h2 id="서브넷">서브넷</h2>
<h3 id="서브넷subnet">서브넷(Subnet)</h3>
<ul>
<li>하나의 큰 네트워크를 더 작은 네트워크로 분할한 것</li>
<li>네트워크 관리를 용이하게 하고, 보안 및 트래픽 관리에 도움을 줌<h3 id="서브네팅subnetting">서브네팅(Subnetting)</h3>
</li>
<li>네트워크의 성능을 보장하고 자원을 효율적으로 분배하기 위해 하나의 IP 네트워크를 더 작은 네트워크 영역으로 나누는 과정</li>
<li>네트워크 영역과 호스트 영역을 나누어 관리하는 작업 포함<h3 id="서브넷-마스크subnet-mask">서브넷 마스크(Subnet Mask)</h3>
</li>
<li>IP 주소에서 네트워크 부분과 호스트 부분을 구분하는데 사용</li>
<li>서브넷 마스크와 IP 주소의 AND 연산을 통해 네트워크 주소 결정</li>
</ul>
<h1 id="osi-7계층⭐️⭐️">OSI 7계층⭐️⭐️</h1>
<h2 id="osiopen-system-interconnection-7계층-개념">OSI(Open System Interconnection) 7계층 개념</h2>
<ul>
<li>네트워크 프로토콜 디자인과 통신을 7개의 계층으로 나누어 설명하는 모델</li>
<li>국제 표준화 기구(ISO)에 의해 정립</li>
<li>통신 과정을 단계별로 파악 가능</li>
</ul>
<h2 id="osi-7계층-구조">OSI 7계층 구조</h2>
<table>
<thead>
<tr>
<th>계층</th>
<th>설명</th>
<th>주요 프로토콜</th>
<th>장비</th>
</tr>
</thead>
<tbody><tr>
<td><strong>물리계층(Physical Layer, 1)</strong></td>
<td>데이터를 <strong>전기적</strong> 신호로 전환하여 전송 → 비트</td>
<td>Coax, Fiber, Wireless</td>
<td>통신케이블, 리피터, 허브</td>
</tr>
<tr>
<td><strong>데이터 링크계층(DataLink Layer, 2)</strong></td>
<td><strong>인접시스템(노드)</strong> 간 물리적 연결을 이용해 데이터 전송, 오류 제어 및 흐름 제어, 오류 검출 및 재전송 → 프레임</td>
<td>Ethernet, SLIP, PPP, FDDI, HDLC</td>
<td>스위치, 브리지</td>
</tr>
<tr>
<td><strong>네트워크 계층(Network Layer, 3)</strong></td>
<td>단말기 간 데이터 전송을 위한 <strong>최적화된 경로(라우팅)</strong> 제공, IP 주소 지정 → 패킷</td>
<td>IP, IPSec, ICMP, IGMP</td>
<td>라우터</td>
</tr>
<tr>
<td><strong>전송 계층(Transport Layer, 4)</strong></td>
<td><strong>종단 간(End To End)</strong> 신뢰성 있는 데이터 전송, 흐름 제어(슬라이딩 윈도우), 오류 및 혼잡 제어 → 세그먼트</td>
<td>TCP, UDP, ECN, SCTP, DCCP</td>
<td></td>
</tr>
<tr>
<td><strong>세션 계층(Session Layer, 5)</strong></td>
<td><strong>연결 접속 유지</strong>, 동기 제어, 동기점(대화)</td>
<td>VARIOUS API;S, SOCKETS</td>
<td></td>
</tr>
<tr>
<td><strong>표현 계층(Presentation Layer, 6)</strong></td>
<td>구문 검색, <strong>코드 변환</strong>, <strong>암/복호화</strong>, 데이터 압축, 문맥 관리 기능</td>
<td>SSL, FTP, IMAP, SSH</td>
<td></td>
</tr>
<tr>
<td><strong>응용 계층(Application Layer, 7)</strong></td>
<td>사용자와 네트워크 간 응용서비스 연결, 데이터 생성</td>
<td>HTTP, FTP, IRC, SSH, DNS</td>
<td></td>
</tr>
</tbody></table>
<h2 id="네트워크-장비">네트워크 장비</h2>
<table>
<thead>
<tr>
<th>장비</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><strong>LAN 카드</strong></td>
<td>PC와 네트워크 간 정보 교환에 사용 → <strong>물리 계층</strong></td>
</tr>
<tr>
<td><strong>허브(Hub)</strong></td>
<td>네트워크 내 여러 노드(PC)를 연결하는 집중화 장비 → <strong>물리 계층</strong></td>
</tr>
<tr>
<td><strong>리피터(Repeater)</strong></td>
<td>신호가 왜곡되거나 약해질 경우 디지털 신호를 증폭시키는 역할 수행 → <strong>물리 계층</strong></td>
</tr>
<tr>
<td><strong>브리지(Bridge)</strong></td>
<td>두개 이상의 LAN을 연결하여 하나의 확장된 네트워크를 형성 → <strong>데이터링크 계층</strong></td>
</tr>
<tr>
<td><strong>스위치(Switch)</strong></td>
<td>브리지와 같이 LAN들을 연결하여 훨씬 더 큰 LAN 형성 → <strong>데이터링크 계층</strong></td>
</tr>
<tr>
<td><strong>라우터(Router)</strong></td>
<td>브리지와 같은 LAN과 LAN의 연결 기능에 데이터 전송의 <strong>최적 경로</strong>를 선택 기능 추가 → <strong>네트워크 계층</strong></td>
</tr>
<tr>
<td><strong>게이트웨이(Gateway)</strong></td>
<td>서로 다른 프로토콜/네트워크의 연결 수행  → <strong>전 계층 간 사용</strong></td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래밍언어활용] TCP/IP]]></title>
            <link>https://velog.io/@thing-zoo/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%96%B8%EC%96%B4%ED%99%9C%EC%9A%A9-TCPIP</link>
            <guid>https://velog.io/@thing-zoo/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%96%B8%EC%96%B4%ED%99%9C%EC%9A%A9-TCPIP</guid>
            <pubDate>Fri, 16 Feb 2024 13:46:30 GMT</pubDate>
            <description><![CDATA[<h1 id="tcpip">TCP/IP</h1>
<ul>
<li>현재 인터넷에서 널리 사용되는 프로토콜 모델</li>
<li>시스템 간 네트워크 연결과 데이터 전송에 사용됨</li>
<li>인터넷 통신을 위한 표준 프로토콜 모델로 사용됨</li>
</ul>
<h2 id="tcpip-4계층-구조⭐️">TCP/IP 4계층 구조⭐️</h2>
<p><img src="https://velog.velcdn.com/images/thing-zoo/post/5b6705c4-80d9-40e4-9d54-2176b28aa2fd/image.png" alt=""></p>
<h2 id="계층별-특징">계층별 특징</h2>
<h3 id="네트워크-엑세스-계층network-access-layer">네트워크 엑세스 계층(Network Access Layer)</h3>
<ul>
<li>OSI 모델의 <strong>물리&amp;데이터링크 계층</strong>에 해당</li>
<li>물리적 주소인 MAC 주소 사용</li>
<li>주요 프로토콜<ul>
<li>Ethernet: 물리 계층과 데이터링크 께층에서의 통신 접근 제어 정의</li>
<li>X.25: 패킷 교환망을 통한 통신 인터페이스 제공</li>
<li>RS-232C: DTE와 DCE 간 접속 규격</li>
</ul>
</li>
</ul>
<h3 id="인터넷-계층internet-layer">인터넷 계층(Internet Layer)</h3>
<ul>
<li>OSI 모델의 <strong>네트워크 계층</strong>에 해당</li>
<li>IP 패킷 전송 및 라우팅 기능 담당</li>
<li>주요 프로토콜<ul>
<li>IP: 비연결성 인터넷 프로토콜</li>
<li><strong>ICMP</strong>: <strong>IP 패킷 전송 중 에러 메시지 제공</strong></li>
<li>IGMP: 멀티캐스트 그룹 구성원 관리</li>
<li>ARP: IP 주소를 MAC 주소로 변환 </li>
<li>RARP: 물리적 주소로부터 IP 주소 추출</li>
</ul>
</li>
</ul>
<h3 id="전송-계층transport-layer⭐️">전송 계층(Transport Layer)⭐️</h3>
<ul>
<li>OSI 모델의 <strong>전송 계층</strong>에 해당</li>
<li>종단 간 신뢰성 있는 데이터 전송 관리</li>
<li>주요 프로토콜<ul>
<li><strong>TCP</strong><ul>
<li>클라이언트와 서버 간 연결 설정 후 데이터 주고 받는 <strong>연결지향형</strong> 프로토콜</li>
<li><strong>신뢰성</strong> 있는 데이터 전송 보장</li>
<li>순차적인 데이터 전송과 재조립 보장</li>
<li>연결 설정: 3-way handshaking</li>
<li>연결 해제: 4-way handshaking</li>
<li>UDP보다 속도가 상대적으로 느림</li>
<li>순서 제어, 오류 제어, 흐름 제어 기능 제공 → 투명성</li>
<li>양방향 연결형 서비스 제공</li>
<li>가상 회선 연결 형태의 서비스 제공</li>
</ul>
</li>
<li><strong>UDP</strong><ul>
<li>연결 설정 없이 데이터 주고 받는 <strong>비연결성</strong> 프로토콜</li>
<li>TCP보다 빠른 전송 가능, 하지만 신뢰성 떨어짐<ul>
<li>TCP에 비해 단순한 헤더 구조로 <strong>오버헤드 적음</strong></li>
<li>신뢰성 보다 <strong>속도가 중요</strong>시 되는 네트워크에서 사용</li>
<li><strong>실시간 전송</strong>에 유리</li>
</ul>
</li>
<li>패킷 유실 및 변조 발생해도 재전송 안함</li>
<li>헤더: Source Port, Destination Port, Length, Checksum, Data</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="응용-계층application-layer">응용 계층(Application Layer)</h3>
<ul>
<li>OSI 모델의 <strong>세션&amp;표현&amp;응용 계층</strong>에 해당</li>
<li>사용자와 직접적으로 상호작용하는 계층</li>
<li>사용자가 소프트웨어 응용 프로그램을 통해 네트워크 서비스에 접근할 수 있게 해줌</li>
<li>응용 프로그램 간 데이터 교환에 사용되는 프로토콜 포함</li>
<li>주요 프로토콜<ul>
<li>TCP 프로토콜<ul>
<li>HTTP: 웹 서버와 클라이너튼 간 하이퍼텍스트 문서 송수신 프로토콜, 주로 80번 포트</li>
<li>FTP: 파일 전송에 사용되는 프로토콜, 데이터 전송에 20번, 제어 정보 전송에 21번 포트 사용</li>
<li>SMTP: 이메일 전송에 사용되는 프로토콜, 25번 포트 사용</li>
</ul>
</li>
<li>UDP 프로토콜<ul>
<li>DNS: 도메인 이름을 IP 주소로 변환하는 프로토콜, 53번 포트 사용</li>
<li>SNMP: 네트워크 장비 관리에 사용되는 프로토콜</li>
<li>DHCP: IP 주소 자동 할당 및 관리 프로토콜</li>
</ul>
</li>
</ul>
</li>
</ul>
<h1 id="ipinternet-protocol">IP(Internet Protocol)</h1>
<h2 id="ip의-특징">IP의 특징</h2>
<ul>
<li>호스트 간의 통신을 담당하는 프로토콜</li>
<li><strong>OSI 7계층의 네트워크 계층(3계층)</strong>에 해당</li>
<li><strong>데이터그램</strong>을 기반으로 하는 <strong>비연결형 서비스(비신뢰성)</strong> 제공</li>
<li>패킷의 분할/병합, 주소 지정, <strong>경로 선택 기능(Routing)</strong> 제공</li>
<li>패킷 교환 네트워크에서 정보를 주고받는데 사용</li>
<li>흐름제어나 오류 복구 기능 없음</li>
<li>Best Effort 원칙에 따른 전송 기능 제공</li>
</ul>
<h2 id="ip-헤더">IP 헤더</h2>
<ul>
<li>버전(Version)<ul>
<li>사용중인 IP 프로토콜의 버전(예: IPv4, IPv6)</li>
</ul>
</li>
<li><strong>헤더길이(Header Length)</strong><ul>
<li>IP 헤더의 길이를 바이트단위로 나타냄</li>
<li>일반적으로 20~60 바이트</li>
</ul>
</li>
<li>서비스 유형(TOS,Type of Servie)<ul>
<li>요구되는 서비스 품질을 지정</li>
</ul>
</li>
<li><strong>전체길이(Total Packet Length)</strong><ul>
<li><strong>IP 헤더와 데이터를 포함</strong>한 전체 IP 패킷의 길이</li>
</ul>
</li>
<li>식별자(Identifier)<ul>
<li>각 데이터그램을 구별하기 위한 식별자</li>
<li>단편화된 데이터그램의 원래 그룹을 식별하는데 사용</li>
</ul>
</li>
<li>플래그(Flags)<ul>
<li>데이터그램의 단편화 상태를 나타냄</li>
</ul>
</li>
<li>단편 오프셋(Fragmentation offset)<ul>
<li>단편화된 데이터그램들의 순서를 지정</li>
</ul>
</li>
<li><strong>수명(TTL, Time to Live)</strong><ul>
<li>패킷이 네트워크를 <strong>통과할 수 있는 최대 라우터 수</strong></li>
<li>라우터를 지날 때 마다 값이 감소되며 0이되면 패킷은 폐기됨</li>
</ul>
</li>
<li>프로토콜(Protocol)<ul>
<li>IP 데이터그램의 페이로드에 포함된 상위 계층 프로토콜을 지정</li>
</ul>
</li>
<li><strong>체크섬(Header checksum)</strong><ul>
<li>헤더 필드의 <strong>오류를 검출</strong>하기 위한 정보</li>
</ul>
</li>
<li>발신지 주소(Source IP address)<ul>
<li>패킷을 보낸 노드의 IP 주소</li>
</ul>
</li>
<li>목적지 주소(Destination IP address)<ul>
<li>패킷이 도착해야하는 목적지의 IP 주소<ol start="2">
<li>Total Packet Length (16 bits): IP 헤더 및 데이터를 포함한 IP 패킷 전체 길이를 바이트 단위로 길이를 표시. (최대값은 65,535 = 2^16 - 1)</li>
</ol>
</li>
</ul>
</li>
</ul>
<h1 id="tcptransmission-control-protocol">TCP(Transmission Control Protocol)</h1>
<h2 id="tcp의-특징">TCP의 특징</h2>
<ul>
<li><strong>연결형 서비스(신뢰성)</strong>를 제공하는 전송 계층 프로토콜</li>
<li><strong>OSI 7계층의 전송 계층(4계층)</strong>에 해당</li>
<li>패킷의 다중화, <strong>순서 제어, 오류 제어, 흐름 제어 기능</strong> 제공</li>
<li><strong>스트림(Stream) 전송 기능</strong> 제공</li>
<li>IP와 함께 사용되어 데이터의 배달 처리 및 패킷 추적과 관리 담당<h2 id="tcp-헤더">TCP 헤더</h2>
</li>
<li>송신지 포트(Source Port)<ul>
<li>출발지 포트 번호</li>
</ul>
</li>
<li>수신지 포트(Destination Port)<ul>
<li>목적지 포트 번호</li>
</ul>
</li>
<li><strong>순서 번호(Sequence Number)</strong><ul>
<li>바이트 단위로 순서화된 번호</li>
<li>신뢰성 있는 전송과 흐름제어를 위해 사용</li>
</ul>
</li>
<li><strong>확인 응답 번호(Acknowledgment Number)</strong><ul>
<li>다음에 수신하길 기대하는 바이트 번호</li>
<li>마지막으로 수신된 번호 + 1</li>
</ul>
</li>
<li>헤더길이(Header Length)<ul>
<li>TCP 헤더의 길이</li>
</ul>
</li>
<li>예약된 필드(Reserved)<ul>
<li>현재 사용되지 않는 필드</li>
</ul>
</li>
<li>윈도우 크기(Window)<ul>
<li>수신 버퍼의 여유용량을 나타내는 필드</li>
</ul>
</li>
<li><strong>검사합(checksum)</strong><ul>
<li><strong>패킷의 유효성</strong>을 계산하기 위한 필드</li>
</ul>
</li>
<li>긴급 포인터<ul>
<li>긴급 데이터가 시작되는 지점을 나타냄</li>
<li>TCP Flags의 U와 함께 사용</li>
</ul>
</li>
<li>TCP Flags<ul>
<li>U(Urgent): 긴급 데이터 존재 여부</li>
<li>A(Ack): 승인 비트, 응답 시 사용</li>
<li>P(Push): 밀어넣기 비트, 데이터의 즉각적인 전송 요구</li>
<li>R(Reset): 연결 초기화 비트</li>
<li>S(Syn): 연결 성정을 위한 동기화 비트</li>
<li>F(Fin): 연결 종료를 나타내는 비트</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스구축] SQL 활용]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-SQL-%ED%99%9C%EC%9A%A9</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-SQL-%ED%99%9C%EC%9A%A9</guid>
            <pubDate>Tue, 13 Feb 2024 14:23:53 GMT</pubDate>
            <description><![CDATA[<h1 id="sqlstructed-query-language">SQL(Structed Query Language)</h1>
<ul>
<li><p>데이터베이스 시스템에서 데이터를 처리하기 위해 사용되는 구조적 데이터 질의 언어</p>
<h2 id="sql의-특징">SQL의 특징</h2>
</li>
<li><p>구문이 영어 문장과 유사해 배우기 쉽고 사용하기 편리</p>
</li>
<li><p>데이터 연산이 절차적이지 않고 집합 단위로 처리</p>
</li>
<li><p>표준 SQL 문법이 있어 다양한 DBMS(Oracle, MySQL, MSSQL 등)에 구애받지 않고 사용 가능</p>
</li>
<li><p>SQL은 대소문자 구분 없음</p>
</li>
<li><p>한 줄 주석은 <code>&#39;--&#39;</code>, 여러 줄 주석은 <code>&#39;/* */&#39;</code></p>
<h2 id="sql-문법의-종류⭐️⭐️⭐️">SQL 문법의 종류⭐️⭐️⭐️</h2>
<p>(20.6)</p>
</li>
<li><p><strong><a href="https://velog.io/@thing-zoo/SQL-DDL">DDL(Data Definition Language)</a></strong>: 테이블이나 다양한 객체들을 정의, 변경, 삭제하는데 사용</p>
<ul>
<li>객체의 유형: <strong>SCHEMA, DOMAIN, TABLE, VIEW, INDEX</strong></li>
<li><strong>CREATE, DROP, ALTER, RENAME, TRUNCATE</strong></li>
</ul>
</li>
<li><p><strong><a href="https://velog.io/@thing-zoo/SQL-DML">DML(Data Manipulation Language)</a></strong>: 데이터베이스 내 데이터 조작하는데 사용</p>
<ul>
<li><strong>SELECT, INSERT, UPDATE, DELETE</strong></li>
</ul>
</li>
<li><p><strong><a href="https://velog.io/@thing-zoo/SQL-DCL">DCL(Data Control Language)</a></strong>: 데이터베이스에 접근하고 사용할 수 있는 권한 부여하고 회수하는데 사용</p>
<ul>
<li><strong>GRANT, REVOKE</strong></li>
</ul>
</li>
<li><p><strong><a href="https://velog.io/@thing-zoo/SQL-TCL">TCL(Transaction Control Language)</a></strong>: 작업의 단위를 묶어서 그 결과를 단위별로 제어하는데 사용</p>
<ul>
<li><strong>COMMIT, ROLLBACK, SAVEPOINT</strong></li>
</ul>
</li>
<li><p><a href="https://velog.io/@thing-zoo/SQL-SELECT-%EC%BF%BC%EB%A6%AC%EB%AC%B8">SELECT문</a></p>
<ul>
<li>DISTINCT(20.6,8)</li>
</ul>
</li>
<li><p><a href="https://velog.io/@thing-zoo/SQL-%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4">제약조건</a></p>
</li>
</ul>
<p>(20.8)</p>
<ul>
<li><a href="https://velog.io/@thing-zoo/SQL-GROUP-BY-ORDER-BY">집계함수</a></li>
</ul>
<h1 id="트랜잭션transaction">트랜잭션(Transaction)</h1>
<h2 id="개념">개념</h2>
<ul>
<li>데이터베이스의 상태를 변환시키는 <strong>하나의 논리적 기능을 수행하는 작업 단위</strong></li>
<li>한꺼번에 모두 수행되어야 할 <strong>일련의 연산들</strong><h2 id="트랜잭션의-성질acid⭐️⭐️">트랜잭션의 성질(ACID)⭐️⭐️</h2>
<h3 id="원자성atomicity">원자성(Atomicity)</h3>
(20.6,8)
트랜잭션 내 모든 연산은 <strong>모두 반영되거나 전혀 반영되지 않아야 함</strong></li>
<li>오류 발생 시 트랜잭션 자체가 취소되며, <strong>COMMIT과 ROLLBACK 명령어에 의해 이 성질이 보장됨</strong><h3 id="일관성consistency">일관성(Consistency)</h3>
트랜잭션 완료 후에는 데이터베이스가 <strong>일관된 상태를 유지</strong>해야 함</li>
<li>트랜잭션 수행 전후에 데이터베이스의 고정요소는 같은 상태를 보여줘야 함<h3 id="독립성-격리성isolation">독립성, 격리성(Isolation)</h3>
여러 트랜잭션 동시 실행 시 서로 간섭할 수 없으며 <strong>각각 독립적으로 실행</strong>되어야 함</li>
<li>한 트랜잭션이 완료될 때까지 다른 트랜잭션은 그 결과를 볼 수 없음<h3 id="영속성durability">영속성(Durability)</h3>
트랜잭션이 한번 COMMIT되면, 그 결과는 시스템이 고장이 발생해도 <strong>영구적으로 반영</strong>되어야 함</li>
</ul>
<h2 id="트랜잭션의-상태">트랜잭션의 상태</h2>
<ul>
<li>활동(Active): 트랜잭션이 실행 중인 상태</li>
<li>실패(Failed): 트랜잭션 실행에 오류가 발생하여 중단된 상태</li>
<li>철회(Aborted): 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태</li>
<li>부분 완료(Partially Committed): 트랜잭션의 마지막 연산까지 실행했지만, COMMIT 연산이 실행 되기 직전의 상태</li>
<li>완료(Committed): 트랜잭션이 성공적으로 종료되어 COMMIT 연산까지 실행한 후의 상태</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MySQL] TCL]]></title>
            <link>https://velog.io/@thing-zoo/MySQL-TCL</link>
            <guid>https://velog.io/@thing-zoo/MySQL-TCL</guid>
            <pubDate>Tue, 13 Feb 2024 11:54:59 GMT</pubDate>
            <description><![CDATA[<h1 id="tcltransaction-control-language">TCL(Transaction Control Language)</h1>
<ul>
<li>트랜잭션을 제어하는데 사용</li>
<li>데이터베이스에서 작업 단위를 안전하게 관리하기 위해 사용<h2 id="commit">COMMIT</h2>
</li>
<li>트랜잭션이 정상적으로 처리된 경우, 그 결과를 데이터베이스에 반영</li>
<li>한번 수행하면, 이전 상태로 돌아갈 수 없음<pre><code class="language-sql">COMMIT;</code></pre>
<h2 id="rollback">ROLLBACK</h2>
</li>
<li>트랜잭션 처리 중 오류가 발생했거나 취소할 경우, 변경 사항을 되돌리고 데이터를 이전 상태로 복구</li>
<li>수행 후 관련된 행의 잠금이 해제되어 다른 사용자들이 해당 행을 조작 가능<pre><code class="language-sql">ROLLBACK;</code></pre>
<h2 id="savepoint">SAVEPOINT</h2>
</li>
<li>트랜잭션 중 특정 지점에 대해 저장점 생성</li>
<li>오류 발생 시, 전체 트랜잭션이 아닌 해당 저장점까지만 롤백 가능</li>
<li>이를 통해 더 세밀한 트랜잭션 제어 가능<pre><code class="language-sql">CREATE TABLE UNIV;
SAVEPOINT SVPT1;
TRUNCATE TABLE UNIV;
ROLLBACK TO SVPT1;</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스구축] 물리 데이터 모델 품질 검토]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EB%AC%BC%EB%A6%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8-%ED%92%88%EC%A7%88-%EA%B2%80%ED%86%A0</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EB%AC%BC%EB%A6%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8-%ED%92%88%EC%A7%88-%EA%B2%80%ED%86%A0</guid>
            <pubDate>Mon, 12 Feb 2024 12:57:57 GMT</pubDate>
            <description><![CDATA[<h1 id="물리-데이터-모델-품질-기준">물리 데이터 모델 품질 기준</h1>
<h2 id="물리-데이터-모델-품질-기준-항목">물리 데이터 모델 품질 기준 항목</h2>
<ul>
<li>정확성, 완전성, 준거성, 최신성, 일관성, 활용성<h2 id="데이터-품질관리">데이터 품질관리</h2>
<h3 id="데이터-품질관리-대상">데이터 품질관리 대상</h3>
</li>
<li><strong>데이터 값</strong></li>
<li><strong>데이터 구조</strong></li>
<li><strong>데이터 관리 프로세스</strong><h3 id="데이터-품질-지표">데이터 품질 지표</h3>
</li>
<li>정확성, 일관성, 유용성, 접근성, 적시성, 보안성</li>
</ul>
<h1 id="crud-분석">CRUD 분석</h1>
<h2 id="crud-분석의-개념">CRUD 분석의 개념</h2>
<ul>
<li>데이터베이스에 영향을 주는 Create(생성), Read(읽기), Update(갱신), Delete(삭제) 연산으로 업무 프로세스(각 기능)와 테이블(데이터) 간에 매트릭스(2차원 형태의 표)를 만들어서 트랜잭션을 분석하는 것</li>
<li>우선순위: C &gt; R &gt; U &gt; D</li>
<li>시스템 설계의 일관성과 완전성을 검증하는데 사용
<img src="https://velog.velcdn.com/images/thing-zoo/post/4b0f3b87-7750-4326-977d-483a7ed49d06/image.png" alt=""></li>
</ul>
<h2 id="crud-분석의-필요성">CRUD 분석의 필요성</h2>
<ul>
<li>모델링 작업검증</li>
<li>중요 산출물</li>
<li>테스트 시 사용</li>
<li>인터페이스 현황 파악</li>
</ul>
<h1 id="sql-성능-튜닝">SQL 성능 튜닝</h1>
<h2 id="튜닝의-개념">튜닝의 개념</h2>
<ul>
<li>SQL문을 최적화하여 시스템의 처리량과 응답 속도를 개선하는 작업<h2 id="튜닝의-접근방법">튜닝의 접근방법</h2>
</li>
<li>부하의 감소: 부하의 정도를 효율적인 방법으로 개선</li>
<li>부하의 조정: 부하 정도에 따라 업무를 조정</li>
<li>부하의 병령 수행: 부하가 많이 걸리는 부분을 병렬로 처리<h2 id="튜닝-영역">튜닝 영역</h2>
</li>
<li>데이터베이스 설계튜닝: 성능을 고려해 데이터베이스 설계 단계에서부터 최적화</li>
<li>데이터베이스 환경: H/W 설정을 통해 성능 향상</li>
<li>SQL 문장 튜닝: SQL 문장 자체를 최적화하여 성능 개선<h2 id="옵티마이저">옵티마이저</h2>
</li>
<li>옵티마이저는 SQL문에 대한 최적의 실행 방법을 결정함</li>
<li>옵티마이저의 구분<ul>
<li>규칙 기반: 규칙(우선순위)를 가지고 실행 계획 생성</li>
<li>비용 기반: SQL문 처리 비용이 가장 적은 실행 계획 선택<h2 id="튜닝-절차">튜닝 절차</h2>
</li>
</ul>
</li>
<li>시스템 현황 분석</li>
<li>문제점 탐지 및 원인 분석</li>
<li>목표 설정</li>
<li>튜닝 시행</li>
<li>결과 분석<h2 id="row-migrationchaining">Row Migration/Chaining</h2>
</li>
<li>Row Migration: 레코드가 수정되어 기존 블록에 들어가지 않을 때 다른 블록으로 이동</li>
<li>Row Chaining: 하나의 레코드가 너무 커서 여러 데이터 블록에 걸쳐 저장</li>
</ul>
<h3 id="사진-출처">사진 출처</h3>
<p><a href="https://lipcoder.tistory.com/341">https://lipcoder.tistory.com/341</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스구축] 키]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%ED%82%A4</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%ED%82%A4</guid>
            <pubDate>Sun, 11 Feb 2024 07:54:19 GMT</pubDate>
            <description><![CDATA[<h1 id="키key">키(Key)</h1>
<ul>
<li>데이터베이스에서 <strong>튜플을 식별(구별)하는데 사용되는 속성(컬럼)</strong></li>
</ul>
<h2 id="키의-종류">키의 종류</h2>
<h3 id="후보키candidate-key⭐️">후보키(Candidate Key)⭐️</h3>
<p>(20.6)</p>
<ul>
<li>릴레이션에 있는 모든 튜플에 대해 <strong>유일성과 최소성을 만족</strong>시키는 <strong>속성들의 부분집합</strong><ul>
<li>유일성: 하나의 키값으로 하나의 튜플만을 <strong>유일하게 식별</strong>할 수 있어야 함</li>
<li>최소성: 모든 레코드들을 유일하게 식별하는데 <strong>꼭 필요한 속성으로만 구성</strong>되어야 함</li>
<li>모든 릴레이션에는 <strong>반드시 하나 이상</strong>의 후보키 존재<h3 id="기본키primary-key">기본키(Primary Key)</h3>
</li>
</ul>
</li>
<li>후보키 중에서 선택된 주요키(Main Key), <strong>중복값이나 NULL값 불가</strong></li>
<li>후보키의 성질인 <strong>유일성과 최소성</strong>을 가지며 튜플을 식별하기 위해 반드시 필요한 키<h3 id="대체키보조키alternate-key">대체키/보조키(Alternate Key)</h3>
</li>
<li>후보키가 둘 이상일 때, <strong>기본키를 제외한 나머지 후보키</strong><h3 id="슈퍼키super-key⭐️">슈퍼키(Super Key)⭐️</h3>
</li>
<li>릴레이션에서 튜플을 <strong>속성들의 집합</strong>으로 구성된 키, </li>
<li>모든 튜플에 대해 <strong>유일성은 만족시키지만, 최소성은 만족시키지 않음</strong><h3 id="외래키foreign-key">외래키(Foreign Key)</h3>
(20.6)</li>
<li><strong>다른 릴레이션의 기본키를 참조</strong>하는 속성(들의 집합)</li>
<li>참조되는 릴레이션의 기본키와 대응되어 <strong>릴레이션 간 참조관계</strong> 표현</li>
<li>참조 무결성 만족해야함</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스구축] 무결성]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EB%AC%B4%EA%B2%B0%EC%84%B1</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EB%AC%B4%EA%B2%B0%EC%84%B1</guid>
            <pubDate>Sun, 11 Feb 2024 07:30:00 GMT</pubDate>
            <description><![CDATA[<h1 id="무결성integrity">무결성(Integrity)</h1>
<ul>
<li>데이터의 <strong>정확성, 일관성 및 유효성</strong>을 보장하는 DBMS의 중요한 기능</li>
<li>무결성 유지는 적절한 연산 제한을 통해 이루어짐</li>
<li><strong>권한이 있는</strong> 사용자로부터 데이터베이스 보호(↔︎ 권한이 없는 사용자: 보안)</li>
</ul>
<h1 id="무결성제약조건의-종류">무결성(제약조건)의 종류</h1>
<h2 id="개체-무결성entity-integrity-기본키-무결성">개체 무결성(Entity Integrity, 기본키 무결성)</h2>
<p>(20.6,8)</p>
<ul>
<li><strong>기본키</strong>는 <ul>
<li><strong>중복값이나 NULL값을 가질 수 없음</strong></li>
<li><strong>원자값</strong>이어야함<h2 id="참조-무결성referential-integrity-외래키-무결성⭐️">참조 무결성(Referential Integrity, 외래키 무결성)⭐️</h2>
</li>
</ul>
</li>
<li><strong>외래키</strong>는 <strong>NULL이거나 참조 릴레이션의 기본키와 일치</strong>해야함<h3 id="참조-무결성-제약조건">참조 무결성 제약조건</h3>
</li>
<li><strong>제한(Restrict)</strong>: 문제의 연산 거부</li>
<li><strong>연쇄(Cascade)</strong>: 참조된 튜플 삭제 시, 참조한 튜플도 <strong>함께 삭제</strong>(20.6)</li>
<li><strong>널값(Nullify)</strong>: 참조된 튜플 삭제 시, 참조한 튜플의 외래키를 NULL로 설정</li>
<li><strong>기본값(Default)</strong>: NULL 대신 기본값 등록<h2 id="도메인-무결성domain-integrity-영역-무결성">도메인 무결성(Domain Integrity, 영역 무결성)</h2>
</li>
<li>모든 속성값은 <strong>도메인에 지정된 값만</strong>을 가져야함</li>
<li>예: 성별 컬럼에는 오직 &#39;남&#39; 또는 &#39;여&#39;만 허용<h2 id="고유-무결성unique-integrity">고유 무결성(Unique Integrity)</h2>
</li>
<li>릴레이션의 특정 <strong>속성값은 서로 달라야함</strong><h2 id="키-무결성key-integrity">키 무결성(Key Integrity)</h2>
</li>
<li>각 릴레이션은 <strong>적어도 하나의 키</strong>를 가져야함<h2 id="릴레이션-무결성relational-integrity">릴레이션 무결성(Relational Integrity)</h2>
</li>
<li>삽입, 삭제, 갱신 등의 연산은 릴레이션의 무결성을 해치지 않도록 수행되어야 함</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스구축] 뷰]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EB%B7%B0</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EB%B7%B0</guid>
            <pubDate>Sun, 11 Feb 2024 05:16:05 GMT</pubDate>
            <description><![CDATA[<h1 id="뷰">뷰</h1>
<h2 id="뷰의-개념">뷰의 개념</h2>
<ul>
<li>기본 테이블에서 유도된 이름이 있는 가상 테이블</li>
<li>실제 데이터 저장하지 않고 논리적으로만 존재<h2 id="뷰의-특징">뷰의 특징</h2>
(20.6,8)</li>
<li>기본 테이블 유도로, 기본 테이블과 유사한 형태와 조작을 가짐</li>
<li>물리적 구현 없는 가상 테이블</li>
<li><strong>논리적 데이터 독립성 제공</strong></li>
<li><strong>관리 용이</strong> 및 명령문 간소화</li>
<li>뷰를 통한 데이터 접근으로 <strong>안전 보호</strong></li>
<li>데이터 조작(삽입, 삭제, 갱신)에 제한 존재</li>
<li><strong>정의된 뷰로 다른 뷰 정의 가능</strong></li>
<li><strong>기본 테이블/뷰 삭제 시 관련 뷰도 자동 삭제</strong></li>
<li><strong>생성은 &#39;CREATE&#39;, 삭제는 &#39;DROP&#39;, 변경 불가</strong><ul>
<li><code>CREATE VIEW V AS &lt;QUERY&gt;</code></li>
<li><code>DROP VIEW V [CASCADE/RESTRICT]</code><ul>
<li><code>CASCADE</code>: 해당 뷰에 의존하는 다른 객체들까지 <strong>함께 삭제</strong></li>
<li><code>RESTRICT</code>: <strong>해당 뷰만 삭제</strong>, 의존하는 다른 객체 삭제 방지</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="뷰의-장단점⭐️">뷰의 장단점⭐️</h2>
<h3 id="장점">장점</h3>
<ul>
<li><strong>논리적 데이터 독립성</strong></li>
<li>사용자 <strong>데이터 관리 용이</strong></li>
<li>접근 제어를 통한 <strong>자동 보안</strong> 제공</li>
<li>다양한 사용자 요구에 대한 동시 지원<h3 id="단점">단점</h3>
</li>
<li><strong>독립적 인덱스 부재</strong></li>
<li><strong>변경 불가(ALTER VIEW 사용불가)</strong></li>
<li>뷰 조작<strong>(삽입, 삭제, 갱신 등)에 제약 존재</strong></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스구축] 인덱스]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EC%9D%B8%EB%8D%B1%EC%8A%A4</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EC%9D%B8%EB%8D%B1%EC%8A%A4</guid>
            <pubDate>Sun, 11 Feb 2024 04:35:29 GMT</pubDate>
            <description><![CDATA[<h1 id="색인index">색인(Index)</h1>
<h2 id="인덱스의-개념">인덱스의 개념</h2>
<ul>
<li>데이터 레코드를 <strong>빠르게 접근</strong>하기 위해 &lt;키값, 포인터&gt;쌍으로 구성된 데이터 구조</li>
<li>데이터베이스에서 검색 성능을 향상시키기 위해 미리 정렬해 놓는 기법</li>
<li><strong>테이블과 클러스터에 연관</strong>되어 <strong>독립적인 저장 공간</strong> 보유</li>
<li>특정 열이나 열집합에 대한 빠른 검색 가능</li>
<li>추가는 &#39;CREATE&#39;, 삭제는 &#39;DROP&#39;</li>
</ul>
<h2 id="인덱스의-목적">인덱스의 목적</h2>
<ul>
<li>대규모 테이블에서의 빠른 데이터 추출</li>
<li>조건 검색, 정렬, MIN/MAX 처리의 효율성 향상</li>
<li>JOIN 시 열 추출 효율성</li>
</ul>
<h2 id="인덱스의-종류">인덱스의 종류</h2>
<h3 id="클러스터-인덱스clustered-index">클러스터 인덱스(Clustered Index)</h3>
<ul>
<li>테이블당 1개만 허용, 해당 컬럼을 기준으로 테이블이 물리적으로 정렬</li>
<li>데이터는 기본적으로 오름차순 정렬</li>
<li>기본키 설정 시 자동으로 클러스터 인덱스 적용</li>
<li>인덱스 자체의 리프 페이지가 곧 데이터</li>
<li>데이터 입력/수정/삭제 시 항상 정렬 상태 유지</li>
<li>비클러스터형 인덱스보다 검색은 빠르지만, 입력/수정/삭제 느림<h3 id="비클러스터-인덱스non-clustered-index">비클러스터 인덱스(Non-Clustered Index)</h3>
</li>
<li>테이블당 약 240개의 인덱스 생성 가능</li>
<li>레코드의 원본은 정렬되지 않고 인덱스 페이지만 정렬</li>
<li>인덱스 자체의 리프 페이지는 데이터가 아니라 데이터가 위치하는 포인터이기 때문에 </li>
<li>클러스터형보다 검색은 느리지만 입력/수정/삭제 빠름</li>
<li>인덱스를 생성할 때 데이터 페이지는 그냥 둔 상태에서 별도의 인덱스 페이지를 따로 생성하기때문에 용량 더 차지<h3 id="밀집-인덱스">밀집 인덱스</h3>
</li>
<li>데이터 레코드 각각에 대해 하나의 인덱스 생성<h3 id="희소-인덱스">희소 인덱스</h3>
</li>
<li>레코드 그룹 또는 데이터 블록에 대해 하나의 인덱스 생성</li>
</ul>
<h2 id="인덱스의-구조">인덱스의 구조</h2>
<h3 id="트리-기반-인덱스">트리 기반 인덱스</h3>
<ul>
<li>대부분의 상용 DBMS에서는 트리 구조를 기반으로 하는 <strong>B+ 트리 인덱스</strong>를 주로 사용<h3 id="비트맵-인덱스">비트맵 인덱스</h3>
</li>
<li><strong>비트(0/1)를 이용</strong>하여 컬럼값을 저장하고 이를 이용해 주소를 자동으로 생성<h3 id="함수-기반-인덱스">함수 기반 인덱스</h3>
</li>
<li>함수나 수식으로 계산된 결과에 대해 트리 인덱스나 비트맵 인덱스를 생성, 사용할 수 있는 기능 제공<h3 id="비트맵-조인-인덱스">비트맵 조인 인덱스</h3>
</li>
<li>비트맵 조인 인덱스의 물리적인 구조는 비트맵 인덱스와 동일</li>
<li>인덱스의 구성 컬럼이 베이스 테이블의 컬럼값이 아니라 조인된 테이블의 컬럼값이라는 차이<h3 id="도메인-인덱스">도메인 인덱스</h3>
</li>
<li>개발자가 자신이 원하는 인덱스를 직접 만들어 사용하는 것(확장형 인덱스)<h3 id="해시-인덱스">해시 인덱스</h3>
</li>
<li>값이 고유하고 분포가 균일한 경우 유용</li>
</ul>
<h2 id="인덱스-컬럼필드의-선정⭐️">인덱스 컬럼(필드)의 선정⭐️</h2>
<ul>
<li><strong>검색을 자주 하는</strong> 컬럼</li>
<li><strong>정렬의 기준이 자주</strong> 되는 컬럼</li>
<li><strong>기본키 및 외부키</strong>가 되는 컬럼</li>
<li><strong>OLE 개체 형식의 컬럼은 불가능</strong></li>
<li><strong>분포도가 좋은(10~15% 이내)</strong> 컬럼</li>
<li>가능한 <strong>수정이 빈번하지 않은</strong> 컬럼</li>
<li><strong>ORDER BY, GROUP BY, UNION이 빈번한</strong> 컬럼</li>
<li><strong>자주 조합</strong>되어 사용되는 경우 <strong>결합 인덱스</strong>를 생성</li>
<li>한 컬럼이 여러 인덱스 포함되지 않도록 설계</li>
</ul>
<h2 id="인덱스-생성-시-고려사항⭐️">인덱스 생성 시 고려사항⭐️</h2>
<ul>
<li>새로 추가되는 인덱스는 기존 액세스 경로에 영향을 미칠 수 있음</li>
<li><strong>지나치게 많은 인덱스는 오버헤드 발생</strong></li>
<li><strong>넒은 범위 인덱스 처리 시 많은 오버헤드 발생</strong></li>
<li><strong>인덱스만을 위한 추가적인 저장 공간</strong> 필요</li>
<li>인덱스와 테이블 데이터의 <strong>저장공간이 분리</strong>되도록 설계</li>
<li>옵티마이저를 위한 통계 데이터를 주기적으로 갱신</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스구축] 파티셔닝, 클러스터]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%ED%8C%8C%ED%8B%B0%EC%85%94%EB%8B%9D-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%ED%8C%8C%ED%8B%B0%EC%85%94%EB%8B%9D-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0</guid>
            <pubDate>Sun, 11 Feb 2024 03:58:00 GMT</pubDate>
            <description><![CDATA[<h1 id="파티셔닝partitioning">파티셔닝(Partitioning)</h1>
<ul>
<li><strong>하나의 DB 내</strong>에서 특정 부분(데이터)을 여러 섹션(파티션)으로 <strong>분할</strong>하는 방법</li>
<li>대용량 데이터의 조회속도 향상, 관리용이성, 성능 및 가용성 향상을 위해 사용<h2 id="샤딩sharding⭐️">샤딩(Sharding)⭐️</h2>
</li>
<li>하나의 DB에 저장된 데이터를 작은 조각(샤드)으로 나누어 <strong>다수의 DB에 분산</strong> 저장 및 관리하는 기법</li>
<li>데이터의 크기가 매우 클 때 효과적</li>
<li>트래픽 분산시켜 성능 향상</li>
<li>샤드(Shard)는 나눠진 데이터 블록의 구간(Epoch)을 의미<h2 id="파티셔닝의-장단점">파티셔닝의 장단점</h2>
</li>
<li>장점<ul>
<li>데이터 가용성 향상</li>
<li>파티션별 독립적인 백업 및 복구 가능</li>
<li>성능 향상</li>
<li>경합 감소</li>
</ul>
</li>
<li>단점<ul>
<li>테이블 간의 조인 비용 증가</li>
<li>테이블과 인덱스는 동일한 파티션 전략을 따라야 함<h2 id="파티셔닝의-종류">파티셔닝의 종류</h2>
<h3 id="수평분할horizontal-partitioning">수평분할(Horizontal Partitioning)</h3>
</li>
</ul>
</li>
<li>테이블의 행을 기준으로 분할</li>
<li>스키마를 복제한 후 샤드키를 기준으로 데이터를 나눔<h3 id="수직분할vertical-partitioning">수직분할(Vertical Partitioning)</h3>
</li>
<li>테이블의 컬럼을 기준으로 분할</li>
<li>자주 사용하는 컬럼 등을 분리시켜 성능 향상</li>
<li>하나의 테이블을 2개이상으로 분리</li>
</ul>
<h2 id="수평-분할-기준기법-파티션-유형⭐️">수평 분할 기준(기법), 파티션 유형⭐️</h2>
<p>(20.8)</p>
<h3 id="범위-분할range-partitioning">범위 분할(Range Partitioning)</h3>
<ul>
<li>파티션 키의 연속된 범위로 파티션 정의</li>
<li>파티션 키 위주로 검색이 자주 실행될 경우 유용</li>
<li>예: 월별, 분기별 등<h3 id="목록-분할list-partitioning">목록 분할(List Partitioning)</h3>
</li>
<li>특정 파티션에 저장될 데이터에 대한 명시적 제어</li>
<li>많은 SQL에서 해당 컬럼의 조건이 많이 들어오는 경우 유용</li>
<li>예: (한국, 중국, 일본 - 아시아), (노르웨어, 스웨덴, 핀란드 - 북유럽)<h3 id="해시-분할hash-partitioning">해시 분할(Hash Partitioning)</h3>
</li>
<li>파티션 키값에 해시 함수를 적용하고, 거기서 반환된 값으로 파티션 매핑</li>
<li>데이터가 모든 파티션에 고르게 분산되도록 DBMS가 관리</li>
<li>병렬 처리 시 성능 효과 극대화<h3 id="라운드-로빈-분할round-robin-partitioning">라운드 로빈 분할(Round Robin Partitioning)</h3>
</li>
<li>데이터를 균일하게 분배해서 저장<h3 id="합성-분할composite-partitioning">합성 분할(Composite Partitioning)</h3>
</li>
<li>위의 기술들을 복합적으로 사용</li>
</ul>
<h1 id="클러스터-설계">클러스터 설계</h1>
<h2 id="클러스터">클러스터</h2>
<ul>
<li><strong>자주 사용되는 테이블</strong>의 데이터를 디스크 상 동일한 위치에 <strong>미리 정렬하여 저장</strong>하여 데이터 액세스 효율을 향상시키는 물리적 저장 방법<h2 id="클러스터의-특징">클러스터의 특징</h2>
</li>
<li>그룹화된 데이터는 같은 데이터 블록에 저장되어 디스크 I/O를 최소화</li>
<li>클러스터링된 테이블 간의 조인 성능 향상</li>
<li>데이터 조회 성능은 향상되지만, </li>
<li>데이터의 추가/수정/삭제나 전체 스캔 시 성능 저하 가능</li>
<li>데이터의 분포도가 넓을 경우 더 유리</li>
<li>클러스터링된 테이블에서는 클러스터드 인덱스 생성 시 성능 향상</li>
</ul>
<h2 id="클러스터-대상-테이블⭐️">클러스터 대상 테이블⭐️</h2>
<ul>
<li>데이터 <strong>분포도가 넓은</strong> 테이블</li>
<li><strong>대량 데이터의 범위 조회가 빈번한</strong> 테이블</li>
<li><strong>자주 변경(추가/수정/삭제)되지 않는</strong> 테이블</li>
<li><strong>자주 조인되는</strong> 테이블</li>
<li>정렬, 그룹화, 연합 연산이 자주 사용되는 테이블</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스구축] 물리요소 조사 분석]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EB%AC%BC%EB%A6%AC%EC%9A%94%EC%86%8C-%EC%A1%B0%EC%82%AC-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EA%B5%AC%EC%B6%95-%EB%AC%BC%EB%A6%AC%EC%9A%94%EC%86%8C-%EC%A1%B0%EC%82%AC-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Fri, 09 Feb 2024 14:17:05 GMT</pubDate>
            <description><![CDATA[<h1 id="물리-데이터베이스-설계">물리 데이터베이스 설계</h1>
<h2 id="물리-데이터베이스-설계의-특징⭐️">물리 데이터베이스 설계의 특징⭐️</h2>
<ul>
<li>논리적 설계를 물리적 데이터 모델로 매핑</li>
<li>데이터베이스 질의와 트랜잭션을 예상 빈도를 포함해 분석</li>
<li>효율적인 데이터 접근을 위한 <strong>저장구조와 접근방법 고려</strong></li>
<li><strong>응답시간, 저장공간의 효율화, 트랙잭션 처리량 등 고려</strong></li>
<li>특정 DBMS의 특성을 반영해 설계</li>
<li>질의 성능 향상을 위해 인덱스 구조를 적절히 활용</li>
</ul>
<h2 id="물리-데이터베이스-설계-시-고려사항">물리 데이터베이스 설계 시 고려사항</h2>
<ul>
<li>무결성, 일관성, 회복성, 보안, 효율성, 확장성</li>
</ul>
<h2 id="논리---물리-데이터-모델-변환">논리 - 물리 데이터 모델 변환</h2>
<ul>
<li>개체(Entity)를 테이블(Table)로 변환</li>
<li>속성(Attribute)을 컬럼(Column)으로 변환</li>
<li>UID를 기본키(PK)로 변환</li>
<li>관계(Relationship)를 외래키(FK)로 변환<ul>
<li>N:M 관계는 조인테이블로 변환</li>
</ul>
</li>
<li>컬럼 유형과 길이 정의</li>
<li>반정규화 수행</li>
</ul>
<h1 id="스토리지">스토리지</h1>
<ul>
<li>대용량의 데이터를 저장하기 위한 서버와 저장장치의 연결 기술</li>
<li>방대한 데이터를 효율적으로 관리, 유지 및 가공하는 저장장치</li>
</ul>
<h2 id="스토리지의-종류">스토리지의 종류</h2>
<h3 id="dasdirect-attached-storage">DAS(Direct Attached Storage)</h3>
<ul>
<li>직접 호스트에 연결된 저장방식</li>
<li>장점: 빠른 속도, 확장 용이</li>
<li>단점: 데이터 증가 시 운영 효율성 감소, 호스트 장애 시 접근 제한, 연결 제한<h3 id="nasnetwordk-attached-storage">NAS(Networdk Attached Storage)</h3>
</li>
<li>네트워크를 통한 데이터 공유 저장방식</li>
<li>장점: 네트워크 기반 고속 데이터 전송, 여러 장치 입출력 용이</li>
<li>단점: 전송속도 제한, 데이터 캡슐화로 인한 지연, 네트워크 병목<h3 id="sanstorage-area-network">SAN(Storage Area Network)</h3>
</li>
<li>별도의 고속 네트워크로 연결된 저장방식</li>
<li>장점: 용량 및 성능 확장성, 가상화 환경 적합</li>
<li>단점: 네트워크 복잡도, 비용 및 관리 복잡성 증가</li>
</ul>
<h2 id="raidredundant-array-of-inexpensive-disks">RAID(Redundant Array Of Inexpensive Disks)</h2>
<h3 id="raid의-개념">RAID의 개념</h3>
<ul>
<li>복수의 HDD를 하나의 드라이브와 같이 인식하고 표기</li>
<li>HDD의 신뢰성을 높여줌</li>
<li>데이터를 분산하여 쓸 수 잇어 고속화 기대 가능<h3 id="raid의-구성">RAID의 구성</h3>
</li>
<li>스트라이핑(Striping): 여러 디스크에 데이터 분산 저장</li>
<li>미러링(Mirroring): 데이터 복제로 신뢰성 확보</li>
</ul>
<h1 id="분산-데이터베이스">분산 데이터베이스</h1>
<ul>
<li>여러 곳에 <strong>분산된 데이터베이스를 하나의 논리적인 시스템처럼 사용</strong>할 수 있는 데이터베이스</li>
</ul>
<h2 id="분산-데이터베이스의-구성요소">분산 데이터베이스의 구성요소</h2>
<ul>
<li><strong>분산 처리기</strong>: 지리적으로 분산된 컴퓨터 시스템</li>
<li><strong>분산 데이터베이스</strong>: 지리적으로 분산된 데이터 베이스</li>
<li><strong>통신 네트워크</strong>: 분산 처리기들을 연결하여 하나의 시스템처럼 작동시키는 네트워크</li>
</ul>
<h2 id="분산-데이터베이스의-목표투명성-조건⭐️⭐️">분산 데이터베이스의 목표(투명성 조건)⭐️⭐️</h2>
<p>(20.6,8)</p>
<ul>
<li><strong>위치(Location)</strong> 투명성: 데이터베이스의 <strong>실제 위치를 알 필요 없이</strong> 단지 데이터베이스의 논리적인 명칭만으로 접근 가능</li>
<li><strong>중복(Replication)</strong> 투명성: 동일 데이터가 여러 곳에 <strong>중복되어있더라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용</strong>하고, 시스템은 자동으로 여러 자료에 대한 작업을 수행</li>
<li><strong>병행(Concurrency)</strong> 투명성: 다수의 트랜잭션들이 <strong>동시에 실현</strong>되더라도 그 트랜잭션의 결과는 영향을 받지 않음</li>
<li><strong>분할(Division)</strong> 투명성: 하나의 논리적 릴레이션이 <strong>여러 단편(Fragmentation)으로 분할</strong>되어, 각 단편의 사본이 여러 시스템에 저장되어있음을 인식할 필요가 없음</li>
<li><strong>장애(Failure)</strong> 투명성: 트랜잭션, DBMS, 네트워크, 컴퓨터 <strong>장애가 발생해도 트랜잭션을 정확하게 처리</strong>하고 데이터 무결성을 보장⭐️</li>
<li>지역사상(Local Mapping) 투명성: 지역DBMS와 물리적DB 사이의 매핑 보장, 각 지역시스템 이름과 무관한 이름 사용가능</li>
</ul>
<h2 id="분산-데이터베이스의-장단점">분산 데이터베이스의 장단점</h2>
<ul>
<li>장점<ul>
<li>지역 자치성</li>
<li>자료의 공유성 향상</li>
<li>분산 제어 가능</li>
<li>시스템 성능 향상</li>
<li><strong>중앙 컴퓨터의 장애가 전체시스템에 영향을 주지 않음</strong></li>
<li>신뢰성과 가용성 높음</li>
<li>효용성과 융통성 높음</li>
<li><strong>점진적 시스템 용량 확장 용이</strong></li>
<li>빠른 응답속도와 통신 비용 절감</li>
<li>시스템 규모의 적절한 조절</li>
<li>각 지역 사용자의 요구수용 증대</li>
</ul>
</li>
<li>단점<ul>
<li>소프트웨어 개발 비용 증가</li>
<li>잠재적 오류 증가</li>
<li>처리 비용 증가</li>
<li><strong>설계, 관리의 복잡성과 비용 증가</strong></li>
<li>불규칙한 응답 속도</li>
<li>통제의 어려움</li>
<li>데이터 무결성에 대한 위협</li>
</ul>
</li>
</ul>
<h2 id="분산-데이터베이스의-적용기법설계방법">분산 데이터베이스의 적용기법(설계방법)</h2>
<ul>
<li>테이블 위치 분산: 테이블을 각기 다른 서버에 분산시켜 배치</li>
<li>테이블 분할(Fragmentation) 분산: 테이블의 데이터를 분할하여 분산시키는 것</li>
<li>테이블 복제(Replication) 분산: 동일한 테이블을 다른 지역이나 서버에 동시 생성해 관리</li>
<li>테이블 요약(Summarization) 분산: 지역/서버 간 데이터가 비슷하지만 서로 다른 유형으로 존재</li>
</ul>
<h1 id="데이터베이스-이중화database-replication">데이터베이스 이중화(Database Replication)</h1>
<ul>
<li>장애에 대비하여 동일한 데이터베이스를 중복(복제)하여 관리하는 방식</li>
<li>고가용성을 위한 정보시스템의 지속적인 정상 운영을 목표로 함</li>
<li>고가용성(HA;High Availibility)<ul>
<li>정보 시스템이 지속적으로 정상 운영 가능한 성질</li>
<li>주로 2개의 서버 연결하여 제공<h2 id="데이터베이스-이중화의-유형분류">데이터베이스 이중화의 유형(분류)</h2>
</li>
</ul>
</li>
<li><strong>Eager 기법</strong>: 트랜잭션 발생 시, 모든 이중화 서버에 <strong>즉시 변경 사항 반영</strong></li>
<li><strong>Lazy 기법</strong>: 트랜잭션 완료 후, <strong>변경사항을 새로운 트랜잭션에 작성</strong>해 각 데이터베이스에 전달<h2 id="데이터베이스-이중화의-구성방법종류">데이터베이스 이중화의 구성방법(종류)</h2>
</li>
<li><strong>활성-대기(Active-Standby)</strong><ul>
<li>하나는 활성 상태, 다른 하나는 대기 상태</li>
<li>장애 발생 시, 대기중인 장비가 활성화되어 서비스 지속</li>
<li>종류: Hot Standby, Warn Standby, Cold Standby</li>
</ul>
</li>
<li><strong>활성-활성(Active-Actvie)</strong><ul>
<li>모든 다중화된 장비가 활성화된 상태</li>
<li>높은 처리율을 보이나 구성이 복잡</li>
<li>구성 방법 및 관리가 쉬워 많은 기업에서 이용</li>
</ul>
</li>
</ul>
<h1 id="데이터베이스-암호화">데이터베이스 암호화</h1>
<h3 id="데이터베이스-암호화-알고리즘">데이터베이스 암호화 알고리즘</h3>
<ul>
<li>대칭키 알고리즘: 암호화와 복호화에 같은 암호키 사용<ul>
<li>예: ARIA 128/192/256, SEED</li>
</ul>
</li>
<li>비대칭키 알고리즘: 암호화와 복호화에 서로 다른 암호키 사용<ul>
<li>예: RSA, ECDSA</li>
</ul>
</li>
<li>해시 알고리즘: 해시함수 이용해 임의의 길이를 가진 데이터를 고정된 길이의 데이터로 변경<ul>
<li>예: SHA 256/384/512, HAS-160, MD5</li>
</ul>
</li>
</ul>
<h3 id="데이터베이스-암호화-기법⭐️">데이터베이스 암호화 기법⭐️</h3>
<ul>
<li><strong>API 방식</strong><ul>
<li>애플리케이션 레벨에서 암호 모듈을 적용하는 애플리케이션 수정 방식</li>
<li><strong>애플리케이션 서버</strong>에 암/복호화, 정책관리, 키 관리 부하 발생</li>
</ul>
</li>
<li><strong>Plug-In 방식</strong><ul>
<li>DB 레벨의 확장 프로시저 기능을 이용, DBMS에 Plug-In모듈로 동작하는 방식</li>
<li><strong>DB 서버</strong>에 암/복호화, 정책관리, 키 관리 부하 발생</li>
</ul>
</li>
<li><strong>Hybrid 방식</strong><ul>
<li><strong>API 방식과 Plug-In 방식을 결합</strong>한 방식</li>
<li>DB와 애플리케이션에서 부하 분산</li>
</ul>
</li>
<li><strong>TDE(Transparent Data Encryption) 방식</strong><ul>
<li><strong>DBMS의 내장 암호화 기능</strong>을 이용하는 방식</li>
<li>응용 프로그램에 대한 수정이 없고 인덱스의 경우 DBMS 자체 인덱스 기능과 연동 가능</li>
<li><strong>DB 내부</strong>에서 암/복호 처리를 하는 방식</li>
</ul>
</li>
<li>파일암호화 방식<ul>
<li>OS 레벨에서 제공되는 기능을 이용하는 방식<ul>
<li>데이터 및 비정형 데이터 암호화 적용</li>
</ul>
</li>
</ul>
</li>
<li>하드웨어 방식<ul>
<li>외부에 별도의 하드웨어 설치</li>
</ul>
</li>
</ul>
<p>+) 데이터베이스 보안 유형
접근 제어, 허가규칙, 암호화, 흐름제어</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스 구축] 시스템 카탈로그]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%B6%95-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%B9%B4%ED%83%88%EB%A1%9C%EA%B7%B8</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%B6%95-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%B9%B4%ED%83%88%EB%A1%9C%EA%B7%B8</guid>
            <pubDate>Fri, 09 Feb 2024 11:02:46 GMT</pubDate>
            <description><![CDATA[<h1 id="시스템-카탈로그⭐️">시스템 카탈로그⭐️</h1>
<h2 id="시스템-카탈로그의-의미">시스템 카탈로그의 의미</h2>
<ul>
<li>데이터베이스에 저장되어있는 모든 데이터 개체들에 대한 <strong>정보를 유지, 관리하는 시스템 테이블</strong></li>
<li>좁은 의미로 카탈로그는 <strong>데이터 사전(Data Dictionary)</strong>이라고도 함</li>
</ul>
<h2 id="시스템-카탈로그의-내용">시스템 카탈로그의 내용</h2>
<ul>
<li>DDL의 결과로 생성되는 데이터베이스 구조와 관련 통계 정보가 저장됨</li>
<li>카탈로그에 저장된 정보를 <strong>메타 데이터(Meta Data)</strong>라고도 함</li>
<li>개체들은 기본 테이블(릴레이션), 뷰, 인덱스, 통계, 사용자 데이터베이스, 패키지, 접근권한 등이 있음</li>
</ul>
<h2 id="시스템-카탈로그의-특징">시스템 카탈로그의 특징</h2>
<ul>
<li><strong>일반 사용자도 SQL을 이용해 내용 조회(검색) 가능</strong></li>
<li>사용자는 카탈로그 <strong>갱신 불가</strong></li>
<li>DBMS에 따라 상이한 구조를 가짐</li>
<li><strong>DBMS가 스스로 생성하고 유지</strong></li>
<li>사용자가 SQL문을 실행시켜 변화를 주면 <strong>시스템이 자동으로 갱신</strong></li>
</ul>
<h2 id="시스템-카탈로그의-구성요소">시스템 카탈로그의 구성요소</h2>
<ul>
<li><code>SYSTABLES</code>: 기본 테이블 및 뷰 정보 저장</li>
<li><code>SYSCOLUMNS</code>: 각 테이블의 속성 중심 정보 저장</li>
<li><code>SYSVIEW</code>: 뷰 정보 저장</li>
<li><code>SYSTABAUTH</code>: 테이블 권한정보 저장</li>
<li><code>SYSCOLAUTH</code>: 각 속성의 권한정보 저장</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[데이터베이스 구축] 관계형 데이터 모델]]></title>
            <link>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%B6%95-%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@thing-zoo/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%B6%95-%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Fri, 09 Feb 2024 10:44:41 GMT</pubDate>
            <description><![CDATA[<h1 id="관계-데이터-모델">관계 데이터 모델</h1>
<h2 id="관계-데이터-모델-개념">관계 데이터 모델 개념</h2>
<ul>
<li>데이터의 논리적 구조를 2차원 <strong>테이블 형태</strong>로 표현하는 모델로, 각 테이블은 <strong>튜플과 속성</strong>으로 구성</li>
<li><strong>기본키</strong>와 이를 참조하는 <strong>외래키</strong>로 데이터 간의 관계 표현</li>
<li>계층 모델과 밍 모델의 복잡한 구조를 단순화시킴</li>
<li>대표적인 언어 <strong>SQL</strong>, <strong>1:1, 1:N, N:M 관계</strong>를 자유롭게 표현<h2 id="관계-데이터-릴레이션의-구조⭐️⭐️">관계 데이터 릴레이션의 구조⭐️⭐️</h2>
<img src="https://velog.velcdn.com/images/thing-zoo/post/07a820a7-a4e7-4e7a-a422-3723cc5b0814/image.png" alt=""></li>
</ul>
<p>(20.8)</p>
<h3 id="튜플tuple-행row-레코드record">튜플(Tuple), 행(Row), 레코드(Record)</h3>
<ul>
<li>속성들의 모임</li>
<li>파일 구조상 레코드(실제데이터)를 의미</li>
<li><strong><code>튜플의 수=카디널리티(Cardinality), 기수, 대응수</code></strong><h3 id="속성attribute-열column-필드field">속성(Attribute), 열(Column), 필드(Field)</h3>
</li>
<li>데이터베이스를 구성하는 <strong>가장 작은 논리적 단위</strong></li>
<li>파일 구조상의 <strong>데이터 항목 또는 데이터 필드</strong>에 해당</li>
<li><strong>개체의 특성</strong>을 기술</li>
<li><strong><code>속성의 수=차수(Degree)</code></strong><h4 id="속성의-분류">속성의 분류</h4>
</li>
<li><strong>기본속성</strong>: <strong>업무 분석</strong>을 통해 정의(예: 자동차명, 제조일, 연비)</li>
<li><strong>설계속성</strong>: <strong>설계과정에서 도출</strong>(예: 코드, 식별번호)</li>
<li><strong>파생속성</strong>: <strong>다른 속성값에 기반</strong>하여 계산되거나 유도<h4 id="세부-의미에-다른-분류">세부 의미에 다른 분류</h4>
</li>
<li>단순 속성: 다른 속성으로 나뉠 수 없는 기본적인 속성</li>
<li>복합 속성: 여러 세부 속성으로 구성될 수 있는 속성(예:시, 구, 동)<h4 id="개체-구성-방식에-다른-분류">개체 구성 방식에 다른 분류</h4>
</li>
<li>기본키 속성: 개체를 식별</li>
<li>외래키 속성: 다른 릴레이션의 기본키를 참조</li>
<li>일반 속성: 기본키나 외래키가 아닌 속성<h4 id="속성명-지정-원칙">속성명 지정 원칙</h4>
</li>
<li><strong>업무에서 사용하는 이름</strong></li>
<li>서술식보다는 간결한 이름</li>
<li><strong>약어 사용 제한</strong></li>
<li>개체명은 속성명으로 사용 불가</li>
<li>개체에서 <strong>유일하게 식별가능하도록</strong> 지정</li>
</ul>
<h3 id="도메인domain">도메인(Domain)</h3>
<p>(20.6)</p>
<ul>
<li>하나의 <strong>속성</strong>이 가질 수 있는 같은 타입 <strong>원자값들의 집합</strong></li>
<li>도메인을 정의함으로써 <strong>데이터 무결성 유지</strong> 가능</li>
<li>예: 성별(남, 여), 학년(1~4)</li>
</ul>
<h2 id="릴레이션">릴레이션</h2>
<ul>
<li>데이터들을 2차원 테이블의 구조로 저장한 것<h3 id="릴레이션의-구성">릴레이션의 구성</h3>
</li>
<li>릴레이션 스키마: 릴레이션 이름과 속성 이름을 포함한 릴레이션의 논리적 구조</li>
<li>릴레이션 인스턴스: 스키마에 따라 실제로 저장된 데이터의 집합<h3 id="릴레이션의-특징⭐️">릴레이션의 특징⭐️</h3>
(20.8)</li>
<li><strong>튜플 중복 불가</strong></li>
<li><strong>튜플 간 순서가 없음</strong></li>
<li><strong>속성 간 순서가 없음</strong>, 속성의 위치는 중요하지 않음</li>
<li><strong>속성</strong>은 더이상 분해할 수 없는 <strong>원자값</strong>을 가져야함</li>
<li><strong>속성 중복 불가</strong>, 도메인 중복 가능</li>
<li>릴레이션은 튜플의 삽입, 갱신, 삭제로 인해 <strong>실시간으로 변함</strong></li>
</ul>
<h1 id="관계-데이터-언어">관계 데이터 언어</h1>
<h2 id="관계-대수⭐️⭐️⭐️">관계 대수⭐️⭐️⭐️</h2>
<ul>
<li>관계형 데이터베이스에서 원하는 데이터를 찾기 위한 <strong>절차적 언어</strong></li>
<li>데이터를 <strong>어떻게(How) 찾아야 하는지</strong>의 처리 과정 명시</li>
<li>연산의 피연산자와 결과는 모두 릴레이션</li>
<li>종류: 순수 관계 연산자, 일반 집합 연산자</li>
</ul>
<p>어디에 속하는지(20.8)</p>
<h3 id="순수-관계-연산자">순수 관계 연산자</h3>
<h4 id="select선택">SELECT(선택)</h4>
<ul>
<li>주어진 <strong>조건(Predicate)을 만족</strong>하는 튜플들의 부분 집합(수평 연산)</li>
<li>표기법: <code>𝜎&lt;조건&gt;(R)</code></li>
<li>조건<ul>
<li>비교연산자: <code>=, ≠, &lt;, ≤, &gt;, ≥</code></li>
<li>논리연산자: <code>∧(AND), ∨(OR), ¬(NOT)</code></li>
</ul>
</li>
<li>예:<ul>
<li><code>𝜎 성적 &gt; 90(학생)</code></li>
<li><code>𝜎 성적 &gt;= 90 ^ 학과=&#39;컴퓨터&#39;(학생)</code><h4 id="project추출">PROJECT(추출)</h4>
</li>
</ul>
</li>
<li><strong>속성들의 부분 집합</strong>, 중복은 제거됨(수직 연산)</li>
<li>표기법: <code>𝜋&lt;리스트&gt;(R)</code></li>
<li>예:<ul>
<li><code>𝜋 학번, 성적(학생)</code></li>
<li><code>𝜋 학번, 성적, 성적(𝜎 성적 &gt;= 90(학생))</code><h4 id="join조인">JOIN(조인)</h4>
(20.6)</li>
</ul>
</li>
<li><strong>공통 속성</strong>을 이용해 두 릴레이션을 <strong>하나로 합쳐 새로운 릴레이션 생성</strong></li>
<li>두 릴레이션에서 <strong>연관된 튜플들을 결합</strong></li>
<li>표기법: <code>R⨝&lt;조건&gt;S</code></li>
<li>예:<ul>
<li><code>(학생) ⨝ 학번=학번 (수강과목)</code><h4 id="division나누기">DIVISION(나누기)</h4>
(20.8)</li>
</ul>
</li>
<li><strong>릴레이션S의 모든 튜플과 관련있는 릴레이션R의 튜플들을 반환</strong></li>
<li><code>R÷S</code><h3 id="일반-집합-연산자">일반 집합 연산자</h3>
<h4 id="union합집합">Union(합집합)</h4>
</li>
<li>두 릴레이션의 <strong>튜플 합집합</strong>을 구하며, <strong>중복은 제거</strong></li>
<li>표기법: <code>∪</code><h4 id="intersection교집합">Intersection(교집합)</h4>
</li>
<li>두 릴레이션의 <strong>튜플 교집합</strong>(중복되는 것들)</li>
<li>표기법: <code>∩</code><h4 id="difference차집합">Difference(차집합)</h4>
</li>
<li><strong>한 릴레이션의 튜플에서 다른 릴레이션 튜플을 제거</strong></li>
<li>표기법: <code>-</code><h4 id="cartesian교차곱">Cartesian(교차곱)</h4>
</li>
<li>두 릴레이션의 <strong>모든 튜플 조합</strong></li>
<li>차수는 더하고, 카디널리티는 곱해서 구함</li>
<li>표기법: <code>X</code></li>
</ul>
<h2 id="관계-해석⭐️">관계 해석⭐️</h2>
<ul>
<li>관계 데이터 모델의 제안자인 코드(E.F.Codd)가 <strong>수학의 Predicate Calculus(술어 해석)에 기반</strong>을 두고 관계 데이터베이스를 위해 제안</li>
<li>원하는 <strong>정보(What)</strong>가 무엇이라는 것만 정의하는 <strong>비절차적 특성</strong></li>
<li>종류: <strong>튜플 관계해석, 도메인 관계해석</strong></li>
<li>관계해석과 관계대수는 <strong>처리 능력면에서 동등</strong></li>
<li><strong>관계대수로 표현한 식은 관계해석으로 표현</strong> 가능</li>
<li>질의어로 표현</li>
</ul>
<h3 id="연산자">연산자</h3>
<ul>
<li>연산자: <code>∧(AND), ∨(OR), ¬(NOT)</code></li>
<li>정량자<ul>
<li>전칭 전량자: <code>∀</code>, 모든 가능한 튜플 &quot;For <strong>A</strong>ll&quot;</li>
<li>존재 정량자: <code>∃</code>, 어떤 튜플 하나라도 존재 &quot;There <strong>E</strong>xists&quot;</li>
</ul>
</li>
</ul>
<h1 id="사진-출처">사진 출처</h1>
<p><a href="https://velog.io/@hig0ni/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%9D%98-%EC%B0%A8%EC%88%98%EC%99%80-%EC%B9%B4%EB%94%94%EB%84%90%EB%A6%AC%ED%8B%B0">https://velog.io/@hig0ni/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%9D%98-%EC%B0%A8%EC%88%98%EC%99%80-%EC%B9%B4%EB%94%94%EB%84%90%EB%A6%AC%ED%8B%B0</a></p>
]]></description>
        </item>
    </channel>
</rss>