<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>yh_bang.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Thu, 08 Jun 2023 02:46:14 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>yh_bang.log</title>
            <url>https://velog.velcdn.com/images/yh_bang/profile/18dab4d2-9112-4036-b741-6dc198acbda7/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. yh_bang.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/yh_bang" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[JavaScript] JSON 클래스 함수]]></title>
            <link>https://velog.io/@yh_bang/JavaScript-JSON-%ED%81%B4%EB%9E%98%EC%8A%A4-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@yh_bang/JavaScript-JSON-%ED%81%B4%EB%9E%98%EC%8A%A4-%ED%95%A8%EC%88%98</guid>
            <pubDate>Thu, 08 Jun 2023 02:46:14 GMT</pubDate>
            <description><![CDATA[<h2 id="json-클래스-함수">JSON 클래스 함수</h2>
<h3 id="1-json-javascript-object-notation">1. JSON (JavaScript Object Notation)</h3>
<ul>
<li>JSON : JavaScript Object Notation</li>
<li>JSON 관련 프로퍼티와 메소드를 제공하는 클래스 함수</li>
</ul>
<pre><code class="language-js">let student = {&quot;num&quot;:1000, &quot;name&quot;:&quot;Hong&quot;};
console.log(&quot;변수의 자료형 = &quot; + typeof(student));
console.log(&quot;student = &quot; + student);
console.log(&quot;학번 = &quot; + student.num + &quot;, 이름 = &quot; + student.name);

// 변수의 자료형 = object
// student = [object Object]
// 학번 = 1000, 이름 = Hong</code></pre>
<ul>
<li>Object 객체가 저장된 변수를 출력하면 자동으로 toString() 메소드 호출</li>
<li>Object.toString() : 객체를 생성한 클래스 함수명을 문자값으로 반환하는 메소드</li>
</ul>
<h3 id="2-메소드">2. 메소드</h3>
<ul>
<li>JSON.stingify(object) : 매개변수로 전달받은 자바스크립트 객체를 JSON 형식의 문자값으로 변환하여 반환하는 메소드</li>
<li>REST 웹프로그램을 요청할 경우 자바스크립트 객체를 JSON 형식의 문자값으로 변환하여 전달하기 위해 사용<pre><code class="language-js">let student = {&quot;num&quot;:1000, &quot;name&quot;:&quot;Hong&quot;};
let str = JSON.stingify(student);
</code></pre>
</li>
</ul>
<p>console.log(&quot;변수의 자료형 = &quot; + typeof(str));
console.log(&quot;str = &quot; + str);</p>
<p>// 변수의 자료형 = string
// str = {&quot;num&quot;:1000, &quot;name&quot;:&quot;Hong&quot;}</p>
<pre><code>- JSON.parse(str) : 매개변수로 전달받은 JSON 형식의 문자값을 자바스크립트 객체로 변환하여 반환하는 메소드
- REST 웹프로그램에 대한 응답결과를 JSON 형식의 문자값으로 제공받아 자바스크립트 객체로 변환하여 사용
```js
let student = {&quot;num&quot;:1000, &quot;name&quot;:&quot;Hong&quot;};
let str = JSON.stingify(student);
let stu = JSON.parse(str);

console.log(&quot;변수의 자료형 = &quot; + typeof(stu));
console.log(&quot;학번 = &quot; + stu.num + &quot;, 이름 = &quot; + stu.name);

// 변수의 자료형 = object
// 학번 = 1000, 이름 = Hong}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[JavaScript] 자바스크립트 내장 함수]]></title>
            <link>https://velog.io/@yh_bang/JavaScript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@yh_bang/JavaScript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98</guid>
            <pubDate>Mon, 05 Jun 2023 07:44:12 GMT</pubDate>
            <description><![CDATA[<h2 id="내장-함수">내장 함수</h2>
<h3 id="1-시간-경과-관련-함수">1. 시간 경과 관련 함수</h3>
<ul>
<li>setTimeout(callback, ms) : 시간(ms) 경과 후 콜백함수를 한번만 호출하여 콜백함수의 명령을 실행하는 함수
=&gt; timeoutId(setTimeout 함수를 구분하기 위한 식별자)</li>
<li>clearTimeout(timeoutId) : timeoutId의 setTimeout 함수의 실행을 취소하는 함수</li>
<li>setInterval(callback, ms) : 시간(ms) 경과마다 콜백함수를 반복적으로 호출하여 콜백함수의 명령을 실행하는 함수
=&gt; intervalId(setInterval 함수를 구분하기 위한 식별자) 반환</li>
<li>clearInterval(intervalId) : intervalId의 setInterval 함수의 실행을 취소하는 함수</li>
</ul>
<h3 id="2-부호화-복호화-관련-함수">2. 부호화 (복호화) 관련 함수</h3>
<ul>
<li>URI (웹자원의 식별자) = URL (웹자원의 위치) + QueryString (전달값)</li>
<li>문제점 : 질의문자열에 URI 주소로 사용 불가능한 문자 포함 가능 (값이 비정상적으로 전달)</li>
<li>해결법 : 질의문자열에 URI 주소로 사용 불가능한 문자가 포함된 경우 부호화 처리하여 전달</li>
<li>부호화(Encode) 처리 : URI 주소로 사용 불가능한 문자를 URI 주소로 사용 가능한 문자 (유니코드)로 변환</li>
<li>encodeURI(string) 함수 or encodeURIComponent(string) 함수 : 매개변수로 일반 문자값을 전달받아 부호화된 문자값으로 변환하여 반환하는 함수</li>
<li>decodeURI(string) 함수 or decodeURIComponent(string) 함수 : 매개변수로 부호화 처리된 문자값을 전달받아 일반 문자값으로 변환하여 반환하는 함수</li>
</ul>
<h3 id="3-eval-함수">3. eval 함수</h3>
<ul>
<li>eval(string) : 매개변수로 문자값을 전달받아 자바스트립트 명령으로 변환하여 실행하는 함수<pre><code class="language-js">let text=&quot;20 + 10&quot;;
</code></pre>
</li>
</ul>
<p>console.log(text);
console.log(eval(text));</p>
<p>// 20 + 10
// 30</p>
<pre><code>
### 4. isNaN 함수
- isNaN(value) : 매개변수로 전달받는 값이 숫자로만 구성된 경우 [false]를 반환하고 숫자로만 구성되지 않은 경우 [true]를 반환하는 함수
```js
let value = &quot;123abc&quot;;

if (isNaN(value)) {
    console.log(&quot;숫자로만 구성된 값이 아닙니다.&quot;);
} else {
    console.log(&quot;숫자로만 구성된 값입니다.&quot;);
}

// 숫자로만 구성된 값이 아닙니다.</code></pre><h3 id="5-isfinite-함수">5. isFinite 함수</h3>
<ul>
<li>isFinite(value) : 매개변수로 전달받은 값이 무한수인 경우 [false]를 반환하고 유한수인 경우 [true]를 반환하는 함수<pre><code class="language-js">console.log(10 / 4); // 2.5
console.log(10 / 3); // 3.3333333333333335
// =&gt; 자바스트립트는 모든 숫자값이 유한수로 표현
console.log(10 / 0); // Infinity (무한수)</code></pre>
</li>
</ul>
<pre><code class="language-js">let num1 = 10, num2 = 0;

if (isFinite(num1 / num2)) {
    console.log(num1 / num2);
} else {
    console.log(&quot;0으로 나눌 수 없습니다.&quot;);
}

// 0으로 나눌 수 없습니다.</code></pre>
<h3 id="6-parse-함수">6. parse 함수</h3>
<ul>
<li>parseInt(value) : 매개변수로 전달받은 값을 정수값으로 변환하여 반환하는 함수</li>
<li>parseInt(string, radix) : 매개변수를 전달받은 특정 진수의 문자값을 10진수의 정수값으로 변환하여 반환하는 함수</li>
<li>parseFloat(value) : 매개변수로 전달받은 값을 실수값으로 변환하여 반환하는 함수</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JavaScript] 함수 (Function)]]></title>
            <link>https://velog.io/@yh_bang/JavaScript-%ED%95%A8%EC%88%98-Function</link>
            <guid>https://velog.io/@yh_bang/JavaScript-%ED%95%A8%EC%88%98-Function</guid>
            <pubDate>Mon, 05 Jun 2023 03:27:29 GMT</pubDate>
            <description><![CDATA[<h2 id="1-함수-function">1. 함수 (Function)</h2>
<h3 id="1-함수-function-1">1. 함수 (Function)</h3>
<ul>
<li>함수 (Function) : 매개변수로 값을 전달받아 가공 처리하여 결과값을 반환하는 기능을 제공</li>
<li>자바스크립트에서는 함수를 선언해야만 함수를 호출하여 함수에 작성된 명령을 실행하여    결과값을 반환받아 사용</li>
</ul>
<h3 id="2-구분">2. 구분</h3>
<ul>
<li>자바스크립트에서는 함수 선언방법에 따라 선언함수와 익명함수로 구분</li>
<li>선언함수 : 함수명을 명시하여 선언하는 함수</li>
<li>익명함수 : 함수명을 명시하지 않고 선언하는 함수</li>
</ul>
<hr>
<h2 id="2-arguments-객체">2. arguments 객체</h2>
<h3 id="arguments-객체">arguments 객체</h3>
<ul>
<li>인자 (Argument) - 함수에 작성된 명령을 실행하기 위해 반드시 필요한 값을 함수를 호출할 때 전달받아 저장하기 위해 사용하는 변수</li>
<li>arguments 객체 : 함수 호출시 전달된 모든 값을 배열 형식으로 저장하기 위한 내장 객체</li>
<li>arguments.length : 전달값의 개수를 제공받아 출력</li>
<li>자바스크립트에서는 인자에 상관없이 함수명으로 함수 호출 가능<pre><code class="language-js">function total() {
  let tot = 0;
  for (i = 0; i &lt; arguments.length; i++) {
      tot += arguments[i];//전달값을 제공받아 변수에 누적 처리
  }
  console.log(&quot;합계 = &quot; + tot);
}
</code></pre>
</li>
</ul>
<p>total(10, 20, 30, 40, 50);</p>
<p>// 합계 = 150</p>
<pre><code>
***
## 3. 함수 표현식

### 1. 선언함수
- 선언함수 : 함수명을 명시하여 함수 선언
- 내부적으로 함수명은 변수로 처리되어 선언함수를 값으로 저장
```js
function 함수명 (매개변수, 매개변수, ...) {
         명령;
          명령;
         ፧
}</code></pre><pre><code class="language-js">function display() {
  console.log(&quot;선언함수 명령&quot;);
}

display();

// 선언함수 명령</code></pre>
<pre><code class="language-js">function display() {
  console.log(&quot;선언함수 함수명 명령&quot;);
}

display;

// 선언함수 함수명 명령</code></pre>
<ul>
<li>함수명 출력 : 함수명에 저장된 선언함수 출력</li>
</ul>
<h3 id="2-익명함수">2. 익명함수</h3>
<ul>
<li>익명함수 : 함수명을 명시하지 않고 함수 선언</li>
<li>익명함수는 함수를 선언하고 바로 함수를 호출하여 사용
=&gt; 함수를 한번만 호출<pre><code class="language-js">(function (매개변수, 매개변수, ...) {
  명령;
    명령;
   ፧
})(값, 값, ...);</code></pre>
</li>
</ul>
<pre><code class="language-js">(function() {
    console.log(&quot;익명함수 명령&quot;);
})();

// 익명함수 명령</code></pre>
<h3 id="3-선언함수">3. 선언함수</h3>
<ul>
<li>선언함수 : 자바스크립트 명령 실행전에 선언</li>
<li>함수 선언 전에 함수 호출 가능<pre><code class="language-js">display(); //함수 선언 전 함수 호출 - 가능
</code></pre>
</li>
</ul>
<p>function display() {
        console.log(&quot;선언함수 명령 실행&quot;);
}</p>
<p>display(); //함수 선언 후 함수 호출 - 가능</p>
<p>// 선언함수 명령 실행
// 선언함수 명령 실행</p>
<pre><code>
### 4. 람다표현식을 활용한 화살표 함수
- ES6에서는 람다 표현식을 이용한 화살표함수 추가
- 코드를 간결하게 표현하여 가독성 증가
- 함수에 작성된 명령이 하나인 경우 { } 기호 생략 가능
- 변수에 화살표함수를 저장하고 변수를 이용하여 함수 호출
```js
(매개변수, 매개변수) =&gt; {
    명령;
      명령;
     ፧
};</code></pre><pre><code class="language-js">const display1 = () =&gt; {
  console.log(&quot;화살표함수의 명령 실행&quot;);
}
const display2 = () =&gt; console.log(&quot;화살표함수의 명령 실행&quot;); 

display1();
display2();

// 화살표함수의 명령 실행
// 화살표함수의 명령 실행</code></pre>
<hr>
<h2 id="4-콜백-함수-callback-function">4. 콜백 함수 (Callback Function)</h2>
<ul>
<li>콜백 함수 (Callback Function) : 매개변수로 함수를 전달받아 함수 내부에서 매개변수로 호출되는 함수</li>
</ul>
<pre><code class="language-js">function display(callback) {
    callback();
}

display(function() {
    console.log(&quot;익명함수의 명령 실행&quot;);
});

display(() =&gt; alert(&quot;화살표함수의 명령 실행&quot;));

// 익명함수의 명령 실행
// 화살표함수의 명령 실행</code></pre>
<hr>
<h2 id="5-클로저-함수-closure-function">5. 클로저 함수 (Closure Function)</h2>
<ul>
<li><p>클로저 함수 (Closure Function) : 함수 내부에 선언된 함수를 반환받아 함수 외부에서 호출하는 함수</p>
</li>
<li><p>내부 함수를 함수 외부에서 호출할 경우 에러 발생</p>
<pre><code class="language-js">function outer() {
function inner() {
  console.log(&quot;내부함수의 명령 실행&quot;);
}

return inner;
}
</code></pre>
</li>
</ul>
<p>let closure = outer();
closure();</p>
<p>// 내부함수의 명령 실행</p>
<pre><code>
```js
function outer() {
  function inner() {
    console.log(&quot;내부함수의 명령 실행&quot;);
  }

  return inner;
}

outer()(); // 내부함수를 반환받아 변수에 저장하지 않고 직접 호출
// 내부함수의 명령 실행</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[JavaScript] 변수 (Variable)]]></title>
            <link>https://velog.io/@yh_bang/JavaScript-%EB%B3%80%EC%88%98-Variable</link>
            <guid>https://velog.io/@yh_bang/JavaScript-%EB%B3%80%EC%88%98-Variable</guid>
            <pubDate>Fri, 02 Jun 2023 06:57:34 GMT</pubDate>
            <description><![CDATA[<h2 id="변수-variable">변수 (Variable)</h2>
<h3 id="1-변수-variable">1. 변수 (Variable)</h3>
<ul>
<li>변수 (Variable) : 리터럴을 저장하기 위한 저장공간(메모리)의 식별자</li>
<li>자바스크립트는 변수를 선언하지 않아도 값을 저장하여 사용 가능하지만 변수를 선언하는 것을 권장</li>
<li>변수에 저장되는 값에 따라 변수의 자료형이 자동으로 변환</li>
<li>자바스크립트에서 문자형 리터럴은 &#39; &#39; 또는 &quot; &quot; 기호를 사용하여 표현</li>
<li>ES6(ECMAScript6)에서는 let 키워드 또는 const 키워드를 사용하여 변수 선언 가능</li>
</ul>
<pre><code class="language-js">let 변수명 = 초기값;</code></pre>
<h3 id="2-변수-선언-및-초기값-저장">2. 변수 선언 및 초기값 저장</h3>
<ul>
<li>변수에 저장된 값이 없는 경우 변수는 undefined 자료형으로 표현</li>
<li>변수에 논리값이 저장된 경우 boolean 자료형으로 표현</li>
<li>변수에 숫자값이 저장된 경우 number 자료형으로 표현</li>
<li>변수에 문자값이 저장된 경우 string 자료형으로 표현</li>
</ul>
<h3 id="3-특징">3. 특징</h3>
<ul>
<li>&#39;+&#39; 연산자를 사용하여 문자값 결합<pre><code class="language-js">let num = 10;
</code></pre>
</li>
</ul>
<p>console.log(&quot;num = &quot; + num);</p>
<p>// num = 10</p>
<pre><code>- &#39;var&#39; 또는 &#39;let&#39;으로 변수를 선언하지 않아도 값을 저장하여 변수 사용 가능
```js
num = 10;

console.log(&quot;num = &quot; + num);

// num = 10</code></pre><ul>
<li>자바스크립트 변수에는 함수 저장 가능<pre><code class="language-js">let fun = function() {
console.log(&quot;Function&quot;); 
}
console.log(typeof(fun));
</code></pre>
</li>
</ul>
<p>// function</p>
<pre><code>
- 자바스크립트 변수에는 객체 저장 가능
```js
let obj = new Object();
console.log(typeof(obj));

// object</code></pre><ul>
<li>``(백틱) 기호로 표현된 문자값에서는 $(변수) 형식으로 변수값을 제공받아 출력 가능<pre><code class="language-js">let num = 100;
</code></pre>
</li>
</ul>
<p>console.log(<code>num = $(num)</code>);</p>
<p>// num = 100</p>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[JavaScript] 자바스크립트 (JavaScript)]]></title>
            <link>https://velog.io/@yh_bang/JavaScript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-JavaScript</link>
            <guid>https://velog.io/@yh_bang/JavaScript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-JavaScript</guid>
            <pubDate>Fri, 02 Jun 2023 03:54:50 GMT</pubDate>
            <description><![CDATA[<h2 id="자바스크립트-javascript-기초">자바스크립트 (JavaScript) 기초</h2>
<h3 id="1-자바스크립트-javascript">1. 자바스크립트 (JavaScript)</h3>
<ul>
<li>JavaScript : 웹페이지에서 발생된 이벤트를 처리하기 위한 기능을 제공하는 스크립트 프로그래밍 언어
=&gt; 클라이언트에서 해석되어 실행</li>
<li>자바스크립트 표준 규약은 ES15(ECMAScript15)까지 구현되었으나 일반적으로 ES6(ECMAScript6)을 이용하여 작성</li>
<li>script 태그 : 스크립트 언어를 사용하여 프로그램을 작성하는 영역을 제공하는 태그</li>
</ul>
<h3 id="2-기초-문법">2. 기초 문법</h3>
<ul>
<li>한 줄에 작성된 코드를 하나의 명령으로 인식하여 처리
=&gt; 명령 마지막에 ; 생략 가능</li>
<li>객체 지향 프로그래밍 언어로 객체를 이용하여 프로그램 작성
=&gt; 객체의 속성(Property)과 함수(Method)를 이용하여 명령을 작성하여 실행</li>
</ul>
<h3 id="3-console-객체">3. console 객체</h3>
<ul>
<li>console 객체 : 브라우저 콘솔을 표현하기 위해 제공되는 내장객체</li>
<li>console.log(message) : 브라우저 콘솔에 메세지를 출력하는 메소드</li>
</ul>
<h3 id="4-window-객체">4. window 객체</h3>
<ul>
<li>window 객체 : 웹브라우저를 표현하기 위해 제공되는 내장객체</li>
<li>window 객체를 생략하여 메소드 호출 가능</li>
<li>window.alert(message) : 메세지창(경고창)을 생성하여 메세지를 출력하는 메소드(함수) </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[정보처리기사] 네트워크]]></title>
            <link>https://velog.io/@yh_bang/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@yh_bang/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Thu, 01 Jun 2023 02:12:28 GMT</pubDate>
            <description><![CDATA[<h2 id="1-용어-설명">1. 용어 설명</h2>
<ul>
<li>네트워크 (Network) : 두대이상의 컴퓨터에서 값을 송수신하기 위한 기능</li>
<li>인터넷 (Internet) : 현실 세계에 존재하는 모든 컴퓨터들을 연결한 네트워크 통신망</li>
<li>프로토콜 (Protocol) : 네트워크 계층 &gt; 인터넷 계층 (IP) &gt; 전송 계층 (TCP or UDP) &gt; 응용 계층 (FTP, HTTP, SMTP 등) &gt; </li>
<li>호스트 (Host) : 네크워크 기능을 사용하는 컴퓨터 (프로그램)</li>
</ul>
<hr>
<h2 id="2-inetaddress-클래스">2. InetAddress 클래스</h2>
<h3 id="1-inetaddress-클래스">1. InetAddress 클래스</h3>
<ul>
<li>InetAddress 클래스 : 네트워크 식별자(IP주소 및 호트스이름)를 저장하기 위한 클래스</li>
<li>현재 사용중인 컴퓨터는 기본적으로 [127.0.0.1]의 IP 주소가 제공되며 [localhost]라는 이름으로 호스트이름 설정</li>
<li>UnknownHostException 발생 (일반예외) : 호스트이름의 컴퓨터를 검색할 수 없는 경우 발생되는 예외</li>
</ul>
<h3 id="2-inetaddress-클래스의-메소드">2. InetAddress 클래스의 메소드</h3>
<ul>
<li>InetAddress.getLocalHost() : 현재 사용중인 컴퓨터의 네트워크 식별자가 저장된 InetAddress 객체를 반환하는 메소드</li>
<li>InetAddress.toString() : InetAddress 객체에 저장된 네트워크 식별자을 문자열로 변환하여 반환하는 메소드</li>
<li>InetAddress.getHostName() : InetAddress 객체에 저장된 네트워크 식별자에서 호스트이름을 문자열로 변환하여 반환하는 메소드</li>
<li>InetAddress.getHostAddress() : InetAddress 객체에 저장된 네트워크 식별자에서 IP 주소를 문자열로 변환하여 반환하는 메소드</li>
<li>InetAddress.getByName(String name) : 매개변수로 전달받은 호스트이름에 대한 네트워크 식별자가 저장된 InetAddress 객체를 반환하는 메소드</li>
<li>InetAddress.getAllByName(String name) : 매개변수로 전달받은 호스트이름에 대한 네트워크 식별자가 저장된 InetAddress 객체의 배열을 반환하는 메소드</li>
</ul>
<hr>
<h2 id="3-tcpip-모델-4-계층">3. TCP/IP 모델 4 계층</h2>
<h3 id="1-네트워크-계층">1. 네트워크 계층</h3>
<ul>
<li>이더넷, 라우터, 스위치허브 등</li>
<li>이더넷 (Ethernet) : 호스트에서 사용하기 위한 통신 장비</li>
<li>라우터 (Router) : 네트워크 그룹과 네트워크 그룹을 연결하기 통신 장비</li>
<li>스위치허브 (SwitchHub) : 호스트와 호스트 또는 호스트와 네트워크 그룹을 연결하기 통신 장비</li>
</ul>
<h3 id="2-인터넷-계층-ip">2. 인터넷 계층 (IP)</h3>
<ul>
<li>IP (Internet Protocol) : 인터넷을 사용하기 위한 네트워크 주소(IP 주소)에 대한 통신규약</li>
</ul>
<h3 id="3-전송-계층-tcp-or-udp">3. 전송 계층 (TCP or UDP)</h3>
<h4 id="1-tcp-transmission-control-protocol">1. TCP (Transmission Control Protocol)</h4>
<ul>
<li>TCP (Transmission Control Protocol) : 연결형 프로토콜 (네트워크 기능을 이용한 연결 후 통신 가능)</li>
<li>신뢰할 수 있는 데이터 전송 통신규약</li>
<li>소켓 통신 - 1:1 연결</li>
</ul>
<h4 id="2-udp-user-datagram-protocol">2. UDP (User Datagram Protocol)</h4>
<ul>
<li>UDP (User Datagram Protocol) : 비연결형 프로토콜 (네트워크 기능을 이용한 연결 설정 없이 통신)</li>
<li>신뢰할 수 없는 데이터 전송 통신규약</li>
<li>고속통신 - 1:Many 연결</li>
</ul>
<h3 id="4-응용-계층-ftp-http-smtp-등">4. 응용 계층 (FTP, HTTP, SMTP 등)</h3>
<ul>
<li>응용 계층 : 전송계층을 기반으로 생성된 다수의 하위 프로토콜을 사용한 응용 프로그램</li>
<li>IP 주소 : 인터넷을 사용하기 위해 컴퓨터에 부여하는 네트워크 식별자
=&gt; IPV4 : 32bit를 이용하여 IP 주소 표현 -&gt; 10진수 0<del>255 범위의 점수값 4개를 [.]으로 구분하여
=&gt; IPV6 : 128bit를 이용하여 IP 주소 표현 -&gt; 16진수 0000</del>FFFF 범위의 정수값 8개를 [:]으로 구분하여</li>
<li>공인 IP 주소와 사설 IP 주소 존재
=&gt; A Class : 10.0.0.0 ~ 10.255.255.255
=&gt; B Class : 172.16.0.0 ~ 172.31.255.255
=&gt; C Class : 192.168.0.0 ~ 192.168.255.255
위를 제외한 주소는 공인 IP 주소</li>
<li>Netmask 주소 : 네트워크 그룹(SubNet)을 표현하기 위한 주소
=&gt; A Class : 255.0.0.0 =&gt; 0.X.X.X ~ 127.X.X.X
=&gt; B Class : 255.255.0.0 =&gt; 128.X.X.X ~ 191.X.X.X
=&gt; C Class : 255.255.255.0 =&gt; 192.X.X.X ~ 232.X.X.X</li>
<li>Gateway 주소 : 라우터에 부여된 IP 주소</li>
<li>DNS 서버 : 도메인(호스트 이름)을 IP 주소로 변환하는 기능의 서비스를 제공하는 컴퓨터</li>
<li>도메인 (Domain) : 인터넷을 사용하기위해 네트워크 그룹 또는 호스트에게 부여하는 문자로 된 네트워크 식별자
=&gt; 도메인 그룹에 등록되어 있어야 호스트 사용 가능</li>
<li>포트번호 (Port Number) : 인터넷을 사용하여 데이터를 송수신하기 위한 고유의 통신 경로
=&gt; 네트워크 프로그램은 반드시 0 ~ 65535 범위의 포트 중 하나를 사용하여 데이터 전송
=&gt; 0 ~ 1023 : Well-Known Port (HTTP : 80, https : 443, SMTP : 25, POP3 : 110 등)
=&gt; 1024 ~ 49151 : 네트워크 프로그램 작성시 사용 가능한 포트
=&gt; 49152 ~ 65535 : 일시적으로 사용하는 임시 포트 (Private Port)</li>
<li>패킷 (Packet) : 인터넷에서 데이터를 전송하기 위한 단위 (Java에서는 Byte 배열로 표현 가능)</li>
<li>방화벽 (Firewall) : 네트워크를 이용한 접속 및 데이터 전송 차단 또는 허용을 위한 시스템</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CSS] 박스모델 (BoxModel)]]></title>
            <link>https://velog.io/@yh_bang/CSS-%EB%B0%95%EC%8A%A4%EB%AA%A8%EB%8D%B8-BoxModel</link>
            <guid>https://velog.io/@yh_bang/CSS-%EB%B0%95%EC%8A%A4%EB%AA%A8%EB%8D%B8-BoxModel</guid>
            <pubDate>Thu, 01 Jun 2023 01:59:14 GMT</pubDate>
            <description><![CDATA[<h2 id="1-박스모델-boxmodel">1. 박스모델 (BoxModel)</h2>
<h3 id="1-박스모델-boxmodel-1">1. 박스모델 (BoxModel)</h3>
<ul>
<li>박스모델 (BoxModel) : 문장 또는 이미지를 출력하기 위해 태그를 사용하여 생성한 사각형 모양의 영역</li>
<li>vertical-align : 세로 방향 정렬 관련 스타일 속성 (높이 변경시에만 사용)
=&gt; 속성값 : top (기본), bottom, middle 등</li>
</ul>
<h3 id="2-박스모델-종류">2. 박스모델 종류</h3>
<ul>
<li>블럭 레벨의 박스모델 : 하나의 라인을 모두 사용하는 박스모델
=&gt; div, h1~h6, ul, ol, li, p, table, tr, form 등</li>
<li>인라인 레벨의 박스모델 : 하나의 라인을 같이 사용하는 박스모델
=&gt; span, img, a, input, select, textarea, label, button 등</li>
<li>블럭 레벨의 박스모델과 인라인 레벨의 박스모델로 구분하여 브라우저에 자동 배치</li>
<li>블럭 레벨의 박스모델의 후손으로 모든 박스모델 배치 가능</li>
<li>인라인 레벨의 박스모델의 후손으로 블럭 레벨의 박스모델 배치 불가능</li>
</ul>
<h3 id="3-margin">3. margin</h3>
<ul>
<li>margin : 박스모델과 박스모델의 간격 관련 스타일 속성</li>
<li>속성값 : px (절대값 - 고정크기), % (상대값 - 유동크기)
=&gt; margin-top, margin-right, margin-bottom, margin-left<pre><code class="language-css">margin: 15px 15px 15px 15px; /* top right bottom left */
margin: 15px 15px; /* top &amp; bottom right &amp; left */
margin: 15px; /* top &amp; right &amp; bottom &amp; left */</code></pre>
</li>
</ul>
<h3 id="4-padding">4. padding</h3>
<ul>
<li>padding : 박스모델 외곽선과 콘텐츠 (Content) 영역의 간격 관련 스타일 속성</li>
<li>속성값 : px (절대값 - 고정크기), % (상대값 - 유동크기)
=&gt;padding-top, padding-right, padding-bottom, padding-left</li>
</ul>
<h3 id="5-box-shadow">5. box-shadow</h3>
<ul>
<li>box-shadow : 박스모델 그림자 관련 스타일 속성</li>
<li>속성값 : 가로 세로 범짐 확장 색상</li>
<li>inset 속성값을 사용하여 박스모델 내부로 그림자 효과 제공</li>
</ul>
<hr>
<h2 id="2-border">2. border</h2>
<h3 id="1-border-style">1. border-style</h3>
<ul>
<li>border-style : 박스모델 외곽선의 모양 관련 스타일 속성</li>
<li>속성값 : none (기본), solid (실선), dotted (점선), double (이중선) 등
=&gt; border-style-top, border-style-right, border-style-bottom, border-style-left</li>
</ul>
<h3 id="2-border-width">2. border-width</h3>
<ul>
<li>border-width : 박스모델 외곽선의 굵기 관련 스타일 속성</li>
<li>속성값 : px, 키워드 (thin, medium, thick 등)
=&gt; border-width-top, border-width-right, border-width-bottom, border-width-left</li>
</ul>
<h3 id="3-border-color">3. border-color</h3>
<ul>
<li>border-color : 박스모델 외곽선의 색 관련 스타일 속성
=&gt; border-color-top, border-color-right, border-color-bottom, border-color-left</li>
</ul>
<h3 id="4-border-radius">4. border-radius</h3>
<ul>
<li>border-radius : 박스모델 외곽선 모서리 관련 스타일 속성</li>
<li>속성값 : px, %
=&gt; 박스모델 외곽선 모서리에 원을 그려 둥굴게 표현</li>
</ul>
<h3 id="5-border-collapse">5. border-collapse</h3>
<ul>
<li>border-collapse : 박스모델의 외곽선 중첩 관련 스타일 속성</li>
<li>속성값 : separate (중첩 외곽선 구분), collapse (중첩 외곽선 병합)</li>
</ul>
<hr>
<h2 id="3-display">3. display</h2>
<h3 id="1-display">1. display</h3>
<ul>
<li>display : 박스모델 배치 관련 스타일 속성</li>
<li>속성값 : none (미배치), block (블럭 레벨 배치), inline (인라인 레벨 배치, 폭과 높이 지정 불가능), inline-block (인라인 레벨 배치, 폭과 높이 지정 가능), table, table-row, table-cell 등</li>
<li>블럭 레벨의 박스모델은 하나의 라인에 박스모델이 하나만 출력</li>
<li>인라인 레벨의 박스모델은 하나의 라인에 박스모델이 여러개 출력</li>
</ul>
<h3 id="2-float">2. float</h3>
<ul>
<li>float : 컨테이너 역활의 박스모델에 아이템 역할의 박스모델을 왼쪽 또는 오른쪽 위치부터 차례대로 배치 하기 위한 스타일 속성
=&gt; float 스타일이 적용된 박스모델 다음에 위치한 박스모델에도 스타일 적용</li>
<li>속성값 : none (기본), left, right</li>
<li>clear : float 스타일로 설정된 배치 관련 스타일을 초기화 처리하기 위한 스타일 속성
=&gt; 속성값 : left, rigth, both</li>
</ul>
<h3 id="3-flex">3. flex</h3>
<ul>
<li>컨테이너 역할의 박스모델에 display 속성값을 flex로 설정하는 경우 Flex Containter로 처리되어 아이템 역할의 박스모델을 한쪽 방향의 일정한 간격으로 자동 배치</li>
<li>flex-direction : Flex Containter에서 Flex Item를 배치하는 방향을 설정하는 스타일 속성
=&gt; 속성값 : row (기본), column, row-reverse, column-reverse</li>
<li>flex-wrap : Flex Containter에서 Flex Item를 배치에 대한 줄바꿈 처리에 대한 스타일 속성
=&gt; 속성값 : nowrap (기본), wrap (아래 줄바꿈 처리), wrap-reverse (위 줄바꿈 처리)</li>
<li>flex-flow : flex-direction과 flex-wrap을 동시에 설정하는 스타일 속성</li>
<li>justify-content : Flex Containter에서 Flex Item을 정렬하기 위한 스타일 속성
=&gt; 속성값 : flex-start (기본), flex-end, center, space-between, space-around, space-evenly</li>
</ul>
<h3 id="4-position">4. position</h3>
<ul>
<li>position : 박스모델 배치 관련 스타일 속성</li>
<li>속성값 : static (기본)
=&gt; 박스모델 자동 배치 (박스모델의 중첩 배치 불가능)</li>
<li>속성값 : relative
=&gt; 박스모델 자동 배치 후 top 속성과 left 속성을 사용하여 박스모델을 이동하여 배치 (박스모델의 중첩 배치 가능)</li>
<li>속성값 : absolute
=&gt; 박스모델 배치 전 top 속성과 left 속성을 사용하여 박스모델을 이동하여 배치 (박스모델의 중첩 배치 가능)</li>
<li>속성값 : fixed
=&gt; absolute 속성값 동일 (스크롤 미제공)</li>
</ul>
<h3 id="5-배치-순서">5. 배치 순서</h3>
<ul>
<li>z-index : 박스모델 배치 순서 관련 스타일 속성</li>
<li>속성값 : 정수값 (정수값이 큰 박스모델을 위에 배치)</li>
<li>박스모델이 중첩될 경우 박스모델이 배치되는 순서에 의해 중첩 배치</li>
</ul>
<hr>
<h2 id="4-animation">4. animation</h2>
<h3 id="1-transition">1. transition</h3>
<ul>
<li>트렌지션 효과(Transition Effect) : 시간 경과에 따른 박스모델의 스타일 변화 기능 제공</li>
<li>transition-property : 트렌지션 효과를 적용할 스타일을 속성값으로 설정</li>
<li>transition-duration : 트렌지션 효과의 제공 시간을 속성값으로 설정</li>
<li>transition-timing-function : 트렌지션 효과의 제공 속도를 속성값으로 설정
=&gt; 속성값 : linear (기본), ease-in, ease-out, ease-in-out, cubic-bezier 함수 등</li>
<li>transition-delay : 트렌지션 효과의 지연 시간을 속성값으로 설정</li>
</ul>
<h3 id="2-animation">2. animation</h3>
<ul>
<li>animation-name : 박스모델에 적용될 애니메이션의 이름을 속성값으로 설정</li>
<li>animation-duration : 박스모델에 적용될 애니메이션의 지속시간을 속성값으로 설정</li>
<li>animation-iteration-count : 박스모델에 적용될 애니메이션의 반복 횟수를 속성값으로 설정
=&gt; 속성값 : 정수, infinite (무제한)</li>
<li>animation-direction : 박스모델에 적용될 애니메이션의 진행 방향을 속성값으로 설정
=&gt; 속성값 : normal (정방향), reverse (역방향), alternate (정방향 &gt; 역방향), alternate-reverse (역방향 &gt; 정방향)</li>
<li>@keyframes : 애니메이션의 이름과 상태에 따른 스타일 변화를 정의하기 위한 시스템 속성
=&gt; 상태 (백분율 또는 키워드)에 따른 CSS 스타일을 정의하여 애니메이션 효과 제공
=&gt; 시작상태 (from)와 종료상태 (to)를 포함하여 2개 이상의 상태 작성</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CSS] CSS 배경 (background)]]></title>
            <link>https://velog.io/@yh_bang/CSS-CSS-%EB%B0%B0%EA%B2%BD-background</link>
            <guid>https://velog.io/@yh_bang/CSS-CSS-%EB%B0%B0%EA%B2%BD-background</guid>
            <pubDate>Thu, 01 Jun 2023 01:16:25 GMT</pubDate>
            <description><![CDATA[<h2 id="css-배경-background">CSS 배경 (background)</h2>
<h3 id="1-background-color">1. background-color</h3>
<ul>
<li>background-color : 배경색 관련 스타일 속성</li>
</ul>
<h3 id="2-background-image">2. background-image</h3>
<ul>
<li>background-image : 배경 이미지 관련 스타일 속성</li>
<li>속성값 : url 함수를 사용하여 이미지 파일의 URL 주소 설정</li>
<li>배경 이미지가 박스모델의 폭 또는 높이보다 작은 경우 가로 방향 또는 세로 방향으로 이미지 반복 출력</li>
<li>배경 이미지가 박스모델의 폭 또는 높이보다 큰 경우 박스모델을 벗어난 이미지는 잘라내어 출력</li>
<li>박스모델의 폭 또는 높이보다 작은 배경 이미지를 반복 출력하지 않은 경우 배경 이미지는 박스모델의 왼쪽 상단을 기준으로 출력</li>
</ul>
<h3 id="3-background-repeat">3. background-repeat</h3>
<ul>
<li>background-repeat : 배경 이미지의 반복 관련 스타일 속성</li>
<li>속성값 : repeat (기본), repeat-x, repeat-y, no-repeat</li>
</ul>
<h3 id="4-background-position">4. background-position</h3>
<ul>
<li>background-position : 배경 이미지의 출력 위치 관련 스타일 속성</li>
<li>속성값 : px, %, 키워드 (left, right, top, bottom, center)</li>
<li>기본값 : left top</li>
<li>배경 이미지의 출력 위치를 왼쪽 상단을 기준으로 가로와 세로 방향으로 이동</li>
</ul>
<h3 id="5-background-attachment">5. background-attachment</h3>
<ul>
<li>background-attachment : 배경 이미지 고정 관련 스타일 속성</li>
<li>속성값 : scroll (기본), fixed (브라우저 고정)</li>
</ul>
<h3 id="6-background-size">6. background-size</h3>
<ul>
<li><p>background-size : 배경 이미지의 크기 관련 스타일 속성</p>
</li>
<li><p>속성값 : auto (기본)
=&gt; 배경 이미지를 그대로 출력
=&gt; 여백 발생 또는 이미지 잘림</p>
<pre><code class="language-css">.bgsize1 {
  background-size: auto;
}</code></pre>
</li>
<li><p>속성값 : 배경 이미지의 폭을 px 단위로 변경
=&gt; 이미지 비율에 맞게 높이 자동 변경</p>
<pre><code class="language-css">.bgsize2 {
  background-size: 300px;
}</code></pre>
</li>
<li><p>속성값 : 배경 이미지의 폭과 높이를 px 단위로 변경</p>
<pre><code class="language-css">.bgsize3 {
  background-size: 500px 350px;
}</code></pre>
</li>
<li><p>속성값 : 배경 이미지의 폭을 % 단위로 변경
=&gt; 이미지 비율에 맞게 높이 자동 변경</p>
<pre><code class="language-css">.bgsize4 {
  background-size: 90%;
}</code></pre>
</li>
<li><p>속성값 : 배경 이미지의 폭과 높이를 % 단위로 변경</p>
<pre><code class="language-css">.bgsize5 {
  background-size: 100% 100%;
}</code></pre>
</li>
<li><p>속성값 : contain
=&gt; 배경 이미지의 폭과 높이 중 차이가 작은 부분을 100%로 설정
=&gt; 차이가 큰 부분은 여백 발생</p>
<pre><code class="language-css">.bgsize6 {
  background-size: contain;
}</code></pre>
</li>
<li><p>속성값 : cover
=&gt; 배경 이미지의 폭과 높이 중 차이가 큰 부분을 100%로 설정
=&gt; 차이가 작은 부분은 잘림 발생</p>
<pre><code class="language-css">.bgsize7 {
  background-size: cover;
}</code></pre>
</li>
</ul>
<h3 id="7-background-clip">7. background-clip</h3>
<ul>
<li>background-clip : 배경 이미지의 적용범위 관련 스타일 속성</li>
<li>속성값 : border-box (기본, 외곽선 바깥쪽), padding-box (외곽선 안쪽), content-box (내용 출력 영역)</li>
</ul>
<h3 id="8-linear-gradient">8. linear-gradient</h3>
<ul>
<li>background : 배경 관련 모든 스타일 속성값 설정</li>
<li>background 속성값으로 linear-gradient 함수 사용</li>
<li>linear-gradient : 엘리먼트에 선형 그라데이션 효과를 제공하는 함수<pre><code class="language-css">linear-gradient(진행방향, 시작색, 종료색)</code></pre>
</li>
<li>진행방향 : 각도 (deg), 키워드 (to left, to right, to top, to bottom)</li>
<li>시작색 뒤에 중간색 표현 가능 (중간색에 백분율 사용)
=&gt; 중간색에 백분율이 생략된 경우 50%로 자동 처리</li>
</ul>
<h3 id="9-radial-gradient">9. radial-gradient</h3>
<ul>
<li>background 속성값으로 radial-gradient 함수 사용</li>
<li>radial-gradient : 엘리먼트에 원형 그라데이션 효과를 제공하는 함수<pre><code class="language-css">radial-gradient(모양, 시작색, 종료색)</code></pre>
</li>
<li>모양 : circle, ellipse
=&gt; 원의 중심위치는 박스모델의 가운데로 설정
=&gt; 원의 중심위치 변경 가능 (특정 브라우저에서만 가능)</li>
<li>CSS 표준규약에 정의되어 있지 않고 특정 웹브라우저에서만 사용 가능한 스타일 속성값 존재
=&gt; -webkit- : 웹킷 방식의 웹브라우저 (크롬, 사파리, 엣지 등)
=&gt; -moz- : 개코 방식의 웹브라우저 (파이어폭스, 모질라 등)
=&gt; -o- : 오페라 방식의 웹브라우저 (오페라 등)
=&gt; -ms- : 트라이던트 방식의 웹브라우저 (IE 등)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CSS] CSS 기초]]></title>
            <link>https://velog.io/@yh_bang/CSS-CSS-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@yh_bang/CSS-CSS-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Thu, 01 Jun 2023 00:38:29 GMT</pubDate>
            <description><![CDATA[<h2 id="1-css-기초">1. CSS 기초</h2>
<h3 id="1-css-cascading-style-sheets">1. CSS (Cascading Style Sheets)</h3>
<ul>
<li>CSS (Cascading Style Sheets) : HTML 문서에 모양과 서식을 제공하기 위한 스타일 시트 언어</li>
<li>웹문서 작성에 대한 생산성 증가 및 유지보수의 효율성 증가</li>
<li>HTML 태그를 사용하여 웹문서를 구성하고 CSS를 사용하여 웹문서에 스타일 적용</li>
<li>사이트 구현시 모든 페이지에 일관성 있는 스타일 적용</li>
<li>사용법<pre><code class="language-css">Selector[, Selector, ...][:paduo-class] {
  Property: Value [Value Value ...];
  Property: Value [Value Value ...];
                 ፧
}</code></pre>
</li>
</ul>
<h3 id="2-선택자-selector">2. 선택자 (Selector)</h3>
<ul>
<li>선택자 (Selector) : 태그(박스모델 - 엘리먼트)를 선택하기 위한 표현식</li>
<li>기본 선택자 : 태그 선택자, 클래스 선택자, 아이디 선택자</li>
<li>* (전체 선택자) : 모든 태그를 엘리먼트로 선택</li>
<li>선택자는 &#39;,&#39;기호를 사용하여 여러개 나열하여 엘리먼트로 선택 가능</li>
<li>태그 선택자 : 태그의 이름을 이용하여 엘리먼트 선택 (태그의 이름이 같은 다수의 엘리먼트에 동일한 스타일 적용)<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;CSS&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
h2 {
  color: green;
}
</code></pre>
</li>
</ul>
<p>p {
    color: blue;
}
</style></p>
</head>
<body>
  <h2>태그 선택자</h2>
  <p>브라우저에 출력될 아주 중요한 내용입니다.</p>
  <p>브라우저에 출력될 아주 중요한 내용입니다.</p>
  <p>브라우저에 출력될 아주 중요한 내용입니다.</p>
</body>
</html>
```
- 클래스 선택자 : 태그에 설정된 class 속성값을 이용하여 엘리먼트로 선택
=> 태그 선택자와 구분하기 위해 앞에 .을 붙여 표현
=> 태그에 설정된 class 속성값은 공백을 이용하여 다수의 속성값 설정 가능
=> 동일한 class 속성값을 사용하는 다수의 엘리먼트에 동일한 스타일 적용

<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;CSS&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
.text1 {
    color: maroon;
}

.text2 {
    color: pink;
}

.text3 {
    text-align: center;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;p class=&quot;text1&quot;&gt;브라우저에 출력될 아주 중요한 내용입니다.&lt;/p&gt;
  &lt;p class=&quot;text1 text3&quot;&gt;브라우저에 출력될 아주 중요한 내용입니다.&lt;/p&gt;
  &lt;p class=&quot;text2&quot;&gt;브라우저에 출력될 아주 중요한 내용입니다.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<ul>
<li>아이디 선택자 : 태그에 설정된 id 속성값을 이용하여 엘리먼트로 선택
=&gt; 태그 선택자와 구분하기 위해 앞에 #을 붙여 표현<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;CSS&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
#text4 {
  color: olive;
}
</code></pre>
</li>
</ul>
<p>#text5, #text6 {
    color: silver;
}
</style></p>
</head>
<body>
  <p id="text4">브라우저에 출력될 아주 중요한 내용입니다.</p>
  <p id="text5">브라우저에 출력될 아주 중요한 내용입니다.</p>
  <p id="text6">브라우저에 출력될 아주 중요한 내용입니다.</p>
</body>
</html>

<pre><code>
### 3. 파생 선택자
- 파생 선택자 : 후손 선택자, 자식 선택자, 필터 선택자, 형제 선택자
- 후손 선택자 : 부모 엘리먼트를 기준으로 모든 깊이의 태그를 엘리먼트로 선택
```css
부모선택자 후손선택자 {

}</code></pre><ul>
<li>자식 선택자 : 부모 엘리먼트를 기준으로 첫번째 깊이릐 태그를 자식 엘리먼트로 선택<pre><code class="language-css">부모선택자 &gt; 자식선택자 {
</code></pre>
</li>
</ul>
<p>}</p>
<pre><code>- 필터 선택자 : 선택된 다수의 엘리먼트 중 특정 태그를 이용하여 엘리먼트로 선택
=&gt; 필터 선택자는 클래스 선택자를 사용하여 구현
```css
선택자.클래스선택자 {

}</code></pre><ul>
<li>형제 선택자 : 선택자에 의해 선택된 엘리먼트 다음에 위치한 같은 깊이의 태그를 이용하여 형제 엘리먼트로 선택<pre><code class="language-css">선택자 ~ 선택자 {
</code></pre>
</li>
</ul>
<p>}</p>
<pre><code>
### 4. 속성 선택자
- 속성 선택자 : 태그의 속성이나 속성값을 이용하여 엘리먼트로 선택
- 해당 태그 속성이 존재하는 태그를 엘리먼트로 선택
```css
선택자[속성] {

}</code></pre><ul>
<li>태그 속성값이 비교값과 같은 태그를 엘리먼트로 선택<pre><code class="language-css">선택자[속성=&#39;비교값&#39;] {
</code></pre>
</li>
</ul>
<p>}</p>
<pre><code>- 태그 속성값에 비교값이 포함된 태그를 엘리먼트로 선택
```css
선택자[속성*=&#39;비교값&#39;] {

}</code></pre><ul>
<li>태그 속성값에 비교값이 하나의 단어로 포함된 태그를 엘리먼트로 선택<pre><code class="language-css">선택자[속성~=&#39;비교값&#39;] {
</code></pre>
</li>
</ul>
<p>}</p>
<pre><code>- 태그 속성값에 비교값으로 시작되는 태그를 엘리먼트로 선택
```css
선택자[속성^=&#39;비교값&#39;] {

}</code></pre><ul>
<li>태그 속성값에 비교값으로 종료되는 태그를 엘리먼트로 선택<pre><code class="language-css">선택자[속성$=&#39;비교값&#39;] {
</code></pre>
</li>
</ul>
<p>}</p>
<pre><code>
### 5. 가상 선택자
- 가상 선택자 : 엘리먼트의 상태에 따라 다른 스타일을 적용하기 위한 선택자
- 선택자로 선택된 엘리먼트에 따라 사용 가능한 상태 존재
```css
선택자:상태 {

}
</code></pre><hr>
<h2 id="2-css-스타일의-단계적-적용과-상속">2. CSS 스타일의 단계적 적용과 상속</h2>
<h3 id="상속">상속</h3>
<ul>
<li>부모 엘리먼트에 적용된 스타일은 자식 엘리먼트에 상속되어 적용
=&gt; 자식 엘리먼트에 상속되지 않는 스타일 존재</li>
<li>스타일은 선언 순서에 의해 단계적 적용 (오버라이드)</li>
<li>!important : 단계적 적용을 무시하고 최우선적으로 스타일을 적용하기 위한 속성값</li>
</ul>
<hr>
<h2 id="3-글꼴-및-글자관련-스타일-속성">3. 글꼴 및 글자관련 스타일 속성</h2>
<h3 id="1-글꼴">1. 글꼴</h3>
<ul>
<li>웹폰트 (WebFont) : 웹서버에 저장된 글꼴 파일을 클라이언트에게 제공하여 사용하는 기능</li>
<li>@font-face : 글꼴 파일을 클라이언트에게 제공하기 위한 시스템 속성</li>
<li>font-family : 글꼴 파일을 구분하기 위한 식별자를 속성값으로 설정
=&gt; 글꼴 나열 가능하며 순차 적용
=&gt; font-family 속성이 생략되거나 속성값으로 설정된 글꼴이 없는 경우 클라이언트 플랫폼(OS)의 기본 글꼴 사용</li>
</ul>
<h3 id="2-글자">2. 글자</h3>
<ul>
<li>font-size : 글자 크기에 대한 스타일 속성 (기본크기 16px)
=&gt; 속성값 (단위) : px, pt, em, %, 키워드 (smal, medium, large 등)</li>
<li>font-style : 글자의 기울기에 대한 스타일 속성
=&gt; normal, italic</li>
<li>font-variant : 알파벳에 대한 스타일 속성
=&gt; normal, small-caps (소문자를 작은 크기의 대문자로 변환)</li>
<li>font-weight : 글자 굵기에 대한 스타일 속성
=&gt; 100 ~ 900 (기본 : 400)
=&gt; normal, bold</li>
<li>font : 글자 관련 모든 스타일 속성값을 설정 가능
=&gt; 글꼴을 반드시 설정</li>
<li>letter-spacing : 문자 간격을 설정하기 위한 스타일 속성</li>
<li>word-spacing : 단어 간격을 설정하기 위한 스타일 속성</li>
<li>line-height : 줄간격을 설정하기 위한 스타일 속성</li>
</ul>
<h3 id="3-direction">3. direction</h3>
<ul>
<li>direction : 문장 쓰기 방향에 대한 스타일 속성
=&gt; 속성값 : ltr, rtl</li>
<li>ltr : 왼쪽에서 오른쪽으로</li>
<li>rtl : 오른쪽에서 왼쪽으로</li>
</ul>
<h3 id="4-align">4. align</h3>
<ul>
<li>text-align : 문장 정렬에 대한 스타일 속성
=&gt; 속성값 : left, right, center, justify</li>
</ul>
<h3 id="5-text-shadow">5. text-shadow</h3>
<ul>
<li>text-shadow : 문자의 그림자 효과에 대한 스타일 속성
=&gt; 속성값 : 가로 세로 번짐 색상</li>
</ul>
<h3 id="6-overflow">6. overflow</h3>
<ul>
<li>overflow : 박스모델의 폭을 벗어난 문장에 대한 처리 관련 스타일 속성
=&gt; 속성값 : visible, hidden, scroll</li>
<li>visible : 출력 처리</li>
<li>hidden : 숨김 처리</li>
<li>scroll : 스크롤 처리</li>
</ul>
<h3 id="7-text-overflow">7. text-overflow</h3>
<ul>
<li>text-overflow : 숨겨진 문장에 대한 처리 관련 스타일 속성
=&gt; 속성값 : clip, ellipsis</li>
<li>clip : 잘라내기</li>
<li>ellipsis : &#39;...&#39; 기호를 사용하여 출력</li>
</ul>
<h3 id="8-text-decoration">8. text-decoration</h3>
<ul>
<li>text-decoration : 문장에 대한 선 관련 스타일 속성
=&gt; 속성값 : none, underline, line-through, overline</li>
<li>none : 선 없음</li>
<li>underline : 아랫줄</li>
<li>line-through : 가운뎃줄</li>
<li>overline : 윗줄</li>
</ul>
<h3 id="9-text-indent">9. text-indent</h3>
<ul>
<li>text-indent : 문장 들여쓰기 관련 스타일 속성</li>
</ul>
<h3 id="10-text-transform">10. text-transform</h3>
<ul>
<li>text-transform : 문장 변형 관련 스타일 속성
=&gt; none, uppercase, lowercase, capitalize</li>
<li>none : 기본</li>
<li>uppercase : 대문자로 변형</li>
<li>lowercase : 소문자로 변형</li>
<li>capitalize : 각 단어의 첫 글자만 대문자 변형</li>
</ul>
<h3 id="11-color">11. color</h3>
<ul>
<li>color : 글자색 관련 스타일 속성
=&gt; 속성값 : 색 관련 키워드, 색에 대한 16진수 표기법, rgb 함수, hsl 함수, rgba 함수, hsla 함수</li>
</ul>
<hr>
<h2 id="4-공백">4. 공백</h2>
<h3 id="white-space">white-space</h3>
<ul>
<li>white-space : 공백 처리에 대한 스타일 속성
=&gt; 박스모델의 폭보다 큰 태그내용 처리에 대한 스타일 속성
=&gt; 속성값 : normal, pre, nowrap, pre-wrap</li>
<li>normal (pre-line) : 다수의 공백을 하나의 공백으로 처리하여 출력하고 박스모델보다 큰 태그 내용은 자동 줄바꿈 처리하여 출력</li>
<li>pre : 다수의 공백을 다수의 공백으로 처리하여 출력하고 박스모델보다 큰 태그 내용은 자동 줄바꿈 없이 처리하여 출력</li>
<li>nowrap : 다수의 공백을 하나의 공백으로 처리하여 출력하고 박스모델보다 큰 태그 내용은 자동 줄바꿈 없이 처리하여 출력</li>
<li>pre-wrap : 다수의 공백을 다수의 공백으로 처리하여 출력하고 박스모델보다 큰 태그 내용은 자동 줄바꿈 처리하여 출력</li>
</ul>
<hr>
<h2 id="5-목록">5. 목록</h2>
<h3 id="1-list-style-type-ul">1. list-style-type (ul)</h3>
<ul>
<li>list-style-type : 목록에 대한 불릿 또는 순서값 관련 스타일 속성
=&gt; 속성값 : none, disc, circle, square</li>
<li>none : 불릿 또는 순서값 미제공</li>
<li>disc : 불릿 제공</li>
<li>circle : 비어있는 원 제공</li>
<li>square : 사각형 제공</li>
</ul>
<h3 id="2-list-style-type-ol">2. list-style-type (ol)</h3>
<ul>
<li>속성값 : decimal, lower-alpha, upper-alpha, lower-roman, upper-roman</li>
<li>decimal : 순서값 제공</li>
<li>lower-alpha : 알파벳 소문자 제공</li>
<li>upper-alpha : 알파벳 대문자 제공</li>
<li>lower-roman : 로마숫자 소문자 제공</li>
<li>upper-roman : 로마숫자 대문자 제공</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] HTML 기초]]></title>
            <link>https://velog.io/@yh_bang/HTML-HTML-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@yh_bang/HTML-HTML-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Fri, 26 May 2023 03:37:24 GMT</pubDate>
            <description><![CDATA[<h2 id="1-html-기초">1. HTML 기초</h2>
<h3 id="1-html-hyper-text-markup-language">1. HTML (Hyper Text MarkUp Language)</h3>
<ul>
<li>HTML (Hyper Text MarkUp Language) : 태그를 사용하여 웹문서를 구조적으로 표현하기 위한 언어</li>
<li>브라우저 엔진에 의해 해석되어 실행되는 언어</li>
<li>태그를 사용하여 웹문서 작성</li>
<li>시작태그와 종료태그가 하나의 짝으로 구성
=&gt; HTML 태그에는 독립태그 존재</li>
<li>시작태그와 종료태그 사이에 하위태그 또는 태그내용 표현</li>
<li>시작태그에는 속성과 속성값을 사용하여 태그를 다양하게 표현</li>
<li>크기 또는 위치를 표현하는 단위 : px (기본, 절대값), % (백분율, 상대값)</li>
<li>id 속성 : 태그를 구분하기 위한 식별자를 속성값으로 설정</li>
<li>name 속성 : 태그의 이름을 속성값으로 설정</li>
</ul>
<h3 id="2-최상위-태그">2. 최상위 태그</h3>
<ul>
<li>&lt;!DOCTYPE html&gt; : 웹문서의 종류 및 버전을 표현</li>
<li>&lt;html&gt; : HTML 문서를 작성하기 위해 사용되는 최상위 태그</li>
<li>하위 태그 : head, body</li>
</ul>
<h3 id="3-head-태그">3. head 태그</h3>
<ul>
<li>head 태그 : HTML 문서에 대한 정보를 제공하기 위한 태그</li>
<li>하위태그 : meta, title. style, script, link</li>
</ul>
<h3 id="4-body-태그">4. body 태그</h3>
<ul>
<li>body 태그 : 웹문서의 내용을 출력하기 위한 영역을 제공하기 위한 태그</li>
<li>하위태그 : header, navi, section, article, aside, footer, h1, p, img, form 등</li>
<li>body 태그의 하위태그를 박스모델 태그로 표현할 수 있으며 블럭 레벨 태그와 인라인 레벨 태그로 구분</li>
<li>블럭 레벨 태그 (Block Level Tag) : 하나의 태그가 전체 라인을 모두 사용하는 태그
=&gt; div, h1, p, ol, ul 등</li>
<li>인라인 레벨 태그 (Inline Level Tag) : 하나의 태그가 라인의 일부분을 사용하는 태그
=&gt; span, img, input, select 등</li>
<li>인라인 레벨의 하위태그로 블럭 레벨의 태그 사용 불가능</li>
</ul>
<hr>
<h2 id="2-head-태그">2. head 태그</h2>
<h3 id="1-meta-태그">1. meta 태그</h3>
<ul>
<li>meta 태그 : HTML 문서에 대한 부가적인 정보(Meta Data)를 태그 속성과 속성값으로 제공하는 태그</li>
<li>charset 속성 : HTML 문서의 문자형태(CharacterSet - Encoding)를 속성값으로 제공</li>
<li>브라우저가 HTML 문서를 해석하여 실행하기 위한 문자의 인코딩 방식을 제공</li>
<li>기본 속성값 : ISO-8859-1 (서유럽어)</li>
<li>한글 관련 캐릭터 셋 : euc-kr (완성형), utf-8 (조합형)</li>
</ul>
<h3 id="2-title-태그">2. title 태그</h3>
<ul>
<li>title 태그 : HTML 문서의 제목을 설정하기 위한 태그</li>
</ul>
<h3 id="3-style-태그">3. style 태그</h3>
<ul>
<li>style 태그 : HTML 문서에 CSS를 사용하여 스타일 시트를 적용하기 위한 태그</li>
</ul>
<h3 id="4-link-태그">4. link 태그</h3>
<ul>
<li>link 태그 : 외부파일을 불러와 내용을 연결하는 기능을 제공하는 태그</li>
<li>href 속성 : HTML 문서에 연결할 외부파일의 URL 주소를 속성값으로 설정</li>
<li>type 속성 : HTML 문서에 연결할 외부파일의 파일형태(MineType)를 속성값으로 설정</li>
<li>rel 속성 : 파일 연결 관계를 속성값으로 설정</li>
</ul>
<hr>
<h2 id="3-body-태그-블럭-레벨-태그">3. body 태그 (블럭 레벨 태그)</h2>
<h3 id="1-hn-태그">1. hn 태그</h3>
<ul>
<li>hn 태그 : 태그내용을 문단의 제목으로 출력하기 위한 태그</li>
<li>n : 1 ~ 6의 제목 크기</li>
<li>align 속성 : 태그내용을 정렬하기 위한 속성 (left, right, center, justify)</li>
<li>title 속성 : 태그의 툴팁 기능을 이용하여 설명문을 제공하는 속성</li>
</ul>
<h3 id="2-hr-태그">2. hr 태그</h3>
<ul>
<li>hr 태그 : 수평선을 출력하기 위한 태그</li>
<li>width 속성 : 태그의 폭을 변경하기 위한 속성</li>
</ul>
<h3 id="3-p-태그">3. p 태그</h3>
<ul>
<li>p 태그 : 태그내용을 문단으로 출력하기 위한 태그</li>
<li>태그내용이 박스모델의 폭을 벗어날 경우 자동으로 줄바꿈 처리</li>
<li>HTML 문서에서 엔터로 줄바꿈 처리 불가능하며 다수의 공백을 하나의 공백으로 취급</li>
</ul>
<h3 id="4-br-태그">4. br 태그</h3>
<ul>
<li>br 태그 : 줄바꿈 처리하기 위한 태그</li>
</ul>
<h3 id="5-div-태그">5. div 태그</h3>
<ul>
<li>div 태그 : 범위를 설정하기 위한 태그</li>
</ul>
<h3 id="6-li-태그">6. li 태그</h3>
<ul>
<li>li 태그 : 목록을 출력하기 위한 태그</li>
<li>ol 또는 ul 태그의 하위태그로 사용</li>
<li>ul 태그 : 목록에 불릿(기호)을 제공하여 출력하기 위한 태그</li>
<li>ol 태그 : 목록에 순값을 제공하여 출력하기 위한 태그</li>
</ul>
<h3 id="7-dl-태그">7. dl 태그</h3>
<ul>
<li>dl 태그 : 정의목록(Definition List)을 출력하기 위한 태그</li>
<li>dt 또는 dd 태그를 하위태그로 사용</li>
<li>dt 태그 : 정의 용어(Definition Term)를 출력하기 위한 태그</li>
<li>dd 태그 : 정의 설명(Definition Description)을 출력하기 위한 태그</li>
</ul>
<h3 id="8-table-태그">8. table 태그</h3>
<ul>
<li>table 태그 : 표(Table)를 출력하기 위한 태그</li>
<li>border 속성 : 0 (외곽선 미출력) or 1 (외곽선 출력)을 속성값으로 설정</li>
<li>summary 속성 : 표에 대한 설명을 속성값으로 설정</li>
<li>rowspan 속성 : 병합할 행의 개수를 속성값으로 설정</li>
<li>상위태그에 적용된 디자인 속성을 하위태그로 상속되어 적용</li>
<li>모든 tr 태그의 셀의 개수는 같도록 설정하는 것을 권장</li>
<li>tr 태그를 하위태그로 사용</li>
<li>tr 태그 : 행(Row)를 출력하기 위한 태그
=&gt; th 또는 td 태그를 하위태그로 사용
=&gt; th or td 태그 : 열(Column)을 출력하기 위한 태그</li>
</ul>
<h3 id="9-audio-태그">9. audio 태그</h3>
<ul>
<li>audio 태그 : 소리파일을 제공받아 재생하는 태그</li>
<li>autoplay 속성 : 자동재생 기능을 제공하는 속성
=&gt; 속성값 생략 가능</li>
<li>controls 속성 : 재생 관련 제어판을 제공하는 속성</li>
<li>loop 속성 : 반복재생 관련 기능을 제공하는 속성</li>
<li>preload 속성 : none, metadatam auto 중 하나를 속성값으로 설정</li>
</ul>
<h3 id="10-video-태그">10. video 태그</h3>
<ul>
<li>video 태그 : 동영상 파일을 제공받아 재생하는 태그</li>
<li>동영상 파일 : mp4, ogg, vebm 파일 등</li>
</ul>
<h3 id="11-form-태그">11. form 태그</h3>
<ul>
<li>form 태그 : 웹프로그램을 요청하여 사용자로부터 입력값을 전달하는 태그</li>
<li>하위태그로 반드시 사용자로부터 값을 입력받기 위한 입력태그와 제출 이벤트(Submit Event)를 발생하는 태그를 작성</li>
<li>Submit Event (제출 이벤트) : form 태그를 사용하여 웹프로그램을 요청하기 위한 이벤트
=&gt; 제출 이벤트가 발생되면 form 태그가 동작되어 브라우저의 주소창이 action 속성값으로 설정된 URL 주소로 변경되어 웹프로그램을 요청하며 입력태그에 입력된 값을 전달하여 실행 결과를 제공받아 출력</li>
<li>action 속성 : form 태그를 사용하여 요청할 웹프로그램의 URL 주소를 속성값으로 설정</li>
<li>method 속성 : 웹프로그램을 요청하는 요청방식(GET, POST)을 속성값으로 설정</li>
<li>GET 방식 : 사용자 입력값을 URL 주소의 질의문자열(QueryString)으로 전달</li>
<li>POST 방식 : 사용자 입력값을 리퀘스트 메시지의 몸체부에 저장하여 전달</li>
</ul>
<h3 id="12-fieldset-태그">12. fieldset 태그</h3>
<ul>
<li>fieldset 태그 : 입력태그의 영역을 구분하기 위한 태그</li>
<li>하위태그 : legend, input, textarea, select 등</li>
<li>legend 태그 : 입력태그의 영역에 대한 제목을 제공하기 위한 태그</li>
</ul>
<hr>
<h2 id="4-body-태그-인라인-레벨-태그">4. body 태그 (인라인 레벨 태그)</h2>
<h3 id="1-span-태그">1. span 태그</h3>
<ul>
<li>span 태그 : 범위를 설정하기 위한 태그</li>
</ul>
<h3 id="2-img-태그">2. img 태그</h3>
<ul>
<li>img 태그 : 이미지 파일을 제공받아 출력하기 위한 태그</li>
<li>웹에서 사용하는 이미지 파일 : GIF 파일, PNG 파일, JPEG 파일 등</li>
<li>alt 속성 : 출력 이미지에 대한 설명을 속성값으로 설정</li>
<li>src 속성 : 이미지 파일의 경로(URL 주소)를 속성값으로 설정</li>
<li>이미지의 폭을 변경하면 높이는 자동 변경</li>
</ul>
<h3 id="3-a-태그">3. a 태그</h3>
<ul>
<li>a 태그 : 클릭 이벤트로 다른 웹문서를 요청하기 위한 태그</li>
<li>하이퍼링크 기능을 제공하는 태그</li>
<li>href 속성 : 클릭 이벤트가 발생될 경우 요청한 웹문서의URL 주소를 속성값으로 설정
=&gt; 태그내용을 클릭한 경우 클라이언트 브라우저의 주소청의 URL 주소가 href 속성값으로 변경되고 URL 주소의 웹문서의 결과를 응답받아 출력</li>
<li>질의문자열 (QueryString) : 요청 URL 주소 뒤에 ? 기호를 붙이고 [이름 = 값 &amp; 이름 = 값 &amp;...] 형식으로 요청 웹프로그램에게 값 전달 가능</li>
<li>target 속성 : _self (현재 브라우저), _blank (새로운 브라우저), _top (최상위 브라우저)ㅡ _parent (부모 브라우저), _child (자식 브라우저), 내부 브라우저 (iframe 태그의 name 속성값)</li>
<li>anchor : a 태그의 href 속성값으로 URL 주소 뒤에 #기호를 사용하여 태그 식별자를 설정하면 해당 식별자의 태그로 출력위치를 이동</li>
</ul>
<h3 id="4-map-태그">4. map 태그</h3>
<ul>
<li>map 태그 : 하나의 이미지에서 영역을 구분해 하이퍼링크 기능을 제공하기 위한 태그</li>
<li>area 태그가 반드시 있어야 함</li>
<li>area 태그 : 이미지에서 영역을 구분하기 위한 태그</li>
<li>shape 속성 : 영역을 구분하기 위한 도형을 속성값으로 설정
=&gt; rect, circle, poly 등</li>
<li>coords 속성 : 영역을 구분하기 위한 도형의 좌표값을 속성값으로 설정</li>
<li>usemap 속성 : map 태그의 이름을 속성값으로 설정</li>
</ul>
<h3 id="5-iframe-태그">5. iframe 태그</h3>
<ul>
<li>iframe 태그 : 브라우저에 내장 부라우저를 생성하여 다른 웹문서를 출력하기 위한 기능을 제공하기 위한 태그</li>
<li>src 속성 : 내장 브라우저로 요청할 웹문서</li>
</ul>
<h3 id="6-button-태그">6. button 태그</h3>
<ul>
<li>button 태그 : 버튼을 출력하는 태그</li>
<li>type 속성 : button, submit, reset 중 하나를 속성값으로 설정
=&gt; type 속성값을 submit으로 설정한 경우 버튼을 클릭하면 제출 이벤트 발생</li>
</ul>
<h3 id="7-input-태그">7. input 태그</h3>
<ul>
<li><p>input 태그 : 사용자로부터 값을 입력받기 위한 태그</p>
</li>
<li><p>type 속성 : 값을 입력받기 위한 형태를 속성값으로 설정
=&gt; hidden : 입력태그를 숨겨 사용자로부터 값을 입력받지 않고 요청 웹프로그램에게 필요한 값 전달
=&gt; text : 문자값을 입력받아 전달
=&gt; password : 문자값을 입력받아 전달 (입력값이 특정문자로 변환되어 표시)
=&gt; radio 속성 : name 속성값이 같은 입력태그 중 하나를 선택하여 전달
=&gt; checkbox : name 속성값이 같은 입력태그 중 한개 이상을 선택하여 전달
=&gt; file : 파일을 입력받아 전달
=&gt; email : 이메일을 입력받아 전달
=&gt; number : 숫자 형식의 문자값을 입력받아 전달 (증가 또는 감소 버튼 제공, max/min으로 최대/최소값 설정 가능)
=&gt; tel : 전화번호를 입력받아 전달
=&gt; url : URL 형식의 문자값을 입력받아 전달
=&gt; search : 검색 관련 문자값을 입력받아 전달 (스마트기기의 자동 완성 기능)
=&gt; color : 색을 선택하여 색상값을 입력받아 전달
=&gt; range : 등급을 선택하여 등급값 전달 (max/min 속성으로 등급의 범위 설정)
=&gt; date : 날짜 형식의 문자값을 입력받아 전달 (날짜를 선택할 수 있는 박스모델 제공)
=&gt; time : 시간 형식의 문자값을 입력받아 전달 (시간을 선택할 수 있는 박스모델 제공)
=&gt; datetime-local : 날짜와 시간 형식의 문자값을 입력받아 전달 (날짜와 시간을 선택할 수 있는 박스모델 제공)
=&gt; submit : 태그를 클릭한 경우 제출 이벤트 발생
=&gt; reset : 태그를 클릭한 경우 초기화</p>
</li>
<li><p>name 속성 : 태그의 이름을 속성값으로 설정</p>
</li>
<li><p>value 속성 : 입력태그의 초기값을 속성값으로 설정</p>
</li>
<li><p>size 속성 : 입력태그의 크기를 속성값으로 설정</p>
</li>
<li><p>maxlength 속성 : 최대 입력 가능한 문자의 개수를 속성값으로 설정</p>
</li>
<li><p>autofocus 속성 : 입력태그에 입력초점(Focus)을 제공하는 속성</p>
</li>
<li><p>required 속성 : 필수입력값을 설정하기 위한 속성 (입력값이 없는 경우 form 태그 미동작)</p>
</li>
<li><p>placeholder 속성 : 입력태그의 입력값에 대한 설명을 속성값으로 설정 (입력값이 입력되면 설명문 자동 소멸)</p>
</li>
<li><p>readonly 속성 : 입력태그를 읽기 전용으로 사용하기 위한 속성</p>
</li>
<li><p>disabled 속성 : 입력태그를 비활성화 처리하기 위한 속성</p>
</li>
<li><p>checked 속성 : 우선 선택을 제공하기 위한 속성</p>
</li>
<li><p>min 속성 : 입력 가능한 최소값을 속성값으로 설정</p>
</li>
<li><p>max 속성 : 입력 가능한 최대값을 속성값으로 설정</p>
</li>
</ul>
<h3 id="8-label-태그">8. label 태그</h3>
<ul>
<li>label 태그 : 입력태그에 입력초점(Focus)을 제공하기 위한 태그</li>
<li>label 태그를 사용하지 않은 경우 입력태그를 직접 클릭해야만 입력초점 제공</li>
<li>for 속성 : 태그를 구분하는 식별자를 속성값 설정
=&gt; label 태그를 클릭한 경우 속성값으로 설정된 태그에 입력초점 제공</li>
</ul>
<h3 id="9-textarea-태그">9. textarea 태그</h3>
<ul>
<li>textarea 태그 : 다수행의 문자값을 입력받기 위한 태그</li>
<li>row 속성 : 입력태그의 행의 개수(높이)를 속성값으로 설정</li>
<li>cols 속성 : 입력태그의 열의 개수(폭)를 속성값으로 설정</li>
<li>태그내용이 textarea 태그의 초기값으로 설정</li>
</ul>
<h3 id="10-select-태그">10. select 태그</h3>
<ul>
<li>select 태그 : 목록에서 값을 선태하여 입력받기 위한 태그</li>
<li>하위 태그 : option, optgroup</li>
<li>기본적으로 하나의 값만 선택하여 전달되지만 select 태그 속성에 의해 다중값 선택 가능</li>
<li>option 태그 : 선택 가능한 아이템을 제공하여 값을 전달하는 태그
=&gt; selected 속성 : 우선 선택 기능을 제공하는 속성</li>
<li>optgroup 태그 : option 태그로 표현된 아이템을 하나의 그룹으로 표현하기 위한 태그
=&gt; label 속성 : 그룹의 이름을 속성값으로 설정</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자바(Java)] PrepareStatement]]></title>
            <link>https://velog.io/@yh_bang/%EC%9E%90%EB%B0%94Java-PrepareStatement</link>
            <guid>https://velog.io/@yh_bang/%EC%9E%90%EB%B0%94Java-PrepareStatement</guid>
            <pubDate>Mon, 15 May 2023 09:02:13 GMT</pubDate>
            <description><![CDATA[<h2 id="1-statement-객체">1. Statement 객체</h2>
<h3 id="statement-객체">Statement 객체</h3>
<ul>
<li>Statement 객체 : 현재 접속중인 DBMS 서버에 SQL 명령을 전달하여 실행하기 위한 기능을 제공하는 객체</li>
<li>하나의 Statement 객체를 사용하여 다수의 SQL 명령을 전달하여 실행 가능<pre><code class="language-java">String sql1 = &quot;insert into student values(&quot; + no + &quot;,&#39;&quot; + 
  name + &quot;&#39;,&#39;&quot; + phone + &quot;&#39;,&#39;&quot; + address + &quot;&#39;,&#39;&quot; + birthday + &quot;&#39;)&quot;;</code></pre>
</li>
<li>SQL 명령에 Java 변수값을 포함할 경우 위와 같이 문자열 결합 기능을 사용 (단점)
=&gt; 문자열 결합을 이용할 경우 가독성 및 유지보수의 효율성 감소
=&gt; InSQL 해킹 기술에 취약</li>
</ul>
<hr>
<h2 id="2-preparestatement-객체">2. PrepareStatement 객체</h2>
<h3 id="1-preparestatement-객체">1. PrepareStatement 객체</h3>
<ul>
<li>Connection.prepareStatement(String sql) : Connection 객체로부터 SQL 명령이 저장된 PreparedStatement 객체를 반환하는 메소드<pre><code class="language-java">String sql = &quot;insert intro student values(?,?,?,?,?)&quot;;</code></pre>
</li>
<li>InParameter : Java 변수값을 제공받아 SQL 명령의 문자값으로 표현하기 위한 기호
=&gt; 반드시 InParameter에 Java 변수값을 전달받아 완전한 SQL 명령 완성</li>
<li>PraparedStatement.setXXX(int parameterIndex, XXX value) : PreparedStatement 객체에 저장된 SQL 명령의 InParameter에 Java 변수값을 전달하는 메소드</li>
<li>PreparedStatement.executeUpdate() : PreparedStatement 객체에 저장된 DML 명령을 전달하여 실행하고 조작행의 개수를 정수값으로 반환하는 메소드</li>
</ul>
<h3 id="2-장단점">2. 장단점</h3>
<ul>
<li>장점 : InParameter를 사용하여 SQL 명령에 Java 변수값을 문자값으로 포함하여 사용 가능
=&gt; InParameter를 사용하여 가독성이 향상되고 유지보수의 효율성 증가
=&gt; InSQL 해킹 기술을 무효화 처리</li>
<li>단점 : 하나의 PreParedStatement는 저장된 하나의 SQL 명령만 전달하여 실행 가능</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자바(Java)] JDBC (Java DataBase Connectivity)]]></title>
            <link>https://velog.io/@yh_bang/%EC%9E%90%EB%B0%94Java-JDBC-Java-DataBase-Connectivity</link>
            <guid>https://velog.io/@yh_bang/%EC%9E%90%EB%B0%94Java-JDBC-Java-DataBase-Connectivity</guid>
            <pubDate>Fri, 12 May 2023 07:52:26 GMT</pubDate>
            <description><![CDATA[<h2 id="1-정적-영역-static-block">1. 정적 영역 (Static Block)</h2>
<h3 id="1-정적-영역-static-block-1">1. 정적 영역 (Static Block)</h3>
<ul>
<li>정적 영역 (Static block) : 클래스가 메모리에 저장된 후 자동 실행될 명령을 작성하는 영역</li>
<li>정적 영역에 작성된 명령은 프로그램 실행시 한번만 실행</li>
<li>Class.forName(String className) : 문자열로 표현된 패키지가 포함된 클래스를 전달받아 ClassLoader 프로그램을 사용하여 클래스를 읽어 메모리에 저장하는 메소드
=&gt; Class 객체 반환
=&gt; ClassNotFoundException 발생 : 해당 패키지에 클래스가 없는 경우 발생</li>
</ul>
<h3 id="2-class-객체를-수동으로-생성하는-방법">2. Class 객체를 수동으로 생성하는 방법</h3>
<ol>
<li>Class.forName(String className) 메소드를 호출하여 반환받는 방법</li>
<li>Object.getClass() 메소드를 호출하여 현재 사용중인 클래스에 대한 Class 객체를 반환받는 방법</li>
<li>[클래스명.class] 형식으로 표현하는 방법</li>
</ol>
<hr>
<h2 id="2-jdbc-java-database-connectivity">2. JDBC (Java DataBase Connectivity)</h2>
<h3 id="1-jdbc-java-database-connectivity">1. JDBC (Java DataBase Connectivity)</h3>
<ul>
<li>JDBC (Java DataBase Connectivity) : Java를 사용하여 DBMS 서버에 접속해 SQL 명령을 전달하고 실행하기 위한 기능을 제공하는 Java API</li>
<li>java.sql : JDBC 기능의 프로그램을 작성하기 위한 클래스 및 인터페이스가 선언된 패키지
=&gt; JDBC 기능 구현을 위해 java.sql 패키지에서는 인터페이스 제공
=&gt; DBMS 종류가 다양하므로 클래스로 제공 불가능</li>
<li>DBMS 프로그램을 관리하는 그룹에서 JDBC 기능을 구현하기 위한 클래스(JDBC Driver)를 배포하여 제공
=&gt; JDBC Driver가 포함된 라이브러리 파일(Jar)을 다운로드 받아 프로젝트에 빌드 처리해야만 라이브러리의 클래스를 사용하여 JDBC 프로그램 작성 가능</li>
</ul>
<hr>
<h2 id="3-student-테이블에-학생정보-삽입하는-jdbc-프로그램">3. STUDENT 테이블에 학생정보 삽입하는 JDBC 프로그램</h2>
<h3 id="1-db에-student-테이블-만들기">1. DB에 STUDENT 테이블 만들기</h3>
<pre><code class="language-sql">-- Oracle Database

CREATE TABLE STUDENT(NO NUMBER(4) PRIMARY KEY, NAME VARCHAR2(50),
    PHONE VARCHAR2(20), ADDRESS VARCHAR2(100), BIRTHDAY DATE);</code></pre>
<h3 id="2-jdbc-driver">2. JDBC Driver</h3>
<ul>
<li>JDBC Driver 객체 : DriverManager 클래스에 등록되어 관리되는 Driver 객체</li>
<li>Driver 객체 : DBMS 서버에 접속하여 SQL 명령을 전달하는 기능을 제공하는 객체</li>
<li>DriverManager 클래스 : Driver 객체를 관리하기 위한 기능을 제공하는 클래스</li>
<li>DriverManager.registerDriver(Driver driver) : Driver 객체를 매개변수로 전달받아 DriverManager 클래스가 관리할 수 있는 JDBC Driver 객체로 등록하는 메소드
=&gt; 동일한 클래스로 생성된 Driver 객체가 DriverManager 클래스에 여러개 등록 가능
=&gt; 불필요한 Driver 객체가 존재하여 성능의 저하 발생<pre><code class="language-java">// 불가능하지는 않지만 효율이 좋지 않아 사용하지 않는 것을 권장
DriverManager.registerDriver(new OracleDriver());</code></pre>
</li>
</ul>
<h3 id="3-eclipse에서-코드-작성하기">3. eclipse에서 코드 작성하기</h3>
<ol>
<li>OracleDriver 클래스로 객체를 생성하여 DriverManeger 클래스의 JDBC Driver 객체로 등록</li>
</ol>
<ul>
<li>Class.forName(String className) 메소드를 호출하여 ClassLoader 프로그램을 이용하여 OracleDriver 클래스를 읽어 메모리에 저장
=&gt; OracleDriver 클래스의 정적영역에서 OracleDriver 클래스를 객체로 생성하여 DriverManager 클래스의 JDBC Driver로 등록하는 메소드 호출</li>
</ul>
<pre><code class="language-java">Class.forName(&quot;oracle.jdbc.driver.OracleDriver&quot;);</code></pre>
<ol start="2">
<li>DriverManager 클래스에 등록된 JDBC Driver 객체를 이용하여 DBMS 서버에 접속해 Connection 객체를 전달</li>
</ol>
<ul>
<li>DriverManager.getConnection(String url, String user, String password) : DriverManager 클래스에 등록된 JDBC Driver 객체를 이용하여 DBMS 서버에 접속하는 메소드</li>
<li>url 형식 : Protocol : ServerName : Port : Resourse </li>
</ul>
<pre><code class="language-java">Connection conn = DriverManager.getConnection(url, user, password);</code></pre>
<ol start="3">
<li>Connection 객체로부터 SQL 명령을 전달할 수 있는 Statement 객체를 반환받아 저장</li>
</ol>
<ul>
<li>Connection.createStatement() : SQL 명령을 전달할 수 있는 Statement 객체를 생성하여 반환하는 메소드</li>
<li>Statement 객체 : SQL 명령을 현재 접속중인 DBMS 서버에 전달하기 위한 기능을 제공하는 객체</li>
</ul>
<pre><code class="language-java">Statement stmt = conn.createStatement();</code></pre>
<ol start="4">
<li>Statement 객체를 사용하여 SQL 명령(INSERT, UPDATE, DELETE, SELECT)을 DBMS 서버에 전달하여 실행하고 실행결과를 반환받아 저장 </li>
</ol>
<ul>
<li>Statement.executeUpdate(String sql) : DML 명령을 전달하여 실행하는 메소드
=&gt; DML 명령의 실행결과로 조작행의 개수가 저장된 정수값을 반환</li>
<li>Statement.executeQuery(String sql) : SELECT 명령을 전달하여 실행하는 메소드
=&gt; SELECT 명령의 실행결과로 검색행이 저장된 ResultSet 객체를 반환</li>
</ul>
<pre><code class="language-java">String sql=&quot;insert into student values(1000, &#39;홍길동&#39;, &#39;010-1234-5599&#39;,
    &#39;서울시 강남구&#39;, &#39;00/01/01&#39;)&quot;;
int rows = stmt.executeUpdate(sql);</code></pre>
<ol start="5">
<li>반환받은 SQL 명령의 실행 결과값을 사용자에게 제공</li>
</ol>
<pre><code class="language-java">System.out.println(&quot;[msg] &quot; + rows + &quot;명의 학생정보를 삽입했습니다.&quot;);</code></pre>
<ol start="6">
<li>JDBC 관련 객체를 모두 제거</li>
</ol>
<ul>
<li>finally 블럭에서 진행</li>
<li>객체가 생성된 순서의 반대로 제거</li>
<li>Statement.close() : Statement 객체를 삭제하는 메소드</li>
<li>Connection.close() : Connection 객체를 삭제하는 메소드</li>
</ul>
<pre><code class="language-java">finally {
    try {
        if(stmt != null) stmt.close();
        if(conn != null) conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}</code></pre>
<h3 id="4-eclipse-전체-코드">4. eclipse 전체 코드</h3>
<pre><code class="language-java">// InsertStudentApp.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

// STUDENT 테이블에 학생정보를 삽입하는 JDBC 프로그램 작성
public class InsertStudentApp {
    public static void main(String[] args) {
        Connection con = null;
        Statement stmt = null;
        try {
            // 1.OracleDriver 클래스로 객체를 생성하여
            // DriverManager 클래스의 JDBC Driver 객체로 등록
            Class.forName(&quot;oracle.jdbc.driver.OracleDriver&quot;);

            // 2.DriverManager 클래스에 등록된 JDBC Driver 객체를 이용하여
            // DBMS 서버에 접속해 Connection 객체를 반환받아 저장
            String url = &quot;jdbc:oracle:thin:@localhost:1521:xe&quot;;
            String user = &quot;USER_NAME&quot;;
            String password = &quot;USER_PASSWORD&quot;;
            con = DriverManager.getConnection(url, user, password);

            // 3.Connection 객체로부터 SQL 명령을 전달할 수 있는
            // Statement 객체를 반환받아 저장
            stmt = con.createStatement();

            // 4.Statement 객체를 사용하여 SQL 명령(INSERT,UPDATE,DELETE,SELECT)을
            // DBMS 서버에 전달하여 실행하고 실행결과를 반환받아 저장
            // String sql=&quot;insert into student values(1000,&#39;홍길동&#39;&#39;010-1234-5678&#39;,&#39;서울시 강남구&#39;,&#39;00/01/01&#39;)&quot;;
            // String sql=&quot;insert into student values(2000,&#39;임꺽정&#39;,&#39;010-7894-5612&#39;,&#39;수원시 월정구&#39;,&#39;02/05/08&#39;)&quot;;
            String sql = &quot;insert into student values(3000,&#39;전우치&#39;,
                   &#39;010-1478-2589&#39;,&#39;인천시 상당구&#39;,&#39;1998-12-11&#39;)&quot;;
            int rows = stmt.executeUpdate(sql);

            // 5.반환받은 SQL 명령의 실행 결과값을 사용자에게 제공
            System.out.println(&quot;[메세지]&quot; + rows + &quot;명의 학생정보를 삽입했습니다.&quot;);

        } catch (ClassNotFoundException e) {
            System.out.println(&quot;[에러]OracleDriver 클래스를 찾을 수 없습니다.&quot;);
        } catch (SQLException e) {
            System.out.println(&quot;[에러]JDBC 관련 오류 = &quot; + e.getMessage());
        } finally {
            try {
                // 6.JDBC 관련 객체 제거 (객체가 생성된 순서의 반대로 제거)
                if (stmt != null) stmt.close();
                if (con != null) con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}</code></pre>
<hr>
<h2 id="4-student-테이블에-저장된-모든-학생정보를-검색하여-출력하는-jdbc-프로그램">4. STUDENT 테이블에 저장된 모든 학생정보를 검색하여 출력하는 JDBC 프로그램</h2>
<h3 id="1-resultset-객체">1. ResultSet 객체</h3>
<ul>
<li>Statement.executeQuery(String sql) : SELECT 명령을 전달하여 실행하는 메소드
=&gt; SELECT 명령의 실행결과를 ResultSet 객체에 저장하여 반환</li>
<li>ResultSet 객체 : 검색결과를 2차원 배열의 형태로 저장하여 제공하는 객체</li>
<li>ResultSet 객체에 저장된 모든 검색행을 행단위로 처리하기 위해 ResultSet 객체는 내부적인 커서 제공</li>
<li>ResultSet 커서는 최로 RsultSet 객체의 BOF (Before Of File) 영역에 위치</li>
<li>ResultSet.next() : ResultSet 커서를 다음행으로 이동하는 메소드
=&gt; false 반환 : ResultSet 커서 위치에 처리행이 없는 경우의 반환값</li>
<li>ResultSet.getXXX(int columnIndex) 또는 ResultSet.getXXX(String columnLabel) 으로 저장
=&gt; columnIndex : 검색행에서 검색대상을 순서대로 1부터 1씩 증가되는정수값
=&gt; columnLabel : 검색행에서 검색대상의 이름을 문자열로 표현</li>
</ul>
<h3 id="2-eclipse에서-코드-작성하기">2. eclipse에서 코드 작성하기</h3>
<pre><code class="language-java">// SelectStudentApp

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//STUDENT 테이블에 저장된 모든 학생정보를 검색하여 출력하는 JDBC 프로그램 작성
public class SelectStudentApp {
    public static void main(String[] args) {
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            Class.forName(&quot;oracle.jdbc.driver.OracleDriver&quot;);

            String url = &quot;jdbc:oracle:thin:@localhost:1521:xe&quot;;
            String user = &quot;USER_NAME&quot;;
            String password = &quot;USER_PASSWORD&quot;;
            con = DriverManager.getConnection(url, user, password);

            stmt = con.createStatement();

            String sql = &quot;select * from student order by no&quot;;

            rs = stmt.executeQuery(sql);

            if (rs.next()) {
                do {
                    int no = rs.getInt(&quot;no&quot;);
                    String name = rs.getString(&quot;name&quot;);
                    String phone = rs.getString(&quot;phone&quot;);
                    String address = rs.getString(&quot;address&quot;);
                    Date birthday = rs.getDate(&quot;birthday&quot;);

                    System.out.println(&quot;학번 = &quot; + no);
                    System.out.println(&quot;이름 = &quot; + name);
                    System.out.println(&quot;전화번호 = &quot; + phone);
                    System.out.println(&quot;주소 = &quot; + address);
                    System.out.println(&quot;생년월일 = &quot; + birthday);
                    System.out.println(&quot;==================================================&quot;);
                } while (rs.next());
            } else {
                System.out.println(&quot;[메세지]검색된 학생정보가 없습니다.&quot;);
            }
        } catch (ClassNotFoundException e) {
            System.out.println(&quot;[에러]OracleDriver 클래스를 찾을 수 없습니다.&quot;);
        } catch (SQLException e) {
            System.out.println(&quot;[에러]JDBC 관련 오류 = &quot; + e.getMessage());
        } finally {
            try {
                if (rs != null)
                    rs.close();
                if (stmt != null)
                    stmt.close();
                if (con != null)
                    con.close();
            } catch (SQLException e) {
            }
        }
    }
}
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Oracle DB] DCL (DATA CONTROL LANGUAGE)]]></title>
            <link>https://velog.io/@yh_bang/Oracle-DB-DCL-DATA-CONTROL-LANGUAGE</link>
            <guid>https://velog.io/@yh_bang/Oracle-DB-DCL-DATA-CONTROL-LANGUAGE</guid>
            <pubDate>Wed, 10 May 2023 06:50:16 GMT</pubDate>
            <description><![CDATA[<h2 id="1-계정">1. 계정</h2>
<ul>
<li>사용자 (USER) : 시스템(DBMS)을 사용할 수 있는 객체</li>
<li>계정 (ACCOUNT) : 권한을 가진 사용자</li>
<li>계정 관리는 시스템 관리자(SYSDBA - SYS 계정)만 가능</li>
<li>DBA_USERS : 사용자 정보를 제공하는 딕셔너리</li>
</ul>
<h3 id="1-계정-생성">1. 계정 생성</h3>
<pre><code class="language-sql">CREATE USER 계정명 INDENTIFIED BY 비밀번호</code></pre>
<h3 id="2-계정-확인">2. 계정 확인</h3>
<pre><code class="language-sql">CREATE USER 계정명 INDENTIFIED BY 비밀번호</code></pre>
<h3 id="3-계정-비밀번호-변경">3. 계정 비밀번호 변경</h3>
<ul>
<li>계정의 비밀번호는 기본적으로 180일의 유효기간으로 설정<pre><code class="language-sql">ALTER USER 계정명 INDENTIFIED BY 비밀번호</code></pre>
</li>
</ul>
<h3 id="4-계정-상태-변경">4. 계정 상태 변경</h3>
<ul>
<li>OPEN : 계정 활성화 (DBSM 서버 접속 가능)</li>
<li>LOCK : 계정 비활성화 (DBSM 서버 접속 불가능)</li>
<li>오라클 서버 접속시 계정의 비밀번호를 5번 틀리면 계정의 상태가 자동으로 LOCK 상태로 변경<pre><code class="language-sql">ALTER USER 계정명 ACCOUNT (LOCK | UNLOCK)</code></pre>
</li>
</ul>
<h3 id="5-계정의-테이블스페이스-변경">5. 계정의 테이블스페이스 변경</h3>
<ul>
<li>테이블스페이스 (TABLESPACE) : 데이터베이스 객체(테이블, 뷰, 시퀀스, 인덱스 등)가 저장되는 장소<pre><code class="language-sql">ALTER USER 계정명 DEFAULT TABLESPACE 테이블스페이스명</code></pre>
</li>
</ul>
<h3 id="6-테이블스페이스에-대한-계정의-사용-가능한-물리적-저장크기-변경">6. 테이블스페이스에 대한 계정의 사용 가능한 물리적 저장크기 변경</h3>
<p>DBA_TS_QUOTAS : 계정의 물리적 저장크기 확인 (테이블스페이스의 물리적 저장크기 제한 관련 정보를 제공하는 딕셔너리)</p>
<pre><code class="language-sql">ALTER USER 계정명 QUOTA 제한크기 ON 테이블스페이스</code></pre>
<h3 id="7-계정-삭제">7. 계정 삭제</h3>
<pre><code class="language-sql">DROP USER 사용자명</code></pre>
<hr>
<h2 id="2-dcl-data-control-language">2. DCL (DATA CONTROL LANGUAGE)</h2>
<h3 id="1-dcl-data-control-language">1. DCL (DATA CONTROL LANGUAGE)</h3>
<ul>
<li>DCL (DATA CONTROL LANGUAGE) : 데이터 제어어</li>
<li>계정에게 권한을 부여하거나 회수하는 SQL 명령</li>
<li>오라클 권한 (ORACLE PRIVILEGE) : 시스템 권한(관리자)과 객체 권한(일반 사용자)으로 구분</li>
<li>시스템 권한 시스템을 구성하는 객체를 관리하기 위한 명령(DDL)에 대한 사용 권한<h3 id="2-시스템-권한을-계정에게-부여">2. 시스템 권한을 계정에게 부여</h3>
<pre><code class="language-sql">GRANT [PRIVILEGE | ROLE], [PRIVILEGE | ROLE], ...
  TO [계정명 | PUBLIC] [WITH ADMIN OPTION] [IDENTIFIED 비밀번호]</code></pre>
</li>
<li>롤 (ROLE) : 시스템 권한을 그룹화하여 사용하는 이름</li>
<li>계정명 대신 PUBLIC 키워드를 사용하면 모든 계정에게 일괄적으로 시스템 권한 부여</li>
<li>WITH ADMIN OPTION : 부여 받은 시스템 권한을 다른 계정에게 부여하거나 회수하는 권한을 제공하는 기능</li>
<li>시스템 권한을 부여받은 계정이 없는 경우 자동으로 계정 생성</li>
<li>GRANT 명령에 의해 계정이 생성된 경우 반드시 IDENTIFIED BY 키워드를 사용하여 비밀번호 설정</li>
</ul>
<h3 id="3-시스템-권한-회수">3. 시스템 권한 회수</h3>
<pre><code class="language-sql">reovke [PRIVILEGE | ROLE], [PRIVILEGE | ROLE], ...
    from [계정명 | PUBLIC] [WITH ADMIN OPTION]</code></pre>
<h3 id="4-롤-role">4. 롤 (ROLE)</h3>
<ul>
<li>롤 (ROLE) : 관리자가 계정의 시스템 권한을 효율적으로 관리하기 위해 사용하는 시스템 권한 그룹</li>
<li>오라클에서 기본적으로 제공되는 롤 : CONNECT, RESOURCE, DBA 등</li>
<li>CONNECT : 기본적인 시스템 권한 그룹 (CREATE SESSION, CREATE TABLE, ALTER TABLE, CREATE SYNONYM 등)</li>
<li>RESOURCE : 객체 관련 시스템 권한 그룹 (CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER 등)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Oracle DB] 인덱스 (INDEX)]]></title>
            <link>https://velog.io/@yh_bang/Oracle-DB-%EC%9D%B8%EB%8D%B1%EC%8A%A4-INDEX</link>
            <guid>https://velog.io/@yh_bang/Oracle-DB-%EC%9D%B8%EB%8D%B1%EC%8A%A4-INDEX</guid>
            <pubDate>Wed, 10 May 2023 04:02:15 GMT</pubDate>
            <description><![CDATA[<h2 id="1-인덱스-index">1. 인덱스 (INDEX)</h2>
<h3 id="1-인덱스-index-1">1. 인덱스 (INDEX)</h3>
<ul>
<li>인덱스 (INDEX) : 테이블에 저장된 행을 보다 빠르게 검색하기 위한 기능을 제공하는 객체</li>
<li>컬럼에 인덱스를 설정하면 인덱스 영역을 생성하여 검색 관련 정보를 저장해 컬럼에 대한 행 검색 속도 증가</li>
<li>조건식에서 많이 사용하는 컬럼에 인덱스를 설정하며 행이 많을 때 인뎃르를 설정하는 것이 효율적</li>
<li>USER_INDEXES : 인덱스 정보를 제공하는 딕셔너리</li>
<li>USER_IND_COLUMNS : 컬럼에 설정된 인덱스</li>
</ul>
<h3 id="2-유니크-인덱스-unique-index">2. 유니크 인덱스 (UNIQUE INDEX)</h3>
<ul>
<li>유니크 인덱스 (UNIQUE INDEX) : PRIMARY KEY 제약조건이나 UNIQUE 제약조건에 의해 자동 생성되는 인덱스</li>
</ul>
<h3 id="3-비유니크-인덱스-non-unique-index">3. 비유니크 인덱스 (NON-UNIQUE INDEX)</h3>
<ul>
<li>비유니크 인덱스 (NON-UNIQUE INDEX) : 사용자가 컬럼에 수동으로 인덱스를 생성하여 설정하는 인덱스</li>
</ul>
<h3 id="4-비유니크-인덱스-생성">4. 비유니크 인덱스 생성</h3>
<pre><code class="language-sql">CREATE INDEX 인덱스 ON 테이블명(컬럼명)</code></pre>
<h3 id="5-인덱스-삭제">5. 인덱스 삭제</h3>
<ul>
<li>유니크 인덱스는 PRIMARY KEY 제약조건이나 UNIQUE 제약조건을 삭제하면 같이 삭제 처리<pre><code class="language-sql">DROP INDEX 인덱스명</code></pre>
</li>
</ul>
<hr>
<h2 id="2-동의어-synonym">2. 동의어 (SYNONYM)</h2>
<h3 id="1-동의어-synonym">1. 동의어 (SYNONYM)</h3>
<ul>
<li>동의어 (SYNONYM) : 오라클 객체에 다른 이름을 부여하여 사용하기 위한 객체</li>
<li>전용 동의어 : 특정 사용자만 사용할 수 있는 동의어 (일반 사용자에 의해 관리)</li>
<li>공용 동의어 : 모든 사용자가 사용할 수 있는 동의어 (관리자에 의해 관리)</li>
<li>USER_TABLES : SYS 계정에 의해 생성된 뷰</li>
<li>USER_SYNONYMS : 동의어 정보를 제공하는 딕셔너리</li>
</ul>
<h3 id="2-동의어-생성">2. 동의어 생성</h3>
<pre><code class="language-sql">CREATE [PUBLIC] SYSNONYM 동의어 FOR 객체명</code></pre>
<ul>
<li>PUBLIC : 공용 동의어를 생성하기 위한 키워드</li>
</ul>
<h3 id="3-동의어-삭제">3. 동의어 삭제</h3>
<pre><code class="language-sql">CREATE [PUBLIC] SYSNONYM 동의어</code></pre>
<h3 id="4-실례">4. 실례</h3>
<pre><code class="language-sql">SELECT TABLE_NAME FROM SYS.USER_TABLES;
SELECT TABLE_NAME FROM USER_TABLES;
SELECT TABLE_NAME FROM TABS;</code></pre>
<ul>
<li>전부 동일한 결과가 나옴</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Oracle DB] DDL (DATE DEFINITION LANGUAGE)]]></title>
            <link>https://velog.io/@yh_bang/Oracle-DB-DDL-DATE-DEFINITION-LANGUAGE</link>
            <guid>https://velog.io/@yh_bang/Oracle-DB-DDL-DATE-DEFINITION-LANGUAGE</guid>
            <pubDate>Wed, 10 May 2023 01:54:39 GMT</pubDate>
            <description><![CDATA[<h2 id="1-ddl-date-definition-language">1. DDL (DATE DEFINITION LANGUAGE)</h2>
<h3 id="1-ddl-date-definition-language-1">1. DDL (DATE DEFINITION LANGUAGE)</h3>
<ul>
<li>DDL (DATE DEFINITION LANGUAGE) : 데이터 정의어</li>
<li>데이터베이스의 객체(테이블, 뷰, 시퀀스, 인덱스, 동의어, 사용자 등)을 관리하기 위한 SQL 명령</li>
</ul>
<h3 id="2-식별자-작성-규칙">2. 식별자 작성 규칙</h3>
<ul>
<li>테이블명, 컬럼명, 별칭, 라벨명 등</li>
<li>영문자로 시작되며 1~30 범위의 문자들로만 구성</li>
<li>A<del>Z, 0</del>9,_,$,# 문자들을 조합하여 작성 (대소문자 미구분, 스네이크표기법 권장)</li>
<li>영문자 외 다른 문자 사용 가능하나 미권장</li>
<li>키워드로 식별자를 선언할 경우 에러 발생 (&quot;&amp;nbsp&quot;안에 표현하면 가능하지만 비권장)</li>
</ul>
<hr>
<h2 id="2-테이블-table">2. 테이블 (TABLE)</h2>
<h3 id="1-테이블-생성">1. 테이블 생성</h3>
<ul>
<li>테이블 생성 : 테이블 속성(ATTRIBUTE)의 집합<pre><code class="language-sql">CREATE TABLE 테이블명(칼럼명 자료형[(크기)] [DEFALUT 기본값] [컬럼제약조건],
  칼럼명 자료형[(크기)] [DEFALUT 기본값] [컬럼제약조건], ..., 
      [테이블제약조건])</code></pre>
</li>
<li>테이블 생성시 컬럼 기본값을 설정하지 않은 경우 자동으로 NULL이 기본값으로 자동 저장</li>
</ul>
<h3 id="2-자료형-datatype">2. 자료형 (DATATYPE)</h3>
<ul>
<li>자료형 (DATATYPE) : 컬럼에 저장 가능한 값의 형태를 표현하기 위한 키워드</li>
<li>숫자형 : NUMBER[(전체 자릿수, 소수점 자릿수)]</li>
<li>문자형 : CHAR(크기) (크기 : 1<del>2000 BYTE) &gt;&gt; 고정길이
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp VARCHAR2(크기) (크기 : 1</del>4000 BYTE) &gt;&gt; 가변길이
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp LONG (최대 2GBYTE) &gt;&gt; 가변길이 (테이블 하나의 컬럼에만 &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp설정 가능하며 정렬 불가능)
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp CLOB (최대 4GBYTE) &gt;&gt; 가변길이 (텍스트 파일을 저장하기 &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp위한 자료형)
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp BLOB (최대 4GBYTE) &gt;&gt; 가변길이 (이진 파일을 저장하기 위한 료형)</li>
<li>날짜형 : DATE (날짜와 시간)
&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbspTIMESTAMP (MS 단위 시간)</li>
</ul>
<h3 id="3-dictionary">3. DICTIONARY</h3>
<ul>
<li>DICTIONARY : 시스템 정보를 제공하기 위한 가상의 테이블 (뷰)</li>
<li>USER_OBJECTS : 현재 접속 사용자의 스키마로 전근 가능한 객체 정보를 제공하는 DICTIONARY</li>
<li>USER_TABLES : 현재 접속 사용자의 스키마로 접근 가능한 테이블의 정보를 제공하는 DICTIONARY
=&gt; 동의어로 TAPS 제공</li>
<li>USER_TAP_COLUMNS : 테이블의 컬럼 정보를 제공하는 DICTIONARY</li>
<li>USER_CONSTRAINTS : 테이블에 설정된 제약조건을 제공하는 DICTIONARY</li>
</ul>
<h3 id="4-제약조건-constraint">4. 제약조건 (CONSTRAINT)</h3>
<ul>
<li>제약조건 (CONSTRAINT): 컬럼에 비정상적인 값이 저장되는 것을 방지하기 위한 기능</li>
<li>제약조건을 설정할 경우 제약조건을 효율적으로 관리하기 위해 제약조건의 이름을 지정하는 것을 권장<pre><code class="language-sql">컬럼명 자료형(크기) CONSTRAINT 제약조건명 제약조건</code></pre>
</li>
<li>컬럼 수준의 제약조건 : 테이블의 속성 선언시 컬럼에 제약조건 설정</li>
<li>테이블 수준의 제약조건 : 테이블 선언시 테이블의 특정 칼럼에 제약조건을 설정</li>
<li>CONSTRAINT_NAME : 제약조건을 구분하기 위한 이름 (고유값), 제약조건의 이름을 지정하지 않으면 자동으로 SYS_XXXXXX으로 설정</li>
<li>CONSTRAINT_TYPE : C (CHECK), U (UNIQUE), P (PRIMARY), R (REFERENCE)</li>
<li>SEARCH_CONDITION : CHECK 제약조건으로 설정된 조건식<h4 id="1-check">1. CHECK</h4>
</li>
<li>CHECK : 컬럼값으로 저장 가능한 조건을 제공하여 조건이 참인 경우에만 컬럼값으로 저장되도록 컬럼 수준의 제약조건 또는 테이블 수준 제약조건으로 설정가능<h4 id="2-unique">2. UNIQUE</h4>
</li>
<li>UNIQUE : 중복 컬럼값 저장을 방지하기 위한 제약조건</li>
<li>테이블의 컬럼에 다수 설정이 가능하며 NULL 허용<h4 id="3-primary-key-pk">3. PRIMARY KEY (PK)</h4>
</li>
<li>PRIMARY KEY (PK) : 중복 컬럼값 저장을 방지하기 위한 제약조건</li>
<li>컬럼 수준의 제약조건 또는 테이블 수준의 제약조건 설정 가능</li>
<li>테이블에 한번만 설정 가능하며 NULL을 미허용</li>
<li>테이블에 한번만 설정 가능하므로 제약조건의 이름을 지정 생략 가능하지만 테이블의 관계를 구체화하기 위해 반드시 설정<h4 id="4-foreign-key">4. FOREIGN KEY</h4>
</li>
<li>FOREIGN KEY : 부모 테이블에 저장된 행의 컬럼값을 참조하여 자식 테이블의 컬럼에 비정상적인 값이 저장되는 것을 방지하는 제약조건</li>
<li>테이블 수준의 제약조건만 설정 가능</li>
<li>부모 테이블의 PRIMARY KEY 제약조건이 설정된 컬럼을 참조하여 자식 테이블의 컬럼에 FOREIGN KEY 제약조건 설정</li>
<li>테이블의 관계를 구현하기 위한 제약조건</li>
<li>FOREIGN KEY 제약조건 설정시 ON DELETE CASCADE 또는 ON DELETE SET NULL 기능 추가</li>
<li>ON DELETE CASCADE : 부모 테이블의 행을 삭제할 경우 자식 테이블의 참조 컬럼값이 저장된 행 삭제 처리</li>
<li>ON DELETE SET NULL : 부모 테이블의 행을 삭제할 경우 자식 테이블의 참조 컬럼값을 NULL로 변경하는 기능 제공</li>
</ul>
<h3 id="5-테이블-삭제">5. 테이블 삭제</h3>
<ul>
<li>테이블 삭제 : 테이블에 저장된 모든 행 삭제<pre><code class="language-sql">DROP TABLE 테이블명</code></pre>
</li>
<li>TNAME 컬럼에 BIN으로 시작되는 테이블은 오라클 휴지통에 존재하는 삭제 테이블</li>
<li>오라클은 테이블을 삭제할 경우 테이블을 휴지통으로 이동하여 삭제 처리 (삭제 테이블 복구 가능)</li>
<li>SHOW RECYCLEBIN : 오라클 휴지통에 존재하는 객체 목록 확인</li>
<li>오라클 휴지통에는 테이블뿐만 아니라 테이블과 종속관계에 있는 인덱스 객체도 같이 존재</li>
</ul>
<ul>
<li>오라클 휴지통에 존재하는 삭제 테이블 복구<pre><code class="language-sql">FLASHBACK TABLE 테이블명 TO BEFORE DROP</code></pre>
</li>
<li>오라클 휴지통의 테이블 삭제<pre><code class="language-sql">PURGE TABLE 테이블명</code></pre>
</li>
<li>오라클 휴지통의 모든테이블 삭제<pre><code class="language-sql">PURGE RECYCLEBIN</code></pre>
</li>
<li>오라클 휴지통을 사용하지 않고 물리적 삭제<pre><code class="language-sql">DROP TABLE 테이블명 PURGE</code></pre>
</li>
</ul>
<h3 id="6-truncate-rename-alter">6. TRUNCATE, RENAME, ALTER</h3>
<ul>
<li>테이블을 생성 직후의 상태로 초기화 처리하는 명령 (테이블에 저장된 모든 행 삭제 처리)<pre><code class="language-sql">TRUNCATE TABLE 테이블명</code></pre>
</li>
<li>테이블의 이름 변경<pre><code class="language-sql">RENAME 기존테이블명 TO 변경테이블명</code></pre>
</li>
<li>테이블의 속성 및 제약조건 변경 (변경옵션에 의해 테이블 속성에 대한 추가,삭제,변경 및 제약조건에 대한 추가,삭제 가능)<pre><code class="language-sql">ALTER TABLE 테이블명 변경옵션</code></pre>
</li>
<li>테이블의 속성 추가 (컬럼 기본값 및 컬럼 수준의 제약조건 설정 가능)<pre><code class="language-sql">ALTER TABLE 테이블명 ADD(컬럼명 자료형[(크기)] [DEFAULT 기본값] [제약조건])</code></pre>
</li>
<li>테이블 속성의 컬럼 자료형 또는 크기 변경 (컬럼 기본값 및 컬럼 수준의 제약조건 설정 가능)<pre><code class="language-sql">ALTER TABLE 테이블명 MODIFY(컬럼명 자료형[(크기)] [DEFAULT 기본값] [제약조건])</code></pre>
</li>
<li>테이블 속성의 컬럼명 변경<pre><code class="language-sql">ALTER TABLE 테이블명 RENAME COLUMN 기존 컬럼명 TO 변경 컬럼명</code></pre>
</li>
<li>테이블 속성 삭제 (테이블 속성에 저장된 컬럼값 삭제)<pre><code class="language-sql">ALTER TABLE 테이블명 DROP COLUMN 컬럼명</code></pre>
</li>
<li>테이블 수준의 제약조건은 ADD 옵션을 사용하여 추가 가능<pre><code class="language-sql">ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] 제약조건</code></pre>
</li>
<li>제약조건 삭제<pre><code class="language-sql">ALTER TABLE 테이블명 DROP [PRIMARY KEY | CONSTRAINT 제약조건명]</code></pre>
</li>
</ul>
<hr>
<h2 id="3-뷰-view">3. 뷰 (VIEW)</h2>
<h3 id="1-뷰-view">1. 뷰 (VIEW)</h3>
<ul>
<li>뷰 (VIEW) : 테이블을 기반으로 만들어지는 가상의 테이블</li>
<li>단순뷰와 복합뷰로 구분</li>
<li>뷰는 테이블의 행검색 또는 테이블의 권한 설정을 간편하게 제공하기 위해 생성</li>
</ul>
<h3 id="2-단순뷰">2. 단순뷰</h3>
<ul>
<li>단순뷰 : 하나의 테이블을 기반으로 생성되는 뷰</li>
<li>뷰를 이용한 테이블의 검색뿐만 아니라 테이블의 행 삽입, 삭제, 변경 가능</li>
<li>단순뷰 생성시 그룹함수 또는 DISTINCT 키워드를 사용한 경우 검색만 가능</li>
<li>행에 대한 삽입, 삭제, 변경 가능</li>
</ul>
<h3 id="3-복합뷰">3. 복합뷰</h3>
<ul>
<li>복합뷰 : 여러개의 테이블을 기반으로 생성된 뷰</li>
<li>테이블의 행를 결합하여 생성된 뷰</li>
<li>검색만 가능</li>
</ul>
<h3 id="4-뷰-생성">4. 뷰 생성</h3>
<ul>
<li>서브쿼리 사용<pre><code class="language-sql">CREATE [ON REPLACE] VIEW [(FORCE|NOFORCE)] VIEW 뷰이름 [(컬럼명, 컬럼명, ...)]
  AS SELECT 검색대상, 검색대상, ... FROM 테이블명 [WHERE 조건식]
      [WITH CHECK OPTION] [WITH READ ONLY]</code></pre>
</li>
<li>CREATE ON REPLACE : 동일한 이름의 뷰가 있는 경우 기존뷰를 삭제하고 새로운 뷰 생성</li>
<li>FORCE : 서브쿼리의 검색결과가 없어도 강제로 뷰를 생성하기 위한 기능 제공</li>
<li>WITH CHECK OPTION : 뷰를 생성한 서브쿼리의 조건식에서 사용된 컬럼값을 변경하지 못하도록 설정하는 기능 제공</li>
<li>WITH READ ONLY : 검색만 가능하도록 설정하는 기능 제공</li>
<li>USER_VIEW : 뷰 정보를 제공하는 딕셔너리</li>
</ul>
<h3 id="5-뷰-삭제">5. 뷰 삭제</h3>
<pre><code class="language-sql">DROP VIEW 뷰이름</code></pre>
<hr>
<h2 id="3-시퀀스-sequence">3. 시퀀스 (SEQUENCE)</h2>
<h3 id="1-시퀀스-sequence">1. 시퀀스 (SEQUENCE)</h3>
<ul>
<li>시퀀스 (SEQUENCE) : 숫자값(정수값)을 저장하여 자동 증가되는 값을 제공하는 객체<pre><code class="language-sql">CREATE SEQUENCE 시퀀스명 [START WITH 초기값] [INCREMENT BY 증가값]
  [MAXVALUE 최대값] [MINVALUE 최소값] [CYCLE] [CACHE 개수]</code></pre>
</li>
<li>START WITH 초기값 : 시퀀스에 저장된 초기값 설정 (생략 : NULL)</li>
<li>INCREMENT BY 증가값 : 자동 증가되는 숫자값 설정 (생략 : 1)</li>
<li>MAXVALUE 최대값 : 시퀀스에 저장된 저장 가능한 최대값 설정 (생략 : 오라클에서 숫자값으로 표현 가능한 최대값)</li>
<li>MINVALUE 최소값 : 시퀀스에 저장 가능한 최소값 설정 (생략 : 1)</li>
<li>CYCLE : 시퀀스에 저장된 값이 최대값을 초과할 경우 최소값부터 다시 제공되도록 반복하는 기능을 제공</li>
<li>CACHE 개수 : 임의의 저장공간에 자동 증가값을 미리 생성하여 제공할 수 있는 개수 설정 (생략 : 20)</li>
<li>USER_SEQUENCE : 시퀀스 정보를 제공하는 딕셔너리<h3 id="2-시퀀스-사용">2. 시퀀스 사용</h3>
</li>
<li>시퀀스에 저장된 숫자값 확인<pre><code class="language-sql">시퀀스명.CURRVAL</code></pre>
</li>
<li>시퀀스에 저장된 숫자값을 이용하여 증가된 값을 제공하는 방법<pre><code class="language-sql">시퀀스명.NEXTVAL</code></pre>
</li>
<li>시퀀스 변경<pre><code class="language-sql">ALTER SEQUENCE 시퀀스명 [MAXVALUE | MINVALUE | INCREMENT BY] 변경값</code></pre>
</li>
<li>시퀀스 삭제<pre><code class="language-sql">DROP SEQUENCE 시퀀스명</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Oracle DB] TCL (TRANSACTION CONTROL LANGUAGE)]]></title>
            <link>https://velog.io/@yh_bang/Oracle-DB-TCL-TRANSACTION-CONTROL-LANGUAGE</link>
            <guid>https://velog.io/@yh_bang/Oracle-DB-TCL-TRANSACTION-CONTROL-LANGUAGE</guid>
            <pubDate>Thu, 04 May 2023 08:59:12 GMT</pubDate>
            <description><![CDATA[<h2 id="tcl-transaction-control-language">TCL (TRANSACTION CONTROL LANGUAGE)</h2>
<h3 id="1-tcl-transaction-control-language">1. TCL (TRANSACTION CONTROL LANGUAGE)</h3>
<ul>
<li>TCL (TRANSACTION CONTROL LANGUAGE) : 트랜잭션 제어어
=&gt; 트랜잭션에 저장된 SQL 명령을 실제 테이블에 적용하거나 테이블에 적용하지 않고 취소하는 명령</li>
<li>트랜잭션 (TRANSACTION) : 사용자 접속 환경(세션)에서 전달된 SQL 명령을 DBMS 서버에 저장하는 논리적인 작업단위
=&gt; SQL 명령을 전달받아 DBMS 서버는 실제 테이블에 SQL 명령을 적용하지 않고 트랜잭션에 저장하여 검색시 사용</li>
</ul>
<h3 id="2-트랜잭션">2. 트랜잭션</h3>
<ul>
<li>데이터 일관성 : DBMS 서버에 접속된 모든 사용자에게 동일한 검색결과 제공</li>
<li>데이터 무결성 : 테이블에 비정상적인 값을 저정하지 않아 정상적인 검색결과 제공</li>
<li>데이터 잠김 기능(LOCK)을 제공하기 위해 트랜잭션 사용</li>
<li>현재 세션에서 작업중인 테이블의 행을 다른 세션에서 작업하지 못하도록 트랜잭션을 사용하여 데이터 잠금 기능 제공</li>
<li>현재 세션에서 작업중인 테이블의 행을 다른 세션에서 조작할 경우 트랜잭션의 데이터 잠금 기능으로 인해 다른 세션이 일시적으로 중지
=&gt; 현재 세션에서 작업중인 테이블의 행에 대한 트랜잭션의 명령을 COMMIT 또는 ROLLBACK 처리 해야만 다른 세션의 DML 명령이 실행 가능</li>
</ul>
<h3 id="3-commit-처리">3. COMMIT 처리</h3>
<ul>
<li>트랜잭션에 저장된 SQL 명령을 실제 테이블에 적용하기 위해서는 COMMIT 처리 (COMMIT 후 트랜잭션 초기화)</li>
</ul>
<ol>
<li>현재 세션에서 정상적으로 서버 접속을 종료한 경우 자동 COMMIT 처리</li>
<li>DDL 명령 또는 DCL 명령을 작성하여 전달할 경우 자동 COMMIT 처리</li>
<li>서버에 전달하여 트랜잭션에 저장된 DML 명령은 COMMIT 명령을 사용하여 COMMIT 처리</li>
</ol>
<h3 id="4-rollback-처리">4. ROLLBACK 처리</h3>
<ul>
<li>트랜잭션에 저장된 SQL 명령을 실제 테이블에 적용하지 않고 초기화하기 위해 ROLLBACK 처리</li>
</ul>
<ol>
<li>현재 세션에서 비정상적으로 서버 접속이 종료된 경우 자동 ROLLBACK 처리</li>
<li>서버에 전달하여 트랜잭션에 저장된 DML 명령은 ROLLBACK 명령을 사용하여 ROLLBACK 처리</li>
</ol>
<h3 id="5-savepoint">5. SAVEPOINT</h3>
<ul>
<li>SAVEPOINT : 트랜잭션에 라벨(위치정보)을 부여하는 명령</li>
<li>트랜잭션에 저장된 DML 명령을 라벨을 이용하여 원하는 위치의 DML 명령만 ROLLBACK 처리하기 위해 SAVEPOINT 사용<pre><code class="language-sql">SAVEPOINT 라벨명</code></pre>
</li>
<li>SQVEPOINT 명령으로 설정된 라벨을 이용한 ROLLBACK 처리<pre><code class="language-sql">ROLLBACK TO 라벨명</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Oracle DB] DML (INSERT, UPDATE, DELETE, MERGE)]]></title>
            <link>https://velog.io/@yh_bang/Oracle-DB-DML-INSERT-DELETE</link>
            <guid>https://velog.io/@yh_bang/Oracle-DB-DML-INSERT-DELETE</guid>
            <pubDate>Thu, 04 May 2023 08:37:34 GMT</pubDate>
            <description><![CDATA[<h2 id="1-dml-data-manipulation-language">1. DML (DATA MANIPULATION LANGUAGE)</h2>
<h3 id="1-dml-data-manipulation-language-1">1. DML (DATA MANIPULATION LANGUAGE)</h3>
<ul>
<li>DML (DATA MANIPULATION LANGUAGE) : 데이터 조작어</li>
<li>테이블의 행에 대한 삽입, 변경, 삭제 기능을 제공하는 SQL 명령</li>
<li>DML 명령 실행 후 COMMIT(DML 명령의 적용) 또는 ROLLBACK 명령(DML 명령의 취소)을 실행하는 것을 권장</li>
</ul>
<h3 id="2-제약조건">2. 제약조건</h3>
<ul>
<li>PK (PRIMARY KEY) : 중복된 컬럼값 저장을 방지하기 위한 제약조건</li>
<li>FK (FOREIGN KEY) : 자식테이블의 컬럼값으로 부모테이블의 컬럼값을 참조하여 저장하는 기능을 제공하는 제약조건</li>
</ul>
<h3 id="3-insert">3. INSERT</h3>
<ul>
<li><p>INSERT : 테이블에 행을 삽입하는 SQL 명령</p>
<pre><code class="language-sql">INSERT INTO 테이블명 VALUES(값, 값, ...)
INSERT INTO 테이블명(컬럼명, 컬럼명, ...) VALUES(값, 값, ...)
INSERT INTO 테이블명 SELECT 컬럼값, 컬럼값 FROM 테이블명</code></pre>
</li>
<li><p>테이블에 삽입될 행의 컬럼값은 테이블 속성에 맞게 차례대로 나열하여 저장되도록 작성</p>
</li>
<li><p>테이블 속성의 순서대로 자료형에 맞는 컬럼값을 생략 없이 차례대로 나열해서 전달해야만 행 삽입 처리</p>
</li>
<li><p>삽입행으로 전달될 컬럼값의 개수가 테이블의 컬럼 개수와 맞지 않을 경우 에러 발생</p>
</li>
<li><p>삽입행으로 전달될 컬럼값의 자료형이 테이블의 컬럼의 자료형과 맞지 않을 경우 에러 발생</p>
</li>
<li><p>삽입행으로 전달될 컬럼값이 테이블의 컬럼의 크기보다 큰 경우 에러 발생</p>
</li>
<li><p>테이블 컬럼에 부여된 제약 조건을 위반하는 값을 전달할 경우 에러 발생</p>
</li>
</ul>
<h3 id="4-update">4. UPDATE</h3>
<ul>
<li>UPDATE : 테이블에 저장된 행의 컬럼값을 변결하는 SQL 명령<pre><code class="language-sql">UPDATE 테이블명 SET 컬럼명=변경값, 컬럼명=변경값, ... [WHERE 조건식]</code></pre>
</li>
<li>테이블에 저장된 행에서 WHERE 조건식의 결과가 참인 행의 컬럼값 변경</li>
<li>WHERE를 생략할 경우 테이블에 저장된 모든 행의 컬럼값을 동일하게 변경 처리</li>
<li>WHERE 조건식에서 사용하는 비교컬럼은 PK 제약조건이 부여된 컬럼을 이용하여 변경하는 것을 권장</li>
<li>일반적으로 PK 제약조건이 부여된 컬럼값을 변경하는 것은 비권장</li>
<li>컬럼의 변경값은 컬럼의 자료형, 크기, 제약조건이 맞는 경우에만 변경 처리</li>
</ul>
<h3 id="5-delete">5. DELETE</h3>
<ul>
<li>DELETE : 테이블에 저장된 행을 삭제하는 SQL 명령<pre><code class="language-sql">DELETE 테이블명 FROM 테이블명 [WHERE 조건식]</code></pre>
</li>
<li>테이블에 저장된 행에서 WHERE 조건식의 결과가 참인 행 삭제</li>
<li>WHERE 생략한 경우 테이블에 저장된 모든 행 삭제</li>
<li>WHERE 조건식에서 사용하는 비교 컬럼은 PK 제약조건이 부여된 컬럼을 이용하여 삭제하는 것을 권장</li>
<li>자식테이블에서 참조되는 부모테이블의 행은 FK 제약조건에 의해 삭제 불가</li>
</ul>
<h3 id="6-merge">6. MERGE</h3>
<ul>
<li>MERGE : 원본테이블의 행을 검색하여 타겟테이블에 행으로 삽입하거나 타겟테이블에 저장된 행의 컬럼값을 변경하는 SQL 명령<pre><code class="language-sql">MERGE INTO 타겟테이블명 USING 원본테이블명 ON (조건식)
  WHEN MATCHED THEN UPDATE SET 타겟컬럼명=원본컬럼명, ...
      WHEN NOT MATCHED THEN INSERT(타켓컬럼명, ...) VALUES(원본컬럼명, ...)</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Oracle DB] 서브쿼리 (SUBQUERY)]]></title>
            <link>https://velog.io/@yh_bang/Oracle-DB-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-SUBQUERY</link>
            <guid>https://velog.io/@yh_bang/Oracle-DB-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-SUBQUERY</guid>
            <pubDate>Wed, 03 May 2023 08:49:34 GMT</pubDate>
            <description><![CDATA[<h2 id="서브쿼리-subquery">서브쿼리 (SUBQUERY)</h2>
<h3 id="1-서브쿼리-subquery">1. 서브쿼리 (SUBQUERY)</h3>
<ul>
<li>서브쿼리 (SUBQUERY) : SQL 명령에 포함되어 실행되는 SELECT 명령</li>
<li>다수의 SQL 명령으로 얻을 수 있는 결과를 하나의 SQL 명령으로 얻기 위해 사용하는 기능</li>
<li>서브쿼리의 명령을 먼저 실행하고 검색되는 결과값을 사용하여 메인쿼리의 명령을 실행</li>
<li>SELECT 명령의 서브쿼리는 FROM, WHERE, HAVING 에서 &#39;(&amp;nbsp)&#39;안에 작성하여 실행</li>
<li>오라클은 서브쿼리 안에 서브쿼리를 사용하여 검색 가능</li>
</ul>
<h3 id="2-서브쿼리-위치에-따른-종류">2. 서브쿼리 위치에 따른 종류</h3>
<h4 id="1스칼라-서브쿼리-scalar-subquery--select-where-nested-subquery-group-by-having-order-by">1.스칼라 서브쿼리 (SCALAR SUBQUERY) : SELECT, WHERE (NESTED SUBQUERY), GROUP BY, HAVING, ORDER BY</h4>
<ul>
<li>하나의 SQL 명령으로 취급되지만 내부적으로는 하나의 함수로 처리 </li>
<li>함수는 다수의 입력이 있어도 처리 결과는 하나만 제공</li>
<li>스칼라 서브쿼리도 일종의 함수이므로 중첩 사용 가능하나 서브쿼리의 결과값이 두개 이상이거나 결과값의 자료형이 다른 경우 에러 발생</li>
<li>대량의 데이터 처리시 스칼라 서브쿼리의 남발은 성능의 저하는 유발할 수 있으므로 테이블 결합을 사용하는 것을 권장</li>
</ul>
<h4 id="2인라인뷰-서브쿼리inline-view-subquery--from">2.인라인뷰 서브쿼리(INLINE VIEW SUBQUERY) : FROM</h4>
<ul>
<li>INLINE VIEW : 서브쿼리를 이용하여 일시적으로 생성된 가상의 테이블 (논리적 테이블)</li>
<li>테이블 결합 횟수의 감소 및 절차 지향적인 기능 부여</li>
</ul>
<h3 id="3-where-위치에서-사용">3. WHERE 위치에서 사용</h3>
<ul>
<li>서브쿼리를 사용하여 하나의 SECLET 명령으로 원하는 결과 검색 가능</li>
<li>WHERE에서 조건식의 비교값 대신 서브쿼리의 검색 결과값을 제공받아 검색</li>
<li>조건식의 비교대상(컬럼)과 같은 자료형의 값이 하나만 검색되도록 서브쿼리 작성</li>
<li>서브쿼리로 단일행(SINGLE-ROW)의 단일컬럼(SINGLE-COLUMN)에 대한 값이 검색</li>
<li>서브쿼리의 검색결과가 다중행인 경우 &#39;=&#39;연산자 대신 IN 키워드를 사용하여 컬럼값 검색 가능</li>
<li>서브쿼리의 검색결과가 다중행인 경우 &#39;&gt;&#39; 또는 &#39;&lt;&#39; 연산자로 컬럼값을 비교하기 위해 서브쿼리 앞에 ANY 또는 ALL 키워드를 사용하여 검색</li>
<li>다중행 서브쿼리의 ANY 또는 ALL 키워드 대신 단일행 서브쿼리에 MAX 또는 MIN 함수를 사용하는 것을 권장</li>
</ul>
<h3 id="4-from-위치에서-사용">4. FROM 위치에서 사용</h3>
<ul>
<li>FROM에 서브쿼리를 사용하여 검색</li>
<li>ROWNUM : 검색행에 순차적인 숫자값을 제공하는 키워드</li>
<li>인라인뷰에 테이블 별칭을 부여하여 사용 가능 [테이블명.*] 형식으로 표현하여 테이블의 모든 컬럼 검색</li>
<li>ROWNUM 키워드로 행번호를 제공받아 WHERE의 조건식에서 비교할 경우 &#39;&lt;&#39;, &#39;&lt;=&#39; 연산자를 이용한 검색은 가능</li>
<li>ROWNUM 키워드로 행번호를 제공받아 WHERE의 조건식에서 비교할 경우 &#39;=&#39;, &#39;&gt;&#39;, &#39;&gt;=&#39; 연산자를 이용한 검색 불가능 (ROWNUM 키워드는 행번호를 검색행에 순차적으로 제공)
=&gt; 테이블의 행을 정렬하여 검색한 후 행번호를 제공받아 인라인뷰로 생성하고 행번호 대신 사용할 수 있는 컬럼 별칭을 부여하여 WHERE의 조건식에서 별칭을 이용한 행 검색</li>
</ul>
<h3 id="5-집합연산자-set-연산자">5. 집합연산자 (SET 연산자)</h3>
<ul>
<li>집합연산자 : 두 개의 SELECT 명령에 대한 검색결과를 이용하여 집합 결과값을 제공하는 연산자</li>
<li>합집합 (UNION), 교집합 (INTERSECT), 차집합 (MINUS)</li>
<li>집합연산자 사용시 두 개의 SELECT 명령에 대한 검색대상의 자료형 또는 개수가 다른 경우 에러 발생</li>
<li>집합연산자 사용시 두 개의 SELECT 명령에 대한 검색대상의 개수가 다른 경우 동일 자료형의 임의값을 사용하거나 NULL을 사용하여 집합 처리 가능</li>
<li>집합연산자 사용시 두 개의 SELECT 명령에 대한 검색대상의 다료형이 다른 경우 변환함수를 사용하여 변환함수를 사용하여 집합 처리 가능</li>
</ul>
<h4 id="1-합집합-union">1. 합집합 (UNION)</h4>
<ul>
<li>합집합 (UNION) : 두 개의 SELECT 명령으로 검색된 행을 합하여 결과값을 제공하는 연산자</li>
<li>UNION ALL : 두 개의 SELECT 명령으로 검색된 행을 합하여 결과값을 제공하는 연산자 (중복행 포함)<pre><code class="language-sql">SELECT 검색대상, ... FROM 테이블명1 UNION SELECT 검색대상, ... FROM 테이블명2</code></pre>
</li>
<li>두 개의 SELECT 명령은 검색대상의 자료형과 개수가 반드시 일치되도록 검색</li>
</ul>
<h4 id="2-교집합-intersect">2. 교집합 (INTERSECT)</h4>
<ul>
<li>교집합 (INTERSECT) : 두 개의 SELECT 명령으로 검색된 행에서 중복된 행을 제공하는 연산자<pre><code class="language-sql">SELECT 검색대상, ... FROM 테이블명1 INTERSECT
  SELECT 검색대상, ... FROM 테이블명2</code></pre>
</li>
</ul>
<h4 id="3-차집합-minus">3. 차집합 (MINUS)</h4>
<ul>
<li>차집합 (MINUS) : 두 개의 SELECT 명령으로 검색된 행에 제외한 행을제공하는 연산자
```sql
SELECT 검색대상, ... FROM 테이블명1 MINUS    SELECT 검색대상, ... FROM 테이블명2</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Oracle DB] JOIN]]></title>
            <link>https://velog.io/@yh_bang/Oracle-DB-JOIN</link>
            <guid>https://velog.io/@yh_bang/Oracle-DB-JOIN</guid>
            <pubDate>Wed, 03 May 2023 04:16:32 GMT</pubDate>
            <description><![CDATA[<h2 id="1-join">1. JOIN</h2>
<ul>
<li>JOIN : 두 개 이상의 테이블에서 행을 결합하여 원하는 컬럼값을 검색하기 위한 기능</li>
<li>두 개 이상의 테이블에서 컬럼값을 검색하기 위해서는 반드시 검색행을 결합하기 위한 조건을 제공하여 검색
=&gt; 카테시안 곱 (CARTESIAN PRODUCT) : 두 개 이상의 테이블을 결합조건 없이 검색한 경우 발생되는 검색 결과
=&gt; 결합조건 없이 검색한 경우 두 개 이상의 테이블에 저장된 모든 행을 교차 결합하여 검색 결과를 제공</li>
</ul>
<hr>
<h2 id="2-동등결합-equi-join">2. 동등결합 (EQUI JOIN)</h2>
<ul>
<li>동등결합 (EQUI JOIN) : 두 개 이상의 테이블에서 결합조건에 &#39;=&#39; 연산자를 사용하여 참인 행만 결합하여 검색</li>
<li>결합 테이블에 같은 이름의 컬럼을 동시에 검색할 경우 컬럼 별칭을 사용하여 검색하는 것을 권장</li>
<li>TABLE ALIAS : 테이블에 일시적으로 새로운 이름을 부여하여 용하는 기능<pre><code class="language-sql">SELECT 검색대상, ... FROM 테이블명 별칭, 테이블명 별칭, ...</code></pre>
</li>
</ul>
<hr>
<h2 id="3-비동등결합-non-equi-join">3. 비동등결합 (NON-EQUI JOIN)</h2>
<ul>
<li>비동등결합 (NON-EQUI JOIN) : 두 개 이상의 테이블의 결합조건에 &#39;=&#39;연산자가 아닌 다른 연산자를 사용하여 참인 행을 결합하여 검색</li>
</ul>
<hr>
<h2 id="4-외부결합-outer-join">4. 외부결합 (OUTER JOIN)</h2>
<ul>
<li>외부결합 (OUTER JOIN) : 결합조건이 참인 행만 경합하여 검색하는 것이 아니라 결합조건이 맞지 않는 행도 NULL과 결합하여 검색</li>
<li>결합 조건식의 테이블에 &#39;(+)&#39;를 사용하면 결합조건이 맞지 않는 행을 NULL과 결합하여 검색</li>
</ul>
<hr>
<h2 id="5-자기결합-self-join">5. 자기결합 (SELF JOIN)</h2>
<ul>
<li>자기결합 (SELF JOIN) : 하나의 테이블을 서로 다른 별칭을 부여하여 2개 이상의 테이블로 구분하여 행을 결합하여 검색</li>
<li>검색대상을 사용할 때 테이블을 명확하게 구분하기 위해 테이블 별칭을 사용하여 컬럼값 검색</li>
</ul>
<hr>
<blockquote>
<p>결합조건과 행조건을 WHERE에서 같이 사용하므로 유지보수의 불편함 존재
=&gt; 1999년 채택된 표준 SQL(SQL3)에서는 테이블의 결합조건과 행의 조건을 구분하여 사용될 수 있도록 다양한 테이블 결합 관련 기능 제공</p>
</blockquote>
<h2 id="6-cross-join">6. CROSS JOIN</h2>
<ul>
<li>CROSS JOIN : 결합 테이블의 모든 행을 교차 결합하여 검색<pre><code class="language-sql">SELECT 검색대상, 검색대상, ... FROM 테이블명1 CROSS JOIN 테이블명2</code></pre>
</li>
</ul>
<hr>
<h2 id="7-natural-join">7. NATURAL JOIN</h2>
<ul>
<li>NATURAL JOIN : 결합 테이블에 같은 이름의 컬럼이 하나만 있는 경우 같은 이름의 컬럼에 저장된 컬럼값이 같은 행을 서로 결합하여 검색</li>
<li>결합 테이블에 같은 이름의 컬럼값을 이용하여 자동으로 행을 결합<pre><code class="language-sql">SELECT 검색대상, 검색대상, ... FROM 테이블명1 NATURAL JOIN 테이블명2</code></pre>
</li>
</ul>
<hr>
<h2 id="8-join-using">8. JOIN USING</h2>
<ul>
<li>JOIN USING : 결합 테이블에 같은 이름의 컬럼이 여러개 있는 경우 같은 이름의 컬럼에 저장된 컬럼값으로 행을 결합하여 검색<pre><code class="language-sql">SELECT 검색대상, 검색대상, ... FROM 테이블명1 JOIN 테이블명2 USING(컬럼명)</code></pre>
</li>
</ul>
<hr>
<h2 id="9-inner-join">9. INNER JOIN</h2>
<ul>
<li>INNER JOIN : 결합조건이 참인 행을 결합하여 검색</li>
<li>&#39;INNER&#39;는 생략 가능<pre><code class="language-sql">SELECT 검색대상, 검색대상, ... FROM 테이블명1 INNER JOIN 테이블명2 ON 결합조건</code></pre>
</li>
</ul>
<hr>
<h2 id="10-outer-join">10. OUTER JOIN</h2>
<ul>
<li>OUTER JOIN : 결합조건이 참인 행만 결합하여 검색하는 것이 아니라 결합조건이 맞지 않는 행도 NULL과 결합하여 검색<pre><code class="language-sql">SELECT 검색대상, 검색대상, ... FROM 테이블명1 {LEFT|RIGTH|FULL}
  OUTER JOIN 테이블명2 ON 결합조건</code></pre>
</li>
<li>LEFT OUTER JOIN : 왼쪽 테이블의 모든 행을 검색하고 결합조건이 맞지 않는 오른쪽 테이블의 행은 NULL과 결합</li>
<li>RIGHT OUTER JOIN : 오른쪽 테이블의 모든 행을 검색하고 결합조건이 맞지 않는 왼쪽 테이블의 행은 NULL과 결합</li>
<li>FULL OUTER JOIN : 양쪽 테이블의 모든 행을 검색하고 결합조건이 맞지 않는 양쪽 테이블의 행은 NULL과 결합</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Oracle DB] Oracle DB 쿼리문 (SELECT)]]></title>
            <link>https://velog.io/@yh_bang/Oracle-DB-Oracle-DB-%EC%BF%BC%EB%A6%AC%EB%AC%B8</link>
            <guid>https://velog.io/@yh_bang/Oracle-DB-Oracle-DB-%EC%BF%BC%EB%A6%AC%EB%AC%B8</guid>
            <pubDate>Tue, 02 May 2023 08:56:53 GMT</pubDate>
            <description><![CDATA[<h2 id="1-기초">1. 기초</h2>
<h3 id="1-기초-지식">1. 기초 지식</h3>
<ul>
<li>SQL 명령은 대소문자를 구분하지 않으며 하나의 명령으로 처리되도록 &#39;;&#39; 기호 사용</li>
<li>SQL 명령은 대소문자를 구분하지 않지만 &#39;&#39;에 들어가는 문자값은 대소문자를 구분</li>
<li>식별자(테이블 명, 컬럼명, 별칭 등)은 스네이크 표기법 사용하여 작성</li>
<li>SQL 명령은 예약어(키워드)와 사용자 정의 명칭(식별자)의 단어로 구성</li>
<li>테이블 (TABLE) : 데이터베이스에서 데이터(행)을 저장하기 위한 기본 객체</li>
<li>DQL (DATA QUERY LANGUAGE) : 테이블에 저장된 행을 검색하기 위한 SQL 명령 (데이터 질의어)</li>
</ul>
<h3 id="2-oracle-sql-developer">2. Oracle SQL Developer</h3>
<ul>
<li>[CTRL] + [ENTER] : 커서 위치의 SQL 명령을 전달하여 실행</li>
<li>[F5] : 워크시트에 작성된 모든 SQL 명령을 전달하여 실행</li>
<li>USER : 현재 접속사용자의 이름을 표현하기 위한 키워드</li>
<li>SHOW USER : 현재 서버에 접속한 사용자의 이름을 확인하기 위한 명령</li>
<li>SELECT TABLE_NAME FROM TABS : 현재 접속 사용자가 접근 가능한 스키마에 존재하는 테이블 목록 확인</li>
<li>DESC [테이블명] : 테이블의 구조 확인 (컬럼명과 자료형)</li>
</ul>
<h3 id="3-dql-data-query-language">3. DQL (DATA QUERY LANGUAGE)</h3>
<ul>
<li>SELECT : 하나 이상의 테이블에서 행을 검색하기 위한 명령</li>
</ul>
<hr>
<h2 id="2-select">2. SELECT</h2>
<ul>
<li>SELECT : 하나 이상의 테이블에서 행을 검색하기 위한 명령</li>
<li>검색대상 : * (모든 컬럼), 컬럼명, 연산식, 함수 등</li>
<li>검색문자 : [%] (전체), [_] (문자 하나)</li>
<li>COLUMN ALIAS : 검색대상에 별칭을 부여하는 기능
=&gt; 검색대상을 명확하게 구분하기 위해 COLUMN ALIAS 기능 사용</li>
<li>컬럼명 BETWEEN 작은값 AND 큰값 : 범위를 효현한 조건식을 이용하여 컬럼값이 작은값부터 큰 값 범위에 포함될 경우의 행 검색</li>
<li>컬럼명 IN (값, 값, ...) : 컬럼값이 나열된 값들중 하나에 포함되도록 행을 검색</li>
<li>컬럼명 LIKE &#39;검색문자를 포함한 비교값&#39; : 검색문자를 이용하여 컬럼값을 비교 검색할 경우 [=] 연산자 대신 LIKE 키워드 사용</li>
<li>컬럼명 IS NULL or 컬럼명 IS NOT NUL : IS 키워드를 사용하여 NULL을 구분하는 조건식 사용</li>
</ul>
<h3 id="여러-형식">여러 형식</h3>
<pre><code class="language-sql">SELECT 검색대상, 검색대상, ... FROM 테이블명
=&gt; 하나의 테이블에 저장된 모든 행을 검색하기 위한 SELECT 명령

SELECT 검색대상 (AS) 별칭, 검색대상 (AS) 별칭, ... FROM 테이블명

SELECT 검색대상, 검색대상, 검색대상 * 12 FROM 테이블명
=&gt; 검색대상으로 컬럼값을 이용한 연산식 사용 가능

SELECT 검색대상 || 검색대상 FROM 테이블명
=&gt; 검색대상에 || 기호를 사용하여 문자값으로 결합하여 검색

SELECT DISTINCT 검색대상, 검색대상, ... FROM 테이블명
=&gt; 검색대상의 중복값을 제외하고 유일한 하나의 컬럼값만 검색

SELECT 검색대상, 검색대상, ... FROM 테이블명 WHERE 조건식
=&gt; 조건식을 사용하여 조건이 참인 행만 검색

SELECT 검색대상, 검색대상, ... FROM 테이블명 WHERE NOT(검색대상=&#39;&#39;);
=&gt; NOT 키워드를 사용하여 조건식의 결과가 참이 아닌 거짓인 행만 검색

SELECT 검색대상, 검색대상, FROM 테이블명 ORDER BY 검색대상 DESC, 검색대상 DESC, ...
=&gt; 테이블에 저장된 모든 검색대상을 내림차순 정렬 검색

SELECT 검색대상, 검색대상, FROM 테이블명 ORDER BY 검색대상 (ASC), 검색대상 (ASC), ...
=&gt; 테이블에 저장된 모든 검색대상을 오림차순 정렬 검색</code></pre>
]]></description>
        </item>
    </channel>
</rss>