<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>firecurry_94.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 20 Oct 2023 00:37:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. firecurry_94.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/firecurry_94" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Thymeleaf]]></title>
            <link>https://velog.io/@firecurry_94/Thymeleaf-t41zsyxb</link>
            <guid>https://velog.io/@firecurry_94/Thymeleaf-t41zsyxb</guid>
            <pubDate>Fri, 20 Oct 2023 00:37:00 GMT</pubDate>
            <description><![CDATA[<h1 id="템플릿-엔진">템플릿 엔진</h1>
<ul>
<li>템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서(응답 화면)를 출력하는 것</li>
<li><blockquote>
<p>만들어둔 화면(html)에 데이터를 추가하여 하나의 html로 만들어서 응답 (JSP도 템플릿 엔진)</p>
</blockquote>
<h1 id="thymeleaf">Thymeleaf</h1>
</li>
<li>웹 및 독립 실행형 환경 모두를 위한 최신 서버 측 Java 템플릿 엔진</li>
<li>HTML 파일에서 th*Thymeleaf) 속성을 이용해 컨트롤러로 부터 전달받은 데이터를 이용해 동적 페이지를 만들 수 있음.</li>
<li>Spring Boot에서는 JSP가 아닌 Thymeleaf 사용을 권장하고 있음.<h1 id="thymeleaf-사용-준비">Thymeleaf 사용 준비</h1>
[Maven] - pom.xml<pre><code>&lt;dependency&gt;
&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
&lt;artifactId&gt;spring-boot-starter-thymeleaf&lt;/artifactId&gt;
&lt;/dependency&gt;</code></pre>[Gradle] - build.gradle<pre><code>implementation &#39;org.springframework.boot:spring-boot-starter-thymeleaf’</code></pre>application.properties<pre><code># thymeleaf 접두사, 접미사 설정
#미작성 시 기본값
#spring.thymeleaf.prefix=classpath:/templates/
#spring.thymeleaf.suffix=.html</code></pre></li>
</ul>
<h1 id="thymeleaf-문법">Thymeleaf 문법</h1>
<pre><code>&lt;html lang=&quot;en&quot; xmlns:th=&quot;http://www.thymeleaf.org&quot;&gt;</code></pre><p>th 속성을 사용하기 위해 선언된 네임스페이스 순수 HTML로만 이루어진 페이지의 경우, 선언하지 않아도 무관</p>
<h2 id="spring-el">Spring El</h2>
<p><code>${key}</code> : 변수, Model 등으로 전달된 데이터의 key 입력 시 value 풀력</p>
<pre><code>&lt;p th:text=${member}&gt;&lt;/p&gt;
&lt;p th:text=${member.memberNo}&lt;/p&gt;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Boot]]></title>
            <link>https://velog.io/@firecurry_94/Spring-Boot</link>
            <guid>https://velog.io/@firecurry_94/Spring-Boot</guid>
            <pubDate>Mon, 16 Oct 2023 08:40:20 GMT</pubDate>
            <description><![CDATA[<h1 id="spring-boot란">Spring Boot란?</h1>
<h2 id="spring-boot란-1">Spring Boot란?</h2>
<ul>
<li>Spring MVC Project 구성 시 필요했던 복잡한 환경 설정을 최소화 하여 개발자로 하여금 비즈니스 로직 구현에 집중할 수 있도록 하기 위해 개발됨<h2 id="spring-boot의-장점">Spring Boot의 장점</h2>
</li>
<li>내장된 서버(Tomcat 등)를 제공해서 war 배포 없이 독립 실행이 가능한 웹애플리케이션을 개발할 수 있음</li>
<li><blockquote>
<p>Spring MVC Project처럼 Tomcat 서버를 Start 하는 것이 아닌 Java Project 처럼 main 메서드가 작성된 class를 Run해서 실행</p>
</blockquote>
</li>
<li><blockquote>
<p>자동으로 내장된 Tomcat 서버가 시작됨</p>
</blockquote>
</li>
<li>다양한 Starter POM 파일을 제공해서 Maven, Gradle 등의 빌드 도구 구성, 라이브러리 관리를 간소화 함</li>
<li>Spring Starter를 이용해서 프로젝트를 생성 및 초기 설정을 간소화 함</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Framework]]></title>
            <link>https://velog.io/@firecurry_94/Spring-Framework</link>
            <guid>https://velog.io/@firecurry_94/Spring-Framework</guid>
            <pubDate>Tue, 10 Oct 2023 07:56:35 GMT</pubDate>
            <description><![CDATA[<h1 id="library란">Library란?</h1>
<ul>
<li>라이브러리란 개발자가 만든 클래스들의 나열로, 다른 프로그램들에서 사용할 수 있도록 제공하는 방식이다.</li>
</ul>
<h1 id="framework란">Framework란?</h1>
<ul>
<li>개발자가 소프트웨어를 개발함에 있어 코드를 구현하는 개발 시간을 줄이고, 코드의 재사용성을 증가 시키기 위해 일련의 클래스 묶음이나 뼈대, 틀을 라이브러리 형태로 제공되는 것을 말한다.</li>
<li>제어의 역전 개념이 적용된 대표적인 기술이다.</li>
</ul>
<h2 id="framework의-특징">Framework의 특징</h2>
<ul>
<li>개발자가 따라야 하는 가이드를 제공한다.</li>
<li>개발할 수 있는 범위가 정해져 있다.</li>
<li>개발자를 위한 다양한 도구, 플러그인들을 지원한다.</li>
</ul>
<h3 id="장점">장점</h3>
<ul>
<li>개발 시간을 줄일 수 있음</li>
<li>정형화 되어 있어 일정 수준 이상의 품질을 기대할 수 있음</li>
<li>유지 보수가 쉬움</li>
</ul>
<h3 id="단점">단점</h3>
<ul>
<li>너무 의존하면 개발자들의 능력이 떨어져서 스스로 직접 개발하는 것이 어려워짐</li>
<li>습득에 걸리는 시간이 오래 걸림</li>
</ul>
<h2 id="framework의-종류">Framework의 종류</h2>
<ul>
<li><p>영속성 Framework
데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정
파일들을 라이브러리화하여 구현한 프레임워크
(Mybatis, Hibernate)</p>
</li>
<li><p>자바 Framework
Java EE를 통한 웹 어플리케이션 개발에 초점을 맞추어
필요한 요소들을 모듈화 하여 제공하는 프레임워크
(Spring Framework, Struts, 전자정부표준 - Spring)</p>
</li>
<li><p>화면 구현 Framework
Front-End를 보다 쉽게 구현할 수 있게 틀을
제공하는 프레임워크
(Bootstrap, Foundation, MDL)</p>
</li>
<li><p>기능 및 지원 Framework
특정 기능이나 업무 수행에 도움을 줄 수 있는 기능을
제공하는 프레임워크
(Log4j, JUnit 5, ANT)</p>
</li>
</ul>
<h1 id="spring-framework-개요">Spring Framework 개요</h1>
<h2 id="spring-framework란">Spring Framework란?</h2>
<p>자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로 간단하게 스프링(Spring)이라고도 불린다.
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있으며
대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는
전자정부 표준 프레임워크(Spring MVC Project 기반 프레임워크)의 기반 기술로서 쓰이고 있다.</p>
<h2 id="spring-framework의-특징">Spring Framework의 특징</h2>
<ul>
<li><p>IOC (Inversion of Control) 제어 반전
컨트롤의 제어권이 개발자가 아니라 프레임워크에 있다는 뜻으로
객체의 생성부터 모든 생명주기의 관리까지 프레임워크가 주도하고 있다.
객체를 생성하고, 직접 호출하는 프로그램이 아니라, 만들어둔 자원을 호출해서
사용한다.</p>
</li>
<li><p>DI (Dependency Injection) 의존성 주입
설정 파일이나 어노테이션을 통해 객체간의 의존 관계를 설정하여
개발자가 직접 의존하는 객체를 생성할 필요가 없다.</p>
</li>
<li><p>POJO 기반 프레임워크 (Plain Old Java Object)
J2EE, EJB와 같은 특정 기술이나 라이브러리의 내용을 상속받아 클래스를 구현하
지 않고 일반적인 기본 기능만을 가진 순수한 자바 객체를 의미한다.
특정 클래스에 종속되지 않으므로 자바의 객체지향적 설계가 쉬워지고,
코드길이 감소, 유지보수성 증가, 기존 Java API, 라이브러리 지원에 용이하다.</p>
</li>
<li><p>Spring AOP (Aspect Oriented Programming) 관점 지향 프로그래밍
트랜잭션, 로깅, 보안 등 여러 모듈, 여러 계층에서 공통으로 필요로 하는
기능의 경우 해당 기능들을 분리하여 관리한다.</p>
</li>
<li><p>Spring JDBC
Mybatis나 Hibernate 등의 데이터베이스를 처리하는 영속성 프레임워크와
연결할 수 있는 인터페이스를 제공한다.</p>
</li>
<li><p>Spring MVC
MVC 디자인 패턴을 통해 웹 어플리케이션의 Model, View, Controller 사이의 의
존 관계를 DI 컨테이너에서 관리하여 개발자가 아닌 서버가 객체들을
관리하는 웹 애플리케이션을 구축 할 수 있다.</p>
</li>
<li><p>PSA (Portable Service Abstraction)
스프링은 다른 여러 모듈을 사용함에 있어 별도의 추상화 레이어를 제공한다. 예
를 들어 JPA를 사용할 때에서 Spring JPA를 사용하여 추상화하므로 실제 구현에
있어서 Hibernate를 사용하든 EclipseLink를 사용하든 개발자는
이 모듈의 의존 없이 프로그램에 집중할 수 있다.</p>
</li>
</ul>
<h2 id="spring의-구성-모듈">Spring의 구성 모듈</h2>
<ul>
<li><p>Data 접근 계층
JDBC나 데이터베이스에 연결하는 모듈로, Data 트랜잭션에 해당하는 기능을 담당하여
영속성 프레임워크의 연결을 담당한다. </p>
</li>
<li><p>Web 계층 (MVC / Remoting)
Spring Framework에서 Servlet등의 웹 구현 기술과의 연결점을
Spring MVC 구성으로 지원하기 위해 제공되는 모듈 계층이다.
또한 스프링의 리모팅 기술로 RMI, Hessian, Burlap, JAX-WS, HTTP 호출자 그리고 REST API 모듈을 제공
한다. </p>
</li>
<li><p>AOP 계층
Spring에서 각 흐름 간 공통된 코드를 한 쪽으로 빼내어 필요한 시점에 해당 코드를 첨부하게 하기 위해
지원하는 계층으로, 별도의 proxy를 두어 동작한다. 이를 통해 객체간의 결합도를 낮출 수 있다.</p>
</li>
<li><p>Core Container
Spring의 핵심 부분이라고 할 수 있으며 모든 스프링 관련 모듈은 이 Core Container 기반으로 구축된다.
Spring의 근간이 되는 IOC 기능을 지원하는 영역을 담당하고 있다.
BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원한다. </p>
</li>
</ul>
<h3 id="spring-모듈-정리">Spring 모듈 정리</h3>
<ul>
<li><p>spring-beans
스프링 컨테이너를 이용해서 객체를 생성하는 기본기능을 제공</p>
</li>
<li><p>spring-context
객체생성, 라이프 사이클 처리, 스키마 확장 등의 기능을 제공</p>
</li>
<li><p>spring-aop
AOP 기능을 제공</p>
</li>
<li><p>spring-web
REST 클라이언트 데이터 변환 처리, 서블릿 필터, 파일 업로드 지원 등
웹 개발에 필요한 기반 기능을 제공</p>
</li>
<li><p>spring-webmvc
스프링 기반의 MVC 프레임워크, 웹 애플리케이션을 개발하는데
필요한 컨트롤러, 뷰 구현을 제공</p>
</li>
<li><p>spring-websocket
스프링 MVC에서 웹 소켓 연동을 처리할 수 있도록 제공</p>
</li>
<li><p>spring-oxm
XML과 자바 객체간의 매핑을 처리하기 위한 API 제공</p>
</li>
<li><p>spring-tx
트랜잭션 처리를 위한 추상 레이어를 제공</p>
</li>
<li><p>spring-jdbc
JDBC 프로그래밍을 보다 쉽게 할 수 있는 템플릿 제공</p>
</li>
<li><p>spring-orm
Hibernate, JPA, Mybatis 등과의 연동을 지원</p>
</li>
<li><p>spring-jms
JMS 서버와 메시지를 쉽게 주고 받을 수 있도록 하기 위한 템플릿</p>
</li>
<li><p>spring-context-support
스케쥴링, 메일발송, 캐시연동, 벨로시티 등 부가 기능을 제공</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript 기능]]></title>
            <link>https://velog.io/@firecurry_94/JavaScript-%EA%B8%B0%EB%8A%A5</link>
            <guid>https://velog.io/@firecurry_94/JavaScript-%EA%B8%B0%EB%8A%A5</guid>
            <pubDate>Fri, 15 Sep 2023 07:07:37 GMT</pubDate>
            <description><![CDATA[<h1 id="데이터-입출력">데이터 입출력</h1>
<h2 id="innertext">innerText</h2>
<ul>
<li>js에서 요소에 작성된 내용(content)를 읽거나 변경하는 속성</li>
<li>내용만 읽어온다 (내용에 태그가 포함되어 있어도 읽어오지 않음)</li>
<li>변경되는 내용에 태그, 마크업 특수 문자가 포함되어 있어도 태그는 해석되지 않는다<pre><code>const test1 = document.getElementById(&quot;test1&quot;);
function getBoxText(){
console.log(test1.innerText);
}
function setBoxText(){
test1.innerText = 
&quot;innerText로 &lt;br&gt; 변경된 &lt;b&gt;내용입니다 &amp;copy; &lt;/b&gt;&quot;;
}</code></pre></li>
</ul>
<h2 id="innerhtml">innerHTML</h2>
<ul>
<li>자바스크립트에서 요소 전체를(태그 + 내용) 읽어들이거나 변경하는 속성</li>
<li>내용을 읽어올 때 태그 + 내용 모두를 포함해서 읽음</li>
<li>내용을 변경할 때 태그, 마크업 특수문자가 모두 해석됨<pre><code>function setBoxHTML(){
test2.innerHTML += &quot;&lt;ul&gt;&lt;li&gt;적용되나요??&lt;/li&gt;&quot;
+ &quot;&lt;li&gt;됩니다!!&lt;/li&gt;&lt;/ul&gt;&quot;;
}</code></pre></li>
</ul>
<h2 id="windowalert">[window.]alert()</h2>
<ul>
<li>브라우저에 경고창(알림창, 대화 상자)을 띄우는 함수<pre><code>&lt;button onclick=&quot;alert(&#39;확인!!!!!!&#39;)&quot;&gt;alert 확인&lt;/button&gt;</code></pre><h2 id="windowconfirm">[window.]confirm()</h2>
</li>
<li>&quot;내용&quot;에 대한 확인/취소 결과를 얻고자 할 때 사용하는 함수</li>
<li>alert에 확인/취소 두 개의 버튼이 생성됨<pre><code>확인 -&gt; true 반환
취소 -&gt; false 반환</code></pre></li>
</ul>
<h2 id="windowprompt">[window.]prompt()</h2>
<ul>
<li>텍스트를 입력할 수 있는 alert</li>
<li>텍스트 입력 후 확인 클릭 시 입력한 텍스트가 그대로 반환</li>
<li>취소 클릭 시 null 반환</li>
</ul>
<h1 id="요소접근방법">요소접근방법</h1>
<ul>
<li>DOM(Document Object Model)
웹 문서(HTML)의 모든 요소를 객체 형식으로 표현한 것
(HTML 요소 == JS에서 객체라고 부름)</li>
<li><blockquote>
<p>문서 내 특정 요소에 접근 가능 + 요소(객체)에 속성 값을 세팅 또는 얻어올 수 있다</p>
</blockquote>
<h2 id="id로-접근하기">id로 접근하기</h2>
</li>
<li>document.getElementById(&quot;id속성값&quot;);
아이디가 일치하는 요소(객체)를 얻어옴<pre><code>const div1 = document.getElementById(&quot;div1&quot;);</code></pre><h2 id="class로-접근하기">class로 접근하기</h2>
</li>
<li>document.getElementsByClassName(&quot;class속성값&quot;);
클래스가 일치하는 모든 요소를 얻어와 배열 형태로 반환 <pre><code>const arr = document.getElementsByClassName(&quot;div2&quot;);</code></pre><h2 id="name으로-접근하기">name으로 접근하기</h2>
</li>
<li>document.getElementsByName(&quot;name속성값&quot;); 
name이 일치하는 모든 요소를 얻어와 배열(NodeList, 유사배열) 형태로 반환<pre><code>const hobbyArray = document.getElementsByName(&quot;hobby&quot;);</code></pre><h2 id="tag로-접근하기">tag로 접근하기</h2>
</li>
<li>document.getElementsByTagName(&quot;tag명&quot;);
태그가 일치하는 모든 요소를 얻어와 배열 형태로 반환<pre><code>const arr = document.getElementsByTagName(&quot;li&quot;);</code></pre><h2 id="css-선택자로-접근하기">CSS 선택자로 접근하기</h2>
</li>
<li>document.querySelector(&quot;CSS 선택자&quot;);
선택자가 선택한 요소 중 첫 번째 요소를 반환</li>
<li>document.querySelectorAll(&quot;CSS 선택자&quot;);
선택한 요소 모두를 배열(NodeList, 유사배열) 형태로 반환<pre><code>const bg = document.querySelector(&quot;#chatting-bg&quot;);
const arr = document.querySelectorAll(&quot;#css-div&gt;div&quot;);</code></pre></li>
</ul>
<h2 id="변수-선언-위치에-따른-구분">변수 선언 위치에 따른 구분</h2>
<h3 id="es5-이전-버전">ES5 이전 버전</h3>
<p>var : function level scope
-&gt; 함수 내부에서 var로 선언하면 함수 안에서 쓸 수 있다
-&gt; 단, if, for, while 등의 다른 {} 내부에 작성되어도
함수 안에 있는거면 무조건 function level</p>
<h3 id="es6-이후">ES6 이후</h3>
<p>var   : 변수, 변수명 중복 O(덮어쓰기), 함수 레벨 scope
let   : 변수, 변수명 중복 X, 블록{} 레벨 scope
const : 상수, 변수명 중복 X, 블록{} 레벨 scope</p>
<p>1순위 : const 
(JS는 특정 요소를 선택해서 사용하는 경우가 많아서 변수에 고정시켜둠)</p>
<p>2순위 : let</p>
<p>3순위 : var (ES6 이후 부터 사용 빈도가 많이 적어짐)</p>
<h2 id="이벤트">이벤트</h2>
<ul>
<li>브라우저에서의 이벤트(동작, 행위)
click, keydown, keypress, keyup, mouseover, drag, change, submit, ...</li>
<li>고전/표준 이벤트 모델은 랜더링(해석)된 HTML 요소에만 이벤트 핸들러 연결이 가능하기 때문에 JS 코드 작성 위치를 잘 판단해야 한다</li>
</ul>
<h3 id="인라인inline-이벤트-모델">인라인(inline) 이벤트 모델</h3>
<ul>
<li><p>요소 내부에 이벤트 관련 코드를 직접 작성하는 방법</p>
</li>
<li><p>on이벤트명 = 함수명()</p>
<pre><code>&lt;button onclick=&quot;inlineEventModel(this)&quot;&gt;인라인 이벤트 모델 확인&lt;/button&gt;
&lt;script&gt;
  function inlineEventModel(btn){
        if(btn.style.backgroundColor != &#39;pink&#39;){
          btn.style.backgroundColor = &#39;pink&#39;;
        } else{
          btn.removeAttribute(&#39;style&#39;);
        }
  }
&lt;/script&gt;</code></pre><h3 id="고전-이벤트-모델">고전 이벤트 모델</h3>
</li>
<li><p>요소가 가지고 있는 이벤트 리스너 속성(on이벤트명)에
이벤트 핸들러(함수)를 직접 대입해서 연결하는 방법</p>
</li>
<li><p>인라인 이벤트 모델처럼 HTML에 작성하는 것이 아닌
script 태그 또는 js 파일에 작성</p>
</li>
<li><p>단점 : 한 요소의 같은 이벤트 리스너에 여러 이벤트 핸들러를 대입할 수 없다</p>
</li>
</ul>
<pre><code>&lt;script&gt;
    const a = document.getElementById(&#39;test2-1&#39;);
    a.onclick = function(){
         alert(&#39;test2-1 클릭&#39;)
    }
&lt;/script&gt;</code></pre><h3 id="표준-이벤트-모델-요소addeventlistener-">표준 이벤트 모델( 요소.addEventListener() )</h3>
<ul>
<li>W3C(웹 표준 재정 단체)에서 공식적으로 지정한 이벤트 모델</li>
<li>장점 : 한 요소에 여러 이벤트 핸들러를 추가할 수 있다<pre><code>&lt;div id=&quot;test3&quot;&gt;클릭하면 크기가 늘어나요&lt;/div&gt;
&lt;script&gt;
  document.getElementById(&#39;test3&#39;).addEventListener(&quot;click&quot;, function(){
    this.style.width = this.clientWidth + 10 + &#39;px&#39;;
  });
&lt;/script&gt;</code></pre></li>
</ul>
<h3 id="html-요소의-기본-이벤트-제거">HTML 요소의 기본 이벤트 제거</h3>
<ul>
<li>a 태그의 기본 이벤트
클릭하면 href 속성에 작성된 주소로 이동</li>
<li>form 태그의 기본 이벤트
action 속성에 작성된 주소로 내부에 작성된 input 값들을 제출<pre><code>&lt;script&gt;
  document.getElementById(&#39;move&#39;).addEventListener(&#39;click&#39;, function(e){
        e.preventDefault();
  });
&lt;/script&gt;</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript]]></title>
            <link>https://velog.io/@firecurry_94/JavaScript</link>
            <guid>https://velog.io/@firecurry_94/JavaScript</guid>
            <pubDate>Fri, 15 Sep 2023 07:03:14 GMT</pubDate>
            <description><![CDATA[<h1 id="개요">개요</h1>
<h2 id="script-언어">Script 언어</h2>
<ul>
<li>기본 프로그램의 동작을 사용자의 요구에 맞게 수행되도록 해주는 용도의 언어</li>
<li>별도로 소스코드를 컴파일 하지 않고 인터프리터(interpreter, 한 줄씩 코드를 읽어서 해석)를 이용해서 한 코드를 바로 실행</li>
<li>짧은 소스코드 파일로 상호작용 하도록 고안됨</li>
<li>장점 : 컴파일에 소요되는 시간이 없음</li>
<li>단점 : 프로그램 실행 시간이 상대적으로 느림<h3 id="javascript">JavaScript</h3>
</li>
<li>웹 브라우저에서 주로 사용하는 인터프리터 방식의 객체 지향 프로그래밍 언어</li>
<li>ECMA Script 따르는 대표적인 웹 기술</li>
<li>카멜 표기법 사용<h4 id="javascript-작성-방법">JavaScript 작성 방법</h4>
</li>
</ul>
<ol>
<li><p>브라우저 개발자도구 -&gt; 콘솔(console)에 직접 작성</p>
</li>
<li><p>html 내부에 script 태그를 이용해 작성(internal 방식)
보통은 body 태그 제일 밑에 작성</p>
<pre><code>&lt;script&gt;
function internalFn(){
 alert(&quot;internal 버튼을 클릭 하셨습니다&quot;);
}
&lt;/script&gt;</code></pre></li>
<li><p>html 외부에 .js 파일에 작성 후 연결해서 사용(external 방식)
js 파일을 script 태그 내부라고 생각</p>
<pre><code>&lt;script src=&quot;../js/01_JS개요.js&quot;&gt;&lt;/script&gt;</code></pre></li>
<li><p>태그에 직접 JS코드를 작성(inline 방식, 권장 X)</p>
<pre><code>&lt;button type=&quot;button&quot; onclick=&quot;alert(&#39;inline 버튼 클릭됨&#39;)&quot;&gt;inline 방식 확인&lt;/button&gt;</code></pre></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[반응형 웹(미디어쿼리)]]></title>
            <link>https://velog.io/@firecurry_94/%EB%B0%98%EC%9D%91%ED%98%95-%EC%9B%B9%EB%AF%B8%EB%94%94%EC%96%B4%EC%BF%BC%EB%A6%AC</link>
            <guid>https://velog.io/@firecurry_94/%EB%B0%98%EC%9D%91%ED%98%95-%EC%9B%B9%EB%AF%B8%EB%94%94%EC%96%B4%EC%BF%BC%EB%A6%AC</guid>
            <pubDate>Thu, 14 Sep 2023 08:45:45 GMT</pubDate>
            <description><![CDATA[<h1 id="반응형-웹">반응형 웹</h1>
<ul>
<li>브라우저나 장치 환경(크기)에 따라 웹페이지의 모습이 변하는 웹페이지<h2 id="media-미디어-쿼리">@media (미디어 쿼리)</h2>
</li>
<li>사용 환경, 크기에 따라 CSS를 지정 가능하게 해주는 <h3 id="min-width">min-width</h3>
</li>
<li>최소 너비</li>
<li>내부 요소 또는 화면의 크기가 지정된 너비보다 넓으면 자동으로 증가<h3 id="min-height">min-height</h3>
</li>
<li>최소 높이</li>
<li>내부 요소 또는 화면의 크기가 지정된 높이보다 높으면 자동으로 증가<h3 id="max-width">max-width</h3>
</li>
<li>최대 너비</li>
<li>내부 요소 또는 화면의 크기가 지정된 너비보다 좁으면 자동으로 축소</li>
<li>내부 요소 또는 화면의 크기가 지정된 너비보다 크더라도 지정된 값 이상으로 증가 X<h3 id="max-height">max-height</h3>
</li>
<li>최대 높이<h3 id="media-미디어유형-and-속성">@media 미디어유형 and (속성)</h3>
</li>
<li>미디어유형 : 지정할 미디어의 종류 (all, screen, print,...)</li>
<li>1024px 이상 : 16:9 비율 모니터, 노트북
768px ~ 1024px : 태블릿 가로, 4:3비율 모니터
480px ~ 768px : 태블릿 세로, 모바일 가로
~ 480px : 모바일</li>
<li>ex) 화면크기가 최대 768px 이하일 경우 적용<pre><code>@media screen and (max-width: 768px){
  CSS 코드;
}</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[FlexBox]]></title>
            <link>https://velog.io/@firecurry_94/FlexBox</link>
            <guid>https://velog.io/@firecurry_94/FlexBox</guid>
            <pubDate>Thu, 14 Sep 2023 08:39:41 GMT</pubDate>
            <description><![CDATA[<h1 id="flexbox">FlexBox</h1>
<ul>
<li>요소의 정렬되는 방향, 순서, 요소 간의 간격을 하나하나 수치적으로 처리하지 않아도 알아서 유연하게 처리해주는 형식(방식)<h2 id="flex의-구성">flex의 구성</h2>
</li>
<li>flex container
정렬이 필요한 요소(item)를 감싸는 요소</li>
<li>item
정렬이 적용될 요소<h2 id="flex의-축">flex의 축</h2>
</li>
<li>중심축 (main axis)</li>
<li>교차축, 반대축 (cross axis)<h2 id="flex-container-전용-속성">flex container 전용 속성</h2>
<h3 id="display--flex">display : flex</h3>
</li>
<li>감싸는 요소를 flex 형식으로 변경 -&gt; 내부에 작성되는 item을 유연하게 배치하겠다는 의미</li>
<li>해당 속성이 적용되면 유연하게 배치할 수 있도록 내부 item의 자동으로 지정된 margin 속성이 사라진다<h3 id="flex-direction">flex-direction</h3>
</li>
<li>중심축의 방향, 시작/끝 지정<h4 id="row">row</h4>
</li>
<li>기본값</li>
<li>x축, 왼쪽 -&gt; 오른쪽<h4 id="row-reverse">row-reverse</h4>
</li>
<li>x축, 오른쪽 -&gt; 왼쪽<h4 id="column">column</h4>
</li>
<li>y축, 위 -&gt; 아래<h4 id="column-reverse">column-reverse</h4>
</li>
<li>y축, 아래 -&gt; 위<h3 id="justify-content">justify-content</h3>
</li>
<li>중심축 방향을 기준으로 item 정렬<h4 id="flex-start">flex-start</h4>
</li>
<li>중심축 시작 지점을 기준으로 정렬<h4 id="flex-end">flex-end</h4>
</li>
<li>중심축 끝 지점을 기준으로 정렬(순서가 뒤집히진 않음)<h4 id="center">center</h4>
</li>
<li>중심축 가운데 정렬<h4 id="space-around">space-around</h4>
</li>
<li>item에 중심축 방향으로 일정한 간격을 부여<h4 id="space-evenly">space-evenly</h4>
</li>
<li>item에 중심축 방향으로 동일한 간격을 부여<h4 id="space-between">space-between</h4>
</li>
<li>item에 중심축 방향으로 동일한 간격을 부여</li>
<li>단, 양 끝은 flex-container에 붙게 한다<h3 id="align-items">align-items</h3>
</li>
<li>교차축을 기준으로 item 정렬<h4 id="stretch">stretch</h4>
</li>
<li>기본값</li>
<li>item을 교차축 방향으로 꽉 찰만큼 늘림</li>
<li>단, item에 교차축 방향 크기가 지정되어 있다면 적용 X<h4 id="flex-start-1">flex-start</h4>
</li>
<li>교차축 시작 지점에 배치<h4 id="flex-end-1">flex-end</h4>
</li>
<li>교차축 끝 지점에 배치<h4 id="center-1">center</h4>
</li>
<li>교차축 가운데 지점에 배치<h4 id="baseline">baseline</h4>
</li>
<li>item에 작성된 내용(content)이 한 직선에 배치될 수 있도록 item을 교차축 방향을 알맞게 움직여 배치<h3 id="flex-wrap">flex-wrap</h3>
</li>
<li>item이 한 줄/여러 줄로 배치 되게 지정<h4 id="nowrap">nowrap</h4>
</li>
<li>기본값</li>
<li>한 줄로 배치, item의 크기가 변경(훼손)될 수 있음<h4 id="wrap">wrap</h4>
</li>
<li>여러 줄로 배치<h4 id="wrap-reverse">wrap-reverse</h4>
</li>
<li>여러 줄로 배치(cross axis 방향 반대)<h3 id="flex-flow">flex-flow</h3>
</li>
<li>flex-direction과 flex-wrap을 한 번에 지정하는 속성<pre><code>.flex-container{
  flex-flow: row-reverse wrap;
}</code></pre><h3 id="align-content">align-content</h3>
</li>
<li>cross axis(교차축)을 기준으로 포장된(wrap) item들을 정렬</li>
<li>조건 : flex-wrap이 wrap 또는 wrap-reverse 이여야 함<h4 id="flex-start-2">flex-start</h4>
</li>
<li>축 시작 지점 기준으로 정렬<h4 id="flex-end-2">flex-end</h4>
</li>
<li>축 끝 지점 기준으로 정렬<h4 id="center-2">center</h4>
</li>
<li>축 가운데 정렬<h4 id="space-around-1">space-around</h4>
</li>
<li>item에 축 방향 양쪽으로 일정 크기 공간을 배치<h4 id="space-evenly-1">space-evenly</h4>
</li>
<li>item에 축 방향 양쪽으로 모두 동일한 크기의 공간을 배치<h4 id="space-between-1">space-between</h4>
</li>
<li>space-evenly에서 시작, 끝 item은 flex-container 붙게 배치<h2 id="item-전용-속성">item 전용 속성</h2>
<h3 id="order">order</h3>
</li>
<li>item이 중심축이 배치되는 순서를 지정 기본값 0, 정수(음수, 양수, 0) 작성 가능</li>
<li>값이 작을수록 중심축의 시작 부분에 배치됨<pre><code>.order1{order:1;}
.order2{order:2;}
.order3{order:3;}
.order4{order:4;}
.order5{order:5;}</code></pre><h3 id="flex-grow">flex-grow</h3>
</li>
<li>item이 flex container 내부에서 비어있는 공간을 매꿀 수 있도록 팽창하는 정도를 지정하는 속성</li>
<li>기본값 0 -&gt; 팽창하지 않음</li>
<li>팽창할 비율 작성<pre><code>.grow1{flex-grow: 1;}
.grow2{flex-grow: 2;}
.grow3{flex-grow: 3;}
.grow4{flex-grow: 4;}</code></pre><h3 id="flex-shrink">flex-shrink</h3>
</li>
<li>item이 수축하는 정도를 지정하는 속성</li>
<li>기본값 1<pre><code>.shrink0{flex-shrink: 0;}
.shrink1{flex-shrink: 1;}
.shrink2{flex-shrink: 2;}
.shrink3{flex-shrink: 3;}</code></pre><h3 id="flex-basis">flex-basis</h3>
</li>
<li>item의 중심축 방향의 기본 점유율(크기)을 지정하는 속성
(각종 크기 단위 px, %, vh, em, rem 등 사용 가능)<pre><code>.basis-150px{flex-basis: 150px;}
.basis-10{flex-basis: 10%;}
.basis-25{flex-basis: 25%;}</code></pre><h3 id="flex">flex</h3>
</li>
<li>flex-grow, flex-shrink, flex-basis를 한 번에 작성하는 속성<pre><code>.flex1{flex: 0 0 200px;}</code></pre><h3 id="align-self">align-self</h3>
</li>
<li>각각의 item별로 교차축 방향으로 정렬을 지정하는 속성<pre><code>.self-start{align-self: flex-start;}
.self-end{align-self: flex-end;}
.self-center{align-self: center;}</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSS 레이아웃 스타일]]></title>
            <link>https://velog.io/@firecurry_94/CSS-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83-%EC%8A%A4%ED%83%80%EC%9D%BC</link>
            <guid>https://velog.io/@firecurry_94/CSS-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83-%EC%8A%A4%ED%83%80%EC%9D%BC</guid>
            <pubDate>Wed, 13 Sep 2023 08:48:30 GMT</pubDate>
            <description><![CDATA[<h1 id="레이아웃">레이아웃</h1>
<ul>
<li><p>사전적 의미 : 배치, 정리</p>
</li>
<li><p>기술적 의미 : 구성 요소를 제한된 공간에 효율적으로 배치하는 것</p>
<h2 id="display">display</h2>
</li>
<li><p>화면 배치(표시) 방법</p>
</li>
<li><p>요소가 화면에 어떻게 보여질지 형식을 지정하는 속성</p>
<h3 id="block">block</h3>
</li>
<li><p>화면을 수직 분할(행을 나눔, 한 줄 다 차지)</p>
</li>
<li><p>width, height 지정 가능</p>
<h3 id="inline">inline</h3>
</li>
<li><p>화면을 수평 분할(하나의 행의 열을 나눔 == 글자, 문자열 생각)</p>
</li>
<li><p>width, height 지정 불가능</p>
<h3 id="inline-block">inline-block</h3>
</li>
<li><p>inline의 수평 분할 + block의 width, height 지정</p>
</li>
<li><p>가로로 배치되면서 크기 지정</p>
<h3 id="none">none</h3>
</li>
<li><p>요소는 존재하나 화면에는 보이지 않게 함</p>
<h3 id="flex">flex</h3>
</li>
<li><p>요소의 정렬되는 방향, 요소간의 간격을 유연하게 처리하는 방식</p>
<h3 id="grid">grid</h3>
</li>
<li><p>격자무늬 형식으로 화면을 쉽게 분할하는 형식</p>
<h2 id="요소의-영역여백-관련-스타일">요소의 영역(여백) 관련 스타일</h2>
</li>
<li><p>HTML 요소는 총 4가지의 영역으로 구성되어 있다</p>
</li>
<li><p>padding, border, margin 크기를 한 번에 지정하려면
  속성 값 1개 : (상하좌우) 지정
  속성 값 2개 : (상하) (좌우) 지정
  속성 값 3개 : (상) (좌우) (하) 지정 (위-&gt;아래)
  속성 값 4개 : (상) (우) (하) (좌) 지정 (상 기준 시계방향)</p>
<h3 id="content">content</h3>
</li>
<li><p>요소의 내용이 작성 되어지는 영역</p>
<h3 id="padding">padding</h3>
</li>
<li><p>content와 border 사이의 공간</p>
</li>
<li><p>상하좌우 크기 지정 가능</p>
<h3 id="border">border</h3>
</li>
<li><p>요소의 테두리가 지정되는 영역</p>
</li>
<li><p>content 보다 바깥쪽에서 content를 감싸고 있다</p>
</li>
<li><p>border-width로 상하좌우 크기 지정 가능</p>
</li>
<li><p>border의 속성 값은 [크기 모양 색상] 형식으로 작성</p>
<h3 id="margin">margin</h3>
</li>
<li><p>다른 요소와의 간격을 나타내는 영역</p>
</li>
<li><p>상하좌우 크기 지정 가능</p>
<h4 id="margin--auto">margin : auto;</h4>
</li>
<li><p>다른 요소와의 간격을 자동으로 지정(가운데 정렬)</p>
</li>
<li><p>기본적으로 좌우 간격만 지정됨</p>
</li>
<li><p>지정되는 대상은 block 형식 요소여야 된다 (inline 형식은 text-align : center; 사용)</p>
<pre><code>.content{
width: 150px;
height: 150px;
box-sizing: content-box;
}
.border{
border: 10px solid black;
}
.padding{
padding: 20px;
}
.margin{
margin: 50px;
}
#test2{
display: inline-block;

padding-top: 10px;
padding-right: 20px;
padding-bottom: 30px;
padding-left: 40px;

margin-top: 50px;
margin-bottom: 50px;
margin-left: 100px;
margin-right: 100px;

border-top: 5px solid red;
border-bottom: 10px double black;
border-left: 15px dotted yellow;
border-right: 20px dashed purple;
}
#test3{
border: 1px solid black;

padding: 30px;
padding: 30px 50px;
padding: 30px 50px 10px;
padding: 30px 20px 40px 50px;

border-width: 3px;
border-width: 3px 10px;
border-width: 3px 5px 10px;
border-width: 3px 5px 10px 20px;

margin: 30px;
margin: 30px 50px;
margin: 30px 50px 10px;
margin: 30px 20px 40px 50px;
}
#test4{
margin: auto;
margin-top: 100px;
}</code></pre><h3 id="box-sizing">box-sizing</h3>
</li>
<li><p>width/height 크기 조정 속성의 범위를 지정하는 css 속성</p>
<h4 id="content-box">content-box</h4>
</li>
<li><p>width/height 지정 시 content 영역의 크기만 조정(기본값)</p>
<h4 id="border-box">border-box</h4>
</li>
<li><p>width/height 지정 시 content + padding + border의 크기를 합산한 결과가 작성된 width/height와 같아지도록 content 영역의 크기를 자동으로 조정</p>
<pre><code>.border-box{
box-sizing: border-box;
}</code></pre><h2 id="요소-정렬-스타일">요소 정렬 스타일</h2>
<h3 id="float">float</h3>
</li>
<li><p>요소를 띄워서 좌/우로 정렬하는 속성</p>
<h3 id="clear">clear</h3>
</li>
<li><p>float로 인해 띄워져 있는 상태를 해제하는 속성</p>
</li>
<li><p>float 사용 시 요소가 겹치는 문제를 clear로 해결</p>
<h2 id="배치-관련-스타일">배치 관련 스타일</h2>
<h3 id="position--relative">position : relative</h3>
</li>
<li><p>지정된 요소 내부에 다른 요소가 상대적인 위치를 지정할 수 있도록 기준이 되게 만드는 속성</p>
</li>
<li><p>내부에 작성되는 요소에 위치 지정 시 top, bottom, left, right 속성을 사용할 수 있음</p>
<h3 id="position--absolute">position : absolute</h3>
</li>
<li><p>기본 요소의 배치 순서를 무시하고 지정된 절대 위치에 요소를 배치함</p>
<h3 id="position--fixed">position : fixed</h3>
</li>
<li><p>항상 고정된 위치에 요소를 배치함. (화면이 움직이든 말든 항상 같은 위치)</p>
<h3 id="position--sticky">position : sticky</h3>
</li>
<li><p>원래 요소가 보여지는 영역이라면 position X</p>
</li>
<li><p>요소가 보여지는 화면을 벗어나면 fixed</p>
<h3 id="z-index--정수">z-index : 정수</h3>
</li>
<li><p>position : absolute 상태의 요소의 z축 방향으로 올라와 있는 정도를 지정하는 속성 (같은 기준 요소(relative)를 가진 요소만 설정 가능)</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSS]]></title>
            <link>https://velog.io/@firecurry_94/CSS</link>
            <guid>https://velog.io/@firecurry_94/CSS</guid>
            <pubDate>Mon, 11 Sep 2023 08:45:23 GMT</pubDate>
            <description><![CDATA[<h1 id="css-cascading-style-sheets">CSS (Cascading Style Sheets)</h1>
<ul>
<li>마크업 언어(HTML)가 실제로 화면에 표시되는 방법을 기술하는 언어
  (모양, 색상, 크기, 스타일 ... 지정 가능)</li>
<li>하나의 요소에 여러 CSS코드를 겹쳐서 원하는 스타일을 만들 수 있다</li>
<li>W3C에서 CSS를 웹 표준으로 지정함</li>
</ul>
<h2 id="css-선택자selector">CSS 선택자(Selector)</h2>
<ul>
<li>현재 HTML 문서 내에서 특정 요소를 선택하는 문자 또는 문자열(기호) 
(스타일을 적용하고자 하는 요소를 선택하는 방법)</li>
</ul>
<h3 id="태그-선택자">태그 선택자</h3>
<ul>
<li>현재 HTML 문서 내에 같은 태그를 모두 선택하는 선택자</li>
<li>작성법
태그명 { CSS 코드; }<pre><code>strong{ background-color : coral; }
span{ background-color : pink; }
div{ border : 3px solid skyblue; }</code></pre></li>
</ul>
<h3 id="id-선택자">id 선택자</h3>
<ul>
<li>HTML 문서 내에서 id 속성값이 일치하는 요소를 선택하는 선택자</li>
<li>id 속성 값은 페이지 내에서 유일해야 한다</li>
<li>작성법
#id속성값 { CSS 코드; }<pre><code>#li1{ background-color: red; }
#li2{ background-color: orange; }
#li3{ background-color: yellow; }</code></pre></li>
</ul>
<h3 id="클래스-선택자">클래스 선택자</h3>
<ul>
<li>HTML 문서 내에서 class 속성값이 일치하는 요소를 선택하는 선택자</li>
<li>CSS가 적용되는 요소가 겹치는 경우 마지막에 작성한 CSS가 적용된다</li>
<li>작성법
.class속성값 { CSS 코드; }<pre><code>.test-1{color: red;}
.test-2{
  background-color: black;
  color: white;
}</code></pre></li>
</ul>
<h3 id="모든-요소-선택자">모든 요소 선택자</h3>
<ul>
<li>단독 사용 시 : 문서에 있는 모든 요소</li>
<li>다른 선택자와 사용 시 : 선택된 요소의 모든 자식/후손/형제
```</li>
<li>{font-style: italic;}<pre><code></code></pre></li>
</ul>
<h3 id="기본-속성-선택자">기본 속성 선택자</h3>
<ul>
<li>태그에 작성된 특정 속성을 선택하는 선택자 (모든 속성을 선택할 수 있는 기본 방법)
(id, class 로 선택 가능하지만 보통은 #, . 을 사용)</li>
<li>선택자는 생략할 수 있다 -&gt; 특정, 속성을 가진 모든 요소를 선택</li>
<li>&quot;속성값&quot; 에서 쌍따옴표(&quot;&quot;)는 홑따옴표(&#39;&#39;)로 변경하거나 생략할 수 있다</li>
<li>작성법
선택자[속성명=&quot;속성값&quot;] { CSS 코드; }<pre><code>div[name=&quot;name-1&quot;]{background-color: violet;}
p[data=&quot;data-2&quot;]{background-color: whitesmoke;}</code></pre><h3 id="자식-선택자">자식 선택자</h3>
</li>
<li>지정된 요소 바로 한 단계 하위 요소를 선택하는 선택자</li>
<li>작성법
선택자1(부모 요소) &gt; 선택자2(자식 요소) {CSS 코드;}<pre><code>#parent1&gt;li&gt;span{background-color: darkgreen;}</code></pre></li>
</ul>
<h3 id="후손자손-선택자">후손(자손) 선택자</h3>
<ul>
<li>지정된 요소의 모든 하위 요소를 선택하는 선택자</li>
<li>작성법
선택자1(부모(조상) 요소) 선택자2(후손 요소) {CSS 코드;}<pre><code>#parent2 p{background-color: aqua;}</code></pre></li>
</ul>
<h3 id="반응-선택자">반응 선택자</h3>
<ul>
<li>사용자의 움직임에 반응하여 스타일이 변경되는 선택자<h4 id="active">:active</h4>
</li>
<li>선택된 요소가 클릭 되어지고 있을 경우</li>
<li>작성법
선택자:active<pre><code>#activeTest:active{
background-color: yellow;
border: 10px inset black;
}</code></pre><h4 id="hover">:hover</h4>
</li>
<li>선택된 요소에 마우스가 올라가 있는 경우</li>
<li>작성법
선택자:hover<pre><code>#hoverTest:hover{
background-image: url(../../images/cats/cat4.jpg);
background-size: cover;
}</code></pre><h3 id="상태-선택자">상태 선택자</h3>
</li>
<li>입력 양식(input, input 관련 태그)의 상태에 따라 선택되는 선택자<h4 id="focus">:focus</h4>
</li>
<li>요소에 초점이 맞춰졌을 때(커서 깜빡거림)<pre><code>#focus-test:focus{
outline-color: yellowgreen;
}</code></pre><h4 id="checked">:checked</h4>
</li>
<li>요소가 체크 되었을 때(radio, checkbox)<pre><code>input[name=&quot;fruits&quot;]:checked{
width: 30px;
height: 30px;
}</code></pre><h4 id="enabled-disabled">:enabled, :disabled</h4>
</li>
<li>요소가 활성/비활성 상태일 때<pre><code>#test-div2 &gt; input:enabled{background-color: lightgreen;}
#test-div2 &gt; input:disabled{background-color: lightcoral;}</code></pre><h3 id="동위-선택자">동위 선택자</h3>
</li>
<li>동위(동등한 위치 == 형제 관계)관계에서 다음(뒤)에 위치한 요소를 선택하는 선택자<h4 id="">+</h4>
</li>
<li>A 바로 다음(뒤)에 있는 B 요소를 하나 선택
A선택자 + B선택자 {CSS 코드;}<pre><code>#div1 + div{background-color: gold;}</code></pre><h4 id="-1">~</h4>
</li>
<li>A 뒤에 있는 모든 B 요소를 선택
A선택자 ~ B선택자 {CSS 코드;}<pre><code>#div3 ~ div{background-color: chocolate;}</code></pre><h3 id="문자열-속성-선택자">문자열 속성 선택자</h3>
</li>
<li>선택자[속성명 ~= &quot;특정값&quot;] { CSS 코드; }
띄어쓰기로 구분되어있는 여러 속성 값이 작성된 속성 중
속성 값이 특정 값을 단어로 포함하는 요소를 선택</li>
<li>선택자[속성명 |= &quot;특정값&quot;] { CSS 코드; }
속성 값이 특정 값을 단어로 포함하는 요소를 선택
단, &quot;-&quot; 기호로 구분, &quot;-&quot; 앞의 내용이 동일해야 한다</li>
<li>선택자[속성명 ^= &quot;특정값&quot;] { CSS 코드; }
속성 값이 특정 값으로 시작하는 요소를 선택</li>
<li>선택자[속성명 $= &quot;특정값&quot;] { CSS 코드; }
속성 값이 특정 값으로 끝나는 요소를 선택</li>
<li>선택자[속성명 *= &quot;특정값&quot;] { CSS 코드; }
속성 값이 특정 값을 포함하는 요소를 선택<pre><code>div[name~=&quot;aaa&quot;]{background-color: greenyellow;}
div[class|=&quot;str&quot;]{color: red; font-weight: bold;}
div[class^=&quot;class&quot;]{background-color: black; color: white;}
div[class$=&quot;2&quot;]{font-style: italic; font-size: 30px;}
div[name*=&quot;2&quot;]{border: 2px solid magenta;}</code></pre><h3 id="일반-구조-선택자">일반 구조 선택자</h3>
</li>
<li>형제 관계에 있는 요소 중 특정 요소를 선택하는 선택자</li>
<li>위치를 기준으로 구분함</li>
<li>(※) 선택된 형제 중에서 순서를 찾는게 아닌 모든 형제 중에서 순서를 찾고 그 다음 지정된 선택자가 맞는지 확인하기 때문에 잘 살펴봐야 한다<h4 id="first-child">:first-child</h4>
</li>
<li>형제 관계 중 첫 번째 요소<pre><code>#test1 &gt; p:first-child{
background-color: red;
color: white;
}</code></pre><h4 id="last-child">:last-child</h4>
</li>
<li>형제 관계의 요소 중 마지막 요소<pre><code>#test1&gt;p:last-child{
background-color: blueviolet;
}</code></pre><h4 id="nth-child">:nth-child()</h4>
</li>
<li>형제 관계 중 숫자/수열 번째 형제 요소 선택<pre><code>#test1&gt;p:nth-child(2){
background-color: yellow;
}
#test1&gt;p:nth-child(2n+1){
font-style: italic;
}</code></pre><h4 id="nth-last-child">:nth-last-child()</h4>
</li>
<li>뒤에서 부터 숫자|수열 번째 요소 선택<pre><code>#test1&gt;p:nth-last-child(2){
color: brown;
}
#test1&gt;p:nth-last-child(2n){
color: brown;
}</code></pre><h3 id="형태-구조-선택자">형태 구조 선택자</h3>
</li>
<li>선택된 형제 관계 요소 중 특정 요소를 선택하는 선택자</li>
<li>선택된 요소들을 기준으로 구분<h4 id="first-of-type">:first-of-type</h4>
</li>
<li>같이 선택된 형제들 중에서 첫 번째 요소<pre><code>#test2&gt;p:first-of-type{
background-color: orange;
}</code></pre><h4 id="last-of-type">:last-of-type</h4>
</li>
<li>같이 선택된 형제들 중에서 마지막 요소<pre><code>#test2&gt;p:last-of-type{
background-color: deepskyblue;
}</code></pre><h4 id="nth-of-type">:nth-of-type()</h4>
</li>
<li>같이 선택된 형제들 중에서 숫자|수열 번째 모든 요소<pre><code>#test2&gt;p:nth-of-type(2n+1){
font-family: &quot;궁서체&quot;;
font-size: 30px;
}</code></pre><h4 id="nth-last-of-type">:nth-last-of-type()</h4>
</li>
<li>같이 선택된 형제들 중에서 뒤에서 숫자|수열 번째 모든 요소<pre><code>#test2&gt;p:nth-last-of-type(2n){
background-color: aquamarine;
}</code></pre><h3 id="부정-선택자">부정 선택자</h3>
<h4 id="not">:not()</h4>
</li>
<li>괄호 내 선택자를 제외한 나머지 요소를 선택<pre><code>#test3&gt;li:not(:nth-of-type(3n)){
background-color: violet;
}</code></pre><h3 id="기타-선택자-추가-선택-작성-방법">기타 선택자, 추가 선택 작성 방법</h3>
<h4 id="only-child">:only-child</h4>
</li>
<li>특정 요소의 자식이 하나밖에 없을 때 선택<pre><code>#test1-1&gt;p:only-child{
background-color: gold;
}</code></pre><h4 id="only-of-type">:only-of-type</h4>
</li>
<li>특정 요소의 자식 중 지정된 형태와 같은 자식 요소가 하나만 있을 때 선택<pre><code>#test2&gt;p:only-of-type{
background-color: plum;
}</code></pre><h4 id="empty">:empty</h4>
</li>
<li>자식 요소가 없는 요소인 경우 선택</li>
<li>(태그, 글자, 띄어쓰기 모두 자식이라고 함)<pre><code>#test3&gt;p:empty{
height: 30px;
background-color: greenyellow;
}</code></pre><h4 id="여러-선택자-동시-작성">여러 선택자 동시 작성</h4>
</li>
<li>같은 스타일을 지정하고 싶은 요소가 있으나 선택자 하나로 모두 선택할 수 없을 때 사용</li>
<li>작성법
선택자1, 선택자2, 선택자3, ... {CSS 코드;}<pre><code>#test4-1, #test4-2, .test4-3{
border: 3px dashed black;
}</code></pre><h4 id="특정-요소-내부에-있는-특정-클래스만-선택">특정 요소 내부에 있는 특정 클래스만 선택</h4>
</li>
<li>#test5-1의 후손 중 클래스가 c5인 요소 선택<pre><code>#test5-1 .c5{
background-color: rgb(170, 142, 17);
}</code></pre></li>
<li>#test5-2의 자식 li 태그 중 클래스가 c5인 요소 선택<pre><code>#test5-2&gt;li.c5{
background-color: brown;
}</code></pre><h4 id="여러-클래스가-작성된-요소만-선택">여러 클래스가 작성된 요소만 선택</h4>
<pre><code>.test6.c6{
background-color: red;
}</code></pre><h2 id="css-선택자-우선순위">CSS 선택자 우선순위</h2>
</li>
<li>기본적으로 css 속성은 style태그 또는 css 파일에 작성된 순서(위-&gt;아래)대로 해석이 진행 되지만 같은 요소에 여러 css 속성이 설정되는 경우 우선 순위가 적용된다.</li>
<li>동일한 우선 순위로 css 속성이 설정된 경우 제일 마지막에 작성된 css 속성이 반영된다</li>
<li>여러 선택자를 이용해서 같은 요소를 선택하더라도 지정되는 css 속성이 다르면 모두 반영된다.<h3 id="선택자-우선순위">선택자 우선순위</h3>
</li>
</ul>
<ol>
<li>css속성 : 속성값 !important;</li>
<li>inline-style 속성 (요소에 직접 작성되는 style 속성)</li>
<li>아이디 선택자 (#아이디 속성명)</li>
<li>클래스 선택자 (.class 속성명)</li>
<li>태그 선택자 (태그명)</li>
</ol>
<ul>
<li>!important로 같은 요소에 같은 CSS 설정이 적용되면 감싸고 있는 선택자 우선순위를 먼저 판별, 감싸고 있는 선택자 우선순위가 같으면 마지막 작성된 내용이 적용</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML]]></title>
            <link>https://velog.io/@firecurry_94/HTML</link>
            <guid>https://velog.io/@firecurry_94/HTML</guid>
            <pubDate>Wed, 06 Sep 2023 08:45:34 GMT</pubDate>
            <description><![CDATA[<h1 id="태그의-종류">태그의 종류</h1>
<h2 id="기본-태그">기본 태그</h2>
<h3 id="html-태그">html 태그</h3>
<ul>
<li>html 문서의 내용을 정의하는 태그</li>
<li>html 코드는 모두 이 태그 내부에 작성해야 한다<h4 id="lang-속성">lang 속성</h4>
</li>
<li>html 문서가 어떤 언어로 표기되어 있는지 표시</li>
<li>검색엔진에서 사용 (ex. 한국어로만 작성된 페이지 검색)<pre><code>&lt;html lang=&quot;ko&quot;&gt;
&lt;/html&gt;</code></pre><h3 id="head-태그">head 태그</h3>
</li>
<li>html 문서를 정의하는 태그</li>
<li>제목, 스타일 (css), 로딩 시 기능(js), 추가 설정/정보(메타데이터)<pre><code>&lt;head&gt;
  &lt;title&gt;제목&lt;/title&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;/head&gt;</code></pre><h3 id="body-태그">body 태그</h3>
</li>
<li>화면에 보여질 내용을 정의하는 태그<pre><code>&lt;body&gt;
&lt;/body&gt;</code></pre><h2 id="글자-관련-태그">글자 관련 태그</h2>
<h3 id="highlight-h1--h6-태그">highlight (h1 ~ h6) 태그</h3>
</li>
<li>제목을 나타내는 태그</li>
<li>1(큼) ~ 6(작음) 폰트 크기가 지정되어 있음<pre><code>&lt;h1&gt;h1 태그에 작성된 내용&lt;/h1&gt;
&lt;h2&gt;h2 태그에 작성된 내용&lt;/h2&gt;
&lt;h3&gt;h3 태그에 작성된 내용&lt;/h3&gt;
&lt;h4&gt;h4 태그에 작성된 내용&lt;/h4&gt;
&lt;h5&gt;h5 태그에 작성된 내용&lt;/h5&gt;
&lt;h6&gt;h6 태그에 작성된 내용&lt;/h6&gt;</code></pre><h3 id="hr-horizon-태그">hr (horizon) 태그</h3>
</li>
<li>가로줄 긋기 태그<pre><code>&lt;hr&gt;</code></pre><h3 id="br-line-break-태그">br (line break) 태그</h3>
</li>
<li>다음 줄 이동<pre><code>&lt;br&gt;</code></pre><h3 id="p-paragraph-태그">p (Paragraph) 태그</h3>
</li>
<li>글을 작성하는 용도, 종료 시 줄 바꿈<pre><code>&lt;p&gt;내용&lt;/p&gt;</code></pre><h3 id="pre-preformatted-태그">pre (Preformatted) 태그</h3>
</li>
<li>태그 내에 작성된 문자열 형식을 그대로 보여주는 태그</li>
<li>p 태그 + 형식 유지<pre><code>&lt;pre&gt;내용&lt;/pre&gt;</code></pre><h3 id="b-태그">b 태그</h3>
</li>
<li>단순히 글자를 굵게 표시하는 태그<pre><code>&lt;b&gt;b 태그&lt;/b&gt;</code></pre><h3 id="i-태그">i 태그</h3>
</li>
<li>단순히 글자를 기울여 표시하는 태그<pre><code>&lt;i&gt;i 태그&lt;/i&gt;</code></pre><h3 id="strong-태그">strong 태그</h3>
</li>
<li>글자(단어)를 강조하는 태그</li>
<li>글자를 굵게 표시하는 태그</li>
<li>웹 접근성을 위해 사용<pre><code>&lt;strong&gt;strong 태그&lt;/strong&gt;</code></pre><h3 id="em-태그">em 태그</h3>
</li>
<li>글자(문장)를 강조하는 태그</li>
<li>글자를 기울여 표시하는 태그</li>
<li>웹 접근성을 위해 사용<pre><code>&lt;em&gt;em 태그&lt;/em&gt;</code></pre><h3 id="mark-태그">mark 태그</h3>
</li>
<li>형광펜 효과를 나타내는 태그<pre><code>&lt;mark&gt;mark 태그&lt;/mark&gt;</code></pre><h3 id="u-태그">u 태그</h3>
</li>
<li>밑줄 태그<pre><code>&lt;u&gt;u 태그&lt;/u&gt;</code></pre><h3 id="s-태그">s 태그</h3>
</li>
<li>취소선<pre><code>&lt;s&gt;s 태그&lt;/s&gt;</code></pre><h3 id="del-태그">del 태그</h3>
</li>
<li>삭제선<pre><code>&lt;del&gt;del 태그&lt;/del&gt; </code></pre><h3 id="small-태그">small 태그</h3>
</li>
<li>작은 글자 태그<pre><code>&lt;small&gt;small 태그&lt;/small&gt;</code></pre><h3 id="sup-태그">sup 태그</h3>
</li>
<li>윗첨자 태그<pre><code>&lt;sup&gt;내용&lt;/sup&gt;</code></pre><h3 id="sub-태그">sub 태그</h3>
</li>
<li>아랫첨자 태그<pre><code>&lt;sub&gt;내용&lt;/sub&gt;</code></pre><h3 id="abbr-abbreviation-태그">abbr (abbreviation) 태그</h3>
</li>
<li>마우스 오버 시 툴팁 출력 태그<pre><code>&lt;abbr title=&quot;설명&quot;&gt;내용&lt;/abbr&gt;</code></pre><h2 id="목록-관련-태그">목록 관련 태그</h2>
<h3 id="ul-unordered-list-태그">ul (unordered list) 태그</h3>
</li>
<li>순서 없는 목록 태그<h3 id="li-list-item-태그">li (list item) 태그</h3>
</li>
<li>목록의 한 줄(목록에서 구별되는 내용) 태그<pre><code>&lt;ul&gt;
  &lt;li&gt;김밥&lt;/li&gt;
  &lt;li&gt;서브웨이&lt;/li&gt;
  &lt;li&gt;라면&lt;/li&gt;
  &lt;li&gt;햄버거&lt;/li&gt;
&lt;/ul&gt;</code></pre><h3 id="emmet을-이용해서-목록-만들기">emmet을 이용해서 목록 만들기</h3>
</li>
<li>&gt; : 태그 내부에 작성(하위)</li>
<li>+ : 형제(같은 레벨)로 작성</li>
<li>* 숫자 : 개수</li>
<li>{} : 태그 내용</li>
<li>$ : 1부터 1씩 증가하는 숫자 출력<pre><code>ul*2&gt;li*3{$번 항목}</code></pre><h3 id="ol-ordered-list-태그">ol (ordered list) 태그</h3>
</li>
<li>순서가 있는 목록 태그</li>
<li>type 속성 : 순서를 나타내는 형식을 지정</li>
<li>미작성 : 1 부터 1씩 증가하는 숫자</li>
<li>type=&quot;a&quot; : 영어 소문자 순서(abcd...)</li>
<li>type=&quot;A&quot; : 영어 대문자 순서(ABCD...)</li>
<li>type=&quot;i&quot; : 로마 소문자 순서</li>
<li>type=&quot;I&quot; : 로마 대문자 순서</li>
<li>start 속성 : 시작하는 숫자 설정</li>
<li>reversed : 반대(역순)<pre><code>&lt;ol type=&quot;1&quot; start=&quot;3&quot; reversed&gt;
  &lt;li&gt;샐러드&lt;/li&gt;
  &lt;li&gt;김밥&lt;/li&gt;
  &lt;li&gt;삼겹살&lt;/li&gt;
  &lt;li&gt;돼지갈비&lt;/li&gt;
  &lt;li&gt;우육면&lt;/li&gt;
&lt;/ol&gt;</code></pre><h3 id="dl-description-list-태그">dl (description list) 태그</h3>
</li>
<li>설명 목록 태그</li>
<li>dl 태그 : 설명 목록이 작성될 판(공간)</li>
<li>dt 태그 : 설명 제목</li>
<li>dd 태그 : 설명 내용<pre><code>&lt;dl&gt;
  &lt;dt&gt;제목1&lt;/dt&gt;
  &lt;dd&gt;내용1-1&lt;/dd&gt;
  &lt;dd&gt;내용1-2&lt;/dd&gt;
  &lt;dt&gt;제목2&lt;/dt&gt;
  &lt;dd&gt;내용2&lt;/dd&gt;
&lt;/dl&gt;</code></pre></li>
</ul>
<h2 id="표-관련-태그">표 관련 태그</h2>
<h3 id="table-태그">table 태그</h3>
<ul>
<li>웹 문서에서 자료 정리를 위해 주로 사용하는 태그</li>
<li>행과 열로 이루어져 있으며, 행과 열이 교차하는 지점을 셀(cell) 이라고 함.</li>
<li>table 태그는 테이블을 나타내는 행과 열이 작성될 수 있는 영역을 지정함.<h4 id="tr-table-row-태그">tr (Table Row) 태그</h4>
</li>
<li>한 행을 나타내는 태그<h4 id="td-table-data-태그">td (Table Data) 태그</h4>
</li>
<li>한 행의 한 컬럼(셀)을 나타내는 태그<h4 id="th-table-header-태그">th (Table Header) 태그</h4>
</li>
<li>컬럼명을 표시하는 용도의 태그</li>
<li>기본 성질은 td 태그와 같으나 추가적으로 굵은 글씨, 가운데 정렬이 이루어짐<h4 id="caption-태그">caption 태그</h4>
</li>
<li>테이블의 제목이나 설명 내용을 추가하는 태그<h3 id="행-병합-열-병합">행 병합, 열 병합</h3>
</li>
<li>td 또는 th 태그에 작성하는 속성</li>
<li>테이블의 병합은 다른 td/th 태그를 하나로 합치는 것이 아닌 지정된 크기 만큼의 행, 열의 자리를 차지하겠다라는 의미<h4 id="rowspan">rowspan</h4>
</li>
<li>행 병합<h4 id="colspan">colspan</h4>
</li>
<li>열 병합<h3 id="테이블-구조-설정-태그">테이블 구조 설정 태그</h3>
</li>
<li>미작성시 모든 내용은 tbody 내부에 작성<h4 id="thead-태그">thead 태그</h4>
</li>
<li>테이블 상단 영역 (컬럼명)<h4 id="tbody-태그">tbody 태그</h4>
</li>
<li>테이블 중단 영역 (실제 값, 내용)<h4 id="tfoot-태그">tfoot 태그</h4>
</li>
<li>테이블 하단 영역 (합계)<pre><code>&lt;table&gt;
  &lt;thead&gt;
      &lt;caption&gt;개인정보&lt;/caption&gt;
      &lt;tr&gt;
          &lt;th&gt;이름&lt;/th&gt;
          &lt;th&gt;나이&lt;/th&gt;
          &lt;th&gt;주소&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;홍길동&lt;/td&gt;
          &lt;td&gt;20&lt;/td&gt;
          &lt;td&gt;서울시 금천구&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;김개똥&lt;/td&gt;
          &lt;td&gt;25&lt;/td&gt;
          &lt;td&gt;서울시 강남구&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;김영희&lt;/td&gt;
          &lt;td&gt;23&lt;/td&gt;
          &lt;td&gt;경기도 파주시&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
  &lt;tfoot&gt;
      &lt;tr&gt;
          &lt;th colspan=&quot;2&quot;&gt;총 인원&lt;/th&gt;
          &lt;th&gt;3명&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/tfoot&gt;
&lt;/table&gt;</code></pre><h2 id="이미지-관련-태그">이미지 관련 태그</h2>
<h3 id="img-태그">img 태그</h3>
</li>
<li>웹 문서에서 사진이나 그림 같은 이미지를 삽입하는 용도의 태그<h4 id="속성">속성</h4>
</li>
<li>src : 삽입할 이미지의 경로를 작성하는 속성(파일경로, 웹 주소)</li>
<li>width / height : 이미지 크기(px, %)</li>
<li>alt (대안) : 이미지의 설명을 작성하는 속성, 이미지가 출력되지 않는 경우 화면에 표시됨, 웹 접근성(스크린 리더가 이미지 설명을 읽어줌)<h4 id="절대-경로로-이미지-출력">절대 경로로 이미지 출력</h4>
</li>
<li>변하지 않는 기준점으로 부터 목표까지의 경로 (서버 배포 시 컴퓨터 절대 경로는 인식되지 않음)<pre><code>&lt;img src=&quot;C:\workspace\04_WebFront\images\cats\cat1.jpg&quot; alt=&quot;cat1.jpg 이미지&quot;&gt;</code></pre><h4 id="상대-경로로-이미지-출력">상대 경로로 이미지 출력</h4>
</li>
<li>상대 경로 : 현재 파일/페이지 위치를 기준점으로 하여 목표까지의 경로를 나타내는 것 (절대 경로가 노출되지 않기 때문에 서버 배포시에도 사용 가능)<pre><code>&lt;img src=&quot;..\images\dogs\dog1.jpg&quot; alt=&quot;dog1.jpg 이미지&quot;&gt;</code></pre><h4 id="웹-주소를-이용해서-이미지-출력">웹 주소를 이용해서 이미지 출력</h4>
<pre><code>&lt;img src=&quot;https://img.freepik.com/premium-photo/killer-whale-in-the-water-with-mountains-in-the-background_996379-1149.jpg&quot; alt=&quot;&quot;&gt;</code></pre><h4 id="고정-크기-단위">고정 크기 단위</h4>
</li>
<li>항상 고정된 크기를 지닌 단위 (px, pt)<pre><code>&lt;img src=&quot;../images/cats/cat1.jpg&quot; width=&quot;300px&quot; height=&quot;200&quot;&gt;</code></pre><h4 id="가변-크기-단위">가변 크기 단위</h4>
</li>
<li>화면 또는 영역에 대한 상대적 크기 단위 (%, em, rem, vh, vw)<pre><code>&lt;img src=&quot;..\images\dogs\dog1.jpg&quot; width=&quot;15%&quot; height=&quot;240px&quot;&gt;</code></pre><h2 id="영역-관련-태그">영역 관련 태그</h2>
<h3 id="block-형식">block 형식</h3>
</li>
<li>공간을 수직 분할</li>
<li>수직으로 되어있는 화면을 가로로 잘라서 여러 행을 만드는 것</li>
<li>크기를 지정하는 css 속성인 width, height를 사용할 수 있다</li>
<li>사각형 박스 형태로 영역을 지정</li>
<li>ex) h, p, pre, hr, div 태그 등<h3 id="inline-형식">inline 형식</h3>
</li>
<li>공간을 수평 분할</li>
<li>수평으로 되어있는 화면을 세로로 잘라서 여러 열(컬럼)을 만드는 것</li>
<li>크기를 지정하는 css 속성인 width, height를 사용할 수 없다</li>
<li>내부에 작성된 내용(content) 단위로 영역을 지정</li>
<li>ex) b, strong, i, em, mark, span, img<h3 id="iframe-태그">iframe 태그</h3>
</li>
<li>웹 문서 내부에 또 다른 웹 문서를 추가하는 태그(inline 형식)</li>
<li>웹 문서를 겹쳐서 보여주기 때문에 활용 방법에 따라 다양한 연출이 가능한 장점 있음</li>
<li>하지만, 한 번에 여러 페이지를 로딩하기 때문에 컴퓨터 성능, 인터넷 속도에 따라 느려지거나, 오류가 발생할 수 있다<pre><code>&lt;iframe src=&quot;05_표 연습문제.html&quot; width = &quot;400px&quot; height =400px; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
&lt;iframe width=&quot;540&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/Km71Rr9K-Bw&quot; title=&quot;NewJeans (뉴진스) &#39;Ditto&#39; Performance Video&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;</code></pre></li>
</ul>
<h2 id="하이퍼-링크-관련-태그">하이퍼 링크 관련 태그</h2>
<h3 id="a-태그">a 태그</h3>
<ul>
<li>a태그는 현재 HTML 문서와 다른 HTML 문서를 연결해서 페이지 이동을 할 수 있게 하는 기능을 제공</li>
<li>이 때, a태그로 감싸진 문자열은 하이퍼링크(또는 하이퍼 텍스트)<h4 id="속성-1">속성</h4>
</li>
<li>href(HyperText Reference) 속성 : 연결할 주소를 지정하는 속성</li>
<li>target=&quot;_blank&quot; : 새 탭에서 열기<h4 id="상대-경로-방식으로-파일-연결하기">상대 경로 방식으로 파일 연결하기</h4>
<pre><code>&lt;li&gt;&lt;a href=&quot;01_글자관련태그.html&quot;&gt;글자 관련 태그&lt;/a&gt;&lt;/li&gt;</code></pre><h4 id="a태그와-다른-태그-같이-사용하기">a태그와 다른 태그 같이 사용하기</h4>
<pre><code>&lt;h1&gt;
  &lt;a href=&quot;https://www.naver.com&quot; target=&quot;_blank&quot;&gt;
    네이버
  &lt;/a&gt;
&lt;/h1&gt;</code></pre><h4 id="이미지-클릭-시-이동하기">이미지 클릭 시 이동하기</h4>
<pre><code>&lt;a href=&quot;https://www.kh-academy.co.kr&quot; target=&quot;_blank&quot;&gt;
  &lt;img width=&quot;200px&quot; height=&quot;140px&quot; src=&quot;https://www.kh-academy.co.kr/resources/images/main/logo.svg&quot; alt=&quot;KH 정보교육원 로고&quot;&gt;
&lt;/a&gt;</code></pre><h4 id="페이지-내부에서-점프하기">페이지 내부에서 점프하기</h4>
<pre><code>&lt;ul id=&quot;list&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#flower1&quot;&gt;꽃 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#flower2&quot;&gt;꽃 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#flower3&quot;&gt;꽃 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</code></pre></li>
</ul>
<h3 id="flower1">꽃 1</h3>
<img src="../images/flowers/flower1.jpg"> <br>
<a href="#list">목록으로 이동</a>

<h3 id="flower2">꽃 2</h3>
<img src="../images/flowers/flower2.jpg"> <br>
<a href="#list">목록으로 이동</a>

<h3 id="flower3">꽃 3</h3>
<img src="../images/flowers/flower3.jpg"> <br>
<a href="#list">목록으로 이동</a>
```
## 입력 관련 태그
### text 관련 input 태그
* 웹 문서에서 사용자가 입력할 수 있는 양식을 제공하는 태그 (inline)
* 공통 속성
    - size : 입력 상자의 크기
    - maxlength : 입력 받는 텍스트의 최대 길이
    - placeholder : 입력 상자에 작성될 내용을 설명
    - value : input 태그에 들어갈 초기값을 지정
    (모든 input 태그의 type에서 사용 가능한 속성)
#### type="text"
* 한 줄 짜리 문자열(텍스트)를 입력할 수 있는 입력 상자
* input 태그의 type 기본값으로 생략 가능
```
<input type="text" size="15" maxlength="10" placeholder="값 적어요" value="기본값">
```
#### type="password"
* 비밀번호 입력 상자(입력되는 텍스트를 가려줌)
```
비밀번호 : <input type="password" id="pw">
```
### 기타 텍스트 관련 태그
* url, email, tel 단독 사용 시 type="text"와 똑같지만 form태그 내부에서 사용되면 
        입력된 값이 용도에 맞는 값인지 유효성 검사를 간단히 진행함
#### type="url"
* 주소 입력 시 사용하는 입력 상자
```
<input type="url" id="inputUrl" value="https://github.com/" size="50">
```
#### type="email"
* 이메일 입력 시 사용하는 입력 상자
```
<form action="">
    이메일 : <input type="email">
    <button type="submit">제출</button>
</form>
```
#### type="tel"
* 전화번호 입력 시 사용하는 입력 상자
```
<input type="tel" size="8" maxlength="11" placeholder="-없이">
```
#### type="search"
* 검색어 입력 시 사용하는 입력 상자
```
<input type="search">
```
### 숫자 관련 input 태그
* 공통 속성
    - min : 최소값
    - max : 최대값
    - step : 증가/감소 단계 지정
    - value : input 태그에 들어갈 초기값을 지정
    (모든 input 태그의 type에서 사용 가능한 속성)

<h4 id="typenumber">type=&quot;number&quot;</h4>
<ul>
<li><p>숫자만 입력 할 수 있는 입력 상자</p>
</li>
<li><p>브라우저에 따라 스핀박스가 표시되기도 함</p>
<pre><code>&lt;input id=&quot;number&quot; type=&quot;number&quot; min=&quot;0&quot; max=&quot;100&quot; step=&quot;5&quot; value=&quot;50&quot;&gt;</code></pre><h4 id="typerange">type=&quot;range&quot;</h4>
</li>
<li><p>슬라이드 바를 이용해서 숫자 지정(단독 사용X, JS와 함께 사용)</p>
<pre><code>&lt;input id=&quot;range&quot; type=&quot;range&quot; min=&quot;0&quot; max=&quot;100&quot; step=&quot;5&quot; value=&quot;50&quot;&gt;</code></pre><h3 id="날짜시간-관련-input-태그">날짜/시간 관련 input 태그</h3>
</li>
<li><p>type=&quot;date / month / week / time / datetime-local&quot;</p>
<h3 id="radio-checkbox">radio, checkbox</h3>
</li>
<li><p>여러 관련된 값을 묶어서 선택하는 경우에 사용하는 input type</p>
</li>
<li><p>묶음으로 다루려는 input 태그들은 반드시 같은 name 속성 값을 가져야 한다</p>
</li>
<li><p>속성에 checked 작성 시 기본값으로 설정</p>
<h4 id="name-속성">name 속성</h4>
</li>
<li><p>radio, checkbox 뿐만 아니라 input 태그들 중 관련된 것들을 묶어서 부를 때(묶음으로 다룰때) 사용  (그룹이름)</p>
</li>
<li><p>서버쪽에 제출되는 input 태그 값의 이름을 지정(form태그와 같이 사용) (checkbox에 사용 시 name이 같은 input은 하나의 배열로 전달됨)</p>
<h4 id="label">label</h4>
</li>
<li><p>input 태그에 대한 설명/제목을 지정하는 태그</p>
</li>
<li><p>for 속성에 input 태그의 id 속성 값을 작성하여 연결 가능 -&gt; label을 클릭해도 input을 클릭한 효과를 얻을 수 있음</p>
<h4 id="typeradio">type=&quot;radio&quot;</h4>
</li>
<li><p>하나만 선택 가능</p>
<pre><code>&lt;label for=&quot;aTeam&quot;&gt;A팀&lt;/label&gt; &lt;input type=&quot;radio&quot; name=&quot;team&quot; id=&quot;aTeam&quot;&gt; &lt;br&gt;
&lt;label for=&quot;bTeam&quot;&gt;B팀&lt;/label&gt; &lt;input type=&quot;radio&quot; name=&quot;team&quot; id=&quot;bTeam&quot;&gt; &lt;br&gt;
&lt;label for=&quot;cTeam&quot;&gt;C팀&lt;/label&gt; &lt;input type=&quot;radio&quot; name=&quot;team&quot; id=&quot;cTeam&quot;&gt; &lt;br&gt;</code></pre><h4 id="typecheckbox">type=&quot;checkbox&quot;</h4>
</li>
<li><p>여러 개 선택 가능</p>
<pre><code>&lt;label for=&quot;baseball&quot;&gt;야구&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; id=&quot;baseball&quot;&gt; &lt;br&gt;
&lt;label for=&quot;soccer&quot;&gt;축구&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; id=&quot;soccer&quot;&gt; &lt;br&gt;
&lt;label for=&quot;basketball&quot;&gt;농구&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; id=&quot;basketball&quot;&gt; &lt;br&gt;</code></pre><h3 id="버튼을-나타내는-input-태그">버튼을 나타내는 input 태그</h3>
</li>
<li><p>input 태그 중
  type=&quot;submit&quot; / type=&quot;reset&quot; / type=&quot;button&quot;
  위 3개가 버튼을 나타내는 타입인데 최근에는 잘 사용되지 않음</p>
</li>
<li><p>버튼의 사용도가 너무 많아져서 별도의 button 태그가 새롭게 등장했기 때문</p>
<h4 id="button-태그">button 태그</h4>
</li>
<li><p>type=&quot;submit(기본값) / reset(form에 작성된 값 초기화) / button(JS에서 사용)&quot;</p>
<pre><code>&lt;button type=&quot;reset&quot;&gt;reset&lt;/button&gt;</code></pre><h3 id="기타-input-태그">기타 input 태그</h3>
<h4 id="typecolor">type=&quot;color&quot;</h4>
</li>
<li><p>색 선택 태그</p>
<h4 id="typefile">type=&quot;file&quot;</h4>
</li>
<li><p>파일 선택 태그</p>
<h4 id="typehidden">type=&quot;hidden&quot;</h4>
</li>
<li><p>화면에 보이지는 않지만 실제로는 존재하는 input 태그
  -&gt;꼭 보여질 필요는 없지만 기능 수행 시 필요한 값(ex. 회원번호)</p>
<pre><code>&lt;input type=&quot;hidden&quot; id=&quot;hd&quot; value=&quot;여기 값 있다?!&quot;&gt;</code></pre><h3 id="form-태그">form 태그</h3>
</li>
<li><p>div와 같은 영역(block 형식) + 내부에 작성된 input 태그의 값을 서버로 전달하는 역할</p>
</li>
<li><p>속성</p>
<ul>
<li>action : 내부에 작성된 값을 전달할 서버 또는 페이지 주소를 작성</li>
<li>method(방식) : 서버로 데이터 전달하는 방식을 지정하는 속성</li>
<li>name : form태그의 이름을 지정하여 각각의 form태그 구분(JS사용)</li>
<li>target :  action에 지정된 주소를 새탭/현재탭 중 어디서 열지 지정</li>
</ul>
</li>
<li><p>예시 1
아이디, 비밀번호 입력 후 로그인(제출) 클릭 시 action에 작성된 주소 result.html로 입력된 값을 전달(제출)</p>
<pre><code>&lt;form action=&quot;result.html&quot;&gt;
  아이디 입력 : &lt;input type=&quot;text&quot; name=&quot;inputId&quot;&gt; &lt;br&gt;
  비밀번호 입력 : &lt;input type=&quot;password&quot; name=&quot;inputPw&quot;&gt; &lt;br&gt;
  &lt;button type=&quot;submit&quot;&gt;로그인(제출)&lt;/button&gt; &lt;br&gt;
&lt;/form&gt;</code></pre></li>
<li><p>예시 2
action : 제출할 서버 또는 페이지 주소
method= &quot;get&quot; : 주소에 데이터를 key=value 형식으로 전달하는 방식 (기본값)</p>
<pre><code>&lt;form action=&quot;result.html&quot; method=&quot;get&quot;&gt;
  이름 : &lt;input type=&quot;text&quot; name=&quot;inputName&quot;&gt; &lt;br&gt;
  나이 : &lt;input type=&quot;number&quot; name=&quot;inputAge&quot;&gt; &lt;br&gt;
  &lt;button type=&quot;submit&quot;&gt;제출하기&lt;/button&gt;
&lt;/form&gt;</code></pre></li>
<li><p>예시 3
target=&quot;_blank&quot; : 제출 결과를 새 창에서 확인</p>
<pre><code>&lt;form action=&quot;result.html&quot; target=&quot;_blank&quot;&gt;
  팀 선택 &lt;br&gt;
  &lt;label for=&quot;aTeam&quot;&gt;A팀&lt;/label&gt; &lt;input type=&quot;radio&quot; name=&quot;team&quot; id=&quot;aTeam&quot; value=&quot;A팀&quot;&gt; &lt;br&gt;
  &lt;label for=&quot;bTeam&quot;&gt;B팀&lt;/label&gt; &lt;input type=&quot;radio&quot; name=&quot;team&quot; id=&quot;bTeam&quot; value=&quot;B팀&quot;&gt; &lt;br&gt;
  &lt;label for=&quot;cTeam&quot;&gt;C팀&lt;/label&gt; &lt;input type=&quot;radio&quot; name=&quot;team&quot; id=&quot;cTeam&quot; value=&quot;C팀&quot;&gt; &lt;br&gt;
  &lt;hr&gt;
  취미 선택 &lt;br&gt;
  &lt;label for=&quot;baseball&quot;&gt;야구&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; id=&quot;baseball&quot; value=&quot;야구&quot;&gt; &lt;br&gt;
  &lt;label for=&quot;soccer&quot;&gt;축구&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; id=&quot;soccer&quot; value=&quot;축구&quot;&gt; &lt;br&gt;
  &lt;label for=&quot;basketball&quot;&gt;농구&lt;/label&gt; &lt;input type=&quot;checkbox&quot; name=&quot;hobby&quot; id=&quot;basketball&quot; value=&quot;농구&quot;&gt; &lt;br&gt;        
  &lt;button type=&quot;submit&quot;&gt;제출하기&lt;/button&gt;
&lt;/form&gt;</code></pre><h4 id="fieldset-태그">fieldset 태그</h4>
</li>
<li><p>테두리를 만들어 그룹을 구분하는 영역</p>
<h4 id="legend-태그">legend 태그</h4>
</li>
<li><p>fieldset 테두리에 이름을 부여</p>
<pre><code>&lt;form action=&quot;result.html&quot; method=&quot;get&quot; target=&quot;_blank&quot;&gt;
  &lt;fieldset&gt;
      &lt;legend&gt;로그인&lt;/legend&gt;
      아이디 : &lt;input type=&quot;text&quot; name=&quot;inputId&quot;&gt; &lt;br&gt;
      비밀번호 : &lt;input type=&quot;password&quot; name=&quot;inputPw&quot;&gt; &lt;br&gt;
  &lt;/fieldset&gt;
  &lt;fieldset&gt;
      &lt;legend&gt;개인정보&lt;/legend&gt;
      이름 : &lt;input type=&quot;text&quot; name=&quot;inputName&quot;&gt; &lt;br&gt;
      나이 : &lt;input type=&quot;number&quot; name=&quot;inputAge&quot;&gt; &lt;br&gt;
  &lt;/fieldset&gt;   
  &lt;button type=&quot;submit&quot;&gt;제출하기&lt;/button&gt;
&lt;/form&gt;</code></pre><h4 id="textarea-태그">textarea 태그</h4>
</li>
<li><p>여러 줄을 입력하기 위한 입력 상자</p>
</li>
<li><p>css{resize: none;}
크기 지정 불가</p>
<pre><code>&lt;form action=&quot;result.html&quot;&gt;
  &lt;textarea name=&quot;inputId&quot; rows=&quot;5&quot; cols=&quot;60&quot;
  placeholder=&quot;아무거나 작성 해봐요&quot; style=&quot;resize:none&quot;&gt;태그 사이에 기본 값 작성
      pre태그 처럼 모양 그대로를 인식&lt;/textarea&gt;
  &lt;button&gt;제출&lt;/button&gt;
&lt;/form&gt;</code></pre><h4 id="select-태그">select 태그</h4>
</li>
<li><p>내부에 작성된 option 태그 중 하나를 선택</p>
</li>
<li><p>option에 value가 작성되어 있으면 value 제출 아니면 태그 사이 내용 제출</p>
</li>
<li><p>option 속성 selected 작성 시 기본값으로 설정</p>
<pre><code>&lt;form action=&quot;result.html&quot;&gt;
  &lt;select name=&quot;inputId&quot;&gt;
      &lt;option&gt;선택1&lt;/option&gt;
      &lt;option selected&gt;선택2&lt;/option&gt;
      &lt;option value=&quot;3333&quot;&gt;선택3&lt;/option&gt;
  &lt;/select&gt;
&lt;/form&gt;</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[JOIN]]></title>
            <link>https://velog.io/@firecurry_94/JOIN</link>
            <guid>https://velog.io/@firecurry_94/JOIN</guid>
            <pubDate>Wed, 30 Aug 2023 08:41:34 GMT</pubDate>
            <description><![CDATA[<h1 id="join">JOIN</h1>
<ul>
<li>하나 이상의 테이블에서 데이터를 조회하기 위해 사용</li>
<li>수행 결과는 하나의 RESULT SET으로 나옴</li>
</ul>
<h2 id="내부-조인-inner-join">내부 조인 (INNER JOIN)</h2>
<ul>
<li>연결되는 컬럼의 값이 일치하는 행들만 조인됨</li>
<li>(= 일치하는 값이 없는 행은 조인에서 제외됨)<h3 id="ansi-표준-구문">ANSI 표준 구문</h3>
</li>
<li>1) 연결에 사용할 두 컬럼명이 다른 경우<pre><code>FROM 테이블명1
JOIN 테이블명2 ON(컬럼명1 = 컬럼명2)</code></pre></li>
<li>2) 연결에 사용할 두 컬럼명이 같은 경우<pre><code>FROM 테이블명1
JOIN 테이블명2 USING(컬럼명)</code></pre><h3 id="오라클-전용-구문">오라클 전용 구문</h3>
</li>
<li>1) 연결에 사용할 두 컬럼명이 다른 경우<pre><code>FROM 테이블명1, 테이블명2
WHERE 컬럼명1 = 컬럼명2</code></pre></li>
<li>2) 연결에 사용할 두 컬럼명이 같은 경우
별칭 사용이 필요하다<pre><code>FROM 테이블명1 별칭1, 테이블명2 별칭2
WHERE 별칭1.컬럼명 = 별칭2.컬럼명</code></pre><h2 id="외부-조인-outer-join">외부 조인 (OUTER JOIN)</h2>
</li>
<li>두 테이블이 지정하는 컬럼값이 일치하지 않는 행도 조인에 포함을 시킨다<h3 id="ansi-표준-구문-1">ANSI 표준 구문</h3>
</li>
<li>1) LEFT [OUTER] JOIN
합치기에 사용한 두 테이블 중 왼편에 기술된 테이블의 컬럼 수를 기준으로 JOIN<pre><code>FROM 테이블명1
LEFT JOIN 테이블명2 ON(컬럼명1 = 컬럼명2)</code></pre></li>
<li>2) RIGHT [OUTER] JOIN
합치기에 사용한 두 테이블 중 오른편에 기술된 테이블의 컬럼 수를 기준으로 JOIN<pre><code>FROM 테이블명1
RIGHT JOIN 테이블명2 ON(컬럼명1 = 컬럼명2)</code></pre></li>
<li>3) FULL [OUTER] JOIN
합치기에 사용한 두 테이블이 가진 모든 행을 결과에 포함<pre><code>FROM 테이블명1
FULL JOIN 테이블명2 ON(컬럼명1 = 컬럼명2)</code></pre></li>
<li>오라클은 FULL JOIN을 사용 못함<h3 id="오라클-전용-구문-1">오라클 전용 구문</h3>
</li>
<li>1) LEFT JOIN
컬럼명1의 값이 컬럼명2의 값과 일치하지 않아도 추가하라는 뜻<pre><code>FROM 테이블명1, 테이블명2
WHERE 컬럼명1 = 컬럼명2(+)</code></pre></li>
<li>2) RIGHT JOIN<pre><code>FROM 테이블명1, 테이블명2
WHERE 컬럼명1(+) = 컬럼명2</code></pre><h2 id="교차-조인-cross-join-cartesian-product">교차 조인 (CROSS JOIN, CARTESIAN PRODUCT)</h2>
</li>
<li>조인되는 테이블의 각 행들이 모두 매핑된 데이터가 검색되는 방법(곱집합)</li>
<li>(자연 조인 실패 결과물로 확인 가능하다)<h2 id="비등가-조인-non-equal-join">비등가 조인 (NON EQUAL JOIN)</h2>
</li>
<li>&#39;=&#39;(등호)를 사용하지 않는 조인문</li>
<li>지정한 컬럼 값이 일치하는 경우가 아닌, 값의 범위에 포함되는 행들을 연결하는 방식<pre><code>FROM 테이블명1
JOIN 테이블명2 ON(컬럼명 BETWEEN A AND B)</code></pre><h2 id="자체-조인-self-join">자체 조인 (SELF JOIN)</h2>
</li>
<li>같은 테이블을 조인<h3 id="ansi-표준-구문-2">ANSI 표준 구문</h3>
<pre><code>FROM 테이블명 별칭1
JOIN 테이블명 별칭2 ON(별칭1.컬럼명1 = 별칭2.컬럼명2)</code></pre><h3 id="오라클-전용-구문-2">오라클 전용 구문</h3>
<pre><code>FROM 테이블명 별칭1, 테이블명 별칭2
WHERE 별칭1.컬럼명1 = 별칭2.컬럼명2(+)</code></pre><h2 id="자연-조인-natural-join">자연 조인 (NATURAL JOIN)</h2>
</li>
<li>동일한 타입과 이름을 가진 컬럼이 있는 테이블 간의 조인을 간단히 표현하는 방법</li>
<li>반드시 두 테이블 간의 동일한 컬럼명, 타입을 가진 컬럼이 필요하다</li>
<li>없을 경우 교차 조인이 된다<pre><code>FROM 테이블명1
NATURAL JOIN 테이블명2</code></pre><h2 id="다중-조인">다중 조인</h2>
</li>
<li>N개의 테이블을 조회할 때 사용</li>
<li>순서가 중요하다<pre><code>FROM 테이블명1
JOIN 테이블명2 ON(컬럼명1 = 컬럼명2)
JOIN 테이블명3 ON(컬럼명1 = 컬럼명3)
...</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[SUBQUERY]]></title>
            <link>https://velog.io/@firecurry_94/SUBQUERY</link>
            <guid>https://velog.io/@firecurry_94/SUBQUERY</guid>
            <pubDate>Wed, 30 Aug 2023 06:07:37 GMT</pubDate>
            <description><![CDATA[<h1 id="subquery란">SUBQUERY란?</h1>
<ul>
<li>하나의 SQL문 안에 포함된 또다른 SQL문</li>
<li>메인쿼리(기존쿼리)를 위해 보조 역할을 하는 쿼리문<h1 id="유형">유형</h1>
서브쿼리 유형에 따라 서브쿼리 앞에 붙은 연산자가 다름<h2 id="단일행-서브쿼리">단일행 서브쿼리</h2>
서브쿼리의 조회 결과 값의 개수가 1개일 때</li>
<li>단일행 서브쿼리 앞에는 비교 연산자 사용
&lt;, &gt;, &lt;=, &gt;=, =, !=/^=/&lt;&gt;<h2 id="다중행-서브쿼리">다중행 서브쿼리</h2>
서브쿼리의 조회 결과 값의 개수가 여러개일 때</li>
<li>다중행 서브쿼리 앞에는 일반 비교 연산자 사용 불가
IN / NOT IN : 한 개라도 일치하는 값이 있다 / 없다
&lt; ANY, &gt; ANY : 가장 큰 값보다 작나? / 가장 작은 값보다 큰가?
&lt; ALL, &gt; ALL : 가장 작은 값보다 작나? / 가장 큰 값보다 큰가?
EXISTS / NOT EXISTS 값이 존재하나? / 값이 존재하지 않나?<h2 id="다중열-서브쿼리">다중열 서브쿼리</h2>
서브쿼리의 SELECT 절에 자열된 항목수가 여러개 일 때 (행은 단일 행 = 결과 값은 하나)<pre><code>(컬럼명, 컬럼명, ...) 비교연산자 (서브쿼리)</code></pre><h2 id="다중행-다중열-서브쿼리">다중행 다중열 서브쿼리</h2>
조회 결과 행 수와 열 수가 여러개일 때<pre><code>(컬럼명, 컬럼명, ...) 다중행 비교연산자 (서브쿼리)</code></pre><h2 id="상관-서브쿼리">상관 서브쿼리</h2>
서브쿼리가 만든 결과 값을 메인 쿼리가 비교 연산할 때 메인 쿼리 테이블의 값이 변경되면 서브쿼리의 결과값도 바뀌는 서브쿼리</li>
<li>상관쿼리는 먼저 메인쿼리 한 행을 조회하고 해당 행이 서브쿼리의 조건을 충족하는지 확인하여 SELECT를 진행함<h2 id="스칼라-서브쿼리">스칼라 서브쿼리</h2>
상관 쿼리이면서 결과 값이 하나인 서브쿼리<h2 id="인라인-뷰">인라인 뷰</h2>
</li>
<li>FROM절에서 서브쿼리를 사용하는 경우로 서브쿼리가 만든 결과의 집합(RESULT SET)을 테이블 대신에 사용한다.</li>
<li>FROM절에 이미 정렬된 서브쿼리(인라인 뷰) 적용 시 ROWNUM이 top-N분석에 사용 가능<h2 id="with">WITH</h2>
</li>
<li>서브쿼리에 이름을 붙여주고 사용시 이름을 사용하게 함</li>
<li>인라인 뷰로 사용될 서브쿼리에 주로 사용됨</li>
<li>실행 속도가 빨라진다는 장점이 있음<pre><code>WITH 서브쿼리명 AS (서브쿼리)</code></pre><h2 id="rank-over--dense_rank-over">RANK() OVER() / DENSE_RANK() OVER()</h2>
<h3 id="rank-over">RANK() OVER()</h3>
</li>
<li>동일한 순위 이후의 등수를 동일한 인원 수 만큼 건너뛰고 순위 계산<pre><code>RANK() OVER(ORDER BY 컬럼명 [DESC])</code></pre><h3 id="dense_rank-over">DENSE_RANK() OVER()</h3>
</li>
<li>동일한 순위 이후의 등수를 이후의 순위로 계산<pre><code>DENSE_RANK() OVER(ORDER BY 컬럼명 [DESC])</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[DCL (Data Control Language)]]></title>
            <link>https://velog.io/@firecurry_94/DCL-Data-Control-Language</link>
            <guid>https://velog.io/@firecurry_94/DCL-Data-Control-Language</guid>
            <pubDate>Wed, 30 Aug 2023 05:06:49 GMT</pubDate>
            <description><![CDATA[<h1 id="dcl이란">DCL이란?</h1>
<ul>
<li>계정에 DB, DB 객체에 대한 접근 권한을 부여하고 회수하는 언어</li>
<li>GRANT : 권한 부여</li>
<li>REVOKE : 권한 회수<h1 id="권한의-종류">권한의 종류</h1>
<h2 id="1-시스템-권한">1) 시스템 권한</h2>
</li>
<li>DB 접속, 객체 생성 권한<h3 id="종류">종류</h3>
</li>
<li>CREATE SESSION
데이터베이스 접속 권한</li>
<li>CREATE TABLE
테이블 생성 권한</li>
<li>CREATE VIEW
뷰 생성 권한</li>
<li>CREATE SEQUENCE
시퀀스 생성 권한</li>
<li>CREATE PROCEDURE
함수(프로시져) 생성 권한</li>
<li>CREATE USER
사용자(계정) 생성 권한</li>
<li>DROP USER
사용자(계정) 삭제 권한</li>
<li>DROP ANY TABLE
임의 테이블 삭제 권한<h2 id="2-객체-권한">2) 객체 권한</h2>
</li>
<li>특정 객체를 조작할 수 있는 권한<h3 id="종류-1">종류</h3>
</li>
<li>SELECT
TABLE, VIEW, SEQUENCE</li>
<li>INSERT
TABLE, VIEW</li>
<li>UPDATE
TABLE, VIEW</li>
<li>DELETE
TABLE, VIEW</li>
<li>ALTER
TABLE, SEQUENCE</li>
<li>REFERENCES
TABLE</li>
<li>INDEX
TABLE</li>
<li>EXECUTE
PROCEDURE</li>
</ul>
<p>ex)</p>
<pre><code>-- 계정 생성
CREATE USER 아이디 IDENTIFIED BY &quot;비밀번호&quot;;

-- 사용자 계정에 접속, 기본 객체 8개, VIEW 생성 권한 부여하기
GRANT CONNECT, RESOURCE, CREATE VIEW TO 아이디;

-- 권한 회수
REVOKE SELECT, INSERT ON 테이블 FROM 아이디;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[INDEX]]></title>
            <link>https://velog.io/@firecurry_94/INDEX</link>
            <guid>https://velog.io/@firecurry_94/INDEX</guid>
            <pubDate>Wed, 30 Aug 2023 04:49:19 GMT</pubDate>
            <description><![CDATA[<h1 id="index란">INDEX란?</h1>
<ul>
<li>SQL 구문 중 SELECT 처리 속도를 향상 시키기 위해 컬럼에 대하여 생성하는 객체<h1 id="장점">장점</h1>
</li>
<li>이진 트리 형식으로 구성되어 자동 정렬 및 검색 속도 증가</li>
<li>조회 시 테이블의 전체 내용을 확인하며 조회하는 것이 아닌 인덱스가 지정된 컬럼만을 이용해서 조회하기 때문에 시스템의 부하가 낮아짐<h1 id="단점">단점</h1>
</li>
<li>데이터 변경(DML) 작업 시 이진 트리 구조에 변형이 일어남</li>
<li>DML 작업이 빈번한 경우 시스템 부하가 늘어 성능이 저하됨</li>
<li>인덱스도 하나의 객체이다 보니 별도의 저장 공간이 필요(메모리 소비)</li>
<li>인덱스 생성 시간이 필요함<h1 id="작성법">작성법</h1>
```</li>
<li><ul>
<li>생성
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명 (컬럼명[, 컬럼명 | 함수명]);</li>
</ul>
</li>
<li><ul>
<li>삭제
DROP INDEX 인덱스명;
```<h1 id="활용법">활용법</h1>
</li>
</ul>
</li>
<li>인덱스가 설정된 컬럼을 WHERE 조건절에 명시하면 검색속도가 빠르다<h1 id="자동생성">자동생성</h1>
</li>
<li>PRIMARY KEY 또는 UNIQUE 제약조건이 설정된 컬럼에 대해 UNIQUE INDEX가 자동 생성된다</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[SEQUENCE]]></title>
            <link>https://velog.io/@firecurry_94/SEQUENCE</link>
            <guid>https://velog.io/@firecurry_94/SEQUENCE</guid>
            <pubDate>Wed, 30 Aug 2023 04:37:24 GMT</pubDate>
            <description><![CDATA[<h1 id="sequence란">SEQUENCE란?</h1>
<ul>
<li>순차적으로 일정한 간격의 숫자(번호)를 발생시키는 객체</li>
<li>PRIMARY KEY가 지정된 컬럼에 사용하기 좋다</li>
</ul>
<h1 id="작성법">작성법</h1>
<pre><code>CREATE SEQUENCE 시퀀스이름
[STRAT WITH 숫자]
[INCREMENT BY 숫자]
[MAXVALUE 숫자 | NOMAXVALUE]
[MINVALUE 숫자 | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE 바이트크기 | NOCACHE]</code></pre><ul>
<li>START WITH
처음 발생시킬 시작 값 지정, 생략하면 1이 기본</li>
<li>INCREMENT BY
다음 값에 대한 증가치, 생략하면 1이 기본</li>
<li>MAXVALUE | NOMAXVALUE
발생시킬 최댓값 지정</li>
<li>MINVALUE | NOMINVALUE
최솟값 지정</li>
<li>CYCLE | NOCYCLE
값 순환 여부 지정</li>
<li>CACHE | NOCACHE
캐쉬메모리 기본값은 20바이트, 최솟값은 2바이트
시퀀스의 캐쉬메모리는 할당된 크기만큼 미리 다음 값들을 생성해 저장해둔다<h1 id="사용법">사용법</h1>
<h2 id="시퀀스명nextval">시퀀스명.NEXTVAL</h2>
</li>
<li>다음 시퀀스 번호를 얻어옴 (INCREMENT BY 만큼 증가된 수)</li>
<li>단, 생성 후 처음 호출된 시퀀스인 경우 START WITH에 작성된 값이 반환됨<h2 id="시퀀스명currval">시퀀스명.CURRVAL</h2>
</li>
<li>현재 시퀀스 번호를 얻어옴</li>
<li>단, 시퀀스가 생성 되자마자 호출할 경우 오류 발생 (마지막으로 호출한 NEXTVAL 값을 반환하기 때문)<h1 id="변경법">변경법</h1>
</li>
<li>기본적으로 CREATE 작성법과 같으나 START WITH는 제외<pre><code>ALTER SEQUENCE 시퀀스이름
[INCREMENT BY 숫자]
[MAXVALUE 숫자 | NOMAXVALUE]
[MINVALUE 숫자 | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE 바이트크기 | NOCACHE]</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[VIEW]]></title>
            <link>https://velog.io/@firecurry_94/VIEW</link>
            <guid>https://velog.io/@firecurry_94/VIEW</guid>
            <pubDate>Wed, 30 Aug 2023 03:47:35 GMT</pubDate>
            <description><![CDATA[<h1 id="view란">VIEW란?</h1>
<ul>
<li>논리적 가상 테이블</li>
<li>테이블의 모양을 하고는 있지만, 실제로 값을 저장하고 있지는 않음</li>
<li>SELECT문의 실행 결과(RESULT SET)를 저장하는 객체</li>
</ul>
<h1 id="사용-목적">사용 목적</h1>
<ul>
<li>복잡한 SELECT문을 쉽게 재사용하기 위해</li>
<li>테이블의 진짜 모습을 감출 수 있어 보안상 유리</li>
</ul>
<h1 id="주의-사항">주의 사항</h1>
<ul>
<li>가상의 테이블이기 때문에 ALTER 구문 사용 불가</li>
<li>VIEW를 이용한 DML이 가능한 경우도 있지만 제약이 많이 따르기 때문에 조회 용도로 대부분 사용</li>
</ul>
<h1 id="작성법">작성법</h1>
<pre><code>CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 [컬럼 별칭]
AS 서브쿼리(SELECT문)
[WITH CHECK OPTION]
[WITH READ ONLY];</code></pre><ul>
<li><h2 id="or-replace-옵션">OR REPLACE 옵션</h2>
기존에 동일한 이름의 VIEW가 존재하면 이를 변경 없으면 새로 생성</li>
<li><h2 id="force--noforce-옵션">FORCE | NOFORCE 옵션</h2>
</li>
<li><h3 id="force">FORCE</h3>
서브쿼리에 사용된 테이블이 존재하지 않아도 뷰 생성</li>
<li><h3 id="noforce기본값">NOFORCE(기본값)</h3>
서브쿼리에 사용된 테이블이 존재해야만 뷰 </li>
<li><h2 id="컬럼-별칭-옵션">컬럼 별칭 옵션</h2>
조회되는 VIEW의 컬럼명을 지정</li>
<li><h2 id="with-check-option-옵션">WITH CHECK OPTION 옵션</h2>
옵션을 지정한 컬럼의 값을 수정 불가능하게 함</li>
<li><h2 id="with-read-only-옵션">WITH READ ONLY 옵션</h2>
뷰에 대해 SELECT만 가능하도록 지정</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[DDL (Data Definition Language) 데이터 정의 언어]]></title>
            <link>https://velog.io/@firecurry_94/DDL-Data-Definition-Language-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EC%9D%98-%EC%96%B8%EC%96%B4</link>
            <guid>https://velog.io/@firecurry_94/DDL-Data-Definition-Language-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EC%9D%98-%EC%96%B8%EC%96%B4</guid>
            <pubDate>Mon, 28 Aug 2023 08:47:12 GMT</pubDate>
            <description><![CDATA[<p>객체(OBJECT)를 만들고(CREATE), 수정(ALTER)하고, 삭제(DROP) 등 데이터의 전체 구조를 정의하는 언어로 주로 DB관리자, 설계자가 사용한다.</p>
<ul>
<li>오라클에서의 객체
테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE),인덱스(INDEX), 패키지(PACKAGE), 트리거(TRIGGER), 프로시져(PROCEDURE), 함수(FUNCTION), 동의어(SYNONYM), 사용자(USER)</li>
</ul>
<h1 id="create">CREATE</h1>
<p>테이블이나 인덱스, 뷰 등 다양한 데이터베이스 객체를 생성하는 구문
테이블로 생성된 객체는 DROP구문을 통해 제거할 수 있다.</p>
<ul>
<li><p>작성법</p>
<pre><code>CREATE TABLE 테이블명 (
      컬럼명 자료형(크기), 
      컬럼명 자료형(크기),
      ...);</code></pre></li>
<li><p>컬럼에 주석 달기</p>
<pre><code>COMMENT ON COLUMN 테이블명.컬럼명 IS &#39;주석내용&#39;;</code></pre></li>
<li><p>서브쿼리를 이용한 테이블 생성
컬럼명, 데이터 타입, 값이 복사되고, 제약조건은 NOT NULL만 복사됨
데이터가 없는 빈 테이블로 복사하고 싶으면 조건식의 결과를 무조건 FALSE로 만들어라</p>
<pre><code>CREATE TABLE 테이블명
AS 서브쿼리;</code></pre></li>
</ul>
<ul>
<li>자료형
NUMBER : 숫자형(정수, 실수)
CHAR(크기) : 고정길이 문자형 (2000BYTE)
-&gt; ex) CHAR(10) 컬럼에 &#39;ABC&#39; 3BYTE 문자열만 저장해도 10BYTE 저장공간을 모두 사용.
VARCHAR2(크기) : 가변길이 문자형 (4000 BYTE)
-&gt; ex) VARCHAR2(10) 컬럼에 &#39;ABC&#39; 3BYTE 문자열만 저장하면 나머지 7BYTE를 반환함.
DATE : 날짜 타입
BLOB : 대용량 이진 데이터 (4GB) (Byte Long Of Byte)
CLOB : 대용량 문자 데이터 (4GB) (Charater Long Of Byte)</li>
</ul>
<h2 id="constraints-제약-조건">CONSTRAINTS (제약 조건)</h2>
<p>사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약.
데이터 무결성 보장을 목적으로 함.</p>
<h3 id="not-null">NOT NULL</h3>
<p>해당 컬럼에 반드시 값이 기록되어야 하는 경우 사용
삽입/수정시 NULL값을 허용하지 않도록 컬럼레벨에서 제한
NOT NULL은 컬럼 레벨만 지정 가능하다.</p>
<pre><code>CREATE TABLE 테이블명(
    컬럼명 자료형 NOT NULL,
    컬럼명 자료형,
    ...
);</code></pre><h3 id="unique">UNIQUE</h3>
<p>컬럼에 입력 값에 대해서 중복을 제한하는 제약조건
컬럼 레벨에서 설정 가능, 테이블 레벨에서 설정 가능
단, UNIQUE 제약 조건이 설정된 컬럼에 NULL 값은 중복 삽입 가능</p>
<pre><code>CREATE TABLE 테이블명(
    -- 컬럼 레벨
    컬럼명 자료형 UNIQUE,
    컬럼명 자료형 CONSTRAINT 제약조건명 UNIQUE,
    -- 테이블 레벨
    UNIQUE(컬럼명),
    CONSTRAINT 제약조건명 UNIQUE(컬럼명)
);</code></pre><h4 id="unique-복합키">UNIQUE 복합키</h4>
<p>두 개 이상의 컬럼을 묶어서 하나의 UNIQUE 제약조건을 설정한다.
지정된 모든 컬럼의 값이 일치해야 중복으로 판단
복합키는 테이블 레벨로만 설정 가능하다.</p>
<pre><code>CONSTRAINT 제약조건명 UNIQUE(컬럼명1, 컬럼명2, ...)</code></pre><h3 id="primary-key기본키">PRIMARY KEY(기본키)</h3>
<p>테이블에서 한 행의 정보를 찾기위해 사용할 컬럼을 의미한다.
테이블에 대한 식별자 역할을 한다.
NOT NULL + UNIQUE 제약조건의 의미를 가진다
컬럼 레벨, 테이블 레벨 둘 다 설정 가능
여러 개의 컬럼을 묶어서 설정할 수 있다.</p>
<pre><code>CREATE TABLE 테이블명(
    -- 컬럼 레벨
    컬럼명 자료형 PRIMARY KEY,
    컬럼명 자료형 CONSTRAINT 제약조건명 PRIMARY KEY,

    -- 테이블 레벨
    컬럼명 자료형
    , PRIMARY KEY(컬럼명)
    , CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명1 [, 컬럼명2, ...])
);</code></pre><h3 id="foreign-key외부키외래키">FOREIGN KEY(외부키/외래키)</h3>
<p>참조된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있음
이는 특정 값에 대한 중복을 제거하고(무결성 유지)
두 테이블이 같은 컬럼 값을 지니기에 JOIN을 활용할 수 있다
제공되는 값 외에는 NULL을 사용할 수 있음
FOREIGN KEY 제약조건에 의해서 테이블간의 관계(RELATIONSHIP)가 형성됨</p>
<pre><code>-- 컬럼 레벨
컬럼명 자료형(크기) [CONSTRAINT 제약조건명] REFERENCES 참조할 테이블명 [(참조할 컬럼)] [삭제룰]

-- 테이블 레벨
[CONSTRAINT 제약조건명] FOREIGN KEY (적용할컬럼명) REFERENCES 참조할 테이블명 [(참조할 컬럼)] [삭제룰]</code></pre><p>참조할 컬럼 미지정시 그 테이블의 PRIMARY KEY로 설정된 컬럼이 지정됨</p>
<ul>
<li>FOREUGN KEY 삭제룰</li>
</ul>
<ol>
<li>ON DELETE RESTRICTED (기본 지정)
FOREIGN KEY로 지정된 컬럼에서 사용되고 있는 값일 경우 제공하는 컬럼의 값은 삭제하지 못함</li>
<li>ON DELETE SET NULL
부모키 삭제 시 자식키를 NULL로 변경하는 옵션</li>
<li>ON DELETE CASCADE
부모키 삭제 시 자식키도 함께 삭제
부모키 삭제시 값을 사용하는 자식 테이블의 컬럼에 해당하는 행이 삭제가 됨</li>
</ol>
<h3 id="check">CHECK</h3>
<p>컬럼에 기록되는 값에 조건 설정을 할 수 있음
비교값은 리터럴만 사용할 수 있음, 변하는 값이나 함수 사용 불가</p>
<pre><code>-- 컬럼 레벨
컬럼명 자료형 [CONTRAINTS 제약조건명] CHECK(컬럼명 비교연산자 비교값)

-- 테이블 레벨
[CONTRAINTS 제약조건명] CHECK(컬럼명 비교연산자 비교값)</code></pre><h1 id="alter">ALTER</h1>
<p>테이블에 정의된 내용을 수정할 때 사용하는 데이터 정의어로
컬럼의 추가/삭제, 제약조건의 추가/삭제, 컬럼의 자료형 변경, DEFAULT 값 변경, 
테이블 명/컬럼 명/제약 조건 명 변경 등을 할 수 있음</p>
<h2 id="제약조건-추가--삭제">제약조건 추가 / 삭제</h2>
<h3 id="제약조건-추가">제약조건 추가</h3>
<pre><code>ALTER TABLE 테이블명
ADD [CONSTRAINT 제약조건명] 제약조건(컬럼명) [REFERENCES 테이블명[(컬럼명)]];</code></pre><h3 id="제약조건-삭제">제약조건 삭제</h3>
<pre><code>ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;</code></pre><p>NOT NULL 제약조건은 다루는 방법이 다르다</p>
<pre><code>ALTER TABLE 테이블명 MODIFY 컬럼명 [NOT] NULL;</code></pre><h2 id="컬럼-추가수정삭제">컬럼 추가/수정/삭제</h2>
<h3 id="컬럼-추가">컬럼 추가</h3>
<pre><code>ALTER TABLE 테이블명 ADD(컬럼명 데이터타입 [DEFAULT &#39;값&#39;]);</code></pre><h3 id="컬럼-수정">컬럼 수정</h3>
<pre><code>ALTER TABLE 테이블명 MOIDFY 컬럼명 데이터타입;   (데이터 타입 변경)
ALTER TABLE 테이블명 MOIDFY 컬럼명 DEFAULT &#39;값&#39;; (기본값 변경)</code></pre><ul>
<li>데이터 타입 수정 시 컬럼에 저장된 데이터 크기 미만으로 변경할 수 없다</li>
</ul>
<h3 id="컬럼-삭제">컬럼 삭제</h3>
<pre><code>ALTER TABLE 테이블명 DROP (삭제할컬럼명);
ALTER TABLE 테이블명 DROP COLUMN 삭제할컬럼명;</code></pre><ul>
<li>테이블에는 최소 1개 이상의 컬럼이 존재해야 하기 때문에 모든 컬럼을 삭제할 순 없다.<h2 id="이름-변경">이름 변경</h2>
<h3 id="컬럼명">컬럼명</h3>
<pre><code>ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 TO 변경명;</code></pre><h3 id="제약조건명">제약조건명</h3>
<pre><code>ALTER TABLE 테이블명 RENAME CONSTRAINT 제약조건명 TO 변경명;</code></pre><h3 id="테이블명">테이블명</h3>
<pre><code>ALTER TABLE 테이블명 RENAME TO 변경명;</code></pre><h1 id="drop">DROP</h1>
<h2 id="테이블-삭제">테이블 삭제</h2>
<pre><code>DROP TABLE 테이블명 [CASCADE CONSTRAINTS];</code></pre></li>
<li>CASCADE CONSTRAINTS
제약조건까지 모두 삭제하기 때문에 FK 제약조건이 있어도 삭제할 수 있다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TCL (Transaction Control Languege) 트랜잭션 제어 언어]]></title>
            <link>https://velog.io/@firecurry_94/TCL-Transaction-Control-Languege-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%9C%EC%96%B4-%EC%96%B8%EC%96%B4</link>
            <guid>https://velog.io/@firecurry_94/TCL-Transaction-Control-Languege-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%9C%EC%96%B4-%EC%96%B8%EC%96%B4</guid>
            <pubDate>Mon, 28 Aug 2023 08:31:31 GMT</pubDate>
            <description><![CDATA[<p>Transaction이란?</p>
<ul>
<li>데이터베이스의 논리적 연산 단위</li>
<li>데이터 변경 사항을 묶어 하나의 트랜잭션에 담아 처리함</li>
<li>대상이 되는 데이터 변경 사항 : INSERT, UPDATE, DELETE (DML)</li>
<li>데이터 변경 사항을 잠시 담아두는 바구니라고 생각하자</li>
</ul>
<ol>
<li>COMMIT</li>
</ol>
<ul>
<li>메모리 버퍼(트랜잭션)에 임시 저장된 데이터 변경 사항을 DB에 반영</li>
<li>COMMIT된 내용은 ROLLBACK으로 취소 불가</li>
</ul>
<ol start="2">
<li>ROLLBACK</li>
</ol>
<ul>
<li>메모리 버퍼(트랜잭션)에 임시 저장된 데이터 변경 사항을 삭제하고 마지막 COMMIT 상태로 돌아감.</li>
</ul>
<ol start="3">
<li>SAVEPOINT</li>
</ol>
<ul>
<li>메모리 버퍼(트랜잭션)에 저장 지점을 정의하여 ROLLBACK 수행 시 전체 작업을 삭제하는 것이 아닌 저장 지점까지만 일부 ROLLBACK</li>
<li>사용법<pre><code>SAVEPOINT 포인트명1;
  ...
SAVEPOINT 포인트명2;
  ...
ROLLBACK TO 포인트명1; -- 포인트1 지점 까지 데이터 변경사항 삭제</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[DML (Data Manipulation Language) 데이터 조작 언어]]></title>
            <link>https://velog.io/@firecurry_94/DML-Data-Manipulation-Language-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A1%B0%EC%9E%91-%EC%96%B8%EC%96%B4</link>
            <guid>https://velog.io/@firecurry_94/DML-Data-Manipulation-Language-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A1%B0%EC%9E%91-%EC%96%B8%EC%96%B4</guid>
            <pubDate>Mon, 28 Aug 2023 08:24:49 GMT</pubDate>
            <description><![CDATA[<p>테이블에 값을 삽입하거나(INSERT), 수정하거나(UPDATE), 삭제(DELETE)하는 구문</p>
<ol>
<li><strong>INSERT</strong><ul>
<li>테이블에 새로운 행을 추가하는 구문</li>
<li>작성법<pre><code>INSERT INTO 테이블명 VALUES(데이터1, 데이터2, ...);</code></pre><pre><code>INSERT INTO 테이블명(컬럼명1, 컬럼명2, ...) VALUES(데이터1, 데이터2, ...);</code></pre></li>
</ul>
</li>
</ol>
<ul>
<li>INSERT시 VALUES 대신 서브쿼리 사용 가능
이 경우 VALUES 생략<pre><code>INSERT INTO 테이블명 (서브쿼리);</code></pre></li>
</ul>
<ol start="2">
<li><strong>UPDATE</strong></li>
</ol>
<ul>
<li>테이블에 기록된 컬럼의 값을 수정하는 구문</li>
<li>작성법<pre><code>UPDATE 테이블명 SET 컬럼명1 = 바꿀값1, 컬럼명2 = 바꿀값2 ... [WHERE 컬럼명 비교연산자 비교값];</code></pre></li>
<li>조건절을 설정하지 않고 구문을 실행하면 모든 행의 컬럼 값이 변경된다.</li>
<li>UPDATE시에도 서브쿼리 사용 가능<pre><code>UPDATE 테이블명 SET (컬럼명1, 컬럼명2, ...) = (서브쿼리);</code></pre></li>
</ul>
<ol start="3">
<li><strong>MERGE</strong> (참고)</li>
</ol>
<ul>
<li>구조가 같은 두 개의 테이블을 하나로 합치는 기능</li>
<li>테이블에서 지정하는 조건의 값이 존재하면 UPDATE 조건의 값이 없으면 INSERT된다.
EX)<pre><code>MERGE INTO EMP_M01 USING EMP_M02 ON(EMP_M01.EMP_ID = EMP_M02.EMP_ID)
WHEN MATCHED THEN -- 같은 사번이 존재하면 UPDATE
UPDATE SET
EMP_M01.EMP_NAME = EMP_M02.EMP_NAME,
EMP_M01.EMP_NO = EMP_M02.EMP_NO,
EMP_M01.EMAIL = EMP_M02.EMAIL,
EMP_M01.PHONE = EMP_M02.PHONE,
EMP_M01.DEPT_CODE = EMP_M02.DEPT_CODE,
EMP_M01.JOB_CODE = EMP_M02.JOB_CODE,
EMP_M01.SAL_LEVEL = EMP_M02.SAL_LEVEL,
EMP_M01.SALARY = EMP_M02.SALARY,
EMP_M01.BONUS = EMP_M02.BONUS,
EMP_M01.MANAGER_ID = EMP_M02.MANAGER_ID,
EMP_M01.HIRE_DATE = EMP_M02.HIRE_DATE,
EMP_M01.ENT_DATE = EMP_M02.ENT_DATE,
EMP_M01.ENT_YN = EMP_M02.ENT_YN
WHEN NOT MATCHED THEN -- 같은 사번이 존재하지 않으면 INSERT
INSERT VALUES (EMP_M02.EMP_ID, EMP_M02.EMP_NAME, EMP_M02.EMP_NO,
             EMP_M02.EMAIL, EMP_M02.PHONE, EMP_M02.DEPT_CODE,
             EMP_M02.JOB_CODE, EMP_M02.SAL_LEVEL, EMP_M02.SALARY,
             EMP_M02.BONUS, EMP_M02.MANAGER_ID, EMP_M02.HIRE_DATE,
             EMP_M02.ENT_DATE, EMP_M02.ENT_YN);</code></pre></li>
</ul>
<ol start="4">
<li><strong>DELETE</strong></li>
</ol>
<ul>
<li>테이블의 행을 삭제하는 구문</li>
<li>작성법<pre><code>DELTE FROM 테이블명 WHERE 조건설정;</code></pre></li>
<li>WHERE 조건을 설정하지 않으면 모든 행 삭제</li>
<li>SELECT문과 유사하다</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[객체 배열]]></title>
            <link>https://velog.io/@firecurry_94/%EA%B0%9D%EC%B2%B4-%EB%B0%B0%EC%97%B4</link>
            <guid>https://velog.io/@firecurry_94/%EA%B0%9D%EC%B2%B4-%EB%B0%B0%EC%97%B4</guid>
            <pubDate>Sun, 13 Aug 2023 07:35:10 GMT</pubDate>
            <description><![CDATA[<p>객체 참조형 변수를 저장하는 배열로 배열의 자료형을 클래스명(사용자 정의 자료형)으로 지정하여 활용</p>
<p>객체 배열 선언</p>
<ul>
<li>클래스명[ ] 배열명;
클래스명 배열명[ ] ; <pre><code>Academy[] arr;
Academy arr[];</code></pre></li>
</ul>
<p>객체 배열 할당</p>
<ul>
<li>배열명 = new 클래스명[배열크기] ;<pre><code>arr = new Academy[5];</code></pre></li>
</ul>
<p>선언과 동시에 할당</p>
<ul>
<li>클래스명 배열명[ ] = new 클래스명[배열크기];<pre><code>Academy[] arr = new Academy[5];</code></pre></li>
</ul>
<p>인덱스를 이용한 초기화</p>
<ul>
<li>배열명[i] = new 클래스명();<pre><code>arr[0] = new Academy(1, &quot;KH정보교육원&quot;);
arr[1] = new Academy(2, &quot;케이에이치&quot;); </code></pre></li>
</ul>
<p>선언과 동시에 할당 및 초기화</p>
<ul>
<li>클래스명 배열명[ ] = {new 클래스명( ), new 클래스명( )};<pre><code>Academy arr[] = {
  new Academy(1, &quot;KH정보교육원&quot;), 
  new Academy(2, &quot;케이에이치&quot;) };</code></pre></li>
</ul>
]]></description>
        </item>
    </channel>
</rss>