<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>영하 1.9&amp;deg;C</title>
    <link>https://w26nw0n.tistory.com/</link>
    <description>원 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 3 Jun 2026 15:54:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>원&amp;deg;C</managingEditor>
    <image>
      <title>영하 1.9&amp;deg;C</title>
      <url>https://tistory1.daumcdn.net/tistory/8612231/attach/6b642de504ce48228931b575d19b0001</url>
      <link>https://w26nw0n.tistory.com</link>
    </image>
    <item>
      <title>[Spring Boot] 3. 롬복과 리팩터링</title>
      <link>https://w26nw0n.tistory.com/16</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1) 롬복&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;롬복(lombok)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 코드를 간소화해 주는 라이브러리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;➔&lt;/span&gt; 코드 반복 간소화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;➔&lt;/span&gt; 로깅 기능 지원&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;로깅(logging)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 프로그램의 수행 과정을 기록으로 남기는 것&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;리팩터링(refactoring)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 코드의 기능에는 변함없이 코드의 구조/성능을 개선하는 작업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2) 롬복을 활용해 리팩터링&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(1) 롬복 설치하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 위치: firstproject &amp;gt; src &amp;gt; build.gradle 코드 안&lt;/p&gt;
&lt;pre id=&quot;code_1778146419320&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies {
	compiledOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
    ...
 }
 
 // dependencies 안에 두 줄의 코드 추가&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(2) DTO 리팩토링&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1CdvB/dJMcaiQ0feP/01t5KAQRInrOkXvm42FceK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1CdvB/dJMcaiQ0feP/01t5KAQRInrOkXvm42FceK/img.png&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;1034&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.0144%; margin-right: 10px;&quot; data-widthpercent=&quot;48.58&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1CdvB/dJMcaiQ0feP/01t5KAQRInrOkXvm42FceK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1CdvB%2FdJMcaiQ0feP%2F01t5KAQRInrOkXvm42FceK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1173&quot; height=&quot;1034&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkbHnN/dJMcaiQ0fe5/QZKvsZ4kvJP6Sj568KlRIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkbHnN/dJMcaiQ0fe5/QZKvsZ4kvJP6Sj568KlRIk/img.png&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;767&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.8228%;&quot; data-widthpercent=&quot;51.42&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkbHnN/dJMcaiQ0fe5/QZKvsZ4kvJP6Sj568KlRIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkbHnN%2FdJMcaiQ0fe5%2FQZKvsZ4kvJP6Sj568KlRIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;921&quot; height=&quot;767&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;간소화 전 / 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(3) 엔티티 리팩토링&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxx7s4/dJMcah5GMBr/ercUr31A5YkmM7E0KhagEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxx7s4/dJMcah5GMBr/ercUr31A5YkmM7E0KhagEK/img.png&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;1301&quot; data-is-animation=&quot;false&quot; style=&quot;width: 34.3613%; margin-right: 10px;&quot; data-widthpercent=&quot;34.77&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxx7s4/dJMcah5GMBr/ercUr31A5YkmM7E0KhagEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdxx7s4%2FdJMcah5GMBr%2FercUr31A5YkmM7E0KhagEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;788&quot; height=&quot;1301&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A5gsj/dJMb997Ceew/PmuFu89GNErhNstBl51fKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A5gsj/dJMb997Ceew/PmuFu89GNErhNstBl51fKk/img.png&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;879&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;65.23&quot; style=&quot;width: 64.4759%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A5gsj/dJMb997Ceew/PmuFu89GNErhNstBl51fKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA5gsj%2FdJMb997Ceew%2FPmuFu89GNErhNstBl51fKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;999&quot; height=&quot;879&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;리팩토링 전 / 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성자 ➔ &lt;span style=&quot;background-color: #f6e199;&quot;&gt;@AllArgsConstructor&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ToString ➔ &lt;span style=&quot;background-color: #f6e199;&quot;&gt;@ToString&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(4) 컨트롤러에 로그 남기기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpmh70/dJMcaijbuM2/jXoHlLSiMhkShPdOzaFO2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpmh70/dJMcaijbuM2/jXoHlLSiMhkShPdOzaFO2k/img.png&quot; data-origin-width=&quot;1163&quot; data-origin-height=&quot;1125&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;52.65&quot; style=&quot;width: 52.038%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpmh70/dJMcaijbuM2/jXoHlLSiMhkShPdOzaFO2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpmh70%2FdJMcaijbuM2%2FjXoHlLSiMhkShPdOzaFO2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1163&quot; height=&quot;1125&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c47iOW/dJMcadIRklE/GTysrOruE7sKIqGij0ZkFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c47iOW/dJMcadIRklE/GTysrOruE7sKIqGij0ZkFk/img.png&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;1323&quot; data-is-animation=&quot;false&quot; style=&quot;width: 46.7992%;&quot; data-widthpercent=&quot;47.35&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c47iOW/dJMcadIRklE/GTysrOruE7sKIqGij0ZkFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc47iOW%2FdJMcadIRklE%2FGTysrOruE7sKIqGij0ZkFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1230&quot; height=&quot;1323&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;전) println() 후) log&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;text-align: left;&quot;&gt;1.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;로그 어노테이션 추가&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left; background-color: #f6e199;&quot;&gt;@Slf4j&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;2.println()문 수정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;System.out.println(article.toString());&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;➔ &lt;span style=&quot;background-color: #f6e199;&quot;&gt;log.info(article.toString());&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;실제 서버에서는 println()문으로 데이터를 출력하지 않는다!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;➔ 기록에 남지 않고 서버의 성능에도 좋지 않기 때문.&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>[CODE]/Spring Boot</category>
      <category>lombok</category>
      <category>SpringBoot</category>
      <category>로그</category>
      <category>롬복</category>
      <category>리팩터링</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/16</guid>
      <comments>https://w26nw0n.tistory.com/16#entry16comment</comments>
      <pubDate>Fri, 29 May 2026 00:22:38 +0900</pubDate>
    </item>
    <item>
      <title>[DB] MySQL DB 생성, MySQL - GitHub - eclipse 연결</title>
      <link>https://w26nw0n.tistory.com/15</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1) MySQL DB 생성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 설치 및 실행 방법은 아래 글을 참고하길 바란다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;MySQL 설치 + SQL 기초&lt;br /&gt;: &lt;a href=&quot;https://www.notion.so/1-2a171eb963f0803ebfc5f272a82d6aba?source=copy_link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.notion.so/1-2a171eb963f0803ebfc5f272a82d6aba?source=copy_link&lt;/a&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1779123533182&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;1주차 기술블로그 | Notion&quot; data-og-description=&quot;⁂ [SQL] 1장-2장&quot; data-og-host=&quot;www.notion.so&quot; data-og-source-url=&quot;https://www.notion.so/1-2a171eb963f0803ebfc5f272a82d6aba?source=copy_link&quot; data-og-url=&quot;https://www.notion.so/1-2a171eb963f0803ebfc5f272a82d6aba&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cZZEYK/dJMb9llcABS/XLbVKElIRhec312fXnFVs1/img.png?width=1372&amp;amp;height=1069&amp;amp;face=0_0_1372_1069,https://scrap.kakaocdn.net/dn/dkHjHt/dJMb9c9DknP/hfzrQgFz4EsMPlUslzKGbk/img.png?width=1372&amp;amp;height=1069&amp;amp;face=0_0_1372_1069&quot;&gt;&lt;a href=&quot;https://www.notion.so/1-2a171eb963f0803ebfc5f272a82d6aba?source=copy_link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/1-2a171eb963f0803ebfc5f272a82d6aba?source=copy_link&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cZZEYK/dJMb9llcABS/XLbVKElIRhec312fXnFVs1/img.png?width=1372&amp;amp;height=1069&amp;amp;face=0_0_1372_1069,https://scrap.kakaocdn.net/dn/dkHjHt/dJMb9c9DknP/hfzrQgFz4EsMPlUslzKGbk/img.png?width=1372&amp;amp;height=1069&amp;amp;face=0_0_1372_1069');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;1주차 기술블로그 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;⁂ [SQL] 1장-2장&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.notion.so&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. MySQL Commend Line Client 실행&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Enter password: (포트 비밀번호 입력)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DB 생성&lt;/p&gt;
&lt;pre id=&quot;code_1779125617147&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; CREATE DATABASE DB명 DEFAULT CHARACTER SET UTF8;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DB 확인&lt;/p&gt;
&lt;pre id=&quot;code_1779125630106&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql&amp;gt; SHOW DATABASES;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2) 기초 SQL문 작성하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. GitHub Desktop 실행&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기존에 만들어둔 repository clone&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. VS code 실행&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- clone된 파일 열기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;실수하지 않도록 SQL 파일 생성 전에 VScode와 DB를 연결하는 것을 추천한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 최상단에 'db' 파일 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 해당 db파일에 db 초기 세팅 SQL 파일 넣기&lt;/p&gt;
&lt;pre id=&quot;code_1779121501009&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;예) create_database.sql

CREATE DATABASE DB명 DEFAULT CHARACTER SET UTF8;

USE DB명;

SELECT DATABASE();&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;+ 어차피 여기서 실행할 거라면 1번을 생략해도 될 것 같다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 예시를 포함해 테이블도 생성하고 샘플 데이터도 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행하면서 정상적으로 값들이 들어가는지 중간중간에 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실패했다면 DROP하고 다시 CREATE하는 것이 좋다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3) eclipse와 연결&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;gt;&amp;gt; 실행 순서에 유의하자! &amp;lt;&amp;lt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. eclipse와 기존 파일 연결&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- eclipse 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKmxJO/dJMcabc8Gd6/Nkmg6FU5xEaGZAIjqQzAhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKmxJO/dJMcabc8Gd6/Nkmg6FU5xEaGZAIjqQzAhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKmxJO/dJMcabc8Gd6/Nkmg6FU5xEaGZAIjqQzAhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKmxJO%2FdJMcabc8Gd6%2FNkmg6FU5xEaGZAIjqQzAhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1074&quot; height=&quot;143&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;143&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;상단 메뉴바 [File] - [New] - [Java Project] 클릭&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqp2MO/dJMcabqJQjs/Du4KEOiKzG1RPqmwuKfZgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqp2MO/dJMcabqJQjs/Du4KEOiKzG1RPqmwuKfZgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqp2MO/dJMcabqJQjs/Du4KEOiKzG1RPqmwuKfZgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqp2MO%2FdJMcabqJQjs%2FDu4KEOiKzG1RPqmwuKfZgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1195&quot; height=&quot;400&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Use default location을 해제하고 로컬 레포를 선택해주는 것이 핵심이다!&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q6LMi/dJMcafNsTGe/PKr1gZLRtInpFxhPJjHbwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q6LMi/dJMcafNsTGe/PKr1gZLRtInpFxhPJjHbwK/img.png&quot; data-alt=&quot;옆에 아이콘을 조금씩 다를 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q6LMi/dJMcafNsTGe/PKr1gZLRtInpFxhPJjHbwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq6LMi%2FdJMcafNsTGe%2FPKr1gZLRtInpFxhPJjHbwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;367&quot; height=&quot;215&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;옆에 아이콘을 조금씩 다를 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. DB 연결 환경 세팅&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JH2Pz/dJMcadosddf/0BaGH3Z5Wk773XfWygaBqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JH2Pz/dJMcadosddf/0BaGH3Z5Wk773XfWygaBqk/img.png&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;661&quot; data-is-animation=&quot;false&quot; width=&quot;273&quot; height=&quot;498&quot; style=&quot;width: 17.1236%; margin-right: 10px;&quot; data-widthpercent=&quot;17.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JH2Pz/dJMcadosddf/0BaGH3Z5Wk773XfWygaBqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJH2Pz%2FdJMcadosddf%2F0BaGH3Z5Wk773XfWygaBqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;362&quot; height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQnYOK/dJMcaiXCHx6/2fIIZDjdn7auTHOxWENHLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQnYOK/dJMcaiXCHx6/2fIIZDjdn7auTHOxWENHLk/img.png&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;194&quot; data-is-animation=&quot;false&quot; style=&quot;width: 81.7136%;&quot; data-widthpercent=&quot;82.67&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQnYOK/dJMcaiXCHx6/2fIIZDjdn7auTHOxWENHLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQnYOK%2FdJMcaiXCHx6%2F2fIIZDjdn7auTHOxWENHLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;507&quot; height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 JavaProject 선택 - 우클릭 - [Properties] 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좌측 카테고리 [Java Build Path] 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Libraries] - [Classpath]- 우측 메뉴 [Add External Jars] 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'mysql-connector-j-9.6.0' 선택 (버전 차이가 있을 수 있다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등록 확인 후 - [Apply and Close] 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;+ 하단 MySQL Connector를 미리 깔아둔 상태이길 바란다.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://dev.mysql.com/downloads/connector/j/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/downloads/connector/j/&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1783&quot; data-origin-height=&quot;1095&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rDqZn/dJMcacJXLZr/D7EdJtSZo8KHNQZnQCkU1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rDqZn/dJMcacJXLZr/D7EdJtSZo8KHNQZnQCkU1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rDqZn/dJMcacJXLZr/D7EdJtSZo8KHNQZnQCkU1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrDqZn%2FdJMcacJXLZr%2FD7EdJtSZo8KHNQZnQCkU1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;612&quot; height=&quot;376&quot; data-origin-width=&quot;1783&quot; data-origin-height=&quot;1095&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. DB 연결&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oxi2q/dJMcagyLPSw/5BuupOQxGnONi7KNyyxOw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oxi2q/dJMcagyLPSw/5BuupOQxGnONi7KNyyxOw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oxi2q/dJMcagyLPSw/5BuupOQxGnONi7KNyyxOw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foxi2q%2FdJMcagyLPSw%2F5BuupOQxGnONi7KNyyxOw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;367&quot; height=&quot;180&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;src 파일에 새 패키지를 생성하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 클래스에 DB를 연결하기 위한 'DBConnector' java 클래스를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1779122923696&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 예) DBConnector.java

package 패키지명;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBConnector {
	
	private static final String CONFIG_PATH = &quot;config.properties&quot;;

    public static Connection getConnection() throws SQLException {
    Properties props = new Properties();
	
    // config.properties 파일 읽기
    try (FileInputStream fis = new FileInputStream(CONFIG_PATH)) {
        props.load(fis);
    } catch (IOException e) {
        throw new SQLException(&quot;config.properties 파일을 읽을 수 없습니다.&quot;, e);
    }
    
	// config.properties에서 입력된 정보를 사용한다.
    String URL = props.getProperty(&quot;db.url&quot;);  
	String USER = props.getProperty(&quot;db.user&quot;);
	String PASS = props.getProperty(&quot;db.password&quot;);

		
	
	return DriverManager.getConnection(URL, USER, PASS);
	}
	public DBConnector() {}
	
		
}&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;DB 연결을 관리자만 이용하도록 암호화하여&lt;br /&gt;DB url, username, password는 따로 'config.properties'파일에 넣어두고 사용한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 DB 연결을 확인하기 위한 tester 파일도 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1779123031919&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 예) DBConnectionTest.java

package 패키지명;

import java.sql.Connection;
import java.sql.SQLException;

public class DBConnectionTest {

    public static void main(String[] args) {
        try {
            Connection conn = DBConnector.getConnection();

            System.out.println(&quot;DB 연결 성공!&quot;);
            System.out.println(&quot;현재 DB: &quot; + conn.getCatalog());

            conn.close();
        } catch (SQLException e) {
            System.out.println(&quot;DB 연결 실패&quot;);
            e.printStackTrace();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지하면 아주 기본 세팅은 끝이 난다. (아마도)&lt;/p&gt;</description>
      <category>[CODE]/Database</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/15</guid>
      <comments>https://w26nw0n.tistory.com/15#entry15comment</comments>
      <pubDate>Tue, 19 May 2026 01:56:47 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Boot] 프로젝트 파일 구조 이해하기</title>
      <link>https://w26nw0n.tistory.com/14</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 파일 구조 소개&lt;/h2&gt;
&lt;pre id=&quot;code_1779070709968&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  src
├──   main
│   ├──   java
│   │   └──   프로젝트_파일_패키지
│   │       ├──   controller
│   │       ├──   domain
│   │       ├──   repository
│   │       ├──   service
│   │       └── 프로젝트_Application.java
│   │
│   └──   resources
│       ├──   static
│       ├──   templates
│       └── application.properties
│
└──   test
    └──   java

  gradle
├── wrapper 관련 파일

build.gradle
settings.gradle
gradlew
gradlew.bat&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  &lt;span style=&quot;background-color: #f6e199;&quot;&gt;gradle&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: Gradle 빌드 도구 관련 파일이 있는 곳.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할 = &lt;b&gt;프로젝트 빌드, 실행, 의존성 관리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  &lt;span style=&quot;background-color: #f6e199;&quot;&gt;resources &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 자바 코드가 아닌 설정 파일, HTML, 정적 파일이 들어가는 곳.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;resources&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/&lt;span style=&quot;background-color: #f6e199;&quot;&gt;static &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: CSS, JS, 이미지, 정적 HTML 같은 파일 위치.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저가 직접 접근할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;resouces&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/&lt;span style=&quot;background-color: #f6e199;&quot;&gt;templates&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: Thymeleaf 같은 서버 템플릿 HTML 파일 위치.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨트롤러의 return을 통해 접근한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;controller&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 사용자의 요청을 처음 받는 곳.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할 = &lt;b&gt;요청&amp;nbsp;받기&amp;nbsp;&amp;rarr;&amp;nbsp;필요한&amp;nbsp;데이터&amp;nbsp;준비&amp;nbsp;&amp;rarr;&amp;nbsp;화면&amp;nbsp;또는&amp;nbsp;응답&amp;nbsp;반환&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  &lt;span style=&quot;background-color: #f6e199;&quot;&gt;domain&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;: 핵심 데이터 객체가 들어가는 곳.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할 = &lt;b&gt;서비스에서 다루는 주요 객체 정의&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예) Member 객체, Order 객체 ...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;repository&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 데이터를 저장하고 조회하는 곳.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할 = &lt;b&gt;DB&amp;nbsp;또는&amp;nbsp;메모리에&amp;nbsp;접근해서&amp;nbsp;데이터&amp;nbsp;저장/조회&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 회원 저장/조회 ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;- interface 파일&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:&amp;nbsp;해야 하는 일 목록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;- 실제 구현 class 파일&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 그 일을 메모리 방식으로 실제 구현한 클래스&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;인터페이스와 실제 구현 클래스를 나누는 이유&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;- 나중에 저장방식을 바꾸기 쉽다.&lt;br /&gt;&amp;nbsp; (예. 개인저장소 -&amp;gt; DB)&lt;br /&gt;- 서비스단에서는 저장방식이 크게 상관없어진다.&amp;nbsp;&lt;/blockquote&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt; &amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;service&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 비즈니스 로직이 들어가는 곳.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할 = &lt;b&gt;규칙 처리&lt;/b&gt;(단순 저장/조회 X)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 회원가입 로직 ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 전체 흐름 처리&lt;/h2&gt;
&lt;pre id=&quot;code_1779071228259&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;사용자 요청
   &amp;darr;
controller
   &amp;darr;
service
   &amp;darr;
repository
   &amp;darr;
domain / DB&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;예) 회원가입&lt;br /&gt;&lt;br /&gt;Controller: 요청 받음 &lt;br /&gt;Service: 중복 회원인지 검사하고 가입 처리 &lt;br /&gt;Repository: 회원 저장 &lt;br /&gt;Domain: Member 객체 사용&lt;/blockquote&gt;</description>
      <category>[CODE]/Spring Boot</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/14</guid>
      <comments>https://w26nw0n.tistory.com/14#entry14comment</comments>
      <pubDate>Mon, 18 May 2026 11:43:51 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Boot] 2. 게시판 CRUD 만들기 - form, DTO, repository</title>
      <link>https://w26nw0n.tistory.com/13</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1) 폼 데이터를 DTO로 받기&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;폼 데이터(form data)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: HTML 요소인 &amp;lt;form&amp;gt; 태그에 실려 전송되는 데이터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➔ 데이터를 전송할 때 어디로, 어떻게 보낼지 등을 적어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;form&amp;gt; 태그에 실어 보낸 데이터 - 서버의 컨트롤러 ➔ 객체에 담는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때의 객체 = DTO(Data Transfer Object) ➔ 최종적으로 DB에 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(1) 입력 폼 만들기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 파일 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cn8uPc/dJMcacwhcg7/ZQIXpuTkxWqA61Taq7fUA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cn8uPc/dJMcacwhcg7/ZQIXpuTkxWqA61Taq7fUA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cn8uPc/dJMcacwhcg7/ZQIXpuTkxWqA61Taq7fUA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcn8uPc%2FdJMcacwhcg7%2FZQIXpuTkxWqA61Taq7fUA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;312&quot; height=&quot;167&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 코드 작성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ws94U/dJMcadomECk/u2VhkHJORFkyPa9oEXZrBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ws94U/dJMcadomECk/u2VhkHJORFkyPa9oEXZrBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ws94U/dJMcadomECk/u2VhkHJORFkyPa9oEXZrBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fws94U%2FdJMcadomECk%2Fu2VhkHJORFkyPa9oEXZrBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;613&quot; height=&quot;330&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;623&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 컨트롤러 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1041&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ybgqX/dJMcacXjhXZ/aSxmMp962dQjwIKaXbFOlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ybgqX/dJMcacXjhXZ/aSxmMp962dQjwIKaXbFOlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ybgqX/dJMcacXjhXZ/aSxmMp962dQjwIKaXbFOlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FybgqX%2FdJMcacXjhXZ%2FaSxmMp962dQjwIKaXbFOlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;626&quot; height=&quot;332&quot; data-origin-width=&quot;1041&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(2) 폼 데이터 전송하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;폼 속성&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- action: URL 연결 주소 적어 해당 페이지로 데이터를 보낸다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- method: get/post&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(3) 폼 데이터 받기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PDuou/dJMcabc0IQE/VKf98GAuTeNWBKLHYG2ZFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PDuou/dJMcabc0IQE/VKf98GAuTeNWBKLHYG2ZFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PDuou/dJMcabc0IQE/VKf98GAuTeNWBKLHYG2ZFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPDuou%2FdJMcabc0IQE%2FVKf98GAuTeNWBKLHYG2ZFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;485&quot; height=&quot;131&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기존 controller에 @PostMapping 추가(post 방식으로 받는 경우)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(4) DTO 만들기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 파일 생성 위치&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtJaVE/dJMcaf0MVrM/S0Skmu49MOmKS7HL2IMedK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtJaVE/dJMcaf0MVrM/S0Skmu49MOmKS7HL2IMedK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtJaVE/dJMcaf0MVrM/S0Skmu49MOmKS7HL2IMedK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtJaVE%2FdJMcaf0MVrM%2FS0Skmu49MOmKS7HL2IMedK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;485&quot; height=&quot;347&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 코드 작성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wVN0M/dJMcai4fjli/k3FJ00tRMPW5OZ9dK5zxrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wVN0M/dJMcai4fjli/k3FJ00tRMPW5OZ9dK5zxrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wVN0M/dJMcai4fjli/k3FJ00tRMPW5OZ9dK5zxrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwVN0M%2FdJMcai4fjli%2Fk3FJ00tRMPW5OZ9dK5zxrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;322&quot; height=&quot;298&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 제목, 내용 2개의 값을 받아올 거라 필드도 2개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성자 및 메서드 추가&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성자/메서드 추가하기&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 코드 내 행 우클릭 - [Generate] - Constructor / 메서드 선택&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(5) 폼 데이터를 DTO에 담기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;794&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wK0pm/dJMcaakTBZk/jnt1E1gFb9XjJeM6HONDgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wK0pm/dJMcaakTBZk/jnt1E1gFb9XjJeM6HONDgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wK0pm/dJMcaakTBZk/jnt1E1gFb9XjJeM6HONDgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwK0pm%2FdJMcaakTBZk%2Fjnt1E1gFb9XjJeM6HONDgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;554&quot; height=&quot;468&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;794&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컨트롤러 안 createArticle() 메서드의 매개변수 선언&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 메서드 호출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(6) 입력 폼과 DTO 필드 연결하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력 폼의 &amp;lt;input&amp;gt;에 name속성값 추가하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;input ~ name=&quot;title&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;textarea~ name=&quot;content&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(7) 출력 확인&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;782&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2HDdN/dJMcagMdvC9/UwfvEzT49iYKhcf6iNHg31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2HDdN/dJMcagMdvC9/UwfvEzT49iYKhcf6iNHg31/img.png&quot; data-alt=&quot;웹 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2HDdN/dJMcagMdvC9/UwfvEzT49iYKhcf6iNHg31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2HDdN%2FdJMcagMdvC9%2FUwfvEzT49iYKhcf6iNHg31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;566&quot; height=&quot;308&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;782&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;웹 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vFHTE/dJMcai4fkLS/JWW8DUxIBrohYQ0xymicV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vFHTE/dJMcai4fkLS/JWW8DUxIBrohYQ0xymicV0/img.png&quot; data-alt=&quot;run 출력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vFHTE/dJMcai4fkLS/JWW8DUxIBrohYQ0xymicV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvFHTE%2FdJMcai4fkLS%2FJWW8DUxIBrohYQ0xymicV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;397&quot; height=&quot;61&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;run 출력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2) DTO를 데이터베이스에 저장하기&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;JPA(Java Persistence API)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 자바 언어로 DB에 명령을 내리는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 엔티티: 자바 객체를 DB가 이해할 수 있게 만든 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 리파지터리: 엔티티가 DB 속 테이블에 저장 및 관리될 수 있게 하는 인터페이스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(1) DTO를 엔티티로 변환하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 엔티티 클래스 선언&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r28Bl/dJMcag6uHIM/KqS5Wjt48MlXrk4LB4OtEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r28Bl/dJMcag6uHIM/KqS5Wjt48MlXrk4LB4OtEK/img.png&quot; data-alt=&quot;컨트롤러에서 언급&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r28Bl/dJMcag6uHIM/KqS5Wjt48MlXrk4LB4OtEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr28Bl%2FdJMcag6uHIM%2FKqS5Wjt48MlXrk4LB4OtEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;662&quot; height=&quot;402&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컨트롤러에서 언급&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Article 객체의 생성 및 초기화&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SiNLP/dJMcafsX3Um/SCcnJYPIiOcAAbDmFOdTa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SiNLP/dJMcafsX3Um/SCcnJYPIiOcAAbDmFOdTa1/img.png&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;417&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.4006%; margin-right: 10px;&quot; data-widthpercent=&quot;50.99&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SiNLP/dJMcafsX3Um/SCcnJYPIiOcAAbDmFOdTa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSiNLP%2FdJMcafsX3Um%2FSCcnJYPIiOcAAbDmFOdTa1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;401&quot; height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s9ESG/dJMcaa6ifrs/BkwqTDfPmIkOjDnhKe1YMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s9ESG/dJMcaa6ifrs/BkwqTDfPmIkOjDnhKe1YMk/img.png&quot; data-origin-width=&quot;1182&quot; data-origin-height=&quot;1279&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.4366%;&quot; data-widthpercent=&quot;49.01&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s9ESG/dJMcaa6ifrs/BkwqTDfPmIkOjDnhKe1YMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs9ESG%2FdJMcaa6ifrs%2FBkwqTDfPmIkOjDnhKe1YMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1182&quot; height=&quot;1279&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성 위치 및 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. toEntity() 메서드 추가하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mKM1C/dJMcacbW65Q/Onux9WpBGgIxKtUgwxTRck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mKM1C/dJMcacbW65Q/Onux9WpBGgIxKtUgwxTRck/img.png&quot; data-alt=&quot;dto&amp;amp;gt;articleform&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mKM1C/dJMcacbW65Q/Onux9WpBGgIxKtUgwxTRck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmKM1C%2FdJMcacbW65Q%2FOnux9WpBGgIxKtUgwxTRck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;644&quot; height=&quot;156&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;dto&amp;gt;articleform&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(2) 리파지터리로 엔티티를 DB에 저장하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 컨트롤러에 선언&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7MVNA/dJMb99TPbza/pa6nkJZcGKRDJctKk3KfH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7MVNA/dJMb99TPbza/pa6nkJZcGKRDJctKk3KfH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7MVNA/dJMb99TPbza/pa6nkJZcGKRDJctKk3KfH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7MVNA%2FdJMb99TPbza%2Fpa6nkJZcGKRDJctKk3KfH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;584&quot; height=&quot;410&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 인터페이스 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyXc60/dJMcab5bdDW/7R8kAiRvEhbXp8A2Cp6xd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyXc60/dJMcab5bdDW/7R8kAiRvEhbXp8A2Cp6xd0/img.png&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;482&quot; data-is-animation=&quot;false&quot; style=&quot;width: 19.0136%; margin-right: 10px;&quot; data-widthpercent=&quot;19.24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyXc60/dJMcab5bdDW/7R8kAiRvEhbXp8A2Cp6xd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyXc60%2FdJMcab5bdDW%2F7R8kAiRvEhbXp8A2Cp6xd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;402&quot; height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBKJl4/dJMcaad9DLG/0RksxVt5ISAtrmeQpz5UE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBKJl4/dJMcaad9DLG/0RksxVt5ISAtrmeQpz5UE1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1229&quot; data-origin-height=&quot;351&quot; data-filename=&quot;스크린샷 2026-05-07 173849.png&quot; style=&quot;width: 79.8236%;&quot; data-widthpercent=&quot;80.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBKJl4/dJMcaad9DLG/0RksxVt5ISAtrmeQpz5UE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBKJl4%2FdJMcaad9DLG%2F0RksxVt5ISAtrmeQpz5UE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1229&quot; height=&quot;351&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파일 생성 위치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드 작성&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CrudRepository 인터페이스 상속&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- CrudRepository가 제공하는 기능을 별도 정의 없이 그대로 사용할 수 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;+ 객체 주입하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/udkDB/dJMcaf0M0Jr/T2QyRNQKcRHrKAB5HHCEok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/udkDB/dJMcaf0M0Jr/T2QyRNQKcRHrKAB5HHCEok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/udkDB/dJMcaf0M0Jr/T2QyRNQKcRHrKAB5HHCEok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FudkDB%2FdJMcaf0M0Jr%2FT2QyRNQKcRHrKAB5HHCEok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;527&quot; height=&quot;64&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;의존성 주입(DI, Dependency Injection)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;: 스프링 부트가 미리 생성해 놓은 라파지터리 객체 주입&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;➔&amp;nbsp;@Autowired&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;(3) 데이터 저장 확인하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 출력을 위한 코드 수정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B9Kvq/dJMcagZHgKX/uhfK4TLuV8kfpvFwAJzoq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B9Kvq/dJMcagZHgKX/uhfK4TLuV8kfpvFwAJzoq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B9Kvq/dJMcagZHgKX/uhfK4TLuV8kfpvFwAJzoq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB9Kvq%2FdJMcagZHgKX%2FuhfK4TLuV8kfpvFwAJzoq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;625&quot; height=&quot;272&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 저장 확인을 위해 toString() 메서드를 print 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 출력 테스트&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9jIeH/dJMcahYCO5t/ysQ6NDLWrIiaQl13OK1980/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9jIeH/dJMcahYCO5t/ysQ6NDLWrIiaQl13OK1980/img.png&quot; data-origin-width=&quot;1439&quot; data-origin-height=&quot;654&quot; data-is-animation=&quot;false&quot; style=&quot;width: 30.4456%; margin-right: 10px;&quot; data-widthpercent=&quot;30.8&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9jIeH/dJMcahYCO5t/ysQ6NDLWrIiaQl13OK1980/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9jIeH%2FdJMcahYCO5t%2FysQ6NDLWrIiaQl13OK1980%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1439&quot; height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cydVQK/dJMcadPpb86/CwxQ3a4bieHeYXrcptGc5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cydVQK/dJMcadPpb86/CwxQ3a4bieHeYXrcptGc5K/img.png&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;157&quot; data-is-animation=&quot;false&quot; style=&quot;width: 68.3916%;&quot; data-widthpercent=&quot;69.2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cydVQK/dJMcadPpb86/CwxQ3a4bieHeYXrcptGc5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcydVQK%2FdJMcadPpb86%2FCwxQ3a4bieHeYXrcptGc5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;776&quot; height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3) DB 데이터 조회하기&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;H2 DB 접속하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. application.properties 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위치: src &amp;gt; main &amp;gt; resources &amp;gt; application.properties&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'spring.h2.console.enabled=true' 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 아래 웹브라우저 접속&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;URL: localhost:8080/h2-console&lt;br /&gt;(8080 = port #)&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;647&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8XbSL/dJMcacJOV3J/HKREtX8CBnYtW3psGgZHAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8XbSL/dJMcacJOV3J/HKREtX8CBnYtW3psGgZHAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8XbSL/dJMcacJOV3J/HKREtX8CBnYtW3psGgZHAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8XbSL%2FdJMcacJOV3J%2FHKREtX8CBnYtW3psGgZHAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;478&quot; height=&quot;374&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;647&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- JDBC URL 값을 다시 넣어줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인텔리제이의 [RUN] 탭 - jdbc 검색- 검색 결과의 주소 복사 - 붙여넣기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;주소 예시) jdbc: h2 ~&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- [connect] 클릭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 입력 후 select문으로 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brWFAr/dJMcaiDd4HZ/MqKU9lY8Sx6wH2HZ0IIlzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brWFAr/dJMcaiDd4HZ/MqKU9lY8Sx6wH2HZ0IIlzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brWFAr/dJMcaiDd4HZ/MqKU9lY8Sx6wH2HZ0IIlzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrWFAr%2FdJMcaiDd4HZ%2FMqKU9lY8Sx6wH2HZ0IIlzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;557&quot; height=&quot;395&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;674&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>[CODE]/Spring Boot</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/13</guid>
      <comments>https://w26nw0n.tistory.com/13#entry13comment</comments>
      <pubDate>Thu, 7 May 2026 18:20:39 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Boot] 1. 스프링 부트 개요 - 시작, MVC 패턴</title>
      <link>https://w26nw0n.tistory.com/12</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1) 스프링 부트 시작하기&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;스프링 부트(Spring Boot)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 자바 웹 프로그램을 더욱 쉽고 빠르게 만들기 위한 도구 = 스프링 프레임워크를 개선한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;개발 환경 설정을 간소화&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; letter-spacing: 0px;&quot;&gt; &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;➔&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 미리 설정된 스타터 프로젝트로 외부 라이브러리를 최적화해 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;웹 애플리케이션 서버를 내장&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;➔&lt;span&gt; 내부에 웹 애플리케이션 서버인 톰켓을 가지고 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;➔&lt;span&gt; 웹 서비스를 jar 파일로 간편하게 배포할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;개발 환경 설정 단계&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1 - JDK 설치하기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;AdoptOpenJDK 설치 링크&lt;/blockquote&gt;
&lt;figure id=&quot;og_1777644207103&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Adoptium&quot; data-og-description=&quot;Eclipse Adoptium provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure.&quot; data-og-host=&quot;adoptium.net&quot; data-og-source-url=&quot;https://adoptium.net/temurin/releases?version=17&amp;amp;os=any&amp;amp;arch=any&quot; data-og-url=&quot;https://adoptium.net&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jhFEn/dJMb9efhqIF/j9JlauwaCh7s9aAuskK7Bk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/O59vp/dJMb9dHrCjx/j0vIGJkHCOl8y8zK3LxKk0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bYRahg/dJMb9kT6pxI/SLkeSdxBHszA7QKy3AztiK/img.png?width=832&amp;amp;height=720&amp;amp;face=0_0_832_720&quot;&gt;&lt;a href=&quot;https://adoptium.net/temurin/releases?version=17&amp;amp;os=any&amp;amp;arch=any&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://adoptium.net/temurin/releases?version=17&amp;amp;os=any&amp;amp;arch=any&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jhFEn/dJMb9efhqIF/j9JlauwaCh7s9aAuskK7Bk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/O59vp/dJMb9dHrCjx/j0vIGJkHCOl8y8zK3LxKk0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/bYRahg/dJMb9kT6pxI/SLkeSdxBHszA7QKy3AztiK/img.png?width=832&amp;amp;height=720&amp;amp;face=0_0_832_720');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Adoptium&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Eclipse Adoptium provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;adoptium.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2 - IDE 설치하기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;인텔리제이(IntelliJ IDEA) 설치 링크&lt;/blockquote&gt;
&lt;figure id=&quot;og_1777644200202&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;IntelliJ IDEA 다운로드&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.jetbrains.com&quot; data-og-source-url=&quot;https://www.jetbrains.com/ko-kr/idea/download/?section=windows&quot; data-og-url=&quot;https://www.jetbrains.com/ko-kr/idea/download/?section=windows&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.jetbrains.com/ko-kr/idea/download/?section=windows&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.jetbrains.com/ko-kr/idea/download/?section=windows&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;IntelliJ IDEA 다운로드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.jetbrains.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3 - 스프링 부트 프로젝트 만들기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Spring Initializr 페이지 링크&lt;br /&gt;&lt;a href=&quot;https://start.spring.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://start.spring.io/&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 프로젝트 - 항목 설정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Project: Gradle - Groovy&lt;/li&gt;
&lt;li&gt;Language: Java&lt;/li&gt;
&lt;li&gt;Spring Boot: 3.1.0(없으면 기본값 선택)&lt;/li&gt;
&lt;li&gt;Pakaging: Jar&lt;/li&gt;
&lt;li&gt;Java: 17(위에서 설치한 JDK 버전 선택)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스프링 부트 버전 접미사 - 소프트웨어 생명주기&lt;/span&gt;&lt;br /&gt;- SANPSHOT: 현재 테스트 단계&lt;br /&gt;- Mx(Milestone): 주요 기능 및 버그 수정 중인 단계&lt;br /&gt;- RC(Release Candidate): 전반적 기능과 버그가 모두 수정된 최종 배포 전 단계&lt;br /&gt;- GA(General Availabilty): 최종 배포 단계(대부분 기능과 버그들이 안정화됨)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Project Metadata&lt;/span&gt;&lt;br /&gt;Pakage name = Grouop + Artifact&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Dependenceies&lt;/span&gt; &lt;br /&gt;= 스프링 부트 프로젝트에 필요한 여러 도구를 가져오는 역할&lt;br /&gt;ex) Spring Web, H2 Database, Mustache, Spring Data JPA&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MQUoS/dJMcabcXdHO/bpL97skGVMyHknDUMPJbuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MQUoS/dJMcabcXdHO/bpL97skGVMyHknDUMPJbuk/img.png&quot; data-origin-width=&quot;1088&quot; data-origin-height=&quot;1263&quot; data-is-animation=&quot;false&quot; style=&quot;width: 40.1995%; margin-right: 10px;&quot; data-widthpercent=&quot;40.67&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MQUoS/dJMcabcXdHO/bpL97skGVMyHknDUMPJbuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMQUoS%2FdJMcabcXdHO%2FbpL97skGVMyHknDUMPJbuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1088&quot; height=&quot;1263&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cN3jyG/dJMcadBMVO5/vQk5jeKOIrvu4n1ABSFodK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cN3jyG/dJMcadBMVO5/vQk5jeKOIrvu4n1ABSFodK/img.png&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;877&quot; data-is-animation=&quot;false&quot; style=&quot;width: 58.6377%;&quot; data-widthpercent=&quot;59.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cN3jyG/dJMcadBMVO5/vQk5jeKOIrvu4n1ABSFodK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcN3jyG%2FdJMcadBMVO5%2FvQk5jeKOIrvu4n1ABSFodK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1102&quot; height=&quot;877&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Generate] 클릭 - 다운로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로젝트 실행하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[인텔리제이] 실행 - 위에서 다운로드한 파일 열기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u1Loi/dJMcac30ziy/dUdZ1TvBOKXfjZLAl9uckK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u1Loi/dJMcac30ziy/dUdZ1TvBOKXfjZLAl9uckK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u1Loi/dJMcac30ziy/dUdZ1TvBOKXfjZLAl9uckK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu1Loi%2FdJMcac30ziy%2FdUdZ1TvBOKXfjZLAl9uckK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;528&quot; height=&quot;132&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;179&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;main&lt;br /&gt;ㄴ java: 자바 코드 저장&lt;br /&gt;&amp;nbsp; &amp;nbsp; ㄴ resources: 외부 파일 저장&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하단 log 메시지&lt;/span&gt;&lt;br /&gt;: Tomcat initialized with port 8080 (http)&lt;br /&gt;➔ 포트 번호 안내(기본 8080)&lt;br /&gt;: Started FirstprojectApplication in 4.976 seconds (process running for 5.778&lt;br /&gt;➔ 서버 실행 안내&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2) MVC 패턴 이해와 실습&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰 템플릿&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 웹 페이지를 하나의 틀로 만들고, 변수를 삽입해 서로 다른 페이지로 보여주는 기술&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Initilizr에서 dependence에 추가한 Mustache 도구를 사용한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;MVC 패턴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;= Model - View - Controller Pattern&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨트롤러(Controller): 클라이언트 요청에 따라 서버에서 처리&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모델(Model): 데이터 관리&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰 템플릿 페이지 만들기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성 위치: src &amp;gt; main &amp;gt; resources &amp;gt; templates&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마우스 오른쪽 클릭 - [New] - [File] 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjK4Xf/dJMcaiwovHV/MdR6cNpdsIR8ZDpBJ3Ijh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjK4Xf/dJMcaiwovHV/MdR6cNpdsIR8ZDpBJ3Ijh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjK4Xf/dJMcaiwovHV/MdR6cNpdsIR8ZDpBJ3Ijh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjK4Xf%2FdJMcaiwovHV%2FMdR6cNpdsIR8ZDpBJ3Ijh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1462&quot; height=&quot;76&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머스테치 플러그인 설치: [install] 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW0k8z/dJMb990AanJ/y4RXKFYlTZdPkRM83Regn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW0k8z/dJMb990AanJ/y4RXKFYlTZdPkRM83Regn1/img.png&quot; data-alt=&quot;예시 코드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW0k8z/dJMb990AanJ/y4RXKFYlTZdPkRM83Regn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW0k8z%2FdJMb990AanJ%2Fy4RXKFYlTZdPkRM83Regn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;627&quot; height=&quot;287&quot; data-origin-width=&quot;1169&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예시 코드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;doc 입력 후 [Tab] 키&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;➔ 기본 코드가 자동 입력된다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;컨트롤러 만들기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성 위치: src &amp;gt; main &amp;gt; java &amp;gt; com.example.firstporject(프로젝트 따라 이름 상이)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마우스 오른쪽 클릭 - [New] - [Pakage] 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 해당 패키지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마우스 오른쪽 클릭 - [New] - [Java Class] 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccHuKB/dJMcadhzP5o/JHyjJrqraoM6wm0xNEyCn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccHuKB/dJMcadhzP5o/JHyjJrqraoM6wm0xNEyCn1/img.png&quot; data-alt=&quot;파일 구조 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccHuKB/dJMcadhzP5o/JHyjJrqraoM6wm0xNEyCn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccHuKB%2FdJMcadhzP5o%2FJHyjJrqraoM6wm0xNEyCn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;462&quot; height=&quot;163&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파일 구조 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t3noL/dJMcaffq8uB/fb15Akc8ryRsJ19JFp6UK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t3noL/dJMcaffq8uB/fb15Akc8ryRsJ19JFp6UK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t3noL/dJMcaffq8uB/fb15Akc8ryRsJ19JFp6UK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft3noL%2FdJMcaffq8uB%2Ffb15Akc8ryRsJ19JFp6UK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;244&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Controller 어노테이션 작성 - &lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;➔&lt;/span&gt; 자동으로 Controller 클래스 패키지가 임포트 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;550&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MO5G1/dJMb99MYRdB/lxTYCKua1BgaDQblguwD00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MO5G1/dJMb99MYRdB/lxTYCKua1BgaDQblguwD00/img.png&quot; data-alt=&quot;예시 코드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MO5G1/dJMb99MYRdB/lxTYCKua1BgaDQblguwD00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMO5G1%2FdJMb99MYRdB%2FlxTYCKua1BgaDQblguwD00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;624&quot; height=&quot;341&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;550&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예시 코드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컨트롤러 작성 순서:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) 컨트롤러 선언(어노테이션 작성) = 6번 줄&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2) 반환값 설정 = 11번&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3) URL 요청 접수 = 9번 줄&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 결과:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZ06cx/dJMcad2TA9n/NsjQaOUKq6se417KDoiZ80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZ06cx/dJMcad2TA9n/NsjQaOUKq6se417KDoiZ80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZ06cx/dJMcad2TA9n/NsjQaOUKq6se417KDoiZ80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZ06cx%2FdJMcad2TA9n%2FNsjQaOUKq6se417KDoiZ80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;398&quot; height=&quot;124&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;모델 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 머스테치에 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;595&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWZnVw/dJMcadID7Wi/1XhjPZ3KglkDYSMEYjuNJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWZnVw/dJMcadID7Wi/1XhjPZ3KglkDYSMEYjuNJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWZnVw/dJMcadID7Wi/1XhjPZ3KglkDYSMEYjuNJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWZnVw%2FdJMcadID7Wi%2F1XhjPZ3KglkDYSMEYjuNJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;618&quot; height=&quot;309&quot; data-origin-width=&quot;1189&quot; data-origin-height=&quot;595&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;{{변수명}}&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 컨트롤러에 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baDjWD/dJMcahqN3OR/UykfSJnsohoZr8FJKfcl21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baDjWD/dJMcahqN3OR/UykfSJnsohoZr8FJKfcl21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baDjWD/dJMcahqN3OR/UykfSJnsohoZr8FJKfcl21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaDjWD%2FdJMcahqN3OR%2FUykfSJnsohoZr8FJKfcl21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;688&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;688&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;함수 인수에 Model model 추가&lt;br /&gt;함수 안에 model.addAttribute(&quot;변수명&quot;, 변수값) 작성&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰 템플릿 페이지에 레이아웃 적용하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqVPco/dJMcaiDdsFL/JqxdKpcEKgdePGMI0ZIBQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqVPco/dJMcaiDdsFL/JqxdKpcEKgdePGMI0ZIBQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqVPco/dJMcaiDdsFL/JqxdKpcEKgdePGMI0ZIBQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqVPco%2FdJMcaiDdsFL%2FJqxdKpcEKgdePGMI0ZIBQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;582&quot; height=&quot;244&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;부트스트랩(Bootstrap)&lt;br /&gt;:웹 페이지를 쉽게 만들 수 있도록 작성해 놓은 코드 모음&lt;br /&gt;&lt;a href=&quot;https://getbootstrap.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Bootstrap &amp;middot; The most popular HTML, CSS, and JS library in the world.&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 스타터 패키지&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8tjj6/dJMcaiDdta7/ruE9hUE5uXoVtRMLYcDgZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8tjj6/dJMcaiDdta7/ruE9hUE5uXoVtRMLYcDgZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8tjj6/dJMcaiDdta7/ruE9hUE5uXoVtRMLYcDgZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8tjj6%2FdJMcaiDdta7%2FruE9hUE5uXoVtRMLYcDgZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;526&quot; height=&quot;219&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 우측의 [Copy]로 코드 복사해 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 내비바&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tHi2l/dJMcaaZujeH/jk81RC47zMfkAd6jhrC8mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tHi2l/dJMcaaZujeH/jk81RC47zMfkAd6jhrC8mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tHi2l/dJMcaaZujeH/jk81RC47zMfkAd6jhrC8mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtHi2l%2FdJMcaaZujeH%2Fjk81RC47zMfkAd6jhrC8mk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;452&quot; height=&quot;112&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;코드 수정 후 [재시작] or [망치] 아이콘 클릭해 서버에 반영한다.&lt;br /&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;285&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ky4fG/dJMcahqN4TH/5RcT9QLOqWWdu9nMRW9Rpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ky4fG/dJMcahqN4TH/5RcT9QLOqWWdu9nMRW9Rpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ky4fG/dJMcahqN4TH/5RcT9QLOqWWdu9nMRW9Rpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKy4fG%2FdJMcahqN4TH%2F5RcT9QLOqWWdu9nMRW9Rpk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;285&quot; height=&quot;86&quot; data-origin-width=&quot;285&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZU5r0/dJMcahqN4Zi/OQjlZuKpS80eQhiAgZzeQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZU5r0/dJMcahqN4Zi/OQjlZuKpS80eQhiAgZzeQ1/img.png&quot; data-alt=&quot;내비, 컨텐츠, 바디 적용된 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZU5r0/dJMcahqN4Zi/OQjlZuKpS80eQhiAgZzeQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZU5r0%2FdJMcahqN4Zi%2FOQjlZuKpS80eQhiAgZzeQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;461&quot; height=&quot;232&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;439&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내비, 컨텐츠, 바디 적용된 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;템플릿 파일 만들고 적용하기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 헤터, 푸터 템플릿 적용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b13vGz/dJMcafNjJtF/dpneHh2ingTkTLK5RBXoXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b13vGz/dJMcafNjJtF/dpneHh2ingTkTLK5RBXoXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b13vGz/dJMcafNjJtF/dpneHh2ingTkTLK5RBXoXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb13vGz%2FdJMcafNjJtF%2FdpneHh2ingTkTLK5RBXoXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;347&quot; height=&quot;153&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 파일 생성&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;templates 우클릭 - [New] - [Directory] - layouts 생성&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;layouts 우클릭 - [New] - [File] - header.mustache 생성&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;같은 방법으로 footer.mustache 파일 생성&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 템플릿화할 코드를 위의 파일에 넣고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de5MNn/dJMcabYqwzf/9HZTn2SZQktC5f3GwU1vJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de5MNn/dJMcabYqwzf/9HZTn2SZQktC5f3GwU1vJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de5MNn/dJMcabYqwzf/9HZTn2SZQktC5f3GwU1vJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde5MNn%2FdJMcabYqwzf%2F9HZTn2SZQktC5f3GwU1vJ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;80&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 발췌한 기존 위치에 위의 사진처럼 템플릿 사용&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;{{&amp;gt;파일명}}&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 템플릿 적용한 최종 코드 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b322yG/dJMcabKVf8E/K58zqIAiAKiXjYuA7grXRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b322yG/dJMcabKVf8E/K58zqIAiAKiXjYuA7grXRK/img.png&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;363&quot; data-is-animation=&quot;false&quot; style=&quot;width: 37.1589%; margin-right: 10px;&quot; data-widthpercent=&quot;37.6&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b322yG/dJMcabKVf8E/K58zqIAiAKiXjYuA7grXRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb322yG%2FdJMcabKVf8E%2FK58zqIAiAKiXjYuA7grXRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;363&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5IBMl/dJMcac330Aa/Wy5y9Th6K1rkd2jJPKPnn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5IBMl/dJMcac330Aa/Wy5y9Th6K1rkd2jJPKPnn0/img.png&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;482&quot; data-is-animation=&quot;false&quot; style=&quot;width: 61.6783%;&quot; data-widthpercent=&quot;62.4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5IBMl/dJMcac330Aa/Wy5y9Th6K1rkd2jJPKPnn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5IBMl%2FdJMcac330Aa%2FWy5y9Th6K1rkd2jJPKPnn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1437&quot; height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>[CODE]/Spring Boot</category>
      <category>spring</category>
      <category>SpringBoot</category>
      <category>스프링부트</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/12</guid>
      <comments>https://w26nw0n.tistory.com/12#entry12comment</comments>
      <pubDate>Sun, 3 May 2026 01:01:19 +0900</pubDate>
    </item>
    <item>
      <title>[DB] 6. JDBC 연결 및 개념</title>
      <link>https://w26nw0n.tistory.com/11</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1) Eclipse에서 데이터 베이스 연결하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 데이터베이스를 연결한다.&lt;/p&gt;
&lt;pre id=&quot;code_1775798119615&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package Student; // Student 패키지에 담는다.

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

public class Main {

    public static void main(String[] args) {
        // DB 연결 정보 설정
        String url = &quot;jdbc:mysql://127.0.0.1:3306/데이터베이스이름&quot;;
        String username = &quot;아이디&quot;; // 보통 root
        String password = &quot;비밀번호&quot;;

        // try-with-resources 구문을 사용하여 자동 자원 해제
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            System.out.println(&quot;DB 연결 성공!&quot;);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2) JDBC&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;JDBC&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 자바 애플리케이션이 데이터베이스에 연결하고 SQL문을 실행할 수 있도록 제공되는 표준 API&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➔&amp;nbsp;JDBC 드라이버만 교체하면, 자바 코드 변경 없이 다른 데이터베이스와 통신이 가능하다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JDBC 프로그래밍 핵심 5단계&lt;br /&gt;&lt;br /&gt;1단계: JDBC 드라이버 로드&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2단계: 데이터베이스 연결(Connection)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3단계: SQL 문 실행(Statement / PreparedStatement)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4단계: 결과처리(Result Set)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5단계: 자원해제(Close)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SOLID 원칙&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➔ 유지보수성과 확장 &amp;uarr;&lt;/p&gt;
&lt;table id=&quot;33b9dd1e-07bf-81b2-b879-d10a24d0af77&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;원칙&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;td&gt;관련 구조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;33b9dd1e-07bf-81bc-96cf-c40843604754&quot;&gt;
&lt;td id=&quot;OHCJ&quot;&gt;&lt;b&gt;S&lt;/b&gt; 단일 책임 원칙&lt;/td&gt;
&lt;td id=&quot;lc\@&quot;&gt;하나의 클래스는 하나의 책임만 가져야 한다.&lt;/td&gt;
&lt;td id=&quot;uu{I&quot;&gt;DAO, DTO, View, Controller 분리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;33b9dd1e-07bf-81e4-8570-df16eb9437c1&quot;&gt;
&lt;td id=&quot;OHCJ&quot;&gt;&lt;b&gt;O&lt;/b&gt; 개방-폐쇄 원칙&lt;/td&gt;
&lt;td id=&quot;lc\@&quot;&gt;확장에는 열려 있고, 변경에는 닫혀 있어야 한다.&lt;/td&gt;
&lt;td id=&quot;uu{I&quot;&gt;인터페이스 기반 DAO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;33b9dd1e-07bf-81eb-b313-d5c85617b63d&quot;&gt;
&lt;td id=&quot;OHCJ&quot;&gt;&lt;b&gt;L&lt;/b&gt; 리스코프 치환 원칙&lt;/td&gt;
&lt;td id=&quot;lc\@&quot;&gt;자식 클래스는 부모 클래스를 대체할 수 있어야 한다.&lt;/td&gt;
&lt;td id=&quot;uu{I&quot;&gt;다형성 활용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;33b9dd1e-07bf-81b3-a137-eca52ae4bad1&quot;&gt;
&lt;td id=&quot;OHCJ&quot;&gt;&lt;b&gt;I&lt;/b&gt; 인터페이스 분리 원칙&lt;/td&gt;
&lt;td id=&quot;lc\@&quot;&gt;불필요한 인터페이스 의존을 피해야 한다.&lt;/td&gt;
&lt;td id=&quot;uu{I&quot;&gt;역할별 인터페이스. DAO 인터페이스 정의&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;33b9dd1e-07bf-813e-829e-d4d0402e266f&quot;&gt;
&lt;td id=&quot;OHCJ&quot;&gt;&lt;b&gt;D&lt;/b&gt; 의존 역전 원칙&lt;/td&gt;
&lt;td id=&quot;lc\@&quot;&gt;고수준 모듈은 저수준 모듈에 의존하면 안 된다.&lt;/td&gt;
&lt;td id=&quot;uu{I&quot;&gt;Service &amp;rarr; DAO 인터페이스 주입&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DAO(Data Access Object)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: DB 접근 전담 CRUD 처리 클래스 (JDBC를 사용하여 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;SQL 실행&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➔ DAO 인터페이스를 도입할 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt; ex) StudentDAO &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DTO(Data Transfer Object) &lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 학생 정보 객체(로직 없이 순수하게 데이터만 담겨 있다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➔ 택배상자처럼 데이터를 담아 다른 계층으로 전달한다. 가볍고 단순해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt; ex) Student &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4uUuC/dJMcaibSJbU/ZOFCRgpbMi7q1wO2j2tHrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4uUuC/dJMcaibSJbU/ZOFCRgpbMi7q1wO2j2tHrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4uUuC/dJMcaibSJbU/ZOFCRgpbMi7q1wO2j2tHrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4uUuC%2FdJMcaibSJbU%2FZOFCRgpbMi7q1wO2j2tHrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;246&quot; height=&quot;184&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnkegi/dJMcacQfegg/0Z3uF1LPoKYLeCPNDVsFw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnkegi/dJMcacQfegg/0Z3uF1LPoKYLeCPNDVsFw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnkegi/dJMcacQfegg/0Z3uF1LPoKYLeCPNDVsFw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnkegi%2FdJMcacQfegg%2F0Z3uF1LPoKYLeCPNDVsFw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;250&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>[CODE]/Database</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/11</guid>
      <comments>https://w26nw0n.tistory.com/11#entry11comment</comments>
      <pubDate>Fri, 10 Apr 2026 17:51:24 +0900</pubDate>
    </item>
    <item>
      <title>[DB] 5. 데이터베이스 프로그래밍</title>
      <link>https://w26nw0n.tistory.com/10</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1) 데이터베이스 프로그래밍&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;데이터베이스 프로그래밍&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: DBMS에 데이터를 정의하고 저장된 데이터를읽어와 데이터를 변경하는 프로그램을 작성하는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2) 저장 프로그램&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프로시저(PROCEDURE)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 프로그램 로직을 &lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;프로시저&lt;/span&gt;로 구현하여 객체 형태로 사용한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MySQL에서 프로시저(저장 프로그램)를 정의하는 과정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) 프로그램 정의 ➔ 2) 실행 ➔ 3) 실행 결과 ➔ 4) 개체 확인&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Zz03F/dJMb99MH7FZ/DjBmIjusaVd2WnCII6TRL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Zz03F/dJMb99MH7FZ/DjBmIjusaVd2WnCII6TRL1/img.png&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;533&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;45.45&quot; style=&quot;width: 44.919%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Zz03F/dJMb99MH7FZ/DjBmIjusaVd2WnCII6TRL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZz03F%2FdJMb99MH7FZ%2FDjBmIjusaVd2WnCII6TRL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;670&quot; height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8eGdc/dJMcabX6goP/pF2lzkyh8H9slwwJDGQ8LK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8eGdc/dJMcabX6goP/pF2lzkyh8H9slwwJDGQ8LK/img.png&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;169&quot; data-is-animation=&quot;false&quot; style=&quot;width: 53.9182%;&quot; data-widthpercent=&quot;54.55&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8eGdc/dJMcabX6goP/pF2lzkyh8H9slwwJDGQ8LK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8eGdc%2FdJMcabX6goP%2FpF2lzkyh8H9slwwJDGQ8LK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;255&quot; height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-- 선언부(정의)&lt;/span&gt; (// 시작 종료 //) &amp;larr; //, $$, ### 등 기호는 자유 사용&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;CREATE PROCEDURE&lt;/span&gt; AveragePrice&lt;/span&gt; ➔ 'AveragePrice'이름의 프로시저 생성&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-- 실행부(호출)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;CALL&lt;/span&gt; AveragePrice(@myValue)&lt;/span&gt; ➔ 프로시저 실행: 프로시저 값을 myValue에 담는다.&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로시저의 제어문 종류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DELIMITER&lt;/li&gt;
&lt;li&gt;BEGIN - END&lt;/li&gt;
&lt;li&gt;IF - ELSE&lt;/li&gt;
&lt;li&gt;LOOP&lt;/li&gt;
&lt;li&gt;WHILE&lt;/li&gt;
&lt;li&gt;REPEAT&lt;/li&gt;
&lt;li&gt;RETURN&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;트리거(TRIGGER)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 테이블에 대해 특정동작(INSERT, UPDATE, DELETE)이 수행될 때 자동으로 실행되는 저장된 프로그램&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특징
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 직접 호출 안 해도 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;DBMS가 이벤트 발생 시 자동 실행&lt;/span&gt;한다.&lt;/li&gt;
&lt;li&gt;보통 데이터의 변경문이 처리되기 전(BEFORE), 처리 후(AFTER)에 동작한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사용 목적
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&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;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 트리거 선언&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mPl3s/dJMcaax8bKC/kaVzdXha2UvlTFz8Ce54jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mPl3s/dJMcaax8bKC/kaVzdXha2UvlTFz8Ce54jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mPl3s/dJMcaax8bKC/kaVzdXha2UvlTFz8Ce54jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmPl3s%2FdJMcaax8bKC%2FkaVzdXha2UvlTFz8Ce54jk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;664&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;CREATE TRIGGER&lt;/span&gt; 트리거이름&lt;/span&gt; ➔ 트리거 생성&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;BEFORE INSERT ON&lt;/span&gt; 테이블&lt;/span&gt; ➔ 변경문이 &lt;u&gt;처리되기 전&lt;/u&gt;에 동작&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 트리거 적용 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpjBBP/dJMcahquc83/7tKFSpSj0Cq4cKueB2hwx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpjBBP/dJMcahquc83/7tKFSpSj0Cq4cKueB2hwx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpjBBP/dJMcahquc83/7tKFSpSj0Cq4cKueB2hwx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpjBBP%2FdJMcahquc83%2F7tKFSpSj0Cq4cKueB2hwx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;546&quot; height=&quot;328&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FROM 테이블이름 &lt;/span&gt;➔ trigger 동작이 반영된 테이블 호출&lt;br /&gt;➔ 동명이인이 존재해서 alert_id로 옮겨졌다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;사용자 정의 함수&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 개발자가 직접 작성하여 SQL 내에서 호출할 수 있는 함수&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특징
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 제공 함수로 해결하기 어려운 로직을 캡슐화할 때 유용하다.&lt;/li&gt;
&lt;li&gt;SQL에서 자주 쓰는 계산/로직을 '내가 만든 함수'로 등록해두고 필요할 때 호출한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;종류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스칼라 함수 &amp;larr; MySQL에서 일반적인 경우&lt;/li&gt;
&lt;li&gt;테이블 반환 함수&lt;/li&gt;
&lt;li&gt;인라인 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;장단점&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 84px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;장점&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;단점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;&lt;span&gt;SQL 코드 간결화&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 63px;&quot; rowspan=&quot;3&quot;&gt;&lt;span&gt;잘못 사용 시 성능 저하 기능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;&lt;span&gt;유지보수 용이&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;&lt;span&gt;재사용성 증가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자 정의 함수 예시&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpQzlc/dJMcacCIrrE/Krq9qOWpB3Hxwvp8M7MEr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpQzlc/dJMcacCIrrE/Krq9qOWpB3Hxwvp8M7MEr0/img.png&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;464&quot; data-is-animation=&quot;false&quot; width=&quot;542&quot; height=&quot;281&quot; style=&quot;width: 67.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;68.21&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpQzlc/dJMcacCIrrE/Krq9qOWpB3Hxwvp8M7MEr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpQzlc%2FdJMcacCIrrE%2FKrq9qOWpB3Hxwvp8M7MEr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;894&quot; height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyCicM/dJMcajhtNxG/NjjRyR5VET1e1KeOb5NZQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyCicM/dJMcajhtNxG/NjjRyR5VET1e1KeOb5NZQK/img.png&quot; data-origin-width=&quot;299&quot; data-origin-height=&quot;333&quot; data-is-animation=&quot;false&quot; style=&quot;width: 31.4186%;&quot; data-widthpercent=&quot;31.79&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyCicM/dJMcajhtNxG/NjjRyR5VET1e1KeOb5NZQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyCicM%2FdJMcajhtNxG%2FNjjRyR5VET1e1KeOb5NZQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;299&quot; height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;CREATE FUNCTION&lt;/span&gt; 함수이름(인자 데이터성질) ➔ 함수 생성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[ + ] DETERMINISTIC = 입력이 같으면 결과도 항상 같다는 의미 (but, 관례상 자주 쓰인다.)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baQgcj/dJMcaiiBHrH/WTwBQbtr276u9WOYvfiKEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baQgcj/dJMcaiiBHrH/WTwBQbtr276u9WOYvfiKEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baQgcj/dJMcaiiBHrH/WTwBQbtr276u9WOYvfiKEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaQgcj%2FdJMcaiiBHrH%2FWTwBQbtr276u9WOYvfiKEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;355&quot; height=&quot;68&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수를 설정한 경우, 위와 같이 데이터베이스 아래에 생성된다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;[ ! ] 저장 프로그램 특징 비교&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 프로시저: 여러 SQL문의 묶음으로 단순 반복 업무에 권장한다.&lt;br /&gt;&lt;/span&gt;ex) 쇼핑몰 주문처리&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 트리거: 특정 이벤트가 발생할 때 자동 실행된다. ➔ but 잘못 사용하면 오히려 악화되는 경우가 많다.&lt;br /&gt;&lt;/span&gt;ex) 은행 계좌 잔액 자동 검증 ➔ 데이터 무결성을 보장한다.&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 사용자 정의 함수: 입력을 받아 단일 값 또는 테이블을 리턴한다.&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;ex) 은행시스템에서 고객의 생년월일을 받아 나이 계산하는 경우&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;-- 모든 실습은 MariaDB, HeidiSQL을 사용해 이루어졌습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[목차여기]&lt;/p&gt;
&lt;script&gt;
const _0x5eef=['classList','92935nhtnYq','setAttribute','push','innerHTML','getElementById','toLowerCase','tt_adsense_top','another_category','style','//p[contains(text(),\x27[목차여기]\x27)]','1954669aacfHB','div','appendChild','toc-ym','title','forEach','DOMContentLoaded','call','addEventListener','length','insertBefore','firstElementChild','log','27309qNoTHN','62SuwPRc','parentNode','querySelector','revenue_unit_wrap','tagName','23736mMyuUa','singleNodeValue','trim','17723tUfPMr','textContent','1STKGDu','getAttribute','contains','nextSibling','791846eKKEom','createElement','outerText','FIRST_ORDERED_NODE_TYPE','querySelectorAll','72wJWnLP','hasAttribute','669103LLOFBD','toc'];function _0x330c(_0x5d40d0,_0x4afdad){_0x5d40d0=_0x5d40d0-0xec;let _0x5eef71=_0x5eef[_0x5d40d0];return _0x5eef71;}const _0x2078d2=_0x330c;(function(_0xbea334,_0x392453){const _0x2c3076=_0x330c;while(!![]){try{const _0x5a087d=-parseInt(_0x2c3076(0x117))+parseInt(_0x2c3076(0xf7))+parseInt(_0x2c3076(0xfa))+-parseInt(_0x2c3076(0x11a))*-parseInt(_0x2c3076(0xf5))+parseInt(_0x2c3076(0x112))*parseInt(_0x2c3076(0x111))+parseInt(_0x2c3076(0xec))*-parseInt(_0x2c3076(0xf0))+-parseInt(_0x2c3076(0x104));if(_0x5a087d===_0x392453)break;else _0xbea334['push'](_0xbea334['shift']());}catch(_0x47ff63){_0xbea334['push'](_0xbea334['shift']());}}}(_0x5eef,0xea9e9),document[_0x2078d2(0x10c)](_0x2078d2(0x10a),function(){const _0x7eb51e=_0x2078d2;try{const _0x591681=document[_0x7eb51e(0x114)]('.contents_style'),_0x1762f9=document[_0x7eb51e(0xfe)](_0x7eb51e(0x107));if(_0x591681&amp;&amp;!_0x1762f9)htmlTableOfContents();else return![];}catch(_0x250abc){console[_0x7eb51e(0x110)]('');}}));function htmlTableOfContents(_0x4f1c99){const _0x388803=_0x2078d2;var _0x4f1c99=_0x4f1c99||document;const _0x44fb35=document[_0x388803(0xf1)]('div');_0x44fb35[_0x388803(0xfb)]('id',_0x388803(0x107));const _0x2117e2=document['querySelector']('.contents_style');var _0x35e549=_0x388803(0x103),_0x552a33=document['evaluate'](_0x35e549,document,null,XPathResult[_0x388803(0xf3)],null)[_0x388803(0x118)];let _0x407aa0;_0x552a33?(_0x407aa0=_0x552a33,_0x407aa0[_0x388803(0x11b)]='',_0x407aa0[_0x388803(0x106)](_0x44fb35)):(_0x407aa0=_0x2117e2[_0x388803(0x10f)],_0x407aa0['classList'][_0x388803(0xee)](_0x388803(0x100))||_0x407aa0[_0x388803(0xf9)]['contains'](_0x388803(0x115))?_0x2117e2['insertBefore'](_0x44fb35,_0x407aa0[_0x388803(0xef)]):_0x407aa0[_0x388803(0x113)][_0x388803(0x10e)](_0x44fb35,_0x407aa0));const _0x3e06b5=document['getElementById'](_0x388803(0x107)),_0x5ee2f2=[]['slice'][_0x388803(0x10b)](_0x2117e2[_0x388803(0xf4)]('h1,\x20h2,\x20h3,\x20h4,\x20h5,\x20h6')),_0x454032=[];for(i=0x0;i&lt;_0x5ee2f2[_0x388803(0x10d)];i++){if(_0x5ee2f2[i][_0x388803(0xf2)][_0x388803(0x119)]()==='')continue;else{if(_0x5ee2f2[i][_0x388803(0xf9)][_0x388803(0xee)](_0x388803(0x108)))continue;else{if(_0x5ee2f2[i][_0x388803(0x113)]['classList'][_0x388803(0xee)](_0x388803(0x101)))continue;else _0x454032[_0x388803(0xfc)](_0x5ee2f2[i]);}}}_0x454032[_0x388803(0x109)](function(_0x5d97e0,_0x2112a5){const _0x4b3465=_0x388803;var _0x94aa2e=_0x4b3465(0xf8)+_0x2112a5;if(_0x5d97e0[_0x4b3465(0xf6)]('id'))_0x94aa2e=_0x5d97e0[_0x4b3465(0xed)]('id');else _0x5d97e0[_0x4b3465(0xfb)]('id',_0x94aa2e);var _0x34278b=_0x4f1c99[_0x4b3465(0xf1)]('a');_0x34278b[_0x4b3465(0xfb)]('href','#'+_0x94aa2e),_0x34278b['textContent']='•\x20'+_0x5d97e0[_0x4b3465(0x11b)];var _0x118edf=_0x4f1c99[_0x4b3465(0xf1)](_0x4b3465(0x105));_0x118edf[_0x4b3465(0xfb)]('class',_0x5d97e0[_0x4b3465(0x116)][_0x4b3465(0xff)]()),_0x118edf[_0x4b3465(0x106)](_0x34278b),_0x3e06b5[_0x4b3465(0x106)](_0x118edf);});const _0xd72dc='\x0a\x20\x20\x20\x20#toc-ym\x20div.h1\x20{\x20margin-left:\x200em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h2\x20{\x20margin-left:\x200.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h3\x20{\x20margin-left:\x201em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h4\x20{\x20margin-left:\x201.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h5\x20{\x20margin-left:\x202em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h6\x20{\x20margin-left:\x202.5em\x20}\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20#toc-ym\x20{\x0a\x20\x20\x20\x20\x20\x20margin:\x2030px\x200px\x2030px\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2020px\x2020px\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20#dadada;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ffffff;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym::before\x20{\x0a\x20\x20\x20\x20\x20\x20content:\x20\x22목\x20\x20차\x22;\x0a\x20\x20\x20\x20\x20\x20display:\x20block;\x0a\x20\x20\x20\x20\x20\x20width:\x20120px;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20rgb(255,\x20255,\x20255);\x0a\x20\x20\x20\x20\x20\x20text-align:\x20center;\x0a\x20\x20\x20\x20\x20\x20font-size:\x2018px;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20bold;\x0a\x20\x20\x20\x20\x20\x20margin:\x20-40px\x20auto\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x205px\x200px;\x0a\x20\x20\x20\x20\x20\x20border-width:\x201px;\x0a\x20\x20\x20\x20\x20\x20border-style:\x20solid;\x0a\x20\x20\x20\x20\x20\x20border-color:\x20rgb(218,\x20218,\x20218);\x0a\x20\x20\x20\x20\x20\x20border-image:\x20initial;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div{\x0a\x20\x20\x20\x20\x20\x20margin:\x205px\x200px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:first-child{\x0a\x20\x20\x20\x20\x20\x20margin-top:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:last-child{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a\x20{\x0a\x20\x20\x20\x20\x20\x20text-decoration:\x20none;\x0a\x20\x20\x20\x20\x20\x20color:\x20#337ab7;\x0a\x20\x20\x20\x20\x20\x20transition:\x20all\x20ease\x200.2s;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a:hover\x20{\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20color:\x20#333333;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ecc7ff;\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20/*\x0a\x20\x20\x20\x20.contents_style\x20h3{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:7px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border-left:\x205px\x20solid\x20#757575;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#e5e5e5;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20500;\x0a\x20\x20\x20\x20\x20\x20color:\x20#000000\x20!important;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20*/\x0a\x20\x20\x20\x20',_0x3ed036=document[_0x388803(0xf1)](_0x388803(0x102));_0x3ed036[_0x388803(0xfd)]=_0xd72dc,_0x2117e2[_0x388803(0x10e)](_0x3ed036,_0x407aa0);}
&lt;/script&gt;</description>
      <category>[CODE]/Database</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/10</guid>
      <comments>https://w26nw0n.tistory.com/10#entry10comment</comments>
      <pubDate>Fri, 10 Apr 2026 01:19:37 +0900</pubDate>
    </item>
    <item>
      <title>[DB] 4. SQL 고급(2) - 뷰, 인덱스</title>
      <link>https://w26nw0n.tistory.com/9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1) 뷰(VIEW)&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 하나 이상의 테이블을 합하여 만든 가상 테이블&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;뷰 특징
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;실제 데이터 저장 x SELECT 쿼리 결과를 이름 붙여 재사용하는 객체다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;기본적으로 읽기 전용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;데이터보안(특정 컬럼만 노출 가능), 재사용성(복잡 쿼리를 단순화),&lt;/li&gt;
&lt;li&gt;독립성(기본 테이블 구조 변경 시에도 뷰를 통해 동일한 인터페이스를 제공)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰 생성&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법)&lt;/p&gt;
&lt;pre id=&quot;code_1775706902009&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE VIEW 뷰이름 [(열이름 [, ... n])]
AS SELECT 문&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 코드 1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CREATE VIEW로 뷰를 만들고 FROM으로 불러 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBr9YE/dJMb9961VqA/Pt6JxKjSkdCYzmVsuhWU60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBr9YE/dJMb9961VqA/Pt6JxKjSkdCYzmVsuhWU60/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;259&quot; data-filename=&quot;blob&quot; width=&quot;476&quot; height=&quot;173&quot; data-widthpercent=&quot;47.02&quot; style=&quot;width: 46.4718%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBr9YE/dJMb9961VqA/Pt6JxKjSkdCYzmVsuhWU60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBr9YE%2FdJMb9961VqA%2FPt6JxKjSkdCYzmVsuhWU60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;738&quot; height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LqIug/dJMb9961Ux7/UpdhVcG9axouMSGnGJ0Q70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LqIug/dJMb9961Ux7/UpdhVcG9axouMSGnGJ0Q70/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;204&quot; data-filename=&quot;스크린샷 2026-04-08 155221.png&quot; width=&quot;482&quot; style=&quot;width: 52.3654%;&quot; data-widthpercent=&quot;52.98&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LqIug/dJMb9961Ux7/UpdhVcG9axouMSGnGJ0Q70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLqIug%2FdJMb9961Ux7%2FUpdhVcG9axouMSGnGJ0Q70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Book 테이블에서 bookname에 '축구'가 들어가는 값을 vw_Book 뷰로 설정한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #ffc9af;&quot;&gt;[ ! ] 뷰 문에서 AS는 생략 불가능하다&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; 뷰 생성 확인&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-08 155213.png&quot; data-origin-width=&quot;323&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwVQQ3/dJMcaiW9Mp8/cEqGwyMzts031Vjn6kh0R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwVQQ3/dJMcaiW9Mp8/cEqGwyMzts031Vjn6kh0R1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwVQQ3/dJMcaiW9Mp8/cEqGwyMzts031Vjn6kh0R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwVQQ3%2FdJMcaiW9Mp8%2FcEqGwyMzts031Vjn6kh0R1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;285&quot; height=&quot;60&quot; data-filename=&quot;스크린샷 2026-04-08 155213.png&quot; data-origin-width=&quot;323&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;뷰를 생성하면 왼쪽 리스트의 해당 테이블 안에 표시된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 코드 2)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wGKae/dJMb9961Vng/JriKJnMY2IVk0Gvf5Scn01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wGKae/dJMb9961Vng/JriKJnMY2IVk0Gvf5Scn01/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;370&quot; data-filename=&quot;blob&quot; width=&quot;474&quot; style=&quot;width: 45.8983%; margin-right: 10px;&quot; data-widthpercent=&quot;46.44&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wGKae/dJMb9961Vng/JriKJnMY2IVk0Gvf5Scn01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwGKae%2FdJMb9961Vng%2FJriKJnMY2IVk0Gvf5Scn01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;676&quot; height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct6kHJ/dJMcah44x35/bpwejKr6l1mEP12SQUl76k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct6kHJ/dJMcah44x35/bpwejKr6l1mEP12SQUl76k/img.png&quot; data-origin-width=&quot;1041&quot; data-origin-height=&quot;494&quot; data-is-animation=&quot;false&quot; style=&quot;width: 52.9389%;&quot; data-widthpercent=&quot;53.56&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct6kHJ/dJMcah44x35/bpwejKr6l1mEP12SQUl76k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct6kHJ%2FdJMcah44x35%2FbpwejKr6l1mEP12SQUl76k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1041&quot; height=&quot;494&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;order 테이블에서 customer 테이블과 custid가 일치하고 book테이블 에서 bookid가 같은 값을 Vorders2 뷰에 해당하는 인자로 보여라.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;코드의 낭독성을 위해 SELECT의 인자가 많다면 위와 같이 작성하는 것을 권장한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 뷰 생성 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuiYor/dJMcaiiAA9D/fI8YvvPF5IaDtrkdE2VN8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuiYor/dJMcaiiAA9D/fI8YvvPF5IaDtrkdE2VN8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuiYor/dJMcaiiAA9D/fI8YvvPF5IaDtrkdE2VN8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuiYor%2FdJMcaiiAA9D%2FfI8YvvPF5IaDtrkdE2VN8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;339&quot; height=&quot;96&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰 수정&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법)&lt;/p&gt;
&lt;pre id=&quot;code_1775707621339&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE VIEW 뷰이름 [(열이름 [, ... n])]
AS SELECT 문&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 코드 1)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mMiey/dJMcabqgoga/gxxFCmffQAjrCLtKJCosKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mMiey/dJMcabqgoga/gxxFCmffQAjrCLtKJCosKK/img.png&quot; data-alt=&quot;영국을 주소로 가지는 고객을 보여주는 뷰로 변경하여라.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mMiey/dJMcabqgoga/gxxFCmffQAjrCLtKJCosKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmMiey%2FdJMcabqgoga%2FgxxFCmffQAjrCLtKJCosKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;511&quot; height=&quot;172&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;영국을 주소로 가지는 고객을 보여주는 뷰로 변경하여라.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰 삭제&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법)&lt;/p&gt;
&lt;pre id=&quot;code_1775707840110&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP VIEW 뷰이름 [, ... n];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 코드 1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 뷰를 삭제해서 확인할 수 없다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFnpn2/dJMcajocc8d/8e5wxaJK8wDr3nNWkkSMD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFnpn2/dJMcajocc8d/8e5wxaJK8wDr3nNWkkSMD1/img.png&quot; data-alt=&quot;vw_cutomer 뷰를 삭제하라.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFnpn2/dJMcajocc8d/8e5wxaJK8wDr3nNWkkSMD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFnpn2%2FdJMcajocc8d%2F8e5wxaJK8wDr3nNWkkSMD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;289&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vw_cutomer 뷰를 삭제하라.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;뷰 활용&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;읽기 전용&lt;/span&gt;이며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뷰에는 삽입, 수정, 삭제 연산이 제한적으로 수행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활용 ➔ &lt;span style=&quot;background-color: #f6e199;&quot;&gt;INSERT / UPDATE / DELETE&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변경 불가능한 뷰의 예시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 테이블의 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;기본키를 구성하는 속성이 포함되어 있지 않은 뷰&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;NOT NULL로 지정된 속성 포함x&amp;nbsp;&lt;/li&gt;
&lt;li&gt;집계 함수로 새로 계산된 내용 포함&lt;/li&gt;
&lt;li&gt;DISTINCT/GROUP BY 절 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;INSERT 활용&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1775708698829&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO 제품1 VALUES ('p58', 1000, '신선식품');
SELECT * FROM 제품1;

-- 'p58'(제품번호) 같은 기본키를 반드시 포함한다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;UPDATE 활용&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1775734269794&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;UPDATE 제품1
SET 재고량 = 1500
WHERE 제품번호 = 'p08';&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;'제품1'은 '제품'테이블의 뷰이다. = '제품1'을 수정할 때, '제품' 테이블 값도 바뀐다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; background-color: #ffc9af;&quot;&gt;[ ! ] 뷰를 수정하면 원본 테이블도 같이 수정된다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;DELETE 활용&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1775734711856&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DELETE FROM 제품1
WHERE 제품번호 = 'p08';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #ffc9af;&quot;&gt;[ ! ] 뷰에서 데이터를 삭제하면 원본 테이블의 행도 같이 삭제된다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;실습 문제 풀이(Practice)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Q) 마당서점 데이터베이스를 이용하여 다음에 해당하는 뷰를 작성하시오.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;1. 판매가격이 20,000원 이상인 도서의 도서번호, 도서이름, 고객이름, 출판사, 판매가격을 보여주는 highorders 뷰를 생성하시오.&lt;br /&gt;2. 생성한 뷰를 이용하여 판매된 도서의 이름과 고객의 이름을 출력하는 SQL 문을 작성하시오.&lt;br /&gt;3. highorders 뷰를 변경하고자 한다. 판매가격 속성을 삭제하는 명령을 수행하시오. 삭제 후 (2)번 SQL문을 다시 수행하시오.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 뷰 생성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L540w/dJMb9962ymU/bW2M0KPfbJzVxKfDMM6kd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L540w/dJMb9962ymU/bW2M0KPfbJzVxKfDMM6kd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L540w/dJMb9962ymU/bW2M0KPfbJzVxKfDMM6kd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL540w%2FdJMb9962ymU%2FbW2M0KPfbJzVxKfDMM6kd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;394&quot; data-origin-width=&quot;951&quot; data-origin-height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000;&quot;&gt;POINT!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(1) CREATE VIEW의 AS는 생략 불가&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(2) SELECT 인자가 많을 때는 수직적으로 나열한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(3) 작성순서에 유의하자. (SELECT ➔ FROM ➔ WHERE ➔ GROUP BY ➔ HAVING ➔ ORDER BY)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 뷰 사용&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/opMxD/dJMcai3VpXX/AReGMkhMEINoWjBVHUJJfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/opMxD/dJMcai3VpXX/AReGMkhMEINoWjBVHUJJfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/opMxD/dJMcai3VpXX/AReGMkhMEINoWjBVHUJJfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FopMxD%2FdJMcai3VpXX%2FAReGMkhMEINoWjBVHUJJfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;390&quot; height=&quot;414&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;639&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;POINT!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;VIEW를 사용할 땐 FROM으로 불러온다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 뷰 수정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수정 전 highorders 데이터&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTxBc7/dJMcaaZaNvS/YSZOoFL46kEgqpD6cM8101/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTxBc7/dJMcaaZaNvS/YSZOoFL46kEgqpD6cM8101/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTxBc7/dJMcaaZaNvS/YSZOoFL46kEgqpD6cM8101/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTxBc7%2FdJMcaaZaNvS%2FYSZOoFL46kEgqpD6cM8101%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;471&quot; height=&quot;81&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수정 코드&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/saPb9/dJMcajaIp7v/g4XtJR4VG2UHbHOnXpIzt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/saPb9/dJMcajaIp7v/g4XtJR4VG2UHbHOnXpIzt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/saPb9/dJMcajaIp7v/g4XtJR4VG2UHbHOnXpIzt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsaPb9%2FdJMcajaIp7v%2Fg4XtJR4VG2UHbHOnXpIzt1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;156&quot; data-origin-width=&quot;1094&quot; data-origin-height=&quot;249&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;POINT!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;속성을 삭제하는 것 = 해당 속성을 제외하고 재정의한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수정 후 highorders 데이터&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TU7eI/dJMcagyjeko/PLsFeltjRQ2ZgDNqRgnQI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TU7eI/dJMcagyjeko/PLsFeltjRQ2ZgDNqRgnQI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TU7eI/dJMcagyjeko/PLsFeltjRQ2ZgDNqRgnQI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTU7eI%2FdJMcagyjeko%2FPLsFeltjRQ2ZgDNqRgnQI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;438&quot; height=&quot;119&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;158&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;saleprice 속성이 삭제되었다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수정 후 (2)의 SQL문 실행&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBFAv4/dJMcaipocWi/EPRlRQ9P10JsZqChNXcae1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBFAv4/dJMcaipocWi/EPRlRQ9P10JsZqChNXcae1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBFAv4/dJMcaipocWi/EPRlRQ9P10JsZqChNXcae1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBFAv4%2FdJMcaipocWi%2FEPRlRQ9P10JsZqChNXcae1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;392&quot; height=&quot;226&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2) 인덱스(index)&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;인덱스&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 RDBMS의 인덱스는 대부분 B-tree구조로 되어 있지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBMS는 B+tree 기반이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd;&quot;&gt;B-tree vs. B+tree&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;B-tree: 각 노드에 키와 데이터 함께 저장 (= Balanced Tree)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;B+tree: 내부 노드에는 키만, 실제 데이터는 리프 노드에만 저장 ➔ 데이터 조회속도가 빠르다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;+ 데이터베이스가 저장된 위치 알아보기&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sp2Mn/dJMcaax659J/lM80m2IAnjN0rms4PEYD80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sp2Mn/dJMcaax659J/lM80m2IAnjN0rms4PEYD80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sp2Mn/dJMcaax659J/lM80m2IAnjN0rms4PEYD80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsp2Mn%2FdJMcaax659J%2FlM80m2IAnjN0rms4PEYD80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;465&quot; height=&quot;200&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; MYSQL의 인덱스 종류&lt;/b&gt;&lt;/span&gt; (Oracle과는 다르다.)&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클러스터 인덱스: &lt;span style=&quot;background-color: #f6e199;&quot;&gt;기본 키 생성시 자동으로 생성&lt;/span&gt;되고, 테이블당 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;하나만&lt;/span&gt; 존재한다. 데이터가 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;정렬&lt;/span&gt;되어 있다.&lt;br /&gt;&lt;/span&gt;➔ 변경/삭제가 어렵다.&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보조 인덱스: 클러스터 인덱스 외의 모든 인덱스를 말한다. 데이터를 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;정렬하지 않고&lt;/span&gt;, 테이블당 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;여러 개&lt;/span&gt; 만들 수 있다.&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;➔ 중간 삽입/삭제가 비교적 용이하다. empty값도 가능하다.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;인덱스 생성 + SHOW 인덱스&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-08 163245.png&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKIzsp/dJMcad2BGvX/zKypmTJKZ6FoEvCFcHAGf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKIzsp/dJMcad2BGvX/zKypmTJKZ6FoEvCFcHAGf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKIzsp/dJMcad2BGvX/zKypmTJKZ6FoEvCFcHAGf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKIzsp%2FdJMcad2BGvX%2FzKypmTJKZ6FoEvCFcHAGf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;474&quot; height=&quot;112&quot; data-filename=&quot;스크린샷 2026-04-08 163245.png&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-04-08 163253.png&quot; data-origin-width=&quot;2014&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eaV8Cp/dJMcafe87Ip/yyc0uK1sFGhThKt0mSFtB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eaV8Cp/dJMcafe87Ip/yyc0uK1sFGhThKt0mSFtB0/img.png&quot; data-alt=&quot;SHOW INDEX 값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eaV8Cp/dJMcafe87Ip/yyc0uK1sFGhThKt0mSFtB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeaV8Cp%2FdJMcafe87Ip%2Fyyc0uK1sFGhThKt0mSFtB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2014&quot; height=&quot;234&quot; data-filename=&quot;스크린샷 2026-04-08 163253.png&quot; data-origin-width=&quot;2014&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SHOW INDEX 값&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- SHOW 일부 속성 정리&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.465%; height: 100px;&quot; border=&quot;1&quot; data-path-to-node=&quot;4&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%; height: 35px;&quot;&gt;&lt;b&gt;1 Table&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0698%; height: 35px;&quot;&gt;&lt;b&gt;2 Non_unique&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.55814%; height: 35px;&quot;&gt;&lt;b&gt;3 Key_name&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.4186%; height: 35px;&quot;&gt;&lt;b&gt;4 Seq_in_index&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.2093%; height: 35px;&quot;&gt;&lt;b&gt;5 Column_name&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.2093%; height: 35px;&quot;&gt;&lt;b&gt;6 Collation&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.0465%; height: 35px;&quot;&gt;&lt;b&gt;7 Cardinality&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.9302%; height: 35px;&quot;&gt;&lt;b&gt;10 Null&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.76744%; height: 35px;&quot;&gt;&lt;b&gt;11 Index_type&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 65px;&quot;&gt;
&lt;td style=&quot;width: 13.2558%; height: 65px;&quot;&gt;&lt;span data-path-to-node=&quot;4,1,0,0&quot;&gt;인덱스가 포함된 테이블의 이름&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0698%; height: 65px;&quot;&gt;&lt;span data-path-to-node=&quot;4,1,1,0&quot;&gt;중복 허용 여부 (0: 불가,1: 가능)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 7.55814%; height: 65px;&quot;&gt;&lt;span data-path-to-node=&quot;4,1,2,0&quot;&gt;인덱스의 이름&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.4186%; height: 65px;&quot;&gt;&lt;span data-path-to-node=&quot;4,1,3,0&quot;&gt;인덱스 내 컬럼 순서&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.2093%; height: 65px;&quot;&gt;&lt;span data-path-to-node=&quot;4,1,4,0&quot;&gt;인덱스가 설정된 컬럼 이름.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.2093%; height: 65px;&quot;&gt;&lt;span data-path-to-node=&quot;4,1,5,0&quot;&gt;정렬 방식 &lt;br /&gt;(A: 오름차순, D: 내림차순)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.0465%; height: 65px;&quot;&gt;&lt;span data-path-to-node=&quot;4,1,6,0&quot;&gt;고유 값의 개수 (추정치)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.9302%; height: 65px;&quot;&gt;&lt;span data-path-to-node=&quot;4,1,7,0&quot;&gt; NULL 값 허용 여부&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 9.76744%; height: 65px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;인덱스 데이터 구조 방식&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;인덱스 최적화&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1775740710068&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ANALYZE TABLE Book;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;인덱스 삭제&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1775740744800&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP INDEX ix_Book ON Book;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;EXPLAIN 인덱스&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOKBzl/dJMcaiJCMsh/BOZVyTvasyLmiBUCLykFsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOKBzl/dJMcaiJCMsh/BOZVyTvasyLmiBUCLykFsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOKBzl/dJMcaiJCMsh/BOZVyTvasyLmiBUCLykFsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOKBzl%2FdJMcaiJCMsh%2FBOZVyTvasyLmiBUCLykFsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;622&quot; height=&quot;143&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1311&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccdV20/dJMcaiJCMue/nrEpaLbeY8YsK4Wtt7d52K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccdV20/dJMcaiJCMue/nrEpaLbeY8YsK4Wtt7d52K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccdV20/dJMcaiJCMue/nrEpaLbeY8YsK4Wtt7d52K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccdV20%2FdJMcaiJCMue%2FnrEpaLbeY8YsK4Wtt7d52K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1311&quot; height=&quot;181&quot; data-origin-width=&quot;1311&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;-- 모든 실습은 MariaDB, HeidiSQL을 사용해 이루어졌습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[목차여기]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
const _0x5eef=['classList','92935nhtnYq','setAttribute','push','innerHTML','getElementById','toLowerCase','tt_adsense_top','another_category','style','//p[contains(text(),\x27[목차여기]\x27)]','1954669aacfHB','div','appendChild','toc-ym','title','forEach','DOMContentLoaded','call','addEventListener','length','insertBefore','firstElementChild','log','27309qNoTHN','62SuwPRc','parentNode','querySelector','revenue_unit_wrap','tagName','23736mMyuUa','singleNodeValue','trim','17723tUfPMr','textContent','1STKGDu','getAttribute','contains','nextSibling','791846eKKEom','createElement','outerText','FIRST_ORDERED_NODE_TYPE','querySelectorAll','72wJWnLP','hasAttribute','669103LLOFBD','toc'];function _0x330c(_0x5d40d0,_0x4afdad){_0x5d40d0=_0x5d40d0-0xec;let _0x5eef71=_0x5eef[_0x5d40d0];return _0x5eef71;}const _0x2078d2=_0x330c;(function(_0xbea334,_0x392453){const _0x2c3076=_0x330c;while(!![]){try{const _0x5a087d=-parseInt(_0x2c3076(0x117))+parseInt(_0x2c3076(0xf7))+parseInt(_0x2c3076(0xfa))+-parseInt(_0x2c3076(0x11a))*-parseInt(_0x2c3076(0xf5))+parseInt(_0x2c3076(0x112))*parseInt(_0x2c3076(0x111))+parseInt(_0x2c3076(0xec))*-parseInt(_0x2c3076(0xf0))+-parseInt(_0x2c3076(0x104));if(_0x5a087d===_0x392453)break;else _0xbea334['push'](_0xbea334['shift']());}catch(_0x47ff63){_0xbea334['push'](_0xbea334['shift']());}}}(_0x5eef,0xea9e9),document[_0x2078d2(0x10c)](_0x2078d2(0x10a),function(){const _0x7eb51e=_0x2078d2;try{const _0x591681=document[_0x7eb51e(0x114)]('.contents_style'),_0x1762f9=document[_0x7eb51e(0xfe)](_0x7eb51e(0x107));if(_0x591681&amp;&amp;!_0x1762f9)htmlTableOfContents();else return![];}catch(_0x250abc){console[_0x7eb51e(0x110)]('');}}));function htmlTableOfContents(_0x4f1c99){const _0x388803=_0x2078d2;var _0x4f1c99=_0x4f1c99||document;const _0x44fb35=document[_0x388803(0xf1)]('div');_0x44fb35[_0x388803(0xfb)]('id',_0x388803(0x107));const _0x2117e2=document['querySelector']('.contents_style');var _0x35e549=_0x388803(0x103),_0x552a33=document['evaluate'](_0x35e549,document,null,XPathResult[_0x388803(0xf3)],null)[_0x388803(0x118)];let _0x407aa0;_0x552a33?(_0x407aa0=_0x552a33,_0x407aa0[_0x388803(0x11b)]='',_0x407aa0[_0x388803(0x106)](_0x44fb35)):(_0x407aa0=_0x2117e2[_0x388803(0x10f)],_0x407aa0['classList'][_0x388803(0xee)](_0x388803(0x100))||_0x407aa0[_0x388803(0xf9)]['contains'](_0x388803(0x115))?_0x2117e2['insertBefore'](_0x44fb35,_0x407aa0[_0x388803(0xef)]):_0x407aa0[_0x388803(0x113)][_0x388803(0x10e)](_0x44fb35,_0x407aa0));const _0x3e06b5=document['getElementById'](_0x388803(0x107)),_0x5ee2f2=[]['slice'][_0x388803(0x10b)](_0x2117e2[_0x388803(0xf4)]('h1,\x20h2,\x20h3,\x20h4,\x20h5,\x20h6')),_0x454032=[];for(i=0x0;i&lt;_0x5ee2f2[_0x388803(0x10d)];i++){if(_0x5ee2f2[i][_0x388803(0xf2)][_0x388803(0x119)]()==='')continue;else{if(_0x5ee2f2[i][_0x388803(0xf9)][_0x388803(0xee)](_0x388803(0x108)))continue;else{if(_0x5ee2f2[i][_0x388803(0x113)]['classList'][_0x388803(0xee)](_0x388803(0x101)))continue;else _0x454032[_0x388803(0xfc)](_0x5ee2f2[i]);}}}_0x454032[_0x388803(0x109)](function(_0x5d97e0,_0x2112a5){const _0x4b3465=_0x388803;var _0x94aa2e=_0x4b3465(0xf8)+_0x2112a5;if(_0x5d97e0[_0x4b3465(0xf6)]('id'))_0x94aa2e=_0x5d97e0[_0x4b3465(0xed)]('id');else _0x5d97e0[_0x4b3465(0xfb)]('id',_0x94aa2e);var _0x34278b=_0x4f1c99[_0x4b3465(0xf1)]('a');_0x34278b[_0x4b3465(0xfb)]('href','#'+_0x94aa2e),_0x34278b['textContent']='•\x20'+_0x5d97e0[_0x4b3465(0x11b)];var _0x118edf=_0x4f1c99[_0x4b3465(0xf1)](_0x4b3465(0x105));_0x118edf[_0x4b3465(0xfb)]('class',_0x5d97e0[_0x4b3465(0x116)][_0x4b3465(0xff)]()),_0x118edf[_0x4b3465(0x106)](_0x34278b),_0x3e06b5[_0x4b3465(0x106)](_0x118edf);});const _0xd72dc='\x0a\x20\x20\x20\x20#toc-ym\x20div.h1\x20{\x20margin-left:\x200em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h2\x20{\x20margin-left:\x200.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h3\x20{\x20margin-left:\x201em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h4\x20{\x20margin-left:\x201.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h5\x20{\x20margin-left:\x202em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h6\x20{\x20margin-left:\x202.5em\x20}\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20#toc-ym\x20{\x0a\x20\x20\x20\x20\x20\x20margin:\x2030px\x200px\x2030px\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2020px\x2020px\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20#dadada;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ffffff;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym::before\x20{\x0a\x20\x20\x20\x20\x20\x20content:\x20\x22목\x20\x20차\x22;\x0a\x20\x20\x20\x20\x20\x20display:\x20block;\x0a\x20\x20\x20\x20\x20\x20width:\x20120px;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20rgb(255,\x20255,\x20255);\x0a\x20\x20\x20\x20\x20\x20text-align:\x20center;\x0a\x20\x20\x20\x20\x20\x20font-size:\x2018px;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20bold;\x0a\x20\x20\x20\x20\x20\x20margin:\x20-40px\x20auto\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x205px\x200px;\x0a\x20\x20\x20\x20\x20\x20border-width:\x201px;\x0a\x20\x20\x20\x20\x20\x20border-style:\x20solid;\x0a\x20\x20\x20\x20\x20\x20border-color:\x20rgb(218,\x20218,\x20218);\x0a\x20\x20\x20\x20\x20\x20border-image:\x20initial;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div{\x0a\x20\x20\x20\x20\x20\x20margin:\x205px\x200px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:first-child{\x0a\x20\x20\x20\x20\x20\x20margin-top:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:last-child{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a\x20{\x0a\x20\x20\x20\x20\x20\x20text-decoration:\x20none;\x0a\x20\x20\x20\x20\x20\x20color:\x20#337ab7;\x0a\x20\x20\x20\x20\x20\x20transition:\x20all\x20ease\x200.2s;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a:hover\x20{\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20color:\x20#333333;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ecc7ff;\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20/*\x0a\x20\x20\x20\x20.contents_style\x20h3{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:7px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border-left:\x205px\x20solid\x20#757575;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#e5e5e5;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20500;\x0a\x20\x20\x20\x20\x20\x20color:\x20#000000\x20!important;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20*/\x0a\x20\x20\x20\x20',_0x3ed036=document[_0x388803(0xf1)](_0x388803(0x102));_0x3ed036[_0x388803(0xfd)]=_0xd72dc,_0x2117e2[_0x388803(0x10e)](_0x3ed036,_0x407aa0);}
&lt;/script&gt;
&lt;/p&gt;</description>
      <category>[CODE]/Database</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/9</guid>
      <comments>https://w26nw0n.tistory.com/9#entry9comment</comments>
      <pubDate>Thu, 9 Apr 2026 22:21:21 +0900</pubDate>
    </item>
    <item>
      <title>[DB] 4. SQL 고급(1) - 내장함수, NULL, 비교문, 부속질의</title>
      <link>https://w26nw0n.tistory.com/7</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1) 내장함수, NULL, 비교문&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SQL 함수의 종류&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;내장함수: DBMS가 제공&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자 정의 함수: 사용자 필요에 따라 직접 만듦&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;MySQL에서 제공하는 주요 내장 함수&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 266px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 32.0154%; height: 21px;&quot; colspan=&quot;2&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 21px;&quot;&gt;함수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 12.8682%; height: 189px;&quot; rowspan=&quot;7&quot;&gt;단일행 함수&lt;/td&gt;
&lt;td style=&quot;width: 19.1472%; height: 35px;&quot;&gt;숫자 함수&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 35px;&quot;&gt;ABS, CEIL, COS, EXP, FLOOR, LN, LOG, MOD, POWER, RAND, ROUND, SIGN, TRUNCATE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 19.1472%; height: 35px;&quot;&gt;문자 함수(문자 반환)&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 35px;&quot;&gt;CHAR, CONCAT, LEFT, RIGHT, LOWER, UPPER, LPAD, RPAD, PTRIM, RTRIM, REPLACE, REVERSE, RIGHT, SUBSTR, TRIM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.1472%; height: 21px;&quot;&gt;문자 함수(숫자 반환)&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 21px;&quot;&gt;ASCII, INSTR, LENGTH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 19.1472%; height: 35px;&quot;&gt;날짜, 시간 함수&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 35px;&quot;&gt;ADDDATE, CURRENT_DATE, DATE, DATEDIFF, DAYNAME, LAST_DAY, SYSDATE, TIME&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.1472%; height: 21px;&quot;&gt;변환 함수&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 21px;&quot;&gt;CAST, CONVERT, DATE_FORMAT, STR_TO_DATE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.1472%; height: 21px;&quot;&gt;정보 함수&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 21px;&quot;&gt;DATABASE, SCHEMA, ROW_COUNR, USER, VERSION&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 19.1472%; height: 21px;&quot;&gt;NULL 관련 함수&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 21px;&quot;&gt;COALESCE, ISNULL, IFNULL, NULLIF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 32.0154%; height: 21px;&quot; colspan=&quot;2&quot;&gt;집계 함수&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 21px;&quot;&gt;AVG, COUNT, MAX, MIN, STD, STDDEV, SUM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 32.0154%; height: 35px;&quot; colspan=&quot;2&quot;&gt;윈도 함수(or 분석 함수)&lt;/td&gt;
&lt;td style=&quot;width: 67.9845%; height: 35px;&quot;&gt;CUME_DIST, DENSE_RANK, RIST_CALUE, LAST_CALUE, LEAD, NTILE, RANK, ROW_NUMBER&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;윈도 함수 = &quot;행 간 비교와 누적 계산 도구&quot;로 사용되는 고급 문법&lt;/li&gt;
&lt;li&gt;GROUP BY와 윈도우 함수는 같이 사용 X&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;숫자 함수&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ABS(숫자): 절댓값&lt;/li&gt;
&lt;li&gt;CEIL(숫자): 숫자보다 크거나 같은 최소의 정수 (&amp;harr; FLOOR(): 작거나 같은)&lt;/li&gt;
&lt;li&gt;ROUND(숫자, m): 숫자의 반올림 (m은 반올림 기준 자릿수)&lt;/li&gt;
&lt;li&gt;SQRT(숫자):&amp;nbsp; 숫자의 제곱근 값을 계산(숫자는 양수)&lt;/li&gt;
&lt;li&gt;SIGN(숫자): 숫자가 음수 ➔ -1 / 양수 ➔ 1 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775052165557&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* ==  ROUND() 예시 == */

-- 소수 첫째 자리까지 반올림한 값을 구하시오.
SELECT @VALUE := 1.879; -- 변수 선언
SELECT REOUND(@VALUE, 1);


-- 100원 단위로 반올림한 값을 구하시오.
SELECT custid '고객번호', ROUND(SUM(saleprice)/COUNT(*), -2) '평균금액'
FROM Orders
GROUP BY custid;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문자 함수&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CONCAT(s1, s2): 두 문자열 연결&lt;/li&gt;
&lt;li&gt;LPAD(s,n,c): 대상 문자열(s)의 왼쪽부터 지정한 자릿수(n)까지 지정한 문자(c)로 채움. (&amp;harr; RPAD(s,n,c))&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775194965188&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;LPAD('Page 1', 10, '*') -- 10자리까지 *로 채워라
-- -&amp;gt; '****Page1'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SUMSTR(s,n,k): 대상 문자열(s)의 지정된 자리(n)에서부터 지정된 길이(n)만큼 잘라서 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775195282005&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SUBSTR('ABCDEF', 3, 4) -- 3자리부터 4개 
-- -&amp;gt; 'CEDF'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TRIM(c FROM s): 대상 문자열(s)의 양쪽에서 지정된 문자(c)를 삭제함&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775195430968&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 문자열만 넣으면 -&amp;gt; (default) 공백 제거
TRIM('=' FROM '==BROWNING==')
-- -&amp;gt; 'BROWNING'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LOWER(s): 대상 문자열 전부 소문자 변환 (&amp;harr; UPPER(s))&lt;/li&gt;
&lt;li&gt;LENGTH(s): 대상 문자열의 byte 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;한글: 3byte (UTF-8) / 알파벳: 1byte&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CHAR_LENGTH(s): 문자열의 문자 수 반환&lt;/li&gt;
&lt;li&gt;REPLACE( 열명, '치환대상값', '치환되길 원하는 값'): 문자 치환&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775195884133&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT bookid, REPLACE(bookname, '야구', '농구') bookname, publisher, price
FROM book;

-- bookname 열에 '야구'값을 -&amp;gt; '농구'값으로 치환한다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;날짜, 시간 함수&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인수를 format으로 표기한 경우&lt;br /&gt;(DBMS마다 함수 이름과 동작이 다르다. 아래 표는 MariaDB 기준 작성됨.)&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.233%; height: 320px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 28.3333%; height: 21px;&quot;&gt;함수&lt;/td&gt;
&lt;td style=&quot;width: 13.5659%; height: 21px;&quot;&gt;반환형&lt;/td&gt;
&lt;td style=&quot;width: 58.3333%; height: 21px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 74px;&quot;&gt;
&lt;td style=&quot;width: 28.3333%; height: 74px;&quot;&gt;STR_TO_DATE(string, format)&lt;/td&gt;
&lt;td style=&quot;width: 13.5659%; height: 74px;&quot;&gt;DATE&lt;/td&gt;
&lt;td style=&quot;width: 58.3333%; height: 74px;&quot;&gt;문자열 데이터 ➔ 날짜형 반환&lt;br /&gt;&lt;br /&gt;&lt;span&gt;STR_TO_DATE('2024-12-07', '%Y-%m-%d') &lt;span class=&quot;hljs-comment&quot;&gt;-- -&amp;gt; 2024-12-07​&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 74px;&quot;&gt;
&lt;td style=&quot;width: 28.3333%; height: 74px;&quot;&gt;DATE_FORMAT(date, format)&lt;/td&gt;
&lt;td style=&quot;width: 13.5659%; height: 74px;&quot;&gt;STRING&lt;/td&gt;
&lt;td style=&quot;width: 58.3333%; height: 74px;&quot;&gt;날짜형 ➔ 문자열(VARCHAR) 반환&lt;br /&gt;&lt;br /&gt;&lt;span&gt;DATE_FORMAT('2024-12-07', '%Y-%m-%d') &lt;span class=&quot;hljs-comment&quot;&gt;-- -&amp;gt; '2024-12-07'​&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 96px;&quot;&gt;
&lt;td style=&quot;width: 28.3333%; height: 96px;&quot;&gt;ADDDATE(date, interval)&lt;/td&gt;
&lt;td style=&quot;width: 13.5659%; height: 96px;&quot;&gt;DATE&lt;/td&gt;
&lt;td style=&quot;width: 58.3333%; height: 96px;&quot;&gt;DATE형의 날짜 ➔ INTERVAL 지정한 시간만큼 더함&lt;br /&gt;&lt;br /&gt;ADDDATE('2024-12-07', INTERVAL 10 DAY) -- -&amp;gt; 2024-12-17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 28.3333%; height: 21px;&quot;&gt;DATEDIFF(date1, date2)&lt;/td&gt;
&lt;td style=&quot;width: 13.5659%; height: 21px;&quot;&gt;INTEGER&lt;/td&gt;
&lt;td style=&quot;width: 58.3333%; height: 21px;&quot;&gt;DATE형의 date1 - date2 날짜 차이 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 28.3333%; height: 17px;&quot;&gt;DATE(date)&lt;/td&gt;
&lt;td style=&quot;width: 13.5659%; height: 17px;&quot;&gt;DATE&lt;/td&gt;
&lt;td style=&quot;width: 58.3333%; height: 17px;&quot;&gt;DATE형의 날짜 부분 반환 (time x)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 28.3333%; height: 17px;&quot;&gt;SYSDATE&lt;/td&gt;
&lt;td style=&quot;width: 13.5659%; height: 17px;&quot;&gt;DATE&lt;/td&gt;
&lt;td style=&quot;width: 58.3333%; height: 17px;&quot;&gt;DBMS 시스템상의 오늘 날짜를 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000;&quot;&gt;[!] 주의할 점&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. NOW() vs. SYSDATE()&lt;/span&gt;&lt;br /&gt;- NOW(): &lt;u&gt;동일한 값&lt;/u&gt; 유지&lt;br /&gt;- SYSDATE(): &lt;u&gt;호출시점마다 다름&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. NULL 처리&lt;/span&gt;&lt;br /&gt;- 날짜 컬럼이 NULL ➔ 에러 발생&lt;br /&gt;➔ &lt;u&gt;기본값 지정하자!&lt;/u&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;format의 주요 지정자&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 147px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 7.63563%; height: 63px;&quot; rowspan=&quot;3&quot;&gt;요일&lt;/td&gt;
&lt;td style=&quot;width: 8.46899%; height: 21px;&quot;&gt;%w&lt;/td&gt;
&lt;td style=&quot;width: 33.5416%; height: 21px;&quot;&gt;요일 순서(0~6, Sunday=0)&lt;/td&gt;
&lt;td style=&quot;width: 9.12306%; height: 42px;&quot; rowspan=&quot;2&quot;&gt;날짜&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%; height: 21px;&quot;&gt;%d&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 21px;&quot;&gt;한 달 중 날짜(00~31)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.46899%; height: 21px;&quot;&gt;%W&lt;/td&gt;
&lt;td style=&quot;width: 33.5416%; height: 21px;&quot;&gt;요일(Sunday~Saturdaty)&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%; height: 21px;&quot;&gt;%j&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 21px;&quot;&gt;1년 중 날짜(001~366)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.46899%; height: 21px;&quot;&gt;%a&lt;/td&gt;
&lt;td style=&quot;width: 33.5416%; height: 21px;&quot;&gt;요일의 약자(Sun~Sat)&lt;/td&gt;
&lt;td style=&quot;width: 9.12306%; height: 63px;&quot; rowspan=&quot;3&quot;&gt;월&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%; height: 21px;&quot;&gt;%m&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 21px;&quot;&gt;월 순서(01~12, January=01)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 84px; width: 7.63563%;&quot; rowspan=&quot;4&quot;&gt;시간&lt;/td&gt;
&lt;td style=&quot;width: 8.46899%; height: 21px;&quot;&gt;%h&lt;/td&gt;
&lt;td style=&quot;width: 33.5416%; height: 21px;&quot;&gt;12시간(01~12)&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%; height: 21px;&quot;&gt;%b&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 21px;&quot;&gt;월 이름 약어(Jan~Dec)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.46899%; height: 21px;&quot;&gt;%H&lt;/td&gt;
&lt;td style=&quot;width: 33.5416%; height: 21px;&quot;&gt;24시간(00~23)&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%; height: 21px;&quot;&gt;%M&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 21px;&quot;&gt;월 이름(January~December)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.46899%; height: 21px;&quot;&gt;%i&lt;/td&gt;
&lt;td style=&quot;width: 33.5416%; height: 21px;&quot;&gt;분(0~59)&lt;/td&gt;
&lt;td style=&quot;width: 9.12306%; height: 42px;&quot; rowspan=&quot;2&quot;&gt;연도&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%; height: 21px;&quot;&gt;%Y&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 21px;&quot;&gt;4자리 연도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 8.46899%; height: 21px;&quot;&gt;%s&lt;/td&gt;
&lt;td style=&quot;width: 33.5416%; height: 21px;&quot;&gt;초(0~59)&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%; height: 21px;&quot;&gt;%y&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 21px;&quot;&gt;4자리 연도의 마지막 2자리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1775199188940&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- DBMS 서버에 설정된 현재 날짜와 시간, 요일을 확인하시오.

SELECT SYSDATE(),
	DATE_FORMAT(SYSDATE(), '%Y/%m/%d %a %h:%i') 'SYSDATE_1';
    
-- -&amp;gt; 2026/04/03 Fri 15:53&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;NULL 값&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특징
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;비교연산자(=, &amp;lt;, &amp;gt;)로 비교할 수 없다.&lt;/li&gt;
&lt;li&gt;연산 결과도 다 NULL로 반환한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;집계 함수를 계산할 때, NULL이 포함된 행은 집계에서 빠진다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IFNULL 함수 (MySQL, MariaDB)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775200451827&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;IFNULL (속성, 값)
-- 속성값이 NULL이면 '값'으로 대치한다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;COALESCE 함수 (표준 SQL)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775200556070&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;COALESCE(expr1, expr2, expr3, ... )
-- 첫 번째로 NULL이 아닌 값을 반환&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;+ 변수 설정하기&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775200746926&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 변수 앞에 @ / 치환문에는 SET과 := 기호를 사용한다.

SET @seq:=0;

SELECT (@seq:=seq+1) '순번', custid, name, phone
FROM Customer
WHERE @seq &amp;lt; 2;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CASE WHEN: 조건문&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1775200904787&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CASE
	WHEN 조건1 THEN 결과1
    WHEN 조건2 THEN 결과2
   	...
    ELSE 기본값
END AS 별칭&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2) 부속질의&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;부속질의&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 하나의 SQL 문 안에 다른 SQL 문이 중첩된 질의&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[!] 실제 실무에서는: 가독성, 클립코드 &amp;lt;&amp;lt; &lt;u&gt;응답시간&lt;/u&gt;!&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;+ EXPLAIN&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Rows: 쿼리가 훑고 지나간 행의 수&lt;/li&gt;
&lt;li&gt;Filtered: 실제 결과로 남은 데이터의 비율&lt;/li&gt;
&lt;li&gt;Extra: Using index or Using filesort&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;WHERE 부속질의(= 중첩질의)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중첩질의 연산자:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;비교(=, &amp;gt;, &amp;lt;, &amp;gt;=, &amp;lt;=, &amp;lt;&amp;gt;) ➔ 반환 행/열: 모두 단일&lt;/li&gt;
&lt;li&gt;집합(IN, NOT IN) ➔ 반환 행/열: 모두 다중&lt;/li&gt;
&lt;li&gt;한정(ALL, SOME (ANY))&lt;/li&gt;
&lt;li&gt;존재(EXISTS, NOT EXISTS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775222954641&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 3번 고객이 주문한 도서의 최고 금액보다 더 비싼 도서를 구입한 주문의 주문번호와 판매금액을 보이시오.

SELECT orderid, saleprice
FROM Orders
WHERE saleprice &amp;gt; ALL (SELECT saleprice
			FROM Orders
    			WHERE custid='3');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;SELECT 부속질의(= 스칼라 부속질의)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특징
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;부속질의의 결과 값 ➔ &lt;u&gt;단일 행, 단일 열의 스칼라 값&lt;/u&gt;으로 반환&lt;br /&gt;if 결과 값이 다중 행/열 ➔ ERROR&lt;br /&gt;if 결과 x ➔ NULL&amp;nbsp;&lt;/li&gt;
&lt;li&gt;UPDATE 문에서도 사용 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775223479464&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* == 1. SELECT문 예시 == */

SELECT custid, (SELECT name
		FROM Customer cs
        	WHERE cs.custid=od.custid), SUM(saleprice)
FROM Orders od
GROUP BY custid;

-- 실행 순서
-- 1) FROM -&amp;gt; 2) GROUP BU -&amp;gt; 3) 부속질의 -&amp;gt; 4) 주질의

/* == 2. UPDATE문 예시 ==*/

UPDATE Orders
SET bname = (SELECT bookname
		FROM Book
        	WHERE Book.bookid=Orders.bookid);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;FROM 부속질의(= 스칼라 부속질의)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➔&amp;nbsp;'&lt;span style=&quot;background-color: #f6e199;&quot;&gt;뷰&lt;/span&gt;' : 기존 테이블로부터 일시적으로 만들어진 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;가상테이블&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1775225823017&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT cs.name, SUM(od.saleprice) 'total'
FROM (SELECT custid, name
	FROM Customer
        WHERE custid &amp;lt;= 2) cs,
       Orders od
WHERE cs.custid = od.custid
GROUP BY cs.name;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;WITH &lt;span style=&quot;background-color: #f6e199;&quot;&gt;CTE&lt;/span&gt;명 AS (SELECT ...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 복잡한 SQL 쿼리 내에서 일시적인 결과 집합 정의 ➔ 가독성 상승, 쿼리 구조화&lt;/p&gt;
&lt;pre id=&quot;code_1775226424316&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* == CTE 예시 == */

-- 마당서점의 고객별 판매액을 나타내시오(고객이름, 고객별 판매액 출력)

WITH sales_summary AS (
	SELECT od.custid, cs.name,
	SUM(od.saleprice) AS total_sales
   	FROM orders od
    	JOIN customer cs
    		ON od.custid = cs.custid
    	GROUP BY od.custid, cs.name
) -- [!] 세미콜론 없음


-- 매출별로 내림차순하여 보기

SELECT custid, name, total_sales
FROM sales_summary -- CTE 사용
ORDER BY total_sales DESC;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;SQL 윈도우 함수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 테이블의 행-행 간의 관계를 정의 -&amp;gt; 데이터를 윈도유(틀)로 그룹화하여 사용하는 함수&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특징
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;u&gt;행의 개수 유지&lt;/u&gt; + 그룹 내 계산 결과를 각 행에 표시한다. (&amp;harr; GROUP BY: 행이 합쳐진다.)&lt;/li&gt;
&lt;li&gt;OVER() 절과 함께 사용, PARTITION BY/ORDER BY로 범위/순서 지정&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1775226168302&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- OVER() 절

SELECT 함수명() OVER (PARTITION BY 컬럼명 ORDER BY 컬럼명)
FROM 테이블명;

-- PARTITION BY: 계산을 수행할 그룹을 나눈다.
-- ORDER BY: 그 그룹 안에서 계산을 수행할 순서를 정한다.

예시)
SELECT ~,
	RANK() OVER (PARTITION BY b.publisher ORDER BY SUM(o.saleprice) DESC) AS rank_i&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주요 유형
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;순위 함수(Ranking)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;➔&lt;span&gt; ROW_NUMBER(), RANK(), DENSE_RANK(), ...&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;집계 함수(Aggregate)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;➔&lt;span&gt; SUM(), AVG(), COUNT(), MAX(), MIN(), ...&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;분석/값 함수(Value)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;➔&lt;span&gt; LEAD(), LAG(), FIRST_VALUE(), LAST_VALUE(), ...&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;\&amp;quot;size16\&amp;quot;&quot;&gt;[목차여기]&lt;/p&gt;
&lt;p data-ke-size=&quot;\&amp;quot;size16\&amp;quot;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;\&amp;quot;size16\&amp;quot;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
const _0x5eef=['classList','92935nhtnYq','setAttribute','push','innerHTML','getElementById','toLowerCase','tt_adsense_top','another_category','style','//p[contains(text(),\x27[목차여기]\x27)]','1954669aacfHB','div','appendChild','toc-ym','title','forEach','DOMContentLoaded','call','addEventListener','length','insertBefore','firstElementChild','log','27309qNoTHN','62SuwPRc','parentNode','querySelector','revenue_unit_wrap','tagName','23736mMyuUa','singleNodeValue','trim','17723tUfPMr','textContent','1STKGDu','getAttribute','contains','nextSibling','791846eKKEom','createElement','outerText','FIRST_ORDERED_NODE_TYPE','querySelectorAll','72wJWnLP','hasAttribute','669103LLOFBD','toc'];function _0x330c(_0x5d40d0,_0x4afdad){_0x5d40d0=_0x5d40d0-0xec;let _0x5eef71=_0x5eef[_0x5d40d0];return _0x5eef71;}const _0x2078d2=_0x330c;(function(_0xbea334,_0x392453){const _0x2c3076=_0x330c;while(!![]){try{const _0x5a087d=-parseInt(_0x2c3076(0x117))+parseInt(_0x2c3076(0xf7))+parseInt(_0x2c3076(0xfa))+-parseInt(_0x2c3076(0x11a))*-parseInt(_0x2c3076(0xf5))+parseInt(_0x2c3076(0x112))*parseInt(_0x2c3076(0x111))+parseInt(_0x2c3076(0xec))*-parseInt(_0x2c3076(0xf0))+-parseInt(_0x2c3076(0x104));if(_0x5a087d===_0x392453)break;else _0xbea334['push'](_0xbea334['shift']());}catch(_0x47ff63){_0xbea334['push'](_0xbea334['shift']());}}}(_0x5eef,0xea9e9),document[_0x2078d2(0x10c)](_0x2078d2(0x10a),function(){const _0x7eb51e=_0x2078d2;try{const _0x591681=document[_0x7eb51e(0x114)]('.contents_style'),_0x1762f9=document[_0x7eb51e(0xfe)](_0x7eb51e(0x107));if(_0x591681&amp;&amp;!_0x1762f9)htmlTableOfContents();else return![];}catch(_0x250abc){console[_0x7eb51e(0x110)]('');}}));function htmlTableOfContents(_0x4f1c99){const _0x388803=_0x2078d2;var _0x4f1c99=_0x4f1c99||document;const _0x44fb35=document[_0x388803(0xf1)]('div');_0x44fb35[_0x388803(0xfb)]('id',_0x388803(0x107));const _0x2117e2=document['querySelector']('.contents_style');var _0x35e549=_0x388803(0x103),_0x552a33=document['evaluate'](_0x35e549,document,null,XPathResult[_0x388803(0xf3)],null)[_0x388803(0x118)];let _0x407aa0;_0x552a33?(_0x407aa0=_0x552a33,_0x407aa0[_0x388803(0x11b)]='',_0x407aa0[_0x388803(0x106)](_0x44fb35)):(_0x407aa0=_0x2117e2[_0x388803(0x10f)],_0x407aa0['classList'][_0x388803(0xee)](_0x388803(0x100))||_0x407aa0[_0x388803(0xf9)]['contains'](_0x388803(0x115))?_0x2117e2['insertBefore'](_0x44fb35,_0x407aa0[_0x388803(0xef)]):_0x407aa0[_0x388803(0x113)][_0x388803(0x10e)](_0x44fb35,_0x407aa0));const _0x3e06b5=document['getElementById'](_0x388803(0x107)),_0x5ee2f2=[]['slice'][_0x388803(0x10b)](_0x2117e2[_0x388803(0xf4)]('h1,\x20h2,\x20h3,\x20h4,\x20h5,\x20h6')),_0x454032=[];for(i=0x0;i&lt;_0x5ee2f2[_0x388803(0x10d)];i++){if(_0x5ee2f2[i][_0x388803(0xf2)][_0x388803(0x119)]()==='')continue;else{if(_0x5ee2f2[i][_0x388803(0xf9)][_0x388803(0xee)](_0x388803(0x108)))continue;else{if(_0x5ee2f2[i][_0x388803(0x113)]['classList'][_0x388803(0xee)](_0x388803(0x101)))continue;else _0x454032[_0x388803(0xfc)](_0x5ee2f2[i]);}}}_0x454032[_0x388803(0x109)](function(_0x5d97e0,_0x2112a5){const _0x4b3465=_0x388803;var _0x94aa2e=_0x4b3465(0xf8)+_0x2112a5;if(_0x5d97e0[_0x4b3465(0xf6)]('id'))_0x94aa2e=_0x5d97e0[_0x4b3465(0xed)]('id');else _0x5d97e0[_0x4b3465(0xfb)]('id',_0x94aa2e);var _0x34278b=_0x4f1c99[_0x4b3465(0xf1)]('a');_0x34278b[_0x4b3465(0xfb)]('href','#'+_0x94aa2e),_0x34278b['textContent']='•\x20'+_0x5d97e0[_0x4b3465(0x11b)];var _0x118edf=_0x4f1c99[_0x4b3465(0xf1)](_0x4b3465(0x105));_0x118edf[_0x4b3465(0xfb)]('class',_0x5d97e0[_0x4b3465(0x116)][_0x4b3465(0xff)]()),_0x118edf[_0x4b3465(0x106)](_0x34278b),_0x3e06b5[_0x4b3465(0x106)](_0x118edf);});const _0xd72dc='\x0a\x20\x20\x20\x20#toc-ym\x20div.h1\x20{\x20margin-left:\x200em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h2\x20{\x20margin-left:\x200.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h3\x20{\x20margin-left:\x201em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h4\x20{\x20margin-left:\x201.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h5\x20{\x20margin-left:\x202em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h6\x20{\x20margin-left:\x202.5em\x20}\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20#toc-ym\x20{\x0a\x20\x20\x20\x20\x20\x20margin:\x2030px\x200px\x2030px\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2020px\x2020px\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20#dadada;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ffffff;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym::before\x20{\x0a\x20\x20\x20\x20\x20\x20content:\x20\x22목\x20\x20차\x22;\x0a\x20\x20\x20\x20\x20\x20display:\x20block;\x0a\x20\x20\x20\x20\x20\x20width:\x20120px;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20rgb(255,\x20255,\x20255);\x0a\x20\x20\x20\x20\x20\x20text-align:\x20center;\x0a\x20\x20\x20\x20\x20\x20font-size:\x2018px;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20bold;\x0a\x20\x20\x20\x20\x20\x20margin:\x20-40px\x20auto\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x205px\x200px;\x0a\x20\x20\x20\x20\x20\x20border-width:\x201px;\x0a\x20\x20\x20\x20\x20\x20border-style:\x20solid;\x0a\x20\x20\x20\x20\x20\x20border-color:\x20rgb(218,\x20218,\x20218);\x0a\x20\x20\x20\x20\x20\x20border-image:\x20initial;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div{\x0a\x20\x20\x20\x20\x20\x20margin:\x205px\x200px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:first-child{\x0a\x20\x20\x20\x20\x20\x20margin-top:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:last-child{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a\x20{\x0a\x20\x20\x20\x20\x20\x20text-decoration:\x20none;\x0a\x20\x20\x20\x20\x20\x20color:\x20#337ab7;\x0a\x20\x20\x20\x20\x20\x20transition:\x20all\x20ease\x200.2s;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a:hover\x20{\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20color:\x20#333333;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ecc7ff;\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20/*\x0a\x20\x20\x20\x20.contents_style\x20h3{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:7px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border-left:\x205px\x20solid\x20#757575;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#e5e5e5;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20500;\x0a\x20\x20\x20\x20\x20\x20color:\x20#000000\x20!important;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20*/\x0a\x20\x20\x20\x20',_0x3ed036=document[_0x388803(0xf1)](_0x388803(0x102));_0x3ed036[_0x388803(0xfd)]=_0xd72dc,_0x2117e2[_0x388803(0x10e)](_0x3ed036,_0x407aa0);}
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[CODE]/Database</category>
      <category>db</category>
      <category>MySQL</category>
      <category>SQL</category>
      <category>데이터베이스</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/7</guid>
      <comments>https://w26nw0n.tistory.com/7#entry7comment</comments>
      <pubDate>Fri, 3 Apr 2026 23:31:07 +0900</pubDate>
    </item>
    <item>
      <title>[DB] 3. SQL 기초(2) - 부속질의, 데이터 정의어, 데이터 조작어</title>
      <link>https://w26nw0n.tistory.com/4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1) 부속질의(서브쿼리)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: SELECT 문 안에 또 다른 SELECT 문을 포함하는 질의&lt;/p&gt;
&lt;pre id=&quot;code_1774500092902&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex) 
SELECT (
	-- 부속 질의문
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;➜&lt;/span&gt; 안쪽 부속 질의문 먼저 수행하고, 해당 결과를 이용해 상위 질의문 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 83.7209%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;연산자&lt;/td&gt;
&lt;td style=&quot;width: 59.4186%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;IN / NOT IN&lt;/td&gt;
&lt;td style=&quot;width: 59.4186%;&quot;&gt;부속 질의문 결과 값 중 일치하는 것 있으면/없으면 조건 참&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;EXISTS / NOT EXISTS&lt;/td&gt;
&lt;td style=&quot;width: 59.4186%;&quot;&gt;부속 질의문 결과 값 중 하나라도 존재하면/하나도 존재하지 않으면 조건 참&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;ALL / ANY, SOME&lt;/td&gt;
&lt;td style=&quot;width: 59.4186%;&quot;&gt;부속 질의문 결과 값 중 모두/하나라도 비교한 결과가 참 -&amp;gt; 조건 참&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774498591052&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* === 부속 질의문 예제 ==*/

-- 가장 비싼 도서의 이름을 나타내세요.

SELECT bookname
FROM Book
WHERE price = (SELECT MAX(price) FROM Book);

-- 대한미디어에서 출판한 도서를 구매한 고객의 이름을 나타내세요.

SELECT name
FROM Customer
WHERE custid IN(SELECT custid
		FROM Orders
                SHERE bookid IN(SELECT bookid
                		FROM Book
                                WHERE publisher='대한미디어'));&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;부속 질의문은&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp;조인으로 대체 사용&lt;/span&gt;하는 것을 권장한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;상관(연결) 부속질의&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;: 부속질의 간에 상하 관계 존재,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&amp;nbsp; 상위 쿼리의 특정 행 값이 하위 쿼리 조건에 사용된다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&amp;nbsp; 일반적인 부속질의와 달리 행 단위로 반복 실행!&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1774500465769&quot; class=&quot;armasm&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 출판사별로 출판사의 평균 도서 가격보다 비싼 도서를 구하세요.

SELECT b1.bookname
FROM Book b1
WHERE b1.price &amp;gt; (SELECT avg(b2.price)
	  	  FROM Book b2
     	 	  WHERE b2.publisher=b1.publisher);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;➜&lt;/span&gt; &amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;조인을 사용하면?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1774499818897&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT b1.bookname
FROM Book b1
JOIN (
	SELECT publisher, avg(price) AS avg_price
    	FROM Book
    	GROUP BY publisher
) b2 ON b2.publisher = b1.publisher
WHERE b1.price &amp;gt; b2.avg_price;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;집합 연산&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;합집합: UNION (중복x) / UNION ALL (중복 포함)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1774500543660&quot; class=&quot;routeros&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 대한민국에 거주하는 고객의 이름과 도서를 주문한 고객의 이름을 나타내세요.

SELECT name
FROM Customer
WHERE address LIKE '대한민국%'
UNION
SELECT name
FROM Customer
WHERE custid IN (SELECT custid FROM Orders);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;차집합/교집합: MINUS / INTERSECT -&amp;gt; NOT IN, IN (MySQL은 대체 사용한다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1774500762912&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 대한민국에 거주하는 고객 중 도서를 주문한 고객의 이름을 나타내세요.

SELECT name
FROM Customer
WHERE address LIKE '대한민국%' AND
	name IN (SELECT name
        	FROM Customer
                WHERE custid IN (SELECT custid FROM Orders));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #000000;&quot;&gt; 헷갈리는 부분 정리&lt;/span&gt;  &lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;IN / NOT IN&lt;/span&gt; vs. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;EXISTS / NOT EXISTS&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 87.7907%; height: 55px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.5814%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;IN / NOT IN&lt;/td&gt;
&lt;td style=&quot;width: 37.7907%;&quot;&gt;EXISTS / NOT EXISTS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 15.5814%; height: 21px;&quot;&gt;비교대상&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 21px;&quot;&gt;값(Value)&lt;/td&gt;
&lt;td style=&quot;width: 37.7907%; height: 21px;&quot;&gt;행의 존재 여부(Row)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.5814%; height: 17px;&quot;&gt;처리 방식&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 17px;&quot;&gt;전체 리스트 뽑아 비교&lt;/td&gt;
&lt;td style=&quot;width: 37.7907%; height: 17px;&quot;&gt;그때그때 하나씩 비교&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 15.5814%; height: 17px;&quot;&gt;속도&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%; height: 17px;&quot;&gt;값이 많아지면 느려짐&lt;br /&gt;= 리스트 생성에 걸리는 시간이 늘어나서&lt;/td&gt;
&lt;td style=&quot;width: 37.7907%; height: 17px;&quot;&gt;리스트를 미리 만들지 않아 속도 빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2) 데이터 정의어&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;CREATE TABLE&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 테이블 구성&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;속성/속성에 관한 제약 정의: NULL / NOT NULL / DEFAULT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;데이터 타입 종류&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 150px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;데이터 타입&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;INTEGER&lt;br /&gt;INT&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;4바이트 정수형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;NUMBER(m, d)&lt;br /&gt;DECIMAL(m, d)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 35px;&quot;&gt;전체 자릿수 m, 소수점 이하 자릿수 d를 가진 숫자형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;CHAR(n)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;문자형 고정길이, 남은 공간은 공백으로&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;VARCHAR(n)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 21px;&quot;&gt;문자형 가변길이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;DATE&lt;br /&gt;DATETIME&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;날짜형, 연도-월-일-시간&lt;br /&gt;ex) %Y-%m-%d&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외래키) 투플 삭제시 처리방법 지정 옵션&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ON DELETE _&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 76.9767%; height: 63px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 32.7907%; height: 21px;&quot;&gt;CASCADE&lt;/td&gt;
&lt;td style=&quot;width: 44.186%; height: 21px;&quot;&gt;관련 투플 함께 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 32.7907%; height: 21px;&quot;&gt;SET NULL&lt;/td&gt;
&lt;td style=&quot;width: 44.186%; height: 21px;&quot;&gt;관련 투플 외래키 값 -&amp;gt; NULL 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 32.7907%; height: 21px;&quot;&gt;RESTRICT(= NO ACTION)&lt;/td&gt;
&lt;td style=&quot;width: 44.186%; height: 21px;&quot;&gt;부모행 참조되고 있으면 삭제/수정 불가(기본값)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774502618818&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- CREATE TABLE 예시

CREATE TABLE NewOrders (
    orderid INTEGER,
    custid INTEGER	NOT NULL,
    bookid INTEGER	NOT NULL,
    saleprice INTEGER,
    orderdate DATE,
    PRIMARY KEY(orderid),
    FORIGN KEY(custid) REFERENCES NewCustomer(custid) ON DELETE CASCADE
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;ALTER TABLE&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 생성된 테이블의 속성/속성에 관한 제약 변경, 기본키/외래키 변경&lt;/p&gt;
&lt;pre id=&quot;code_1774503075312&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- ALTER TABLE 예시

ALTER TABLE 테이블 이름
    -- 속성 추가/변경
    [[ADD | MODIFY] 속성이름 데이터타입]
    -- 속성 제거
    [DROP COLUMN 속성이름]
    
    -- 기본키 추가
    [ADD PRIMARY KEY(속성이름)]
    -- 기본키 제거
    [DROP PRIMARY KEY]
    
    -- 제약조건 추가/수정
    [[ADD | MODIFY] 속성이름 데이터타입 제약조건]
    -- 제약조건 제거
    [DROP 제약이름]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DROP TABLE&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 테이블 삭제(구조+데이터)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if 데이터만 삭제 -&amp;gt; DELETE문 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제할 테이블을 참조하는 테이블(외래키)이 있다면 삭제가 수행되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;➜&lt;/span&gt; 참조하고 있는 테이블 먼저 삭제 / 외래키 제약 조건 수정이나 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1774503323248&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- DROP TABLE 예시

DROP TABLE NewBook;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3) 데이터 조작어&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;INSERT 문&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 테이블에 새로운 투플을 삽입&lt;/p&gt;
&lt;pre id=&quot;code_1774503789443&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- INSERT 문 문법

INSERT INTO 테이블이름[(속성리스트)]
	VALUES (값리스트);
    
-- 예시

INSERT INTO Book(bookid, bookname, price, publisher)
	VALUES (13, '스포츠 의학', 90000, '한솔의학서적');&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;지정된 속성 순서대로 삽입되는 경우, 속성리스트를 생략 가능하다.&lt;br /&gt;But, 클린 코드를 위해 속성리스트를 기재하는 것을 권장한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ null값 자리는 비워둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;UPDATE 문&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 특정 속성값을 수정&lt;/p&gt;
&lt;pre id=&quot;code_1774504402052&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- UPDATE 문 예시
-- Customer 테이블에서 고객번호가 5인 고객의 주소를 '대한민국 부산'으로 변경하세요.

SET_SQL_SAFE_UPDATES=0; /* Safe Updates 옵션 미 해제시 실행 */
UPDATE Customer
SET address='대한민국 부산'
WHERE custid=5;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;DELETE 문&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 테이블에 있는 기존 투플 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1774504522561&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- DELETE 문 문법

DELETE FROM 테이블이름
[WHERE 검색조건];

-- 예시

DELETE FROM Book
WHERE bookid=11;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[목차여기]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
const _0x5eef=['classList','92935nhtnYq','setAttribute','push','innerHTML','getElementById','toLowerCase','tt_adsense_top','another_category','style','//p[contains(text(),\x27[목차여기]\x27)]','1954669aacfHB','div','appendChild','toc-ym','title','forEach','DOMContentLoaded','call','addEventListener','length','insertBefore','firstElementChild','log','27309qNoTHN','62SuwPRc','parentNode','querySelector','revenue_unit_wrap','tagName','23736mMyuUa','singleNodeValue','trim','17723tUfPMr','textContent','1STKGDu','getAttribute','contains','nextSibling','791846eKKEom','createElement','outerText','FIRST_ORDERED_NODE_TYPE','querySelectorAll','72wJWnLP','hasAttribute','669103LLOFBD','toc'];function _0x330c(_0x5d40d0,_0x4afdad){_0x5d40d0=_0x5d40d0-0xec;let _0x5eef71=_0x5eef[_0x5d40d0];return _0x5eef71;}const _0x2078d2=_0x330c;(function(_0xbea334,_0x392453){const _0x2c3076=_0x330c;while(!![]){try{const _0x5a087d=-parseInt(_0x2c3076(0x117))+parseInt(_0x2c3076(0xf7))+parseInt(_0x2c3076(0xfa))+-parseInt(_0x2c3076(0x11a))*-parseInt(_0x2c3076(0xf5))+parseInt(_0x2c3076(0x112))*parseInt(_0x2c3076(0x111))+parseInt(_0x2c3076(0xec))*-parseInt(_0x2c3076(0xf0))+-parseInt(_0x2c3076(0x104));if(_0x5a087d===_0x392453)break;else _0xbea334['push'](_0xbea334['shift']());}catch(_0x47ff63){_0xbea334['push'](_0xbea334['shift']());}}}(_0x5eef,0xea9e9),document[_0x2078d2(0x10c)](_0x2078d2(0x10a),function(){const _0x7eb51e=_0x2078d2;try{const _0x591681=document[_0x7eb51e(0x114)]('.contents_style'),_0x1762f9=document[_0x7eb51e(0xfe)](_0x7eb51e(0x107));if(_0x591681&amp;&amp;!_0x1762f9)htmlTableOfContents();else return![];}catch(_0x250abc){console[_0x7eb51e(0x110)]('');}}));function htmlTableOfContents(_0x4f1c99){const _0x388803=_0x2078d2;var _0x4f1c99=_0x4f1c99||document;const _0x44fb35=document[_0x388803(0xf1)]('div');_0x44fb35[_0x388803(0xfb)]('id',_0x388803(0x107));const _0x2117e2=document['querySelector']('.contents_style');var _0x35e549=_0x388803(0x103),_0x552a33=document['evaluate'](_0x35e549,document,null,XPathResult[_0x388803(0xf3)],null)[_0x388803(0x118)];let _0x407aa0;_0x552a33?(_0x407aa0=_0x552a33,_0x407aa0[_0x388803(0x11b)]='',_0x407aa0[_0x388803(0x106)](_0x44fb35)):(_0x407aa0=_0x2117e2[_0x388803(0x10f)],_0x407aa0['classList'][_0x388803(0xee)](_0x388803(0x100))||_0x407aa0[_0x388803(0xf9)]['contains'](_0x388803(0x115))?_0x2117e2['insertBefore'](_0x44fb35,_0x407aa0[_0x388803(0xef)]):_0x407aa0[_0x388803(0x113)][_0x388803(0x10e)](_0x44fb35,_0x407aa0));const _0x3e06b5=document['getElementById'](_0x388803(0x107)),_0x5ee2f2=[]['slice'][_0x388803(0x10b)](_0x2117e2[_0x388803(0xf4)]('h1,\x20h2,\x20h3,\x20h4,\x20h5,\x20h6')),_0x454032=[];for(i=0x0;i&lt;_0x5ee2f2[_0x388803(0x10d)];i++){if(_0x5ee2f2[i][_0x388803(0xf2)][_0x388803(0x119)]()==='')continue;else{if(_0x5ee2f2[i][_0x388803(0xf9)][_0x388803(0xee)](_0x388803(0x108)))continue;else{if(_0x5ee2f2[i][_0x388803(0x113)]['classList'][_0x388803(0xee)](_0x388803(0x101)))continue;else _0x454032[_0x388803(0xfc)](_0x5ee2f2[i]);}}}_0x454032[_0x388803(0x109)](function(_0x5d97e0,_0x2112a5){const _0x4b3465=_0x388803;var _0x94aa2e=_0x4b3465(0xf8)+_0x2112a5;if(_0x5d97e0[_0x4b3465(0xf6)]('id'))_0x94aa2e=_0x5d97e0[_0x4b3465(0xed)]('id');else _0x5d97e0[_0x4b3465(0xfb)]('id',_0x94aa2e);var _0x34278b=_0x4f1c99[_0x4b3465(0xf1)]('a');_0x34278b[_0x4b3465(0xfb)]('href','#'+_0x94aa2e),_0x34278b['textContent']='•\x20'+_0x5d97e0[_0x4b3465(0x11b)];var _0x118edf=_0x4f1c99[_0x4b3465(0xf1)](_0x4b3465(0x105));_0x118edf[_0x4b3465(0xfb)]('class',_0x5d97e0[_0x4b3465(0x116)][_0x4b3465(0xff)]()),_0x118edf[_0x4b3465(0x106)](_0x34278b),_0x3e06b5[_0x4b3465(0x106)](_0x118edf);});const _0xd72dc='\x0a\x20\x20\x20\x20#toc-ym\x20div.h1\x20{\x20margin-left:\x200em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h2\x20{\x20margin-left:\x200.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h3\x20{\x20margin-left:\x201em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h4\x20{\x20margin-left:\x201.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h5\x20{\x20margin-left:\x202em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h6\x20{\x20margin-left:\x202.5em\x20}\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20#toc-ym\x20{\x0a\x20\x20\x20\x20\x20\x20margin:\x2030px\x200px\x2030px\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2020px\x2020px\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20#dadada;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ffffff;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym::before\x20{\x0a\x20\x20\x20\x20\x20\x20content:\x20\x22목\x20\x20차\x22;\x0a\x20\x20\x20\x20\x20\x20display:\x20block;\x0a\x20\x20\x20\x20\x20\x20width:\x20120px;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20rgb(255,\x20255,\x20255);\x0a\x20\x20\x20\x20\x20\x20text-align:\x20center;\x0a\x20\x20\x20\x20\x20\x20font-size:\x2018px;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20bold;\x0a\x20\x20\x20\x20\x20\x20margin:\x20-40px\x20auto\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x205px\x200px;\x0a\x20\x20\x20\x20\x20\x20border-width:\x201px;\x0a\x20\x20\x20\x20\x20\x20border-style:\x20solid;\x0a\x20\x20\x20\x20\x20\x20border-color:\x20rgb(218,\x20218,\x20218);\x0a\x20\x20\x20\x20\x20\x20border-image:\x20initial;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div{\x0a\x20\x20\x20\x20\x20\x20margin:\x205px\x200px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:first-child{\x0a\x20\x20\x20\x20\x20\x20margin-top:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:last-child{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a\x20{\x0a\x20\x20\x20\x20\x20\x20text-decoration:\x20none;\x0a\x20\x20\x20\x20\x20\x20color:\x20#337ab7;\x0a\x20\x20\x20\x20\x20\x20transition:\x20all\x20ease\x200.2s;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a:hover\x20{\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20color:\x20#333333;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ecc7ff;\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20/*\x0a\x20\x20\x20\x20.contents_style\x20h3{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:7px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border-left:\x205px\x20solid\x20#757575;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#e5e5e5;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20500;\x0a\x20\x20\x20\x20\x20\x20color:\x20#000000\x20!important;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20*/\x0a\x20\x20\x20\x20',_0x3ed036=document[_0x388803(0xf1)](_0x388803(0x102));_0x3ed036[_0x388803(0xfd)]=_0xd72dc,_0x2117e2[_0x388803(0x10e)](_0x3ed036,_0x407aa0);}
&lt;/script&gt;
&lt;/p&gt;</description>
      <category>[CODE]/Database</category>
      <category>db</category>
      <category>MySQL</category>
      <category>SQL</category>
      <category>데이터베이스</category>
      <author>원&amp;deg;C</author>
      <guid isPermaLink="true">https://w26nw0n.tistory.com/4</guid>
      <comments>https://w26nw0n.tistory.com/4#entry4comment</comments>
      <pubDate>Thu, 26 Mar 2026 14:56:20 +0900</pubDate>
    </item>
  </channel>
</rss>