<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>GeehDev</title>
    <link>https://geehyun.tistory.com/</link>
    <description>병아리 개발자의 우당탕탕 개발일지와 이것저것</description>
    <language>ko</language>
    <pubDate>Fri, 24 Jul 2026 03:20:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>geehyun</managingEditor>
    <image>
      <title>GeehDev</title>
      <url>https://tistory1.daumcdn.net/tistory/7176685/attach/2433427063984c1291f999f8d82d2f49</url>
      <link>https://geehyun.tistory.com</link>
    </image>
    <item>
      <title>[알고리즘] 알고리즘과 빅오 표기법</title>
      <link>https://geehyun.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EA%B3%BC-%EB%B9%85%EC%98%A4-%ED%91%9C%EA%B8%B0%EB%B2%95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[알고리즘]알고리즘과 빅오표기법.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CDMu8/btsQxGp4axG/zL4BtvKKK8S3lnk8H8Gpv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CDMu8/btsQxGp4axG/zL4BtvKKK8S3lnk8H8Gpv0/img.png&quot; data-alt=&quot;[알고리즘] 알고리즘과 빅오 표기법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CDMu8/btsQxGp4axG/zL4BtvKKK8S3lnk8H8Gpv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCDMu8%2FbtsQxGp4axG%2FzL4BtvKKK8S3lnk8H8Gpv0%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;1280&quot; height=&quot;720&quot; data-filename=&quot;[알고리즘]알고리즘과 빅오표기법.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[알고리즘] 알고리즘과 빅오 표기법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;알고리즘&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;알고리즘이란&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘이란&amp;nbsp;&lt;b&gt;어떤 문제를 해결하기 위해 정해진 순서대로 수행하는 절차나 방법&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;어떤 알고리즘이 있을까&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정렬 알고리즘 : 데이터를 오름차순/내림차순으로 정렬 알고리즘&lt;br /&gt;ex ) 버블 정렬, 퀵정 정렬, 선택 정렬, 삽입 정렬, 합병 정렬,&amp;nbsp; 힙 정렬, 기수 정렬 등&lt;/li&gt;
&lt;li&gt;탐색 (검색) 알고리즘 : 원하는 값을 찾는 알고리즘&lt;br /&gt;ex ) 선형 탐색, 이진 탐색, 깊이 우선 탐색(DFS), 너비 우선 탐색(BFS), 최소 신장 트리(MST)&lt;/li&gt;
&lt;li&gt;최단 경로 알고리즘 : 목적지를 가기 위한 가장 빠른 경로를 찾는 알고리즘&lt;br /&gt;ex ) 다익스트라, 플로이드&amp;nbsp;&lt;/li&gt;
&lt;li&gt;암호화 알고리즘 : 데이터를 안전하게 암호화 하는 알고리즘&lt;br /&gt;ex ) RSA, AES&lt;/li&gt;
&lt;/ul&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;b&gt;알고리즘의 특징&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 명확성 : 모호하지 않고 명학하여 누구나 똑같이 실행할 수 있어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 유한성 : 반드시 종료(끝)조건이 있어야 한다. (무한 루프는 알고리즘이 아님)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 입력과 출력 : 최소 0개 이상의 입력이 있고, 반드시 출력(결과)가 나와야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 효율성 : 같은 문제를 해결하더라도 더 빠르고 자원을 덜 쓰는게 효율적인 알고리즘 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;좋은 알고리즘이란?&lt;/b&gt;&lt;/h3&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;시간 복잡도&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간 복잡도란, 입력 크기 n이 커질 때 알고리즘이 실행되는데 걸리는 &lt;b&gt;연산횟수&lt;/b&gt;를 수학적으로 표현한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 실행시간은 실행 환경(CPU 성능, 메모리, 언어 등)에 따라 달라질 수 있기 때문에 공정한 비교를 위해 연산횟수를 시간복잡도의 기준으로 삼는다.&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 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;공간 복잡도&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공간 복잡도간, 알고리즘이 실행되는 동안 사용되는&lt;b&gt; 메모리의 양&lt;/b&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;/li&gt;
&lt;li&gt;가변 공간 : 입력 크기에 따라 변하는 메모르로 배열, 동적 할당, 재귀 스택 등&lt;/li&gt;
&lt;/ul&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 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;빅오 표기법 (Big- O Notation)&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lYFTL/btsQxInQQ0O/oVH582pLUTyHqbsNYHgKTK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lYFTL/btsQxInQQ0O/oVH582pLUTyHqbsNYHgKTK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lYFTL/btsQxInQQ0O/oVH582pLUTyHqbsNYHgKTK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlYFTL%2FbtsQxInQQ0O%2FoVH582pLUTyHqbsNYHgKTK%2Fimg.jpg&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;825&quot; height=&quot;556&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빅오 표기법은&amp;nbsp; &lt;b&gt;알고리즘의 시간 복잡도와 공간 복잡도를 입력 크기 n에 따라 증가하는 정도(상한선)&amp;nbsp;&lt;/b&gt;으로 표현하는 표기법으로, &lt;b&gt;최악의 경우&lt;/b&gt; 얼마나 오래, 얼마나 많은 메모리를 사용하는가를 표현다.&lt;/p&gt;
&lt;pre id=&quot;code_1757829467817&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//  표기 방식
O(...) 으로 표기

// n : 처리해야하는 데이터의 개수
// O(...) : 그 데이터가 늘어날 때 연산 횟수가 어떤 패턴으로 커지는지&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빅오메가(Big-&amp;Omega;) : 알고리즘의 최선의 경우(하한) 시간 복잡도와 공간 복잡도를 표현하는 표기법&amp;nbsp;&lt;/li&gt;
&lt;li&gt;빅세타(Big-&amp;Theta;)&amp;nbsp; : 상한(O)과 하한(&amp;Omega;)이 같은 경우 &amp;rarr; 딱 맞는 성장률&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt; 왜 알고리즘의 성능을 표기할 때 빅오 표기법을 가장 많이 사용할까?&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;알고리즘을 성능을 말할 때 빅오 표기법을 가장 많이 사용되는데, 이느 &lt;b&gt;입력 데이터가 어떤식으로 오든 최악의 경우를 고려해야 데이터의 편차와 상관없이 가장 안정적인 지표로 사용할 수 있기 때문&lt;/b&gt;이다.&lt;br /&gt;즉 빅오 표기법은 &quot;아무리 오래 걸려도 이 정도보다 나쁘진 않다&quot; 라는 해당 알고리즘의 상한선을 볼 수 있는 지표이기 떄문이다.&lt;br /&gt;=&amp;gt; 최선/평균은 입력 데이터에 따라 달라지지만, 최악은 항상 보장됨 &amp;rarr; 안정적 지표&lt;/blockquote&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;b&gt;자주 사용하는 빅오 표기법&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 157px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 10.2326%; height: 21px; text-align: center;&quot;&gt;표기법&lt;/td&gt;
&lt;td style=&quot;width: 29.3605%; height: 21px; text-align: center;&quot;&gt;의미&lt;/td&gt;
&lt;td style=&quot;width: 10.407%; text-align: center;&quot;&gt;입력 크기&lt;br /&gt;n = 10 일때&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 21px; text-align: center;&quot;&gt;대표적인 예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.2326%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;O(1)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3605%; height: 17px;&quot;&gt;- 상수시간&lt;br /&gt;- 입력 크기와 상관 없이 실행 시간이 항상 일정&lt;/td&gt;
&lt;td style=&quot;width: 10.407%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;배열 인덱스 접근, 해시 테이블 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.2326%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;O(log n)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3605%; height: 17px;&quot;&gt;- 로그 시간&lt;br /&gt;- 입력 크기를 절반씩 줄이며 탐색&lt;/td&gt;
&lt;td style=&quot;width: 10.407%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;이진 탐색, 균형 트리 탐색&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.2326%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;O(n)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3605%; height: 17px;&quot;&gt;- 선형 시간&lt;br /&gt;- 입력 크기(n)에 비례&lt;/td&gt;
&lt;td style=&quot;width: 10.407%; text-align: center;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;선형 탐색, 단순 반복문&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.2326%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;O(n log n)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3605%; height: 17px;&quot;&gt;- 로그 선형 시간&lt;br /&gt;- n번 반복 * log n 단계&lt;/td&gt;
&lt;td style=&quot;width: 10.407%; text-align: center;&quot;&gt;약 33&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;퀵 정렬(평균), 병합 정렬, 힙 정렬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.2326%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;O(n&amp;sup2;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3605%; height: 17px;&quot;&gt;- 이차 시간&lt;br /&gt;- 입력크기(n)의 제곱 으로 증가&lt;br /&gt;- 중첩 반복문, 데이터 많아지면(n이 클수록) 급격히 느려짐&lt;/td&gt;
&lt;td style=&quot;width: 10.407%; text-align: center;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;버블 정렬, 삽입 정렬, 선택 정렬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.2326%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;O(n&amp;sup3;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3605%; height: 17px;&quot;&gt;- 삼차 시간&lt;br /&gt;- 삼중 반복문, 보틍 그래프 알고리즘에서 등장&lt;/td&gt;
&lt;td style=&quot;width: 10.407%; text-align: center;&quot;&gt;1,000&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;플로이드-워셜(Floyd-Warshall)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.2326%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;O(2ⁿ)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3605%; height: 17px;&quot;&gt;- 지수시간&lt;br /&gt;- 입력(n)이 커질 수록 실행시간이 폭발적으로 증가&lt;/td&gt;
&lt;td style=&quot;width: 10.407%; text-align: center;&quot;&gt;1,024&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;재귀 피보나치, 부분집합 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.2326%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;O(n!)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.3605%; height: 17px;&quot;&gt;-팩토리얼 시간&lt;br /&gt;- 모든 경우의 수를 탐색 (최악)&lt;/td&gt;
&lt;td style=&quot;width: 10.407%; text-align: center;&quot;&gt;3,628,800&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;외판원 문제(Brute Force), 순열 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;O(1) ~ O(n log n)&lt;/b&gt; &amp;rarr; 효율적이라 실무에서 자주 사용&lt;/li&gt;
&lt;li data-end=&quot;1047&quot; data-start=&quot;1007&quot;&gt;&lt;b&gt;O(n&amp;sup2;) ~ O(n&amp;sup3;)&lt;/b&gt; &amp;rarr; 데이터가 작을 때만 사용 가능&lt;/li&gt;
&lt;li data-end=&quot;1092&quot; data-start=&quot;1048&quot;&gt;&lt;b&gt;O(2ⁿ), O(n!)&lt;/b&gt; &amp;rarr; 거의 못 씀 (단순한 완전 탐색 수준)&lt;/li&gt;
&lt;/ul&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;/h2&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;</description>
      <category>Study/알고리즘</category>
      <category>공간복잡도</category>
      <category>빅오</category>
      <category>빅오표기법</category>
      <category>시간복잡도</category>
      <category>알고리즘</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/31</guid>
      <comments>https://geehyun.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EA%B3%BC-%EB%B9%85%EC%98%A4-%ED%91%9C%EA%B8%B0%EB%B2%95#entry31comment</comments>
      <pubDate>Sun, 14 Sep 2025 15:55:59 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] 합격 수기 (2025년 제 1회 정기 실기/2024년 제 1회 정기 필기)</title>
      <link>https://geehyun.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%ED%95%A9%EA%B2%A9-%EC%88%98%EA%B8%B0-2025%EB%85%84-%EC%A0%9C-1%ED%9A%8C-%EC%A0%95%EA%B8%B0-%EC%8B%A4%EA%B8%B02024%EB%85%84-%EC%A0%9C-1%ED%9A%8C-%EC%A0%95%EA%B8%B0-%ED%95%84%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;게으름으로 이제야 올리는 2025년 1회 정보처리기사 합격 수기....ㅎㅎ&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[정보처리기사]합격수기.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xc9Iy/btsQwOiacnn/igsHtvH99schV8BSHCgfXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xc9Iy/btsQwOiacnn/igsHtvH99schV8BSHCgfXK/img.png&quot; data-alt=&quot;[정보처리기사] 합격 수기 (2025년 제 1회 정기 실기/2024년 제 1회 정기 필기)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xc9Iy/btsQwOiacnn/igsHtvH99schV8BSHCgfXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxc9Iy%2FbtsQwOiacnn%2FigsHtvH99schV8BSHCgfXK%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;1280&quot; height=&quot;720&quot; data-filename=&quot;[정보처리기사]합격수기.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[정보처리기사] 합격 수기 (2025년 제 1회 정기 실기/2024년 제 1회 정기 필기)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정보처리기사를 취득하려한 이유&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 SQLD 합격 수기 글에도 작성하였지만, 저는 &lt;u&gt;비전공자로써의 가장 부족한 점이 기반 지삭의 부족&lt;/u&gt;이라 생각하여 &lt;u&gt;이를 보완&lt;/u&gt;하고자 하였고, &lt;u&gt;이왕이면 그 노력이 증명할 수 있는 형태&lt;/u&gt;였으면 좋겠다고 생각되어 아래 3개의 자격증 취득을 목표로 하고 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;정보처리기사 (2024.03.13 필기합격 / 2025.06.13 실기합격)&lt;/li&gt;
&lt;li&gt;SQLD (2024.09.20 합격)&lt;/li&gt;
&lt;li&gt;리눅스 마스터 2급 (예정)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;이제 리눅스 마스터 2급만 남았군요...!&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt; SQLD 합격수기가 궁금하다면?&lt;br /&gt;&lt;br /&gt;&lt;a title=&quot;[SQLD] 제 54회 합격 수기 (비전공자, 공부기간 1개월, 가채점 92점)&quot; href=&quot;https://geehyun.tistory.com/entry/SQLD-%EC%A0%9C-54%ED%9A%8C-%ED%95%A9%EA%B2%A9-%EC%88%98%EA%B8%B0-%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EA%B3%B5%EB%B6%80%EA%B8%B0%EA%B0%84-1%EA%B0%9C%EC%9B%94-%EA%B0%80%EC%B1%84%EC%A0%90-92%EC%A0%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;[SQLD] 제 54회 합격 수기 (비전공자, 공부기간 1개월, 가채점 92점)&lt;/span&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[SQLD] 제 54회 합격 수기 (비전공자, 공부기간 1개월, 가채점 92점)&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;우선 저의 배경부터 정리하자면,1. 비전공자 - 개발과 전혀 상관없는 무역학사&amp;nbsp;2. 다만, 대략 2년 7개월 간의 웹기획자 경력 有3. Java 풀스택 과정으로 국비 과정 수료 후 현 개발직무로 인턴 근무 &quot; data-og-host=&quot;geehyun.tistory.com&quot; data-og-source-url=&quot;https://geehyun.tistory.com/entry/SQLD-%EC%A0%9C-54%ED%9A%8C-%ED%95%A9%EA%B2%A9-%EC%88%98%EA%B8%B0-%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EA%B3%B5%EB%B6%80%EA%B8%B0%EA%B0%84-1%EA%B0%9C%EC%9B%94-%EA%B0%80%EC%B1%84%EC%A0%90-92%EC%A0%90&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/6fFn4/hyZf1lvzDe/AAAAAAAAAAAAAAAAAAAAAHb4HWTKOKUK8IJApurphvoNwTzs1VMPMVo6t9kCMQlt/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1759244399&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=DP5wnV1Z3SP6%2Fft%2Btix9caHAfrA%3D&quot; data-og-url=&quot;https://geehyun.tistory.com/entry/SQLD-%EC%A0%9C-54%ED%9A%8C-%ED%95%A9%EA%B2%A9-%EC%88%98%EA%B8%B0-%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EA%B3%B5%EB%B6%80%EA%B8%B0%EA%B0%84-1%EA%B0%9C%EC%9B%94-%EA%B0%80%EC%B1%84%EC%A0%90-92%EC%A0%90&quot;&gt;&lt;a href=&quot;https://geehyun.tistory.com/entry/SQLD-%EC%A0%9C-54%ED%9A%8C-%ED%95%A9%EA%B2%A9-%EC%88%98%EA%B8%B0-%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EA%B3%B5%EB%B6%80%EA%B8%B0%EA%B0%84-1%EA%B0%9C%EC%9B%94-%EA%B0%80%EC%B1%84%EC%A0%90-92%EC%A0%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://geehyun.tistory.com/entry/SQLD-%EC%A0%9C-54%ED%9A%8C-%ED%95%A9%EA%B2%A9-%EC%88%98%EA%B8%B0-%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-%EA%B3%B5%EB%B6%80%EA%B8%B0%EA%B0%84-1%EA%B0%9C%EC%9B%94-%EA%B0%80%EC%B1%84%EC%A0%90-92%EC%A0%90&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/6fFn4/hyZf1lvzDe/AAAAAAAAAAAAAAAAAAAAAHb4HWTKOKUK8IJApurphvoNwTzs1VMPMVo6t9kCMQlt/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1759244399&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=DP5wnV1Z3SP6%2Fft%2Btix9caHAfrA%3D');&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;[SQLD] 제 54회 합격 수기 (비전공자, 공부기간 1개월, 가채점 92점)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;우선 저의 배경부터 정리하자면,1. 비전공자 - 개발과 전혀 상관없는 무역학사&amp;nbsp;2. 다만, 대략 2년 7개월 간의 웹기획자 경력 有3. Java 풀스택 과정으로 국비 과정 수료 후 현 개발직무로 인턴 근무&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;geehyun.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;필기 접수와 합격&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.&amp;nbsp; 필기 시험일정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필기의 경우 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2024.01.23(화) 접수하여, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2024.02.17(토) 시험을 보게되었습니다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2.&amp;nbsp; 필기 공부방법&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필기 시험준비는, 우선 이론 책을 이론을 전체적으로 암기하며 문제집에 수록된 문제를 푸는 방식으로 처음에는 진행하였으나,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이론의 양이 너무 많고 정보처리기사 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;필기의 경우 문제은행 방식&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;으로 진행되어 시험에 출제되는 문제만 미친듯이 푸는 방식으로 변경하였습니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;필기 기출문제를 제공해주는 CBT 사이트를 이용해서 준비하였고,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a title=&quot;기출문제 CBT&quot; href=&quot;https://www.comcbt.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;기출문제 CBT&lt;/span&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;최강 자격증 기출문제 전자문제집 CBT&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;전자문제집, CBT, 컴씨비티, 씨비티, 기사, 산업기사, 기능사, 컴활, 컴퓨터활용능력, 1급, 2급, 워드, 정보처리, 전기, 소방, 기계, 사무자동화, 정보기기, 제과, 제빵, 한국사, 공무원, 수능, 필기, &quot; data-og-host=&quot;www.comcbt.com&quot; data-og-source-url=&quot;https://www.comcbt.com/&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/QrY9F/hyZfrqXb9o/AAAAAAAAAAAAAAAAAAAAAP4Qr2_qOS6Zklcj7QAgyKKE9Tz6nsTQw6Wh6CSFvI34/img.gif?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1759244399&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=qxJHY9IuPJ4S%2BZuht5baJ8lqp%2Fo%3D&quot; data-og-url=&quot;https://www.comcbt.com&quot;&gt;&lt;a href=&quot;https://www.comcbt.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.comcbt.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/QrY9F/hyZfrqXb9o/AAAAAAAAAAAAAAAAAAAAAP4Qr2_qOS6Zklcj7QAgyKKE9Tz6nsTQw6Wh6CSFvI34/img.gif?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1759244399&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=qxJHY9IuPJ4S%2BZuht5baJ8lqp%2Fo%3D');&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;최강 자격증 기출문제 전자문제집 CBT&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;전자문제집, CBT, 컴씨비티, 씨비티, 기사, 산업기사, 기능사, 컴활, 컴퓨터활용능력, 1급, 2급, 워드, 정보처리, 전기, 소방, 기계, 사무자동화, 정보기기, 제과, 제빵, 한국사, 공무원, 수능, 필기,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.comcbt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 당시 이용했던 CBT 사이트 링크를 첨부합니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;공부기간은 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;한 달 정도는 이론서를 가볍게 읽고&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;시험일 3일전 동안은 위 기출문제 CBT를 미친듯히 풀고&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 틀린문제에 대해서만 해당 이론 부분을 추가 학습하였습니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 필기 합격 TIP&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 필기 시험을 보면서 느낀 합격 TIP은... 오로지 합격을 목적으로 한다면... &lt;u&gt;&lt;b&gt;기출문제를 외울정도로 풀면 반드시 합격한다!&lt;/b&gt;&lt;/u&gt; 입니다!&lt;br /&gt;저는 처음 시험 공부를 할 때 저의 목표가 최종적으로 자격증 취득이 목표라고는 하지만, 근본적인 목적은 저의 부족한 기반지식을 쌓기 위함이기 때문에 이론을 이해하려고 했습니다.... 그래서 기본서를 구매하여 이를 읽고 수록된 문제를 푸는 식으로 진행하였습니다만....&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;이론이 이해가 필요한 부분들도 있지만 대부분 암기가 필요한 형태&lt;/li&gt;
&lt;li&gt;필기 시험에는 과락이 존재하기 때문에 우선순위 없이 통으로 암기하기에는 비효율적&lt;/li&gt;
&lt;li&gt;방대한 이론 양에 비해 시험에 출제되는 부분은 비교적 한정되어 있음&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;위 이유로 인해 이론의 경우 다 한번에 암기하기 보다는 그냥 예고편 느낌으로 가볍게 읽고, 기출문제를 풀고 틀린 문제에 대한 이론에 대해서만 부분적으로 추가로 공부해보는 방식으로 전환하였습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;사람마다 암기과목에 강한 사람이 있고, 암기보다는 이해과목에 강한 사람이 있는데 저는 암기 과목은.......영....ㅎㅎ&lt;br /&gt;혹시 주변에 정보처리기사를 준비하는 사람이 있고, 그 사람이 필기 합격 TIP을 묻는다면, 전 &quot;&lt;u&gt;&lt;b&gt;기출문제 CBT를 미친듯이 돌려라&lt;/b&gt;&lt;/u&gt;&quot; 라고 말씀드릴 것 같습니다 ㅎㅎ&lt;/p&gt;
&lt;hr 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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 실기 시험일정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차 : &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2024-03-26 접수 / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2024.04.27(토) 시험&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2차 : &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2024-06-25 접수 / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2024.07.28(일) 시험&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3차 : &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2025-03-24 접수 / &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2025.04.20(일) 시험 - 합격 &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2024.03.13 필기 합격을 확인하고 바로 이어서 실기시험을 신청하였습니다.....만....ㅎㅎㅎ&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보시는대로 실기 3수생이 될 미래는 생각하지 못했었네요...!ㅎㅎ&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어쩌다 3수생까지 되었는지... 뭐가 부족했는지에 대해서 나름대로 생각을 정리해 보겠습니다!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 실기 시험과 필기가 뭐가 그렇게 다르길래 3수생이 되었는지...&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;솔직히 말해서, 필기를 합격한 후 저는 다소 정보처리기사 라는 시험자체를 다소 얕보고 있었던것 같습니다. ㅎㅎ&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 필기 TIP 부분을 보면 느끼셨다시피, 필기의 경우 기출문제만 열심히 풀고 가면 문제은행 방식 특성 상 봤던 문제들이 계속 나오다보니 어느정도 쉽게 합격하실 수 있으실겁니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만, 실기는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;객관식 문제가 아니라 주관식 &lt;u&gt;&lt;b&gt;단답형 위주의 문제 (정확한 답을 알아야 작성할 수 있음)&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;20문제 중 절반 정도 또는 그 이상이 &lt;u&gt;&lt;b&gt;코드 해석 문제&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;과락은 없지만&lt;/b&gt;&lt;/u&gt; 총 20문제 중 한 문제 당 배점이 5점이기 때문에, &lt;u&gt;&lt;b&gt;12문제 이상 맞춰야 합격 커트라인&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 특징으로 인해 필기 시험에 비해 난이도가 급상승한다고 느껴졌습니다.&lt;br /&gt;암기과목에 취약한 제가 느끼기에는&amp;nbsp; &lt;b&gt;&quot;주관식 단답형 위주의 문제&quot;&lt;/b&gt; 라는 점이 가장 큰 어려움으로 느껴졌습니다.&lt;br /&gt;객관식 문제의 경우 제가 이론을 다소 얕게 알고있어도 객관식에 보기를 보면서 답을 찾을 수 있지만 주관식 문제의 경우 제가 해당 문제의 답을 정확히 알고 있어야만 답을 작성할 수 있기에... 필기시험 정도의 난이도를 생각하고 간 저는 문제에 대한 답도 제대로 작성하지 못하고 참패를 하고 말았습니다 ㅠㅠ&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;u&gt;2차 도전에서는 1차 도전에서 겪은 쓰디쓴 경험을 바탕으로 이론을 빠삭하게 공부하자는 생각&lt;/u&gt;을 하고 도전했습니다!....만!&lt;br /&gt;그러기에는 이론의 양이 너무 많고 저는 너무나도 암기에 젬병이라 또다시 쓰디쓴 &lt;u&gt;불합격&lt;/u&gt;을 경험하게되었네요...&lt;br /&gt;&amp;nbsp;&lt;br /&gt;위 두 번의 매운맛을 보고 아예 저는 전략을 바꾸게되었습니다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. 그렇다면 합격을 위해 어떤 전략을 사용했는가?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번의 고배를 겪고 살짝 흐린눈을 하고 지내다가 2025년 새해 목표로 진짜 이번이 마지막이다... 이번에 합격 못하면... 내 인생에 정보처리기사라는 자격증은 없는 자격증이다.... 라는 마음으로 다시 한번 도전하게 되었습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;앞서 두 번의 도전에서 &lt;u&gt;&lt;b&gt;패인&lt;/b&gt;&lt;/u&gt;을 저는 &lt;u&gt;&lt;b&gt;&quot;암기는 쥐뿔도 못하면서 이론에 집착하느라 이론도 잃고, 코드 해석 문제도 다 잃었다&quot;&lt;/b&gt;&lt;/u&gt; 라고 판단했습니다.&lt;br /&gt;그래서 저는 &lt;u&gt;제가 못하는 것을 잘하게 하는것보다 &lt;/u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;그나마 잘하는것에 걸어보자&lt;/u&gt;&lt;/span&gt;.... 즉 &lt;u&gt;&lt;b&gt;이론을 포기하고, 코드 해석문제에 모든걸 걸어&lt;/b&gt;&lt;/u&gt;&lt;u&gt;&lt;b&gt;보기&lt;/b&gt;&lt;/u&gt;로 하였습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;여태까지의 기출문제를 보면 코드해석(C언어, Java, Python) 문제가 절반 또는 절방 이상으로 구성되어 코드 해석 문제만 다 맞힐 수 있다면 일단 50점 ~ 55점 이상은 가져갈 수 있는 구조였습니다. 따라서 코드 해석 문제를 다 맞힌다면... 이론문제를 한 문제 또는 두 문제 정도만 더 맞히면 아슬아슬한 합격권이라는 점에 저는 모든걸 걸었습니다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 코드해석 한 우물 파기, 그 공부 방법은?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 현재 1년차 병아리 자바 개발자로써, 어느정도 코드 해석은 가능하지만, 정처기 실기에서 나오는 코드 해석은 당연하게도 실무와는 다르기 때문에 시험을 위한 공부가 필요했습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;우선은 제가 앞선 2번의 실기 경험을 통해 어떤 점이 어려웠는지를 생각해봤습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;당연히 C언어! 그 중 구조체, 포인터&lt;/li&gt;
&lt;li&gt;진수변환&lt;/li&gt;
&lt;li&gt;파이썬만의 특이한 문법과 함수들&lt;/li&gt;
&lt;li&gt;연산자 우선순위 등... (너무 햇갈려요 또륵)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 내용 위주로 실기 문제집에서 해당 파트를 위주로 공부하였고, 공부한 내용을 바탕으로 저만의 요약집을 정리하였습니다.&lt;br /&gt;요약집을 정리할 때는 GPT의 도움을 많이 받았습니다.&lt;span style=&quot;color: #9d9d9d;&quot;&gt; (도움인지 싸움인지 ㅎ)&lt;/span&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;&amp;rarr; 문제를 틀린다 &amp;rarr; 해설집을 본다 &amp;rarr; 이해가 가지 않는다 &lt;br /&gt;&amp;rarr; 문제를 찍어서 GPT에게 해설을 요구한다 &amp;rarr; 답변을 받는다 &lt;br /&gt;&amp;rarr; GPT의 답은 완벽히 신뢰할 수 없으므로 질문해서 검증한다 &amp;rarr; 관련 개념을 추가로 물어본다 &amp;rarr; 정리한다 &amp;rarr; 반복&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;그렇게 해서 만들어진 요약집을 갖고 기출 문제집을 미친듯이 풀면서 햇갈리는 개념은 바로 다시 요약집에 추가하는 식으로 공부했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtQXvJ/btsQpgxwGJV/V6KujfyS13GCLBaRs3qEw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtQXvJ/btsQpgxwGJV/V6KujfyS13GCLBaRs3qEw1/img.png&quot; data-alt=&quot;요약집 일부! 부끄러우니 일부만 ㅎㅎㅎ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtQXvJ/btsQpgxwGJV/V6KujfyS13GCLBaRs3qEw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtQXvJ%2FbtsQpgxwGJV%2FV6KujfyS13GCLBaRs3qEw1%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;1790&quot; height=&quot;648&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;648&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5.&amp;nbsp; 그럼 이론은 영 버린것인가?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;거의 영 버린쪽에 가깝긴 합니다&lt;/u&gt;만... 아무리 프로그래밍/SQL 쪽에 모든걸 걸었다고 하더라도 이론 문제를 싹 다 틀려버리면 합격점수를 받을 수 없기 때문에 아쉽게도 영 버릴 수는 없었습니다 ㅠㅠ&lt;br /&gt;시험 전 날까지 실기만 파다가 &lt;u&gt;시험 당일 아침에 한 2시간 정도 필기 시험때 문제집에 수록되어있던 요약집을 정독&lt;/u&gt;하고 또 &lt;u&gt;GPT 선생님께 필기에 나올만한 주요 토픽을 정리 부탁&lt;/u&gt;하여 해당 내용에 대해서 달달달 외우고 시험에 들어갔습니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;다행스럽게도 제가 공부한 부분에서 이론문제가 몇 문제 나와줘서 운이 좋았던 편 같습니다.&lt;br /&gt;하지만 누가 시험 공부 이렇게 한다 그런다면 전.....매우 비추할 것 같습니다...&lt;br /&gt;일단, 운의 영향이 너무 큽니다. 공부하시다보면 아시겠지만, 정처기의 경우 이론의 양이 정말 어마무시합니다. 당연하게도 저 처럼 공부하고 가면 제가 공부한 파트에서 출제 0% 일 수도 있기 때문에 가능한 그래도 전체적으로 한번 보시고 중요한 부분만 조금 더 공부하시는 방법을 추천 드립니다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 난이도&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;필기&lt;/u&gt;의 경우 난이도 자체는 &lt;u&gt;굳이 따지자면 쉬운 편&lt;/u&gt;이라고 생각합니다.&lt;br /&gt;물론 모든 이론을 다 이해하고 정석적인 방법으로 시험을 본다면 조금 얘기가 다르지만 시험 합격을 목표로 공부하는 것이라면 넉넉하게 한 3일 잡고 &lt;u&gt;CBT만 열심히 뺑뺑이 돌리면 어느정도 합격권이 보장&lt;/u&gt;된다고 보기 때문입니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;u&gt;실기&lt;/u&gt;의 경우는... 조금 &lt;u&gt;들쑥날쑥&lt;/u&gt;하다고 생각합니다.&lt;br /&gt;각 회차마다 난이도도 조금 다르고 필기처럼 문제은행식이 아니기 때문에 비슷한 문제도 꼭 있지만 매 회 진짜 기출문제집에서는 볼 수 없었던 신박한 친구들도 등장하는것 같습니다.&lt;br /&gt;제가 합격한 2025년 1회의 경우 진수변환과 재귀함수 쪽 문제가 많이 출제되었고 이론보다는 프로그래밍 쪽 문제가 더 많은 경향을 보였습니다. 그래서 문제를 푸는 내내 &lt;i&gt;&lt;u&gt;&quot;와 이거 쉽지않네? 계산기 안갖고왔으면 큰일날뻔;;&quot;&lt;/u&gt;&lt;/i&gt;&amp;nbsp; 이 상태였습니다!&lt;br /&gt;따라서 &lt;u&gt;실기는 솔직히 말하면 어느 정도 운이 필요하다고 생각&lt;/u&gt;됩니다..... &lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;아니면 정말 공들여서 모든것을 마스터하고 가거나?&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;a title=&quot;2025년도 제 1회 정보처리기사 실기 가답안 URL&quot; href=&quot;https://gisafirst.com/board/n1/view.php?offset=0&amp;amp;tq=1393907668&amp;amp;reqCategory=&amp;amp;idx=465&amp;amp;word=&amp;amp;s_type=&amp;amp;s_content=&amp;amp;s_terms=&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;2025년도 제 1회 정보처리기사 실기 가답안 URL&lt;/span&gt;&lt;/a&gt;&lt;/blockquote&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;온라인IT자격증의 시작 기사퍼스트로 대비하세요.&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;정보공유 &amp;gt;&amp;gt; 가답안 * 가답안 복원과 무관한 글은 사전 통보 없이 삭제하겠습니다.* 25년 1회 정보처리기사 실기 시험은 4월 20일(일) 오전 9:00 시행됩니다.시험 당일 가답안이 진행될 예정입니다. (&quot; data-og-host=&quot;gisafirst.com&quot; data-og-source-url=&quot;https://gisafirst.com/board/n1/view.php?offset=0&amp;amp;tq=1393907668&amp;amp;reqCategory=&amp;amp;idx=465&amp;amp;word=&amp;amp;s_type=&amp;amp;s_content=&amp;amp;s_terms=&quot; data-og-url=&quot;https://gisafirst.com/board/n1/view.php?idx=465&amp;amp;offset=0&amp;amp;reqCategory=&amp;amp;s_content=&amp;amp;s_terms=&amp;amp;s_type=&amp;amp;tq=1393907668&amp;amp;word=&quot;&gt;&lt;a href=&quot;https://gisafirst.com/board/n1/view.php?idx=465&amp;amp;offset=0&amp;amp;reqCategory=&amp;amp;s_content=&amp;amp;s_terms=&amp;amp;s_type=&amp;amp;tq=1393907668&amp;amp;word=&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gisafirst.com/board/n1/view.php?offset=0&amp;amp;tq=1393907668&amp;amp;reqCategory=&amp;amp;idx=465&amp;amp;word=&amp;amp;s_type=&amp;amp;s_content=&amp;amp;s_terms=&quot;&gt;
&lt;div class=&quot;og-image&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;온라인IT자격증의 시작 기사퍼스트로 대비하세요.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;정보공유 &amp;gt;&amp;gt; 가답안 * 가답안 복원과 무관한 글은 사전 통보 없이 삭제하겠습니다.* 25년 1회 정보처리기사 실기 시험은 4월 20일(일) 오전 9:00 시행됩니다.시험 당일 가답안이 진행될 예정입니다. (&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gisafirst.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;br /&gt; 정처기 실기의 경우 시험이 종료된 후 여러 사람들의 기억력을 모아서 문제를 복원한 후 가답안(당연하게도 기억력에 의존하다보니 정확하지 않을 수 있습니다.)이 만들어집니다! 시험 후 참고하시면 좋을꺼 같아요!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;드디어 합격&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biYlcR/btsQpwtq1BR/mTobEZfiRxcxTjrbw43y60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biYlcR/btsQpwtq1BR/mTobEZfiRxcxTjrbw43y60/img.png&quot; data-alt=&quot;합격자 조회 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biYlcR/btsQpwtq1BR/mTobEZfiRxcxTjrbw43y60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiYlcR%2FbtsQpwtq1BR%2FmTobEZfiRxcxTjrbw43y60%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;1412&quot; height=&quot;273&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;합격자 조회 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hcmke/btsQnWfAqT6/PUr6YkLmOxYMtirP0OuVk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hcmke/btsQnWfAqT6/PUr6YkLmOxYMtirP0OuVk1/img.png&quot; data-alt=&quot;자격증 취득 내역!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hcmke/btsQnWfAqT6/PUr6YkLmOxYMtirP0OuVk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHcmke%2FbtsQnWfAqT6%2FPUr6YkLmOxYMtirP0OuVk1%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;1415&quot; height=&quot;205&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;205&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;br /&gt;지금 시간이 좀 지나서 점수를 확인할 수는 없지만 제 기억에 합격 커트라인이 60점 인데 61점으로 합격했던것으로 기억합니다.&lt;br /&gt;아마도 프로그래밍 영역에서 부분 점수를 받았던 것으로 추측 됩니다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;선택과 집중으로 어떻게든 2025년 올해 목표였던 정보처리기사를 취득할 수 있었네요!&lt;br /&gt;제 방식이 정답은 아니므로 혹시 정보처리기사를 준비하신다면 참고 정도만 해주시면 좋을 것 같습니다!&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마치며&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜 이번에 불합격 하면 정보처리기사 라는 저 글자 자체를 외면하려했는데, 다행히 이번 3번의 도전에서 합격하게되었네요.&lt;br /&gt;좀 많이 우당탕탕인 수기이긴 하지만, 정보처리기사를 준비하시는 다른 분들께 도움이 될 수 있으면 좋겠네요!&lt;br /&gt;&lt;u&gt;문제집은&lt;/u&gt; 어떤게 좋을까 고민하실 수도 있는데, 저는 &lt;u&gt;솔직히 다 거기서 거기인것 같습니다&lt;/u&gt;! 차이가 있으면 얼마나 있겠습니까 ㅎㅎ 그런 것 보다 &lt;u&gt;내가 뭐가 약한지 뭐가 강한지 어떤 전략을 써야할지를 좀 더 고민해보는게 좀 더 유의미한 고민&lt;/u&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;b&gt;&lt;u&gt;계산기&lt;/u&gt;&lt;/b&gt;... 꼭 가져가세요... &lt;u&gt;생각보다 중간에 계산실수가 생각보다 많이 나옵니다.&lt;/u&gt;.. 계산실수 중간에 한번 잘못하면 답이 영 이상한 곳으로 가버리는 경우가 많아서... 부디.... 계산기라는 문물을 꼭 이용하시길.....⭐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;너무너무 게을러서 합격 후 3개월 만에 쓰는 저의 수기를 읽어주셔서 감사합니다!&lt;br /&gt;또 너무 늦지 않게 다른 글로 찾아오겠습니다! ㅎㅎ&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;모두모두 화이팅입니다!&lt;/p&gt;</description>
      <category>Notes/DayLog</category>
      <category>tip</category>
      <category>비전공자</category>
      <category>실기</category>
      <category>정보처리기사</category>
      <category>정보처리기사 실기</category>
      <category>정보처리기사 필기</category>
      <category>정처기</category>
      <category>필기</category>
      <category>합격 수기</category>
      <category>합격 팁</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/30</guid>
      <comments>https://geehyun.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%ED%95%A9%EA%B2%A9-%EC%88%98%EA%B8%B0-2025%EB%85%84-%EC%A0%9C-1%ED%9A%8C-%EC%A0%95%EA%B8%B0-%EC%8B%A4%EA%B8%B02024%EB%85%84-%EC%A0%9C-1%ED%9A%8C-%EC%A0%95%EA%B8%B0-%ED%95%84%EA%B8%B0#entry30comment</comments>
      <pubDate>Mon, 8 Sep 2025 12:00:45 +0900</pubDate>
    </item>
    <item>
      <title>[Vue3] 반응형 데이터 : ref() 와 reactive()</title>
      <link>https://geehyun.tistory.com/entry/Vue3-%EB%B0%98%EC%9D%91%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-ref-%EC%99%80-reactive</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[Vue3] 반응형 데이터 ref 와 reactive.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUlDyy/btsMMKvp7Gc/rK7ZackN3WqCTWlsZuQK51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUlDyy/btsMMKvp7Gc/rK7ZackN3WqCTWlsZuQK51/img.png&quot; data-alt=&quot;[Vue3] 반응형 데이터 : ref() 와 reactive()&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUlDyy/btsMMKvp7Gc/rK7ZackN3WqCTWlsZuQK51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUlDyy%2FbtsMMKvp7Gc%2FrK7ZackN3WqCTWlsZuQK51%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;1280&quot; height=&quot;720&quot; data-filename=&quot;[Vue3] 반응형 데이터 ref 와 reactive.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[Vue3] 반응형 데이터 : ref() 와 reactive()&lt;/figcaption&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;h1&gt;반응형 데이터&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue에서 &lt;b&gt;반응형 데이터(Reactivity)&lt;/b&gt; 란, 데이터가 변경될 때 자동으로 UI가 업데이트되는 데이터를 의미한다.&lt;br /&gt;데이터가 변하거나 특정 조건이 되었을 때 직접 UI에 이를 적용해주던 기존 방식보다 훨씬 간편하게 UI를 조작 및 관리할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;기존방식&lt;/h4&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;p&amp;gt; 이름 : &amp;lt;strong id=&quot;userNm&quot;&amp;gt;&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt;
&amp;lt;input type=&quot;text&quot; name=&quot;userNm&quot; placeholder=&quot;이름을 입력하세요&quot; /&amp;gt; 

&amp;lt;script&amp;gt;
  document.querySelector('input[name=userNm]').eventListener('input', ()=&amp;gt;{
      document.getElementById('userNm').innerText = this.value;
  });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Vue의 반응형 데이터 방식&lt;/h4&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;p&amp;gt; 이름 : &amp;lt;strong id=&quot;userNm&quot;&amp;gt;{{ userNm }}&amp;lt;/strong&amp;gt; &amp;lt;/p&amp;gt;
    &amp;lt;input type=&quot;text&quot; name=&quot;userNm&quot; placeholder=&quot;이름을 입력하세요&quot; v-model=&quot;userNm&quot; /&amp;gt; 
&amp;lt;/template&amp;gt;

&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
  import { ref } from &quot;vue&quot;;
  const userNm = ref('');
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue3에서는 이러한 반응형 데이터를 사용하는 대표적인 방법으로 &lt;code&gt;ref()&lt;/code&gt;, &lt;code&gt;reactive()&lt;/code&gt; 가 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ref()&lt;/h2&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;p&amp;gt;{{ count }}&amp;lt;/p&amp;gt;
    &amp;lt;button @click=&quot;count.value++&quot;&amp;gt;+1&amp;lt;/button&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
  import { ref } from &quot;vue&quot;;
  const count = ref(0);
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;reference 라는 의미로 &lt;b&gt;반응형 데이터&lt;/b&gt;를 만들고, 해당 값을 참조할 수 있도록 해주는 함수&lt;/li&gt;
&lt;li&gt;기본형, 객체, 배열 등의 모든 자료형을 감쌀 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주로 기본형 타입을 담는데 유리&lt;/b&gt;하다.&lt;/li&gt;
&lt;li&gt;생성 후 값에 접근할 때는 &lt;b&gt;&lt;code&gt;변수.value&lt;/code&gt;로 접근&lt;/b&gt;해줘야한다.&lt;/li&gt;
&lt;li&gt;값 자체가 변경될 때, 객체 또는 배열에서 내부 값 또는 속성이 변경될 때 모두 감지할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;reactive()&lt;/h2&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;p v-for=&quot;(item, id) of obj&quot; :key=&quot;id&quot;&amp;gt;저의 {{id}} 은/는 {{item}} 입니다.&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
  import { reactive } from &quot;vue&quot;;
  const obj = reactive({&quot;이름&quot;: &quot;geehdev&quot;, &quot;직업&quot;: &quot;developer&quot;, &quot;취미&quot;: &quot;game&quot;});
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ref와 마찬가지로 반응형 데이터를 만드는 함수로, &lt;b&gt;배열, 객체 등 객체의 반응형 상태관리에 유리&lt;/b&gt;하다.&lt;/li&gt;
&lt;li&gt;생성 후 값에 접근할 때는&lt;b&gt; &lt;code&gt;.value&lt;/code&gt; 없이 직접 접근&lt;/b&gt;이 가능하다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;값 내부 속성이 변경될 때 업데이트를 감지&lt;/b&gt;하며,&lt;b&gt; 값 자체가 변경될 때는 반응성 성질을 잃는다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ref() vs reactive()&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 vue에서 반응형 데이터를 만들고, 반응형 상태관리를 할 수 있지만, 사용목적과 동작방식에 따라 차이점이 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 사용 타입&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;ref()&lt;/code&gt;, &lt;code&gt;reactive()&lt;/code&gt; 모두 모든 타입을 대입할 수는 있으나, 업데이트 감지 범위와 반응성 유지 여부가 달라 각 각 주로 사용되는 타입이 다르다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ref() : &lt;b&gt;기본타입&lt;/b&gt;을 대입에 사용된다. (값 자체의 변경을 감지하기 때문)&lt;/li&gt;
&lt;li&gt;reactive() : &lt;b&gt;배열, 객체 타입&lt;/b&gt;을 대입에 주로 사용된다. (값 내부 속성의 변화를 감지하기 때문)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;ref()&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;!-- ref --&amp;gt;
&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const ref1 = ref('ref 입니다.');
    const ref2 = ref(12345);
    const ref3 = ref({'key1' : 'value1', 'key2' : 'value2'});
    const ref4 = ref([1,2,3,4,5,6,7]);
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;strong&amp;gt;1. 기본형&amp;lt;/strong&amp;gt;
    &amp;lt;p&amp;gt;ref1 = {{ref1}}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;ref2 = {{ref2}}&amp;lt;/p&amp;gt;
    &amp;lt;strong&amp;gt;2. 객체&amp;lt;/strong&amp;gt;
    &amp;lt;p&amp;gt;{{ ref3 }}&amp;lt;/p&amp;gt;
    &amp;lt;p v-for=&quot;(value, key) in ref3&quot;&amp;gt;ref3[{{ key }}] = {{ value }}&amp;lt;/p&amp;gt;
    &amp;lt;strong&amp;gt;3. 배열&amp;lt;/strong&amp;gt;
    &amp;lt;p&amp;gt;{{ ref4 }}&amp;lt;/p&amp;gt;
    &amp;lt;p v-for=&quot;(item, idx) in ref4&quot;&amp;gt;ref4[{{ idx }}] = {{ item }}&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1310&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rTuGG/btsMLxKQrwu/RVJ7z6ow9mmgmC57mlZVj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rTuGG/btsMLxKQrwu/RVJ7z6ow9mmgmC57mlZVj0/img.png&quot; data-alt=&quot;ref()의 사용 타입 예시 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rTuGG/btsMLxKQrwu/RVJ7z6ow9mmgmC57mlZVj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrTuGG%2FbtsMLxKQrwu%2FRVJ7z6ow9mmgmC57mlZVj0%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;1310&quot; height=&quot;560&quot; data-origin-width=&quot;1310&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ref()의 사용 타입 예시 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;reactive()&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1742039467743&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- reactive --&amp;gt;
&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const reactive1 = reactive({&quot;name&quot; : &quot;지현&quot;, &quot;age&quot; : 0, &quot;arr&quot;: []});
    const reactive2 = reactive([1,2,3,4,5,6,7]);
    let reactive3 = reactive(0);        // 기본타입의 경우 대입은 가능하나, 값 변경될 시 감지 못함 =&amp;gt; 반응형 데이터 특성을 잃음(아래 참고)
    let reactive4 = reactive(&quot;test&quot;);   // 기본타입의 경우 대입은 가능하나, 값 변경될 시 감지 못함 =&amp;gt; 반응형 데이터 특성을 잃음(아래 참고)
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;p&amp;gt;{{ reactive1 }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;{{ reactive2 }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;{{ reactive3 }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;{{ reactive4 }}&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD72xM/btsMMdSndOC/97SrdMzgffxpRdvPTMQ1yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD72xM/btsMMdSndOC/97SrdMzgffxpRdvPTMQ1yk/img.png&quot; data-alt=&quot;Reactive()의 사용 타입 예시 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD72xM/btsMMdSndOC/97SrdMzgffxpRdvPTMQ1yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD72xM%2FbtsMMdSndOC%2F97SrdMzgffxpRdvPTMQ1yk%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;1317&quot; height=&quot;205&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Reactive()의 사용 타입 예시 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 업데이트 감지 범위와 반응성 유지 여부&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ref()&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;내부적으로 Object.defineProperty()를 사용하여 .value의 변경을 추적&lt;/li&gt;
&lt;li&gt;대입된 값 자체의 변경을 감지한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;reactive()&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Vue의 Proxy 기반으로 객체의 변화를 추적&lt;/li&gt;
&lt;li&gt;대입된 값 내부 속성의 변화를 감지한다.&lt;/li&gt;
&lt;li&gt;값 자체게 변경될 경우 반응성 성질을 잃고 변화를 감지하지 못하게된다. (기본형 타입에 사용하지 않는 이유)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;ref()&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;!-- ref --&amp;gt;
&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    let obj = ref({&quot;name&quot; : &quot;지현&quot;, &quot;age&quot; : 0});
    const changeAgeOnly = (add:number) =&amp;gt; {
      obj.value.age = obj.value.age + add;
    };
    const changeObj = (name:string, age:number) =&amp;gt; {
      obj.value = ref({&quot;newName&quot; : name, &quot;newAge&quot; : age});
    }
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;p&amp;gt; obj = {{ obj }}&amp;lt;/p&amp;gt;
    &amp;lt;strong&amp;gt;1. 값의 속성만 변경&amp;lt;/strong&amp;gt;
    &amp;lt;button @click=&quot;changeAgeOnly(10)&quot;&amp;gt;나이 10살 더하기&amp;lt;/button&amp;gt;	&amp;lt;!-- 업데이트 감지함 --&amp;gt;
    &amp;lt;strong&amp;gt;2. 값 자체를 변경&amp;lt;/strong&amp;gt;
    &amp;lt;button @click=&quot;changeObj('새로운 지현', 200)&quot;&amp;gt;객체를 바꾸기&amp;lt;/button&amp;gt; &amp;lt;!-- 업데이트 감지함 --&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1328&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xC8qk/btsMMecCYy2/YCYahKupkYZOdZcR0XqPS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xC8qk/btsMMecCYy2/YCYahKupkYZOdZcR0XqPS1/img.png&quot; data-alt=&quot;ref() 업데이트 감지 범위 예시 - 값 내부 속성만 변경 시에도 업데이트 감지함.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xC8qk/btsMMecCYy2/YCYahKupkYZOdZcR0XqPS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxC8qk%2FbtsMMecCYy2%2FYCYahKupkYZOdZcR0XqPS1%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;1328&quot; height=&quot;242&quot; data-origin-width=&quot;1328&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ref() 업데이트 감지 범위 예시 - 값 내부 속성만 변경 시에도 업데이트 감지함.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2DvPr/btsMKTt2Otz/aEkMKYdii5G7r5Ggv2IOzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2DvPr/btsMKTt2Otz/aEkMKYdii5G7r5Ggv2IOzk/img.png&quot; data-alt=&quot;ref() 업데이트 감지 범위 예시 - 값 자체를 변경 시에도 업데이트 감지함.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2DvPr/btsMKTt2Otz/aEkMKYdii5G7r5Ggv2IOzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2DvPr%2FbtsMKTt2Otz%2FaEkMKYdii5G7r5Ggv2IOzk%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;1327&quot; height=&quot;236&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ref() 업데이트 감지 범위 예시 - 값 자체를 변경 시에도 업데이트 감지함.&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;b&gt;reactive()&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1742039652335&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- reactive --&amp;gt;
&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const reactive1 = reactive({&quot;name&quot; : &quot;지현&quot;, &quot;age&quot; : 0, &quot;arr&quot;: []});
    const reactive2 = reactive([1,2,3,4,5,6,7]);
    let reactive3 = reactive(0);        // 기본타입의 경우 대입은 가능하나, 값 변경될 시 감지 못함 =&amp;gt; 반응형 데이터 특성을 잃음(아래 참고)
    let reactive4 = reactive(&quot;test&quot;);   // 기본타입의 경우 대입은 가능하나, 값 변경될 시 감지 못함 =&amp;gt; 반응형 데이터 특성을 잃음(아래 참고)

    const selectVar = ref('');
    const inputText = ref('');
    const changeReactive = (idx) =&amp;gt; {
      if(idx === 1) {
        reactive1[&quot;name&quot;] = '변경된 값';
        reactive1[&quot;age&quot;] = '20';
        reactive1[&quot;etc&quot;] = '기타';
        reactive1[&quot;arr&quot;].push(1)
      }
      if(idx === 2) {
        reactive2.push(100);
      }
      if(idx === 3) {
        reactive3 = 'reactive3 변경';
      }
      if(idx === 4) {
        reactive4 = 'reactive4 변경';
      }
    };
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;p&amp;gt;{{ reactive1 }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;{{ reactive2 }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;{{ reactive3 }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;{{ reactive4 }}&amp;lt;/p&amp;gt;
    &amp;lt;button @click=&quot;changeReactive(1)&quot;&amp;gt;reactive1 값 변경&amp;lt;/button&amp;gt;
    &amp;lt;button @click=&quot;changeReactive(2)&quot;&amp;gt;reactive2 값 변경&amp;lt;/button&amp;gt;
    &amp;lt;button @click=&quot;changeReactive(3)&quot;&amp;gt;reactive3 값 변경&amp;lt;/button&amp;gt;    &amp;lt;!-- 값이 변경되긴하나, 업데이트를 감지하지 못해 UI변화 없음 --&amp;gt;
    &amp;lt;button @click=&quot;changeReactive(4)&quot;&amp;gt;reactive4 값 변경&amp;lt;/button&amp;gt;  &amp;lt;!-- 값이 변경되긴하나, 업데이트를 감지하지 못해 UI변화 없음 --&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpZrtC/btsMNeC0KK4/UQUy1rfzPkKzOcfAGBsr81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpZrtC/btsMNeC0KK4/UQUy1rfzPkKzOcfAGBsr81/img.png&quot; data-alt=&quot;reactive() 업데이트 감지 범위 예시 - 값 내부 속성 변경 시에 업데이트 감지함.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpZrtC/btsMNeC0KK4/UQUy1rfzPkKzOcfAGBsr81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpZrtC%2FbtsMNeC0KK4%2FUQUy1rfzPkKzOcfAGBsr81%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;1323&quot; height=&quot;232&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reactive() 업데이트 감지 범위 예시 - 값 내부 속성 변경 시에 업데이트 감지함.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3qPU8/btsMMDb9jom/whz7pcWN58LjtoRIRjGGkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3qPU8/btsMMDb9jom/whz7pcWN58LjtoRIRjGGkk/img.png&quot; data-alt=&quot;reactive() 업데이트 감지 범위 예시 - 값 자체가 변경될 시엔은 업데이트 감지 못함.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3qPU8/btsMMDb9jom/whz7pcWN58LjtoRIRjGGkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3qPU8%2FbtsMMDb9jom%2Fwhz7pcWN58LjtoRIRjGGkk%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;1317&quot; height=&quot;233&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;233&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reactive() 업데이트 감지 범위 예시 - 값 자체가 변경될 시엔은 업데이트 감지 못함.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 데이터 접근 방식&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ref()
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;기본적으로 값에 접근할 때는 &lt;code&gt;.value&lt;/code&gt;로 접근한다.&lt;/li&gt;
&lt;li&gt;단, template 내부에서는 Auto Unwrapping 으로 변수명으로 직접 접근한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;reactive()
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;.value&lt;/code&gt; 없이 직접 접근한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;ref()&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    // ref : 3-1. template 내에서 값 접근 : Auto Unwrapping
    const count1 = ref(0);

    // ref : 3-2. template 외부 에서의 값 접근 : .value로 접근
    let count2 = ref(0);
    const add1UseValue = () =&amp;gt; { count2.value++;};
    const add1NotUseValue = () =&amp;gt; { count2++; };
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;!-- ref : 3-1. template 내에서 값 접근 : Auto Unwrapping --&amp;gt;
    &amp;lt;p&amp;gt;count = {{ count1 }}&amp;lt;/p&amp;gt;
    &amp;lt;strong&amp;gt;1. 직접 접근&amp;lt;/strong&amp;gt;
    &amp;lt;button @click=&quot;count1++&quot;&amp;gt;count1++&amp;lt;/button&amp;gt;
    &amp;lt;strong&amp;gt;2. .value로 접근 =&amp;gt; error 발생&amp;lt;/strong&amp;gt;
    &amp;lt;button @click=&quot;count1.value++&quot;&amp;gt;count1.value++&amp;lt;/button&amp;gt;

    &amp;lt;!-- ref : 3-2. template 외부 에서의 값 접근 : .value로 접근 --&amp;gt;
    &amp;lt;p&amp;gt;count = {{ count2 }}&amp;lt;/p&amp;gt;
    &amp;lt;strong&amp;gt;1. 직접 접근 =&amp;gt; 반응형 특성 잃음&amp;lt;/strong&amp;gt;
    &amp;lt;button @click=&quot;add1NotUseValue()&quot;&amp;gt;add1NotUseValue&amp;lt;/button&amp;gt;
    &amp;lt;strong&amp;gt;2. .value로 접근&amp;lt;/strong&amp;gt;
    &amp;lt;button @click=&quot;add1UseValue()&quot;&amp;gt;add1UseValue&amp;lt;/button&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uSi1Y/btsMMANhdcI/ZkomyPRCx9Khkq3DTT87Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uSi1Y/btsMMANhdcI/ZkomyPRCx9Khkq3DTT87Ok/img.png&quot; data-alt=&quot;ref() 데이터 접근 방식 예시 - template 내부 : 직접 접근 시 정상 작동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uSi1Y/btsMMANhdcI/ZkomyPRCx9Khkq3DTT87Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuSi1Y%2FbtsMMANhdcI%2FZkomyPRCx9Khkq3DTT87Ok%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;1317&quot; height=&quot;226&quot; data-origin-width=&quot;1317&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ref() 데이터 접근 방식 예시 - template 내부 : 직접 접근 시 정상 작동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1751&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l7qF8/btsMMzHDTDu/KKigOo0L81C0iBKwepbgxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l7qF8/btsMMzHDTDu/KKigOo0L81C0iBKwepbgxk/img.png&quot; data-alt=&quot;ref() 데이터 접근 방식 예시 - template 내부 : .value 사용 시 에러 발생&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l7qF8/btsMMzHDTDu/KKigOo0L81C0iBKwepbgxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl7qF8%2FbtsMMzHDTDu%2FKKigOo0L81C0iBKwepbgxk%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;1751&quot; height=&quot;122&quot; data-origin-width=&quot;1751&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ref() 데이터 접근 방식 예시 - template 내부 : .value 사용 시 에러 발생&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;b&gt;reactive()&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1742040053734&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
	 // reactive : 3. 어디서든 변수로 바로 접근
    const arr = reactive([1,2,3,4,5]);
    const addArr = ()=&amp;gt; {
        arr.push(arr.length + 1);
    }
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
	&amp;lt;!-- reactive : 3. 어디서든 변수로 바로 접근  --&amp;gt;
    &amp;lt;p v-for=&quot;item of arr&quot;&amp;gt;{{ item }}&amp;lt;/p&amp;gt;
    &amp;lt;button @click=&quot;addArr&quot;&amp;gt;arr push&amp;lt;/button&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1321&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi8wlb/btsMNiyy35H/LGIiT2kCgosOAwzLLiokd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi8wlb/btsMNiyy35H/LGIiT2kCgosOAwzLLiokd1/img.png&quot; data-alt=&quot;reactive() 데이터 접근 방식 예시 - 어디서든 변수명으로 바로 접근 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi8wlb/btsMNiyy35H/LGIiT2kCgosOAwzLLiokd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi8wlb%2FbtsMNiyy35H%2FLGIiT2kCgosOAwzLLiokd1%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;1321&quot; height=&quot;344&quot; data-origin-width=&quot;1321&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reactive() 데이터 접근 방식 예시 - 어디서든 변수명으로 바로 접근 가능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 구조분해할당 처리 방식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 &lt;code&gt;ref()&lt;/code&gt;, &lt;code&gt;reactive()&lt;/code&gt; 로 할당된 반응형 데이터를 구조분해할당할 경우 구조분해할당된 변수에서는 기존 반응형 성질을 잃게된다.&lt;br /&gt;그러나 &lt;code&gt;toRefs()&lt;/code&gt; 를 사용하여 구조분해할당한 변수도 &lt;code&gt;ref&lt;/code&gt; 변수로 만들어 사용할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;ref()&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    // ref : 4. 구조분해할당 사용
    let cnt = 0;
    const refObj = ref({&quot;name&quot; : &quot;지현&quot;, &quot;age&quot; : 0});
    let {name: objName, age: objAge} = refObj.value;                // 일반 변수로, 반응형 성질 없음
    let {name: objName2, age: objAge2} = toRefs(refObj.value);        // toRef()를 사용하여 ref 변수로 생성
    const changeObjName = () =&amp;gt; {
      refObj.value[&quot;name&quot;] = refObj.value[&quot;name&quot;] + cnt;
      refObj.value[&quot;age&quot;] = refObj.value[&quot;age&quot;] + cnt;
      cnt ++;
    };
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;!-- ref : 4. 구조분해할당 사용 --&amp;gt;
    &amp;lt;p&amp;gt;refObj : {{ refObj }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;objName : {{ objName }}&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;objAge : {{ objAge }}&amp;lt;/p&amp;gt;            &amp;lt;!-- 일반 데이터로 refObj 변경될 시 같이 변경 안 됨 --&amp;gt;
    &amp;lt;p&amp;gt;objName2 : {{ objName2 }}&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;objAge2 : {{ objAge2 }}&amp;lt;/p&amp;gt;        &amp;lt;!-- 반응형 데이터로 refObj 변경될 시 같이 변경 됨 --&amp;gt;
    &amp;lt;button @click=&quot;changeObjName&quot;&amp;gt;refObj 값 변경&amp;lt;/button&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1310&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ0Ydv/btsMMKvp4A0/oUXzZdqpPtkQVVE2FZBke0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ0Ydv/btsMMKvp4A0/oUXzZdqpPtkQVVE2FZBke0/img.png&quot; data-alt=&quot;ref() 에서 구조분해할당 사용예시 - 기본적으로는 반응형 유지 X / toRefs() 사용 시 반응형 유지 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ0Ydv/btsMMKvp4A0/oUXzZdqpPtkQVVE2FZBke0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ0Ydv%2FbtsMMKvp4A0%2FoUXzZdqpPtkQVVE2FZBke0%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;1310&quot; height=&quot;255&quot; data-origin-width=&quot;1310&quot; data-origin-height=&quot;255&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ref() 에서 구조분해할당 사용예시 - 기본적으로는 반응형 유지 X / toRefs() 사용 시 반응형 유지 가능&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;b&gt;reactive()&lt;/b&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1742040386980&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    // reactive : 4. 구조분해할당 사용
    let cnt2 = 0;
    const reactiveObj = reactive({&quot;name&quot; : &quot;지현&quot;, &quot;age&quot; : 0});
    const {name : reactiveObjName, age: reactiveObjAge} = reactiveObj;                // 일반 변수로, 반응형 성질 없음
    const {name : reactiveObjName2, age:  reactiveObjAge2} = toRefs(reactiveObj);    // toRef()를 사용하여 ref 변수로 생성
    const changeReactiveObjName = () =&amp;gt; {
      reactiveObj[&quot;name&quot;] = reactiveObj[&quot;name&quot;] + cnt2;
      reactiveObj[&quot;age&quot;] = reactiveObj[&quot;age&quot;] + cnt2;
      cnt2++;
    };
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;!-- reactive : 4. 구조분해할당 사용 --&amp;gt;
    &amp;lt;p&amp;gt;reactiveObj : {{ reactiveObj }}&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;reactiveObjName {{ reactiveObjName }}&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;reactiveObjAge {{ reactiveObjAge }}&amp;lt;/p&amp;gt;            &amp;lt;!-- 일반 데이터로 refObj 변경될 시 같이 변경 안 됨 --&amp;gt;
    &amp;lt;p&amp;gt;reactiveObjName2 {{ reactiveObjName2 }}&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;reactiveObjAge2 {{ reactiveObjAge2 }}&amp;lt;/p&amp;gt;        &amp;lt;!-- 반응형 데이터로 refObj 변경될 시 같이 변경 됨 --&amp;gt;
    &amp;lt;button @click=&quot;changeReactiveObjName&quot;&amp;gt;reactiveObj 속성 값 변경&amp;lt;/button&amp;gt;    
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deDpvD/btsMNgOhtgG/SVUwZ2C3k5g3Js51kHwnZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deDpvD/btsMNgOhtgG/SVUwZ2C3k5g3Js51kHwnZ1/img.png&quot; data-alt=&quot;reactive() 에서 구조분해할당 사용예시 - 기본적으로는 반응형 유지 X / toRefs() 사용 시 반응형 유지 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deDpvD/btsMNgOhtgG/SVUwZ2C3k5g3Js51kHwnZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeDpvD%2FbtsMNgOhtgG%2FSVUwZ2C3k5g3Js51kHwnZ1%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;1322&quot; height=&quot;259&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reactive() 에서 구조분해할당 사용예시 - 기본적으로는 반응형 유지 X / toRefs() 사용 시 반응형 유지 가능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;요약&lt;/h2&gt;
&lt;table style=&quot;height: 277px; width: 852px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 195px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt; 항목 &lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 248px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff; text-align: center;&quot;&gt; ref() &lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: center; width: 409px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff; text-align: center;&quot;&gt; reactive() &lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; width: 195px;&quot;&gt;&lt;b&gt;주 사용 타입&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 248px;&quot;&gt;원시 타입 (&lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;)&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 409px;&quot;&gt;객체, 배열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 195px;&quot;&gt;&lt;b&gt;반응성 감지 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 248px;&quot;&gt;&lt;code&gt;.value&lt;/code&gt;의 변경을 감지 &lt;br /&gt;(&lt;code&gt;Object.defineProperty&lt;/code&gt; 사용)&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 409px;&quot;&gt;Proxy 기반으로 내부 속성 변경을 감지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 195px;&quot;&gt;&lt;b&gt;값 변경 감지 여부&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 248px;&quot;&gt;값 자체의 변경을 감지&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 409px;&quot;&gt;내부 속성 변경을 감지하지만, 객체 자체를 변경하면 반응성을 잃음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; width: 195px;&quot;&gt;&lt;b&gt;&lt;u&gt;템플릿 내부&lt;/u&gt;에서 접근 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 248px;&quot;&gt;&lt;code&gt;- 변수명으로 &lt;b&gt;직접 접근&lt;br /&gt;&lt;/b&gt;- &lt;b&gt;.value로 접근 시 에러 발생&lt;/b&gt;&lt;br /&gt;{{ 변수명 }}&lt;/code&gt; (Auto Unwrapping 지원)&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 409px;&quot;&gt;&lt;code&gt;변수명으로 &lt;b&gt;직접 접근&lt;/b&gt;&lt;br /&gt;ex : {{ 객체명 }}, {{ 객체명.속성 }}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 195px;&quot;&gt;&lt;b&gt;&lt;u&gt;템플릿 외부&lt;/u&gt;에서 접근 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 248px;&quot;&gt;&lt;code&gt;&lt;b&gt;.value&lt;/b&gt;&lt;/code&gt;&lt;b&gt;로 접근&lt;/b&gt;해야 함 (&lt;code&gt;refVar.value&lt;/code&gt;)&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 409px;&quot;&gt;&lt;code&gt;.value&lt;/code&gt; 없이 &lt;b&gt;직접 접근&lt;/b&gt; 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; width: 195px;&quot;&gt;&lt;b&gt;배열, 객체 사용 여부&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 248px;&quot;&gt;가능하지만 &lt;code&gt;.value&lt;/code&gt; 필요&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 409px;&quot;&gt;&lt;code&gt;.value&lt;/code&gt; 없이 바로 사용 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 80px;&quot;&gt;
&lt;td style=&quot;height: 80px; width: 195px;&quot;&gt;&lt;b&gt;구조 분해 시 반응성 유지 여부&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 80px; width: 657px;&quot; colspan=&quot;2&quot;&gt;&lt;code&gt;const { x } = refObj.value;&lt;/code&gt; &amp;rarr; ❌ 반응성 깨짐&lt;br /&gt;&lt;code&gt;const { x } = toRefs(refObj.value);&lt;/code&gt; &amp;rarr; ✅ 반응성 유지됨&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;h2 data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue에서 가장 강력한 기능인 반응형 데이터를 사용하는 기초적인 방식에 대해서 공부하고 정리해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면서 ref와 reactive를 사용할 때 각각 정확히 어떤 상황에서 사용하는 것이 유리한 가에 초점을 두고 알아봤는데, ref의 경우 비교적 간단하게 기본형 타입에 대해 값을 바인딩 해줄때 사용하고, reacive는 객체, 배열을 담아서 사용할 때 유리하다고 생각된다.&lt;/p&gt;</description>
      <category>Study/Vue.js</category>
      <category>reactive</category>
      <category>REF</category>
      <category>toRefs</category>
      <category>VUE</category>
      <category>vue3</category>
      <category>반응형데이터</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/29</guid>
      <comments>https://geehyun.tistory.com/entry/Vue3-%EB%B0%98%EC%9D%91%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0-ref-%EC%99%80-reactive#entry29comment</comments>
      <pubDate>Sat, 15 Mar 2025 21:17:52 +0900</pubDate>
    </item>
    <item>
      <title>[Vue3] Vue 템플릿 문법 (Mustache, Directive)</title>
      <link>https://geehyun.tistory.com/entry/Vue3-Vue-%ED%85%9C%ED%94%8C%EB%A6%BF-%EB%AC%B8%EB%B2%95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[vue3] Vue 템플릿 문법 (Mustache, Directive).png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lzbGL/btsMyVrA2kD/dRSLp0b6S0kp0VkKwve960/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lzbGL/btsMyVrA2kD/dRSLp0b6S0kp0VkKwve960/img.png&quot; data-alt=&quot;[Vue3] Vue 템플릿 문법 (Mustache, Directive)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lzbGL/btsMyVrA2kD/dRSLp0b6S0kp0VkKwve960/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlzbGL%2FbtsMyVrA2kD%2FdRSLp0b6S0kp0VkKwve960%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;1280&quot; height=&quot;720&quot; data-filename=&quot;[vue3] Vue 템플릿 문법 (Mustache, Directive).png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[Vue3] Vue 템플릿 문법 (Mustache, Directive)&lt;/figcaption&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;h1&gt;Vue 탬플릿 문법&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;탬플릿(Template)란 기본적으로 &lt;b&gt;UI를 구성하는 틀&lt;/b&gt;로, 웹 개발에서는 &lt;b&gt;HTML을 기반으로 화면을 구성하는 요소&lt;/b&gt;를 탬플릿이라 볼 수 있다.&lt;br /&gt;Vue에서는 단순 정적 탬플릿이 아니라 데이터의 변화에 따라 동적으로 반응하여, &lt;b&gt;반응형 데이터를 바인딩&lt;/b&gt;할 수 있도록 설계되어 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Mustache 문법&lt;/h2&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;p&amp;gt;{{ message }}&amp;lt;/p&amp;gt;&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;code&gt;{{}}&lt;/code&gt; 형식으로 작성하는 문법으로, 데이터를 바인딩할 때 쓰인다.&lt;br /&gt;&lt;code&gt;{{ 변수 }}&lt;/code&gt; 형식으로 작성하여 변수에 들어있는 데이터를 화면에 표시해주는 역할을 한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 나 Mustache 라는걸 들어봤어요! 어디서 들었더라?&lt;/b&gt;&lt;br /&gt;Mustache.js라는 탬플릿엔진에서 쓰이던 문법으로 원래는 HTML을 그리는 시점에 들어온 데이터를 바인딩하는 정적 데이터 바인딩 문법이었으나, Vue에서 이를 차용하여 반응형 데이터를 바인딩할 수 있도록 지원하는 Vue Mustache 문법을 제공한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;단방향 데이터 바인딩&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;{{}}&lt;/code&gt; 안에 들어있는 변수의 데이터가 변경되면 자동으로 UI가 업데이트된다.&lt;/li&gt;
&lt;li&gt;다만, 사용자가 값을 변경할 수는 없는 &lt;b&gt;단방향&lt;/b&gt; 데이터 바인딩 방식.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자바스크립트 표현식 사용가능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다만 if/else, for와 같은 문법은 구현 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;p&amp;gt;{{ text.toUpperCase() }}&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;{{ count * 2 }}&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용법&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성 코드&lt;/h4&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
import {ref} from &quot;vue&quot;;

const name = ref('지현');
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
  &amp;lt;h1&amp;gt;Vue 탬플릿 문법&amp;lt;/h1&amp;gt;

  &amp;lt;h2&amp;gt;1. Mustache &amp;lt;/h2&amp;gt;
  &amp;lt;div&amp;gt;안녕하세요? {{ name }} 님! Vue 세상에 오신걸 환영합니다.&amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력 화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n1gFO/btsMAs2Xo3x/ULhTSSjTkEsm4xyOPmKzYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n1gFO/btsMAs2Xo3x/ULhTSSjTkEsm4xyOPmKzYK/img.png&quot; data-alt=&quot;mustache 문법 사용예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n1gFO/btsMAs2Xo3x/ULhTSSjTkEsm4xyOPmKzYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn1gFO%2FbtsMAs2Xo3x%2FULhTSSjTkEsm4xyOPmKzYK%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;1337&quot; height=&quot;462&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;462&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;mustache 문법 사용예시&lt;/figcaption&gt;
&lt;/figure&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;2. 디렉티브(Directive)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue에서 HTML 요소를 조작하거나 HTML 요소의 속성을 조작할 수 있다.&lt;br /&gt;&lt;code&gt;v-&lt;/code&gt; 접두어로 시작하면 HTML 태그의 속성처럼 작성하여 사용한다. (&lt;code&gt;thymeleaf&lt;/code&gt; 에서 &lt;code&gt;th-&lt;/code&gt; 문법과 유사)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) v-bind&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML 속성 값을 동적으로 바인딩할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v-bind:속성이름=&quot;값&quot;&lt;/code&gt; 또는 &lt;code&gt;:속성이름=&quot;값&quot;&lt;/code&gt; 의 형식으로 작성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성 코드&lt;/h4&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    import { ref } from 'vue'
    const geeDevBlog = ref('https://geehyun.tistory.com/');
&amp;lt;/script&amp;gt;
&amp;lt;template&amp;gt;
    &amp;lt;strong&amp;gt;1. 기본형&amp;lt;/strong&amp;gt;
    &amp;lt;a v-bind:href=&quot;geeDevBlog&quot;&amp;gt;GeeDev 블로그에 놀러오세요 1&amp;lt;/a&amp;gt;

    &amp;lt;strong&amp;gt;2. 단축형&amp;lt;/strong&amp;gt;
    &amp;lt;a :href=&quot;geeDevBlog&quot;&amp;gt;GeeDev 블로그에 놀러오세요 2&amp;lt;/a&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력 화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;555&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mXWqs/btsMzOZJ1q6/d6A5eJKe5keAIbmpn8zgCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mXWqs/btsMzOZJ1q6/d6A5eJKe5keAIbmpn8zgCK/img.png&quot; data-alt=&quot;v-bind 문법 사용예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mXWqs/btsMzOZJ1q6/d6A5eJKe5keAIbmpn8zgCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmXWqs%2FbtsMzOZJ1q6%2Fd6A5eJKe5keAIbmpn8zgCK%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;1337&quot; height=&quot;555&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;555&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-bind 문법 사용예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) v-if&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력된 조건이 &lt;code&gt;true&lt;/code&gt;일 경우만 해당 태그를 렌더링 한다.&lt;/li&gt;
&lt;li&gt;즉, 조건이 &lt;code&gt;false&lt;/code&gt;일 경우 렌더링 된 HTML 문서상 아예 존재하지 않는다. (DOM 에서 아예 존재 X)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v-if=&quot;조건&quot;&lt;/code&gt; 의 형식으로 사용되며, 조건에서 간단한 연산자나 함수를 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성 코드&lt;/h4&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    import { ref } from 'vue'
    const cost1 = ref(5000);
    const cost2 = ref(20000);
&amp;lt;/script&amp;gt;
&amp;lt;template&amp;gt;
    &amp;lt;p&amp;gt;{{cost1}} &amp;lt;span v-if=&quot;cost1 &amp;gt; 10000&quot;&amp;gt;만원 초과!!!&amp;lt;/span&amp;gt;&amp;lt;span v-else&amp;gt;만원 미초과!!!&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;{{cost2}} &amp;lt;span v-if=&quot;cost2 &amp;gt; 10000&quot;&amp;gt;만원 초과!!!&amp;lt;/span&amp;gt;&amp;lt;span v-else&amp;gt;만원 미초과!!!&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력 화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgKqul/btsMzr4BH1b/FYU6akbIQ3kcOzqLnUuvQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgKqul/btsMzr4BH1b/FYU6akbIQ3kcOzqLnUuvQK/img.png&quot; data-alt=&quot;v-if 문법 사용예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgKqul/btsMzr4BH1b/FYU6akbIQ3kcOzqLnUuvQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgKqul%2FbtsMzr4BH1b%2FFYU6akbIQ3kcOzqLnUuvQK%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;1336&quot; height=&quot;530&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-if 문법 사용예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) v-show&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력된 조건이 &lt;code&gt;true&lt;/code&gt;일 경우만 화면에 표시한다.&lt;/li&gt;
&lt;li&gt;조건이 &lt;code&gt;true&lt;/code&gt;든 &lt;code&gt;false&lt;/code&gt;이든 렌더링은 하며, 다만, 조건이 &lt;code&gt;false&lt;/code&gt;일 경우 &lt;code&gt;display:none;&lt;/code&gt; 처리된다. (조건이 false 이더라도 DOM 에는 존재함)&lt;/li&gt;
&lt;li&gt;그 외 사용법은 &lt;code&gt;v-if&lt;/code&gt;와 동일하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    import { ref } from 'vue'
    const odd = ref(5);
&amp;lt;/script&amp;gt;
&amp;lt;template&amp;gt;
    &amp;lt;p&amp;gt;{{odd}}는&amp;lt;/p&amp;gt;
    &amp;lt;p v-show=&quot;odd % 2 != 0&quot;&amp;gt;홀수&amp;lt;/p&amp;gt;
    &amp;lt;p v-show=&quot;odd % 2 == 0&quot;&amp;gt;짝수&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;입니다.&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1332&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uoLA6/btsMySIkVjw/z9CE4xdykEOB6W8PpFD7Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uoLA6/btsMySIkVjw/z9CE4xdykEOB6W8PpFD7Nk/img.png&quot; data-alt=&quot;v-show 문법 사용예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uoLA6/btsMySIkVjw/z9CE4xdykEOB6W8PpFD7Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuoLA6%2FbtsMySIkVjw%2Fz9CE4xdykEOB6W8PpFD7Nk%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;1332&quot; height=&quot;577&quot; data-origin-width=&quot;1332&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-show 문법 사용예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4) v-for&lt;/h3&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;code&gt;v-for=&quot;변수 in 배열(또는 객체)&quot;&lt;/code&gt; 로 사용하거나, &lt;code&gt;v-for=&quot;(변수, 인덱스변수) in 배열(또는 객체)&quot;&lt;/code&gt;로 인덱스(또는 키)를 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:key&lt;/code&gt; 로 해당 배열(또는 객체)의 고유의 식별자를 지정해 줄 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;식별자의 경우 객체의 key처럼 중복되지 않은 고유한 값을 사용해야 한다. (없으면 인덱스라도 사용 권장)&lt;/li&gt;
&lt;li&gt;vue가 해당 배열(또는 객체)의 데이터를 구분하는 고유한 식별자로 성능 최적화, 올바른 업데이트 등을 위해 사용하는 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    import { ref } from 'vue'
    const nameArray = ref(['지현', '김아무개', '홍길동', '김철수', '김영희']);
    const nameObj = ref&amp;lt;Record&amp;lt;string, any&amp;gt;&amp;gt;({&quot;name&quot;: &quot;geehyun&quot;, &quot;age&quot;: &quot;5살&quot;, &quot;gender&quot; : &quot;female&quot;});
&amp;lt;/script&amp;gt;
&amp;lt;template&amp;gt;
    &amp;lt;strong&amp;gt;1. for of 사용&amp;lt;/strong&amp;gt;
    &amp;lt;p v-for=&quot;name of nameArray&quot;&amp;gt;저는 {{name}} 입니다.&amp;lt;/p&amp;gt;

    &amp;lt;strong&amp;gt;2. for index 사용&amp;lt;/strong&amp;gt;
    &amp;lt;p v-for=&quot;(item, index) of nameArray&quot; :key=&quot;index&quot;&amp;gt;저는 {{index + 1}} 번째 이름 {{item}} 입니다.&amp;lt;/p&amp;gt;
    &amp;lt;hr&amp;gt;
    &amp;lt;p v-for=&quot;(item, id) of nameObj&quot; :key=&quot;id&quot;&amp;gt;저의 {{id}} 는 {{item}} 입니다.&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3uwSj/btsMyEcDcXV/IPc4ieuBhRkTPLYFs5yms1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3uwSj/btsMyEcDcXV/IPc4ieuBhRkTPLYFs5yms1/img.png&quot; data-alt=&quot;v-for 문법 사용예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3uwSj/btsMyEcDcXV/IPc4ieuBhRkTPLYFs5yms1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3uwSj%2FbtsMyEcDcXV%2FIPc4ieuBhRkTPLYFs5yms1%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;1337&quot; height=&quot;866&quot; data-origin-width=&quot;1337&quot; data-origin-height=&quot;866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-for 문법 사용예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5) v-model&lt;/h3&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;input, textarea, select 등의 form 요소와 연결하여 사용자가 값을 입력(또는 선택) 할 시 자동으로 Vue 데이터도 변경되고, Vue 데이터가 변경되면 입력 필드의 값이 변경되는 양방향 데이터 바인딩 기능이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;htmlbars&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const input = ref('입력 전');
&amp;lt;/script&amp;gt;
&amp;lt;template&amp;gt;
    &amp;lt;input v-model=&quot;input&quot; placeholder=&quot;이름을 입력하세요&quot;&amp;gt;
    &amp;lt;br&amp;gt;
    &amp;lt;p&amp;gt;저는 {{input}} 입니다.&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCDm7Y/btsMz8KrQGS/S7ZqiCDIkLKjk8KCUsqnRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCDm7Y/btsMz8KrQGS/S7ZqiCDIkLKjk8KCUsqnRk/img.png&quot; data-alt=&quot;v-model 문법 사용예시 (사용자 입력 전)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCDm7Y/btsMz8KrQGS/S7ZqiCDIkLKjk8KCUsqnRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCDm7Y%2FbtsMz8KrQGS%2FS7ZqiCDIkLKjk8KCUsqnRk%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;1327&quot; height=&quot;505&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-model 문법 사용예시 (사용자 입력 전)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dL4bkw/btsMyDYQUh3/Arm5EAmNL1xJBF5kYKME50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dL4bkw/btsMyDYQUh3/Arm5EAmNL1xJBF5kYKME50/img.png&quot; data-alt=&quot;v-model 문법 사용예시 (사용자 입력 후)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dL4bkw/btsMyDYQUh3/Arm5EAmNL1xJBF5kYKME50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdL4bkw%2FbtsMyDYQUh3%2FArm5EAmNL1xJBF5kYKME50%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;1333&quot; height=&quot;119&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-model 문법 사용예시 (사용자 입력 후)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6) v-on&lt;/h3&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;code&gt;v-on:이벤트명=&quot;값&quot;&lt;/code&gt; 또는 &lt;code&gt;@이벤트명=&quot;값&quot;&lt;/code&gt;의 형태로 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const count1 = ref(0);
    const count2 = ref(0);
    const count3 = ref(0);
    const count4 = ref(0 as number);
    const inputNum = ref(0);
    const add1 = ()=&amp;gt;{count3.value++;};
    const addNum = (num:number)=&amp;gt;{count4.value+=num;};
&amp;lt;/script&amp;gt;
&amp;lt;template&amp;gt;
    &amp;lt;strong&amp;gt;1. 기본형&amp;lt;/strong&amp;gt;
    &amp;lt;button v-on:click=&quot;count1++&quot;&amp;gt;+1&amp;lt;/button&amp;gt;
    &amp;lt;p&amp;gt;count1 : {{count1}}&amp;lt;/p&amp;gt;

    &amp;lt;strong&amp;gt;2. 단축형&amp;lt;/strong&amp;gt;
    &amp;lt;button @click=&quot;count2++&quot;&amp;gt;+1&amp;lt;/button&amp;gt;
    &amp;lt;p&amp;gt;count2 : {{count2}}&amp;lt;/p&amp;gt;

    &amp;lt;strong&amp;gt;3. 함수사용 : 인자없음&amp;lt;/strong&amp;gt;
    &amp;lt;button @click=&quot;add1&quot;&amp;gt;add1&amp;lt;/button&amp;gt;
    &amp;lt;p&amp;gt;count3 : {{count3}}&amp;lt;/p&amp;gt;

    &amp;lt;strong&amp;gt;4. 함수사용 : 인자있음&amp;lt;/strong&amp;gt;
    &amp;lt;input v-model=&quot;inputNum&quot; type=&quot;number&quot;&amp;gt;&amp;lt;/input&amp;gt;
    &amp;lt;button @click=&quot;addNum(inputNum)&quot;&amp;gt;+&amp;lt;/button&amp;gt;
    &amp;lt;p&amp;gt;count4 : {{count4}}&amp;lt;/p&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1339&quot; data-origin-height=&quot;879&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bitmrO/btsMzQQPDNz/bIDn2lqsetJFJpOVLupXQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bitmrO/btsMzQQPDNz/bIDn2lqsetJFJpOVLupXQk/img.png&quot; data-alt=&quot;v-on 문법 사용예시 (이벤트 발생 전)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bitmrO/btsMzQQPDNz/bIDn2lqsetJFJpOVLupXQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbitmrO%2FbtsMzQQPDNz%2FbIDn2lqsetJFJpOVLupXQk%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;1339&quot; height=&quot;879&quot; data-origin-width=&quot;1339&quot; data-origin-height=&quot;879&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-on 문법 사용예시 (이벤트 발생 전)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PLBef/btsMyGOP0Cm/YzHqlmqVdR7l53HXZKJfaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PLBef/btsMyGOP0Cm/YzHqlmqVdR7l53HXZKJfaK/img.png&quot; data-alt=&quot;v-on 문법 사용예시 (이벤트 발생 후)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PLBef/btsMyGOP0Cm/YzHqlmqVdR7l53HXZKJfaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPLBef%2FbtsMyGOP0Cm%2FYzHqlmqVdR7l53HXZKJfaK%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;1333&quot; height=&quot;202&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-on 문법 사용예시 (이벤트 발생 후)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7) v-html&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML 태그가 포함된 문자열을 실제 HTML로 렌더링 할 수 있다. (JavaScript에서 innerHTML과 유사)&lt;/li&gt;
&lt;li&gt;단, 사용 시 사용자 입력 값을 &lt;code&gt;v-html&lt;/code&gt;로 바로 출력하는 것은 보완적으로 위험할 수 있으며, XSS 공격에 유의해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const htmlContents = ref(`&amp;lt;table style=&quot;border: 1px solid black&quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;항목 1&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;항목2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;내용 1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;내용 2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;`);
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;strong&amp;gt; 1. v-html 로 넣었을 때&amp;lt;/strong&amp;gt;
    &amp;lt;div v-html=&quot;htmlContents&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;strong v-pre&amp;gt; 2. {{}} 로 넣었을 때&amp;lt;/strong&amp;gt;
    &amp;lt;div&amp;gt;{{htmlContents}}&amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1332&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ntLp5/btsMzZfHGbJ/tMZ4gMazvLKqtIxe3l887k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ntLp5/btsMzZfHGbJ/tMZ4gMazvLKqtIxe3l887k/img.png&quot; data-alt=&quot;v-html 문법 사용예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ntLp5/btsMzZfHGbJ/tMZ4gMazvLKqtIxe3l887k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FntLp5%2FbtsMzZfHGbJ%2FtMZ4gMazvLKqtIxe3l887k%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;1332&quot; height=&quot;637&quot; data-origin-width=&quot;1332&quot; data-origin-height=&quot;637&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-html 문법 사용예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8) v-text&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내용을 텍스트로 삽입할 때 사용된다. (JavaScript에서 textContent와 유사)&lt;/li&gt;
&lt;li&gt;HTML 또는 JavsScript 등 코드가 들어와도 텍스트 그대로 화면에 출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
    &amp;lt;strong&amp;gt; 1. v-text 로 넣었을 때&amp;lt;/strong&amp;gt;
    &amp;lt;div v-text=&quot;htmlContents&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;strong v-pre&amp;gt; 2. {{}} 로 넣었을 때&amp;lt;/strong&amp;gt;
    &amp;lt;div&amp;gt;{{htmlContents}}&amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const htmlContents = ref(`&amp;lt;table style=&quot;border: 1px solid black&quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;항목 1&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;항목2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;내용 1&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;내용 2&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;`);
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lh5YE/btsMAIYML2y/y5bZPkPrtPj4Y12dX5HpFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lh5YE/btsMAIYML2y/y5bZPkPrtPj4Y12dX5HpFK/img.png&quot; data-alt=&quot;v-text 문법 사용예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lh5YE/btsMAIYML2y/y5bZPkPrtPj4Y12dX5HpFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLh5YE%2FbtsMAIYML2y%2Fy5bZPkPrtPj4Y12dX5HpFK%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;1335&quot; height=&quot;607&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-text 문법 사용예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;9) v-slot&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;slot&lt;/code&gt;이란 vue에서 부모 컴포넌트가 자식 컴포넌트의 특정 영역을 직접 정의하는 기능으로, &lt;code&gt;v-slot&lt;/code&gt;으로 이러한 &lt;code&gt;slot&lt;/code&gt;을 제어할 수 있다.&lt;/li&gt;
&lt;li&gt;부모 컴포넌트에서 &lt;code&gt;slot&lt;/code&gt; &lt;code&gt;&amp;lt;template v-slot:슬릇명&amp;gt;&lt;/code&gt;으로 슬롯을 지정하고, 자식 컴포넌트에서 &lt;code&gt;&amp;lt;slot name=&quot;슬릇이름&quot;&amp;gt;&lt;/code&gt; 으로 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;template v-slot:슬릇명&amp;gt;&lt;/code&gt; 또는 &lt;code&gt;&amp;lt;template #슬릇명&amp;gt;&lt;/code&gt; 으로 사용할 수 있다. 또한, &lt;code&gt;&amp;lt;template v-slot:default&amp;gt;&lt;/code&gt; 로 default로 설정한 slot에 대해서는 자식 컴포넌트에서 &lt;code&gt;&amp;lt;slot&amp;gt;&lt;/code&gt;의 형식만으로도 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;또한, slot을 사용할 때 부모 컴포넌트는 자식 컴포넌트의 데이터를 받아 해당 데이터를 활용하여 해당 slot 내에서 사용할 수 있다. 이를 &lt;b&gt;Scoped Slot&lt;/b&gt; 이라 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;!-- 부모 영역 : Parent.vue --&amp;gt;
&amp;lt;template&amp;gt;
    &amp;lt;ChildComponent&amp;gt;
        &amp;lt;template v-slot:default&amp;gt;
            &amp;lt;p&amp;gt;안녕 난 부모 영역이야! 이름 없는 slot 이지!&amp;lt;/p&amp;gt;
        &amp;lt;/template&amp;gt;
        &amp;lt;template v-slot:test1&amp;gt;
            &amp;lt;p&amp;gt;난 test1 라는 이름의 slot 이야. 기본형으로 사용했지 &amp;lt;/p&amp;gt;
        &amp;lt;/template&amp;gt;
        &amp;lt;template #test2&amp;gt;
            &amp;lt;p&amp;gt;난 test2 라는 이름의 slot 이야. 단축형으로 사용했어 &amp;lt;/p&amp;gt;
        &amp;lt;/template&amp;gt;
        &amp;lt;template #test3=&quot;{data}&quot;&amp;gt;
            &amp;lt;p&amp;gt;난 test3 라는 이름의 slot 이야. 아래는 자식 컴포넌트에서 받은 데이터로 출력한거야&amp;lt;/p&amp;gt;
            &amp;lt;p v-for=&quot;(item, key) in data&quot; :key=&quot;key&quot;&amp;gt;key : {{ key }} / item : {{ item }}&amp;lt;/p&amp;gt;
        &amp;lt;/template&amp;gt;
    &amp;lt;/ChildComponent&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;!-- 자식 영역 : ChildComponent.vue --&amp;gt;
&amp;lt;template&amp;gt;
    &amp;lt;strong&amp;gt; 1. default slot 사용&amp;lt;/strong&amp;gt;
    &amp;lt;slot&amp;gt;&amp;lt;/slot&amp;gt;
    &amp;lt;strong&amp;gt; 2. named slot 사용 : 기본형&amp;lt;/strong&amp;gt;
    &amp;lt;slot name=&quot;test1&quot;&amp;gt;&amp;lt;/slot&amp;gt;
    &amp;lt;strong&amp;gt; 3. named slot 사용 : 단축형&amp;lt;/strong&amp;gt;
    &amp;lt;slot name=&quot;test2&quot;&amp;gt;&amp;lt;/slot&amp;gt;
    &amp;lt;strong&amp;gt; 4. scoped slot 활용&amp;lt;/strong&amp;gt;
    &amp;lt;slot name=&quot;test3&quot; :data=&quot;childData&quot;&amp;gt;&amp;lt;/slot&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwZxKD/btsMyCFMqxt/ytq2NTKFoowUZpYK9c01G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwZxKD/btsMyCFMqxt/ytq2NTKFoowUZpYK9c01G1/img.png&quot; data-alt=&quot;v-slot 문법 사용예시 (작성코드)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwZxKD/btsMyCFMqxt/ytq2NTKFoowUZpYK9c01G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwZxKD%2FbtsMyCFMqxt%2Fytq2NTKFoowUZpYK9c01G1%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;1336&quot; height=&quot;826&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;826&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-slot 문법 사용예시 (작성코드)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7Hi4M/btsMAILhn1y/Erz2NyjZycAGTNZ1cGjD3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7Hi4M/btsMAILhn1y/Erz2NyjZycAGTNZ1cGjD3k/img.png&quot; data-alt=&quot;v-slot 문법 사용예시 (출력 내용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Hi4M/btsMAILhn1y/Erz2NyjZycAGTNZ1cGjD3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7Hi4M%2FbtsMAILhn1y%2FErz2NyjZycAGTNZ1cGjD3k%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;1331&quot; height=&quot;270&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-slot 문법 사용예시 (출력 내용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;10) v-cloak&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue가 화면을 완전히 로드할 때까지 해당 태그를 아예 화면에서 보이지 않게 처리할 수 있게 할 수 있다.&lt;/li&gt;
&lt;li&gt;네트워크 환경이 느리거나, 불러올 요소가 많은 경우 Vue가 화면을 완전히 렌더링 하기 전 &lt;code&gt;{{변수}}&lt;/code&gt;와 같은 vue 문법들이 텍스트 그대로 화면에 표시되는 경우가 있다. 이를 방지하기 위해 &lt;code&gt;v-cloak&lt;/code&gt;을 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;Vue가 화면을 완전히 렌더링 하기 전 &lt;code&gt;v-cloak&lt;/code&gt;을 넣은 요소에 &lt;code&gt;v-cloak&lt;/code&gt; HTML 속성에 추가하여 CSS Style 로 &lt;code&gt;display:none&lt;/code&gt; 처리 또는 커스텀 로딩중 처리 등으로 사용할 수 있다. (&lt;code&gt;v-cloak&lt;/code&gt; 속성 자체가 처리해 주는 게 아니기 때문에 별도 CSS 처리 필요)&lt;/li&gt;
&lt;li&gt;즉 &lt;code&gt;v-cloak&lt;/code&gt; 사용 시 렌더링 완료 전 &lt;code&gt;v-cloak&lt;/code&gt; HTML 속성이 추가되며, 렌더링 완료 후 &lt;code&gt;v-cloak&lt;/code&gt; HTML 속성이 제거된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const message = ref('로딩 완료~');
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;div v-cloak&amp;gt;{{message}}&amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;style&amp;gt;
    [v-cloak] {
        display: none;
    }
&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk2Dvi/btsMyUMUQDa/gTC9jIJDr1KgZzCMKX4yJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk2Dvi/btsMyUMUQDa/gTC9jIJDr1KgZzCMKX4yJ1/img.png&quot; data-alt=&quot;v-cloak 문법 사용예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk2Dvi/btsMyUMUQDa/gTC9jIJDr1KgZzCMKX4yJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk2Dvi%2FbtsMyUMUQDa%2FgTC9jIJDr1KgZzCMKX4yJ1%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;1331&quot; height=&quot;541&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;541&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-cloak 문법 사용예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BKfjm/btsMyDkj5Gc/FkWHfx6KGuWhMmAHu3f6j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BKfjm/btsMyDkj5Gc/FkWHfx6KGuWhMmAHu3f6j1/img.png&quot; data-alt=&quot;v-slot 문법 사용예시 (로딩 완료 후 html 요소에 v-cloak 속성 없는 부분 확인)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BKfjm/btsMyDkj5Gc/FkWHfx6KGuWhMmAHu3f6j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBKfjm%2FbtsMyDkj5Gc%2FFkWHfx6KGuWhMmAHu3f6j1%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;65&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-slot 문법 사용예시 (로딩 완료 후 html 요소에 v-cloak 속성 없는 부분 확인)&lt;/figcaption&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;h3 data-ke-size=&quot;size23&quot;&gt;11) v-pre&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 디렉티브 문법을 사용 시 해당 HTML 요소 하위에 있는 요소에서 Vue 탬플릿 문법을 해석하지 않도록 처리한다.&lt;/li&gt;
&lt;li&gt;HTML 기본 태그 중 &lt;code&gt;pre&lt;/code&gt;코드가 해당 태그 내 HTML 문법으로 작성된 내용도 HTML 문법으로 읽지 않고 텍스트 그대로 표시하는 것처럼, &lt;code&gt;v-pre&lt;/code&gt; 도 &lt;code&gt;{{}}&lt;/code&gt; 등의 Vue 문법을 해석하지 않고 텍스트 그대로 표시하게 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const mustache = ref('전 mustache 에요! 콧수염같이 생겨서 이름이 이렇답니다.');
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;strong&amp;gt; 1. v-pre 사용&amp;lt;/strong&amp;gt;
    &amp;lt;div v-pre&amp;gt;{{mustache}}&amp;lt;/div&amp;gt;
    &amp;lt;strong&amp;gt; 2. v-pre 미사용&amp;lt;/strong&amp;gt;
    &amp;lt;div&amp;gt;{{mustache}}&amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U3j6u/btsMA5TMb1k/P4UMsCThHLni5FLPQx6Z1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U3j6u/btsMA5TMb1k/P4UMsCThHLni5FLPQx6Z1k/img.png&quot; data-alt=&quot;v-pre 문법 사용예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U3j6u/btsMA5TMb1k/P4UMsCThHLni5FLPQx6Z1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU3j6u%2FbtsMA5TMb1k%2FP4UMsCThHLni5FLPQx6Z1k%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;1331&quot; height=&quot;607&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-pre 문법 사용예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;12) v-memo&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue3에서 새로 추가된 기능이며, 캐싱을 이용해 성능을 최적화할 수 있는 기능이다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v-memo&lt;/code&gt; 에 입력된 값 기준으로 데이터의 변경 여부를 판단하여, 해당 값이 변경되지 않으면 다시 렌더링 하지 않도록 한다.&lt;/li&gt;
&lt;li&gt;배열, 객체 데이터에서 특정 항목 기준으로 변경 여부를 판단하고, 그 외 다른 값이 변경되는 것은 변경으로 보지 않도록 하여 불필요한 렌더링을 줄이고, 성능을 최적화할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;작성코드&lt;/h4&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;&amp;lt;script setup lang=&quot;ts&quot;&amp;gt;
    const count = ref(0);
    const memo = ref('초기 값');
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
    &amp;lt;strong&amp;gt; 1. v-memo 사용&amp;lt;/strong&amp;gt;
    &amp;lt;p v-memo=&quot;[count]&quot;&amp;gt; count : {{count}} / memo : {{memo}}&amp;lt;/p&amp;gt;
    &amp;lt;!-- count 값이 변경될 때만 렌더링 되며, memo의 값만이 변경될 때는 렌더링 되지 않는다. --&amp;gt;

    &amp;lt;strong&amp;gt; 2. v-memo 미사용&amp;lt;/strong&amp;gt;
    &amp;lt;p&amp;gt; count : {{count}} / memo : {{memo}}&amp;lt;/p&amp;gt;
    &amp;lt;!-- count, memo 값 각각 변경될 때마다 렌더링 된다. --&amp;gt;

    &amp;lt;button @click=&quot;count++&quot;&amp;gt;1 증가&amp;lt;/button&amp;gt;
    &amp;lt;button @click=&quot;memo+= '+' + count&quot;&amp;gt;메모 더하기&amp;lt;/button&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;출력화면&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1334&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IASvc/btsMAYUJHJo/z0Mk8Hs4CZvSPSAmcjF4sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IASvc/btsMAYUJHJo/z0Mk8Hs4CZvSPSAmcjF4sK/img.png&quot; data-alt=&quot;v-memo 문법 사용예시 (값 변경 전)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IASvc/btsMAYUJHJo/z0Mk8Hs4CZvSPSAmcjF4sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIASvc%2FbtsMAYUJHJo%2Fz0Mk8Hs4CZvSPSAmcjF4sK%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;1334&quot; height=&quot;687&quot; data-origin-width=&quot;1334&quot; data-origin-height=&quot;687&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-memo 문법 사용예시 (값 변경 전)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XBnSj/btsMyuudla1/h5XP1Q3qkbaId7amBw1y60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XBnSj/btsMyuudla1/h5XP1Q3qkbaId7amBw1y60/img.png&quot; data-alt=&quot;v-memo 문법 사용예시 (count 값 변경 =&amp;amp;gt; v-memo 사용/미사용 모두 같이 변경된 값으로 렌더링 됨.)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XBnSj/btsMyuudla1/h5XP1Q3qkbaId7amBw1y60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXBnSj%2FbtsMyuudla1%2Fh5XP1Q3qkbaId7amBw1y60%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;1324&quot; height=&quot;184&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-memo 문법 사용예시 (count 값 변경 =&amp;gt; v-memo 사용/미사용 모두 같이 변경된 값으로 렌더링 됨.)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XP7hX/btsMz8p45Uz/07CgDZtKnK8TxdS2eyMlSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XP7hX/btsMz8p45Uz/07CgDZtKnK8TxdS2eyMlSk/img.png&quot; data-alt=&quot;v-memo 문법 사용예시 (memo 값 변경 =&amp;amp;gt; v-memo 사용한경우 변경되지 않고, 미사용한 경우에만 변경 됨.)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XP7hX/btsMz8p45Uz/07CgDZtKnK8TxdS2eyMlSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXP7hX%2FbtsMz8p45Uz%2F07CgDZtKnK8TxdS2eyMlSk%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;1335&quot; height=&quot;184&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;v-memo 문법 사용예시 (memo 값 변경 =&amp;gt; v-memo 사용한경우 변경되지 않고, 미사용한 경우에만 변경 됨.)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;마치며&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue 탬플릿 문법에 대해 공부해 봤는데, thymeleaf를 먼저 사용해 왔던 사람으로서 꽤나 thymeleaf 문법과 유사하다고 느껴졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 HTML/CSS/JavaScript 로도 구현이 가능하지만, Vue를 이용한다면 더욱 편하게 사용할 수 있을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 v-memo와 v-slot 은 공부하면서 많이 신기했고 앞으로 공부할 Vue 컴포넌트와 함께 Vue 만의 특화된 기능으로 여러 가지 상황에서 활용할 수 있을 것 같다.&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;꽤나 흥미롭게 Vue 공부를 하고 있다.&lt;/p&gt;</description>
      <category>Study/Vue.js</category>
      <category>Mustache</category>
      <category>V-</category>
      <category>v-bind</category>
      <category>v-for</category>
      <category>v-if</category>
      <category>v-memo</category>
      <category>VUE</category>
      <category>Vue template</category>
      <category>vue3</category>
      <category>디렉티브</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/27</guid>
      <comments>https://geehyun.tistory.com/entry/Vue3-Vue-%ED%85%9C%ED%94%8C%EB%A6%BF-%EB%AC%B8%EB%B2%95#entry27comment</comments>
      <pubDate>Sun, 2 Mar 2025 01:08:05 +0900</pubDate>
    </item>
    <item>
      <title>[Vue3] Vue.js 소개 및 개발환경 셋팅</title>
      <link>https://geehyun.tistory.com/entry/Vue3-Vuejs-%EC%86%8C%EA%B0%9C-%EB%B0%8F-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%85%8B%ED%8C%85</link>
      <description>&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;[vue3] Vue.js 소개 및 개발환경 셋팅.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXh9GX/btsMzWQQu2m/3umnsCylkKdvnSSO4FuXUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXh9GX/btsMzWQQu2m/3umnsCylkKdvnSSO4FuXUK/img.png&quot; data-alt=&quot;[Vue3] Vue.js 소개 및 개발환경 셋팅&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXh9GX/btsMzWQQu2m/3umnsCylkKdvnSSO4FuXUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXh9GX%2FbtsMzWQQu2m%2F3umnsCylkKdvnSSO4FuXUK%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;1280&quot; height=&quot;720&quot; data-filename=&quot;[vue3] Vue.js 소개 및 개발환경 셋팅.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[Vue3] Vue.js 소개 및 개발환경 셋팅&lt;/figcaption&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;h1&gt;Vue.js란&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;개념&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue.js란 Javascript 기반의 Frontend 프레임워크로, &lt;code&gt;Progressive Framework&lt;/code&gt; 즉, 필요한 기능만 사용하면서 점진적으로 확장할 수 있는 유연한 프레임워크 이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;컴포넌트 기반 개발&lt;/b&gt; : 컴포넌트 기반으로 재사용성이 뛰어나고 유지보수가 쉽다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;반응형 시스템&lt;/b&gt; : 데이터가 변경되면 UI가 자동으로 업데이트 된다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가볍고 빠름&lt;/b&gt; : 경량화된 프레임워크로 가볍고 속도가 빠르다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;쉬운 학습곡선&lt;/b&gt; : 다른 프론트앤드 프레임워크에 비해 초기 학습곡선이 완만하다 (HTML, CSS, JavaScript 기반)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vue3에서 Composition API 추가&lt;/b&gt; : 코드 구조를 더욱 모듈화하고 유지보수성을 높일 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SPA(Single Page Application)&lt;/b&gt; : Vue Router와 함께 사용하면 단일 페이지 애플리케이션을 만들 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Coposition API&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Options API&amp;nbsp;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 Vue2까지 사용하던 방식&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data&lt;/code&gt;, &lt;code&gt;methode&lt;/code&gt;, &lt;code&gt;mounted&lt;/code&gt; 등으로 로직이 분리가 되고, 코드가 길어질 수록 유지보수가 어려워진다는 단점이 있었다.
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;// Options API 방식
&amp;lt;script&amp;gt;
export default {
data() {
return {
count: 0
};
},
methods: {
increment() {
this.count++;
}
},
mounted() {
console.log(&quot;컴포넌트가 마운트됨&quot;);
}
};
&amp;lt;/script&amp;gt;
&amp;lt;template&amp;gt;
&amp;lt;button @click=&quot;increment&quot;&amp;gt;Count: {{ count }}&amp;lt;/button&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Composition API&amp;nbsp;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt; Vue3에서 추가된 방식&lt;/b&gt;으로 현재 공식적으로 권장하는 방식&lt;/li&gt;
&lt;li&gt;&lt;code&gt;setup()&lt;/code&gt; 내에서 모든 로직 작성 가능하여 코드가 더 직관적이고, 재사용성이 높아졌다.&lt;br /&gt;
&lt;pre class=&quot;django&quot;&gt;&lt;code&gt;// Composition API 방식
&amp;lt;script setup&amp;gt;
import { ref, onMounted } from &quot;vue&quot;;
const count = ref(0);
const increment = () =&amp;gt; {
count.value++;
};
onMounted(() =&amp;gt; {
console.log(&quot;컴포넌트가 마운트됨&quot;);
});
&amp;lt;/script&amp;gt;
&amp;lt;template&amp;gt;
&amp;lt;button @click=&quot;increment&quot;&amp;gt;Count: {{ count }}&amp;lt;/button&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SPA / MPA&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;SPA&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Single Page Application&lt;/code&gt; 으로 단일 페이지(주로, index.html 하나)만 두고 모든 화면을 동적으로 변경하여 관리하는 기법&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버에서 전체 페이지를 새로 로드하지 않고 필요한 부분만 JavaScript로 업데이트&lt;/li&gt;
&lt;li&gt;비동기 데이터 로드 방식 사용&lt;/li&gt;
&lt;li&gt;앱처럼 부드럽고 빠른 사용자 경험 제공 가능&lt;/li&gt;
&lt;li&gt;프론트앤드 라우팅 (Vue Router, React Router 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;MPA&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Multi Page Application&lt;/code&gt; 으로 요청할 때마다 새로운 HTML 페이지를 서버에서 받아오는 전통적인 웹 방식&lt;/p&gt;
&lt;table style=&quot;height: 140px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; text-align: center; width: 116px;&quot; align=&quot;center&quot;&gt;&lt;b&gt; 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; text-align: center; width: 350px;&quot;&gt;&lt;b&gt; SPA&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; text-align: center; width: 386px;&quot;&gt;&lt;b&gt; MPA&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; text-align: center; width: 116px;&quot;&gt;&lt;b&gt;페이지 &lt;br /&gt;로드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 350px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 한 번 로딩 후, 동적변경 &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 386px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 페이지 이동마다 새로 로딩 &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px; width: 116px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;속도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 350px;&quot;&gt;초기로딩 속도는 다소 느리나, 이후 페이지 전환은 빠름(JS 실행 후 캐싱 이용)&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 386px;&quot;&gt;페이지 이동마다 전체 HTML 을 새로 받아와야해서 다소 느릴 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; width: 116px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;SEO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 350px;&quot;&gt;어려운편&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 386px;&quot;&gt;SEO 친화적&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SSR / CSR&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;SSR&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Server Side Rendering&lt;/code&gt; 으로 서버에서 페이지를 모두 랜더링하여 완성된 페이지를 클라이언트에 제공해주는 방식&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;CSR&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;Client Side Rendering&lt;/code&gt; 으로 클라이언트에서 페이지를 동적으로 그리는 방식&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 114px;&quot; align=&quot;center&quot;&gt;&lt;b&gt; 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 372px;&quot;&gt;&lt;b&gt; CSR &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 365px;&quot;&gt;&lt;b&gt; SSR &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 114px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;b&gt;랜더링 &lt;br /&gt;위치&lt;/b&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 372px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 클라이언트(브라우저) &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 365px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; 서버 &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 114px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;로딩 속도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 372px;&quot;&gt;초기 로딩속도는 느리나 이후 전환 빠름&lt;/td&gt;
&lt;td style=&quot;width: 365px;&quot;&gt;초기 로딩속도는 빠르나, 페이지 이동 시마다 랜더링 할 경우 비교적 느릴 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 114px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;SEO &lt;br /&gt;친화성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 372px;&quot;&gt;낮음&lt;/td&gt;
&lt;td style=&quot;width: 365px;&quot;&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 114px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;서버부하&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 372px;&quot;&gt;부하 낮음&lt;/td&gt;
&lt;td style=&quot;width: 365px;&quot;&gt;부하 증가 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 114px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;네트워크의 &lt;br /&gt;영향&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 372px;&quot;&gt;네트워크 속도 빠른환경에서 유리&lt;/td&gt;
&lt;td style=&quot;width: 365px;&quot;&gt;영향적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 114px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 372px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 365px;&quot;&gt;SSR에서 첫 페이지 로딩 이후 CSR 방식으로 사용하는 Hydration 방식 이용가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  왜 CSR 방식은 SEO 친화성이 느릴까?&lt;/b&gt;&lt;br /&gt;CSR 방식은 HTML 내 태그를 비워두고 추후 해당페이지 랜더링 시 JavaScript를 통해 페이지를 랜더링 하는데, 구글 등 검색엔진이 사이트를 크롤링할 때는 JavaScript를 기본적으로 실행시키지 않기 때문에 검색엔진 최적화에 다소 어려움이 있다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Vue.js   React   Angular&lt;/h2&gt;
&lt;table style=&quot;height: 160px; width: 846px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 120px;&quot; align=&quot;center&quot;&gt;&lt;b&gt; 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 222px;&quot;&gt;&lt;b&gt; Vue.js &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 259px;&quot;&gt;&lt;b&gt; React &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 245px;&quot;&gt;&lt;b&gt; Angular &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 120px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; &lt;b&gt;언어&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 222px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; JavaScript(TypeScript지원) &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 259px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; JavaScript(JSX 사용) &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 245px;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt; TypeScript &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 120px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;컴포넌트 &lt;br /&gt;구조&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 222px;&quot;&gt;SFC(Single File Component)&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 259px;&quot;&gt;JSX 기반 컴포넌트&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 245px;&quot;&gt;모듈 기반 컴포넌트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 120px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;상태관리&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 222px;&quot;&gt;&lt;code&gt;ref()&lt;/code&gt;, &lt;code&gt;reactive()&lt;/code&gt;, Pinia, Vuex&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 259px;&quot;&gt;useState, useReducer, Redux&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 245px;&quot;&gt;RxJs,NgRx&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 120px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;라우터&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 222px;&quot;&gt;Vue Router&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 259px;&quot;&gt;React Router&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 245px;&quot;&gt;Angular Router&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 120px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;데이터 &lt;br /&gt;바인딩&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 222px;&quot;&gt;양방향(v-model)지원&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 259px;&quot;&gt;단방향&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 245px;&quot;&gt;양방향(ngModel)지원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 120px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;학습&lt;br /&gt;난이도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 222px;&quot;&gt;쉬움&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 259px;&quot;&gt;중간&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 245px;&quot;&gt;어려움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: center; width: 120px;&quot; align=&quot;center&quot;&gt;&lt;b&gt;적용 &lt;br /&gt;범위&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 222px;&quot;&gt;소규모~대규모&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 259px;&quot;&gt;대규모&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 245px;&quot;&gt;대규모 엔터프라이즈급&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;개발환경 셋팅&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Vite로 Vue3 설치 및 프로젝트 생성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue 프로젝트 빌드 도구에는 &lt;code&gt;Vite&lt;/code&gt; 방식과 &lt;code&gt;Vue CLI&lt;/code&gt;방식이 있는데, 더 최신 방식이고 Vue3 공식 권장도구인 &lt;code&gt;Vite&lt;/code&gt; 방식을 사용하겠다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 사용법
# 아래 명령어를 vue 프로젝트를 만들 디렉토리로 이동하여 입력한다.
cd 프로젝트 만들 디렉토리
npm create vite@latest 프로젝트이름 --template vue

# 사용예시
cd D:/Study/vue
npm create vite@latest vue3-study --template vue

# 실제 사용 시 출력내용
PS C:\Use\wkdwlr&amp;gt; cd d:/Study/vue
PS D:\Study\vue&amp;gt; npm create vite@latest vue3-study --template vue
Need to install the following packages:
create-vite@6.2.0
Ok to proceed? (y) y


&amp;gt; npx
&amp;gt; create-vite vue3-study vue

&amp;radic; Select a framework: &amp;raquo; Vue
&amp;radic; Select a variant: &amp;raquo; Official Vue Starter ↗
Need to install the following packages:
create-vue@3.14.2
Ok to proceed? (y) y


&amp;gt; npx
&amp;gt; create-vue vue3-study


Vue.js - The Progressive JavaScript Framework

&amp;radic; Add TypeScript? ... No / Yes
&amp;radic; Add JSX Support? ... No / Yes
&amp;radic; Add Vue Router for Single Page Application development? ... No / Yes
&amp;radic; Add Pinia for state management? ... No / Yes
&amp;radic; Add Vitest for Unit Testing? ... No / Yes
&amp;radic; Add an End-to-End Testing Solution? &amp;raquo; No
&amp;radic; Add ESLint for code quality? &amp;raquo; No

Scaffolding project in D:\Study\vue\vue3-study...

Done. Now run:

  cd vue3-study
  npm install
  npm run dev&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. IntelliJ 플러그인 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue.js의 경우 간단하게 vsCode로 주로 사용하는 것 같지만, 저는 익숙한 IntelliJ로 작업할 예정이라 IntellJ를 사용한 방식으로 설명하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;File&lt;/code&gt; - &lt;code&gt;Settings...&lt;/code&gt; - &lt;code&gt;Plugins&lt;/code&gt; - &lt;code&gt;Marketplace&lt;/code&gt; - &lt;code&gt;Vue.Js&lt;/code&gt; 검색 후 Install&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;1216&quot; data-origin-height=&quot;747&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDTjd4/btsMuLvqUow/UGeQfgfmW7kML7CBXSvCz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDTjd4/btsMuLvqUow/UGeQfgfmW7kML7CBXSvCz1/img.png&quot; data-alt=&quot;IntelliJ에서 Vue.js 플러그인 설치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDTjd4/btsMuLvqUow/UGeQfgfmW7kML7CBXSvCz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDTjd4%2FbtsMuLvqUow%2FUGeQfgfmW7kML7CBXSvCz1%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;1216&quot; height=&quot;747&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;747&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;IntelliJ에서 Vue.js 플러그인 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. IntelliJ 에서 프로젝트 열기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;File&lt;/code&gt; - &lt;code&gt;Open&lt;/code&gt; - 방금 생성한 vue 프로젝트 디렉토리 열기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;  열었을 때 src 디렉토리 하위 .vue 파일이 vue파일이 아니라 일반파일로 보인다면?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;위 3번에서 설치한 플러그인이 반영이 안된걸 수 있어서 IntelliJ 재기동 또는 해당 플러그인 삭제 후 재설치 필요&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. IntelliJ 에서 라이브러리 의존성 설치 및 개발서버 실행&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;intelliJ 에서 하단 터미널을 열어서 의존성 설치 및 개발서버 실행 (git bash 또는 shell script 여도 상관없음)&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;############ 의존성 설치
# 사용법
# 아래의 명령어를 방금 생성한 프로젝트 디렉토리로 이동 후 입력
cd 방금 만든 프로젝트 디렉토리
npm install

# 사용예시
cd ./vue3-study
npm install

# 실제 사용 시 출력내용
PS D:\Study\vue&amp;gt; cd .\vue3-study\
PS D:\Study\vue\vue3-study&amp;gt; npm install

added 311 packages, and audited 312 packages in 35s

78 packages are looking for funding
  run `npm fund` for details

11 moderate severity vulnerabilities

To address issues that do not require attention, run:
  npm audit fix

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

############ 개발서버 실행
# 사용법
npm run dev

#사용예시
npm run dev

# 실제 사용 시 출력내용 
PS D:\Study\vue\vue3-study&amp;gt; npm run dev

&amp;gt; vue3-study@0.0.0 dev
&amp;gt; vite


  VITE v6.1.1  ready in 1359 ms

  ➜  Local:   http://localhost:5173/
  ➜  Network: use --host to expose
  ➜  Vue DevTools: Open http://localhost:5173/__devtools__/ as a separate window
  ➜  Vue DevTools: Press Alt(⌥)+Shift(⇧)+D in App to toggle the Vue DevTools
  ➜  press h + enter to show help
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. Vue 프로젝트 기본 메인 화면 보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저를 열고 아래 주소를 입력하여 Vue 기본 메인 페이지가 잘 열리는지 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1740406330561&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://localhost:5173/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1899&quot; data-origin-height=&quot;898&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfK1Wx/btsMuKpHjTn/ofDWE7TEaVnjovUiRwqjq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfK1Wx/btsMuKpHjTn/ofDWE7TEaVnjovUiRwqjq1/img.png&quot; data-alt=&quot;vue 기본 메인페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfK1Wx/btsMuKpHjTn/ofDWE7TEaVnjovUiRwqjq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfK1Wx%2FbtsMuKpHjTn%2FofDWE7TEaVnjovUiRwqjq1%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;1899&quot; height=&quot;898&quot; data-origin-width=&quot;1899&quot; data-origin-height=&quot;898&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vue 기본 메인페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 개발자로서 기본적으로 HTML, CSS, JavaScript, Jquery 와 JSP, Thymeleaf 정도만 사용하여 개발을 하면서 프론트앤드의 기술을 알아두고 싶어서 공부하기 시작하였다.&lt;br /&gt;React와 Vue.js 중에 뭘 시작할지 고민을 많이 하였지만, 학습곡선이 비교적 완만하고 완전히 프론트앤드 개발자 보다는 풀스택 개발자들이 주로 쓴다고 여겨지는 Vue.js를 공부하기로 했다.&lt;/p&gt;</description>
      <category>Study/Vue.js</category>
      <category>coposition api</category>
      <category>csr</category>
      <category>Mpa</category>
      <category>options api</category>
      <category>spa</category>
      <category>SSR</category>
      <category>VUE</category>
      <category>vue.js</category>
      <category>vue3</category>
      <category>vue설치</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/26</guid>
      <comments>https://geehyun.tistory.com/entry/Vue3-Vuejs-%EC%86%8C%EA%B0%9C-%EB%B0%8F-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%85%8B%ED%8C%85#entry26comment</comments>
      <pubDate>Mon, 24 Feb 2025 23:14:44 +0900</pubDate>
    </item>
    <item>
      <title>[티스토리] 게시글 내 목차 만들기</title>
      <link>https://geehyun.tistory.com/entry/%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC-%EA%B2%8C%EC%8B%9C%EA%B8%80-%EB%82%B4-%EB%AA%A9%EC%B0%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[티스토리] 게시글 내 목차 만들기.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czOnK9/btsMyB097f9/c4SrsT2mPzkpICIggVwghK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czOnK9/btsMyB097f9/c4SrsT2mPzkpICIggVwghK/img.png&quot; data-alt=&quot;[티스토리] 게시글 내 목차 만들기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czOnK9/btsMyB097f9/c4SrsT2mPzkpICIggVwghK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczOnK9%2FbtsMyB097f9%2Fc4SrsT2mPzkpICIggVwghK%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;1280&quot; height=&quot;720&quot; data-filename=&quot;[티스토리] 게시글 내 목차 만들기.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[티스토리] 게시글 내 목차 만들기&lt;/figcaption&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅기능&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;게시글 내 h태그를 이용하여 목차를 자동 생성할 수 있고&lt;/li&gt;
&lt;li&gt;각 각 목차를 클릭 시 해당 내용으로 이동하도록 (id와 a태그의 href=&quot;#아이디&quot; 방식 사용)&lt;/li&gt;
&lt;li&gt;현재 스킨이 반응형이기 때문에 그에 따라 목차도 반응형으로 구성 (접이식 목차 / 기본목차)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;b&gt;✅&lt;/b&gt; 방식&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;게시글 작성 시 제목1, 제목2, 제목3 (h태그)를 사용하여 구현 예정&lt;/li&gt;
&lt;li&gt;티스토리 내 스킨편집과 서식 기능을 이용해서 구현 예정 - html / css / js 작성&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;목차를 만드려는 이유&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 velog에서 티스토리로 이사 오면서 여러 가지 차이점과, 각 각의 장단점을 느꼈었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그중 velog에서는 마크다운 문법으로 글을 작성하면 알아서 목차가 구성되는데, 티스토리의 경우 스킨에 따라 목차가 있을 수 있지만, &lt;b&gt;제가 택한 스킨에는 없어서 이번 기회에 추가해 보기로 했습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1842&quot; data-origin-height=&quot;895&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMRdeB/btsLK7zOxqj/YSoSNXkcVrTbmEkO8rxsD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMRdeB/btsLK7zOxqj/YSoSNXkcVrTbmEkO8rxsD0/img.png&quot; data-alt=&quot;Velog 에서 자동 생성되는 목차 : 클릭 시 해당 내용으로 이동 됨.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMRdeB/btsLK7zOxqj/YSoSNXkcVrTbmEkO8rxsD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMRdeB%2FbtsLK7zOxqj%2FYSoSNXkcVrTbmEkO8rxsD0%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;1842&quot; height=&quot;895&quot; data-origin-width=&quot;1842&quot; data-origin-height=&quot;895&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Velog 에서 자동 생성되는 목차 : 클릭 시 해당 내용으로 이동 됨.&lt;/figcaption&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;b&gt;스킨편집&lt;/b&gt; &lt;b&gt;기능&lt;/b&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;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. HTML작성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목차 HTML 을 작성합니다.&lt;br /&gt;해당 HTML 목차는 티스토리 스킨편집에서 게시글 본문에 해당하는 위치를 확인하고 해당 위치에 넣어줄 예정&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;!-- 목차 영역 made by GeehDev --&amp;gt;
&amp;lt;div id=&quot;indexArea&quot; class=&quot;index-area&quot;&amp;gt;
    &amp;lt;!-- 목차 제목  made by GeehDev --&amp;gt;
    &amp;lt;h3 class=&quot;index-area-title&quot;&amp;gt;목차&amp;lt;/h2&amp;gt;
    &amp;lt;!-- // 목차 제목 made by GeehDev --&amp;gt;

    &amp;lt;!-- 목차 내용 made by GeehDev --&amp;gt;
    &amp;lt;ul class=&quot;index-area-contents&quot;&amp;gt;&amp;lt;/ul&amp;gt;
    &amp;lt;!-- // 목차 내용 made by GeehDev --&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;!-- // 목차 영역 made by GeehDev --&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. CSS 작성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS는 저는 우선 간단하게 구성했습니다.&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;li&gt;기본 목차 (게시글 상단에 위치)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;css&quot; data-ke-language=&quot;css&quot;&gt;&lt;code&gt;/* 목차 컨테이너 스타일 */
#indexArea {
  border: 1px solid #efefef;
  border-radius: 10px;
  padding: 10px 25px;
  box-sizing: border-box;
  box-shadow: 0 2px 5px rgba(0,0,0,0.1);
  background-color: #fff;
  width: 400px;
  z-index: 100;
  font-size: 15px;
  position: fixed;
  top: 100px;
  right: -400px; /* 기본적으로 숨김 */
  transition: all 0.3s ease-in-out;
}

/* 열렸을 때의 상태 */
#indexArea.open {
  right: 10px; /* 나타나게 함 */
}

/* 목차 제목 */
#indexArea &amp;gt; .index-area-title {
  font-weight: bold;
}

/* 목차 구분선 */
#indexArea h4 {
  margin: 5px 0;
  padding: 0 5px;
  color: #b3b3b3;
}
#indexArea h4::after {
  content: &quot;&quot;;
  display: block;
  height: 1px;
  background-color: #ccc;
  margin-top: 10px;
}

/* 목차 리스트 스타일 */
#indexArea ul {
  padding: 0;
}
#indexArea ul li {
  list-style-type: none;
  margin: 0;
  line-height: 1.8;
}

/* 목차 링크 스타일 */
#indexArea ul li a {
  color: #555;
  text-decoration: none;
  transition: all 0.2s ease;
}
#indexArea ul li a:hover {
  color: #6bacce;
}
#indexArea ul li a.active {
  text-decoration: underline;
  color: #6bacce;
  font-weight: bold;
}

/* 활성화된 목차 항목 앞에 강조 바 */
#indexArea ul li a.active::before {
  content: &quot;&quot;;
  display: inline-block;
  height: 10px;
  width: 5px;
  background-color: #6bacce;
  margin-right: 5px;
}

/* 깊이에 따른 들여쓰기 적용 */
#indexArea ul li.depth1 {
  font-weight: bold;
}
#indexArea ul li.depth2 {
  margin-left: 1.5em;
}
#indexArea ul li.depth3 {
  margin-left: 3em;
}

/* 목차 토글 버튼 */
.index-toggle-btn {
  position: fixed;
  top: 100px;
  right: 10px;
  background-color: #6bacce;
  color: #fff;
  padding: 5px 10px;
  border-radius: 5px;
  cursor: pointer;
  font-size: 12px;
  z-index: 101;
  transition: all 0.3s ease-in-out;
}

.index-toggle-btn.hidden {
  right: -50px; /* 숨김 */
}

/* 반응형 설정 */
@media (max-width: 1500px) {
  #indexArea {
      position: relative;
      right: 0;
      top: 0;
      width: 100%;
      margin: 0 auto;
  }
  .index-toggle-btn {
      display: none;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. JS작성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;페이지를 로딩하면서 작성한 게시글의 html을 읽어와서 h태그들을 목차로 생성해 줄 js를 작성해 줌&lt;br /&gt;각 함수와 구조는 주석으로 작성해 놨습니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;/**
 * IndexGenerator 모듈
 * 블로그 게시글에서 h1, h2, h3 태그를 찾아 목차를 자동으로 생성
 */
const IndexGenerator = (function() {
  const targetSelector = '#article-view &amp;gt; .contents_style';
  const targetHeading = ['h1', 'h2', 'h3'];
  let headings;
  
  /****************************************
   * 초기화 관련
   * - init                   : 모듈 초기화
   * - initField              : 필드 초기화
   * - gernerateComponets     : 컴포넌트 생성
   * - bindEvents             : 이벤트 바인딩
   ****************************************/
  const init = function() {
      initField();
      if(headings &amp;amp;&amp;amp; headings.length &amp;gt; 0) {
          generateComponents();
          bindEvents();
      }
  };

  const initField = function() {
      headings = UTILS.getHeadings(targetSelector, targetHeading);
  };

  const generateComponents = function() {
      INDEX.gernerateIndex();
  };

  const bindEvents = function() {
      EVENTS.bindEvents();
  };

  /****************************************
   * UTIL 관련 메서드
   ****************************************/
  const UTILS = {
      /**
       * Heading 태그 가져오는 함수
       * @param {string} targetSelector - 헤딩을 검색할 대상 요소의 선택자 : 게시글 본문 선택자자
       * @param {Array&amp;lt;string&amp;gt;} targetHeading - 검색할 헤딩 태그 리스트 : h1, h2, h3
       * @returns {Array&amp;lt;Element&amp;gt;} - 찾은 헤딩 요소들의 배열
       */
      getHeadings: function(targetSelector, targetHeading) {
          let result = [];
          const contents = document.querySelector(targetSelector);
  
          if(contents) {
              const headingTags = contents.querySelectorAll(targetHeading.join(','));
              headingTags.forEach(el =&amp;gt; result.push(el));
          }
          return result;
      },
      /**
       * 문자열 공란 체크 함수
      * @param {string} str - 문자열
      * @returns {boolean} - 공란일 경우 true, 공란이 아닐경우 false
       */
      isEmpty: function(str) {
          return !str || str.replace(/&amp;amp;nbsp;/g, '').trim().length === 0;
      },
      /**
       * heading 태그에 따라 depth 클래스 반환하는 함수
       * @param {string} tagName 
       * @returns {string} - 해당하는 depth 클래스명
       */
      getDepthClass: function(tagName) {
          switch(tagName) {
              case 'H1': return 'depth1';
              case 'H2': return 'depth2';
              case 'H3': return 'depth3';
              default: return 'depth1';
          }
      },
  };

  /****************************************
   * INDEX 관련 메서드
   ****************************************/
  const INDEX = {
      /**
       * 목차 생성 함수
       */
      gernerateIndex: function() {
          INDEX.makeIndexCustom();
          INDEX.makeIndexToggleBtn();
          INDEX.labelHeadings();
      },
      /**
       * 커스텀 목차 element 만들어서 indexArea에에 넣는 함수
       */
      makeIndexCustom: function() {
          const indexCustomEl = document.querySelector('#indexArea .index-area-contents');
          headings.forEach(el =&amp;gt; {
              if(!UTILS.isEmpty(el.textContent)) {
                  let liEl = document.createElement('li');
                  let aEl = document.createElement('a');
                  
                  aEl.innerText = el.textContent.trim();
                  aEl.href = '#' + el.textContent.trim();
                  
                  liEl.classList.add(UTILS.getDepthClass(el.tagName));
                  liEl.appendChild(aEl);
                  indexCustomEl.appendChild(liEl);
              }
          });
      },
      /**
       * 목차 열기/닫기 토글 버튼 만드는 함수
       */
      makeIndexToggleBtn: function() {
          const toggleBtn = document.createElement('div');
          toggleBtn.classList.add('index-toggle-btn');
          toggleBtn.innerText = '&amp;lt; 목차 열기';
          document.body.appendChild(toggleBtn);
      },
      /** 
       * heading tag에 ID를 라벨링 함수 
       * */
      labelHeadings: function() {
          headings.forEach(el =&amp;gt; {
              el.setAttribute('id', el.textContent.trim());
          });
      },
  };

  /****************************************
   * EVENT 관련 메서드
   ****************************************/
  const EVENTS = {
      /**
       * 이벤트 바인드
       */
      bindEvents: function() {
          const toggleBtn = document.querySelector('.index-toggle-btn');
          const indexArea = document.querySelector('#indexArea');
          const indexEl = document.querySelectorAll('#indexArea .index-area-contents a');
          toggleBtn.addEventListener('click', ()=&amp;gt;{EVENTS.toggleIndexOnOff(toggleBtn, indexArea);});
          window.addEventListener('resize', ()=&amp;gt;{EVENTS.checkScreenSize(toggleBtn, indexArea);});
          EVENTS.checkScreenSize(toggleBtn, indexArea);
          indexEl.forEach(el =&amp;gt; {
              el.addEventListener('click', ()=&amp;gt;{EVENTS.highlightIndex(indexEl, el);});
          });
      },
      /**
       * 화면 사이즈 체크 함수
       * 1501 기준으로 접이식 목차, 그 보다 적을 경우는 기본 목차
       */
      checkScreenSize: function(toggleBtn, indexArea) {            
          if (window.innerWidth &amp;gt;= 1501) {
              indexArea.classList.remove('open');
              toggleBtn.classList.remove('hidden');
          } else {
              indexArea.classList.add('open');
              toggleBtn.classList.add('hidden');
          }
      },
      /**
       * 인덱스 목차 열고 닫는 함수
       */
      toggleIndexOnOff: function(toggleBtn, indexArea) {
          indexArea.classList.toggle('open');
          toggleBtn.innerText = indexArea.classList.contains('open') ? '&amp;gt; 목차 닫기' : '&amp;lt; 목차 열기';
      },
      /**
       * 선택된 요소 하이라이트 표시하는 함수수
       * @param {Array&amp;lt;Element&amp;gt;} indexEl - 인덱스 각 a 태그 element 리스트트
       * @param {element} el - 클릭된 element
       */
      highlightIndex: function(indexEl, el) {
          indexEl.forEach(other =&amp;gt; {
              other.classList.remove('active');
          });
          el.classList.add('active');
      }
  };

  

  return {
      init: () =&amp;gt; {init();}
  };
})();

// 페이지가 로드될 때 자동으로 IndexGenerator 초기화 실행
/**
* 문서가 완전히 로드된 후 IndexGenerator를 실행한다.
*/
document.addEventListener('DOMContentLoaded', IndexGenerator.init);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 블로그 관리에서 서식 입히기&lt;/h3&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/b2kNSq/btsMtusZBCa/78gbCWgBsbAbVKne0kVZdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2kNSq/btsMtusZBCa/78gbCWgBsbAbVKne0kVZdK/img.png&quot; width=&quot;100%&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;235&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.2888%; margin-right: 10px;&quot; data-widthpercent=&quot;32.67&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2kNSq/btsMtusZBCa/78gbCWgBsbAbVKne0kVZdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2kNSq%2FbtsMtusZBCa%2F78gbCWgBsbAbVKne0kVZdK%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;261&quot; height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9feQ7/btsMrFoZulr/TFxKxsqIFGqk460trhKW1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9feQ7/btsMrFoZulr/TFxKxsqIFGqk460trhKW1K/img.png&quot; width=&quot;100%&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;256&quot; data-is-animation=&quot;false&quot; style=&quot;width: 66.5484%;&quot; data-widthpercent=&quot;67.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9feQ7/btsMrFoZulr/TFxKxsqIFGqk460trhKW1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9feQ7%2FbtsMrFoZulr%2FTFxKxsqIFGqk460trhKW1K%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;586&quot; height=&quot;256&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;b&gt;블로그 관리 - 스킨편집 - html 편집&lt;/b&gt; 클릭하여 스킨을 편집할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) html 추가하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;html 탭을 클릭하고 본인의 스킨의 html 구조에서 게시글 본문에 해당하는 곳을 찾습니다.&lt;br /&gt;저의 경우는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;&amp;lt;s_article_rep&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;code&gt;&amp;lt;s_permalink_article_rep&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;code&gt;&amp;lt;div class=&quot;area_view&quot; id=&quot;article-view&quot;&amp;gt;&lt;/code&gt; 내 였습니다.&lt;br /&gt;해당 위치를 찾아서 해당 태그 내 치환자 위쪽으로 만들어둔 html을 넣습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;875&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfoFJK/btsMtHeBpNy/da6FSuuNikkCxPTJZc0Pek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfoFJK/btsMtHeBpNy/da6FSuuNikkCxPTJZc0Pek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfoFJK/btsMtHeBpNy/da6FSuuNikkCxPTJZc0Pek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfoFJK%2FbtsMtHeBpNy%2Fda6FSuuNikkCxPTJZc0Pek%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;752&quot; height=&quot;730&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;875&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) css, js 파일 넣기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일업로드 탭을 클릭하여 &lt;code&gt;[추가]&lt;/code&gt;버튼을 클릭해서 위에 만들어둔 css, js 파일을 업로드합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;919&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M01se/btsMsavAHUw/S0zFCyeD8rXuTt47AUrtR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M01se/btsMsavAHUw/S0zFCyeD8rXuTt47AUrtR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M01se/btsMsavAHUw/S0zFCyeD8rXuTt47AUrtR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM01se%2FbtsMsavAHUw%2FS0zFCyeD8rXuTt47AUrtR1%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;775&quot; height=&quot;780&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;919&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2) css, js 포함시키기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 html 탭을 클릭해서 &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; 태그를 찾습니다.&lt;br /&gt;&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;태그 가장 하위에 방금 업로드한 css, js 경로를 작성합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYWfwD/btsMq8kPUky/8Wq7SchY2x6V3R666HErck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYWfwD/btsMq8kPUky/8Wq7SchY2x6V3R666HErck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYWfwD/btsMq8kPUky/8Wq7SchY2x6V3R666HErck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYWfwD%2FbtsMq8kPUky%2F8Wq7SchY2x6V3R666HErck%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;703&quot; height=&quot;537&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;완성된 모습&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;접이식 목차 - 펼친 상태&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1901&quot; data-origin-height=&quot;901&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMFsmr/btsMshap4PZ/olO9b8eCNtTkNs0uusEgUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMFsmr/btsMshap4PZ/olO9b8eCNtTkNs0uusEgUk/img.png&quot; data-alt=&quot;접이식 목차 - 펼친 상태&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMFsmr/btsMshap4PZ/olO9b8eCNtTkNs0uusEgUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMFsmr%2FbtsMshap4PZ%2FolO9b8eCNtTkNs0uusEgUk%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;1901&quot; height=&quot;901&quot; data-origin-width=&quot;1901&quot; data-origin-height=&quot;901&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;접이식 목차 - 펼친 상태&lt;/figcaption&gt;
&lt;/figure&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;b&gt;접이식 목차 - 접힌 상태&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1891&quot; data-origin-height=&quot;889&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCTfFx/btsMrunIDMZ/1X3OLGj4cl6rpWk6Uz48LK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCTfFx/btsMrunIDMZ/1X3OLGj4cl6rpWk6Uz48LK/img.png&quot; data-alt=&quot;접이식 목차 - 접힌 상태&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCTfFx/btsMrunIDMZ/1X3OLGj4cl6rpWk6Uz48LK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCTfFx%2FbtsMrunIDMZ%2F1X3OLGj4cl6rpWk6Uz48LK%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;1891&quot; height=&quot;889&quot; data-origin-width=&quot;1891&quot; data-origin-height=&quot;889&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;접이식 목차 - 접힌 상태&lt;/figcaption&gt;
&lt;/figure&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;b&gt;기복 목차&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;887&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcVQQw/btsMtusZVFE/0v0rvvWQagvnc3BK2RYCC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcVQQw/btsMtusZVFE/0v0rvvWQagvnc3BK2RYCC1/img.png&quot; data-alt=&quot;기본목차&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcVQQw/btsMtusZVFE/0v0rvvWQagvnc3BK2RYCC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcVQQw%2FbtsMtusZVFE%2F0v0rvvWQagvnc3BK2RYCC1%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;1800&quot; height=&quot;887&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;887&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;velog에서 티스토리로 넘어오면서 스킨에 대해 거의 처음 건드려보는 건데 생각보다 직접 html, css, js를 건들 수 있어서 꽤나 재밌는 시간이었던 것 같습니다.&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;혹시라도....혹시라도 제 글을 보고 직접 작업하시는 분이 계신다면.... 저는 제 스킨에 맞게 css 설정등을 하였으니 이대로 쓰시기에는 아마 안 맞는 부분이 꽤나 있을 것 같습니다.&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;</description>
      <category>Notes/DayLog</category>
      <category>목차만들기</category>
      <category>블로그 목차</category>
      <category>블로그Tip</category>
      <category>인덱스</category>
      <category>티스토리</category>
      <category>팁</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/25</guid>
      <comments>https://geehyun.tistory.com/entry/%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC-%EA%B2%8C%EC%8B%9C%EA%B8%80-%EB%82%B4-%EB%AA%A9%EC%B0%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry25comment</comments>
      <pubDate>Fri, 21 Feb 2025 14:57:35 +0900</pubDate>
    </item>
    <item>
      <title>[Spring boot] URL 또는 리소스 경로에 ;jsessionid 발생 시 해결방법</title>
      <link>https://geehyun.tistory.com/entry/Spring-boot-URL-%EB%98%90%EB%8A%94-%EB%A6%AC%EC%86%8C%EC%8A%A4-%EA%B2%BD%EB%A1%9C%EC%97%90-jsessionid-%EB%B0%9C%EC%83%9D-%EC%8B%9C-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[spring boot] URL 또는 리소스 경로에 ;jsessionid 발생 시 해결방법.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c473b7/btsMs8wWdsB/9Sr900KsszK9PyPxDhKZa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c473b7/btsMs8wWdsB/9Sr900KsszK9PyPxDhKZa1/img.png&quot; data-alt=&quot;[Spring boot] URL 또는 리소스 경로에 ;jsessionid 발생 시 해결방법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c473b7/btsMs8wWdsB/9Sr900KsszK9PyPxDhKZa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc473b7%2FbtsMs8wWdsB%2F9Sr900KsszK9PyPxDhKZa1%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;1280&quot; height=&quot;720&quot; data-filename=&quot;[spring boot] URL 또는 리소스 경로에 ;jsessionid 발생 시 해결방법.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[Spring boot] URL 또는 리소스 경로에 ;jsessionid 발생 시 해결방법&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;발생상황&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최초 접속 시 CSS/JS/이미지 등 정적 리소스 파일을 불러오지 못하고 전부 깨지는 현상 발생&lt;br /&gt;=&amp;gt; 개발자 도구 내 console 창에 각 리소스 파일 404 오류 발생&lt;/li&gt;
&lt;li&gt;URI 경로를 체크하는 JS로직이 있었는데 URI 경로에 &lt;code&gt;;jsessionid&lt;/code&gt; 값이 붙어 정상적으로 처리하지 못함&lt;/li&gt;
&lt;/ul&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;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;URL 경로에 &lt;code&gt;;jsessionid&lt;/code&gt; 값이 붙음&lt;/li&gt;
&lt;li&gt;CSS/JS/이미지 경로 등 정적 리소스 경로에 &lt;code&gt;;jsessionid&lt;/code&gt; 값이 붙음&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;perl&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;/css/common.css;jsessionid=%5B%5B%~~~?v=20241209&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 상황이 원인이었고, 이는 톰캣 등 특정 웹 컨테이너에서 브라우저 세션 체크를 위해, URL에 &lt;code&gt;;jsessionid&lt;/code&gt;를 포함해 리다이렉트 하기 때문에 발생 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; 이는 오류는 아니고, 브라우저에서 쿠키사용을 허용하는지 여부를 알 수 없기 때문에 최초 접속 시에 쿠키 + 위 URL에 &lt;code&gt;;jsessionid&lt;/code&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;h2 data-ke-size=&quot;size26&quot;&gt;해결방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션 체크를 쿠키로만 하도록 세션 트랙킹 방식을 제한하여 해결할 수 있음.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. spring boot일 경우&lt;/h3&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;# aplication.yml 일 경우
sever:
  servlet:
    session:
      tracking-mode: cookie #세션을 쿠키로만 추적

# aplication.properties 일 경우
sever.servlet.session.tracking-mode : cookie #세션을 쿠키로만 추적&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. spring일 경우&lt;/h3&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;!-- web.xml에 작성 --&amp;gt;
&amp;lt;session-config&amp;gt;
    &amp;lt;tracking-mode&amp;gt;COOKIE&amp;lt;/tracking-mode&amp;gt;
&amp;lt;/session-config&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 위 방법 모두 사용했는데 해결이 안 될 경우&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;브라우저가 쿠키를 차단하고 있을 가능성이 있음 &amp;rarr; 브라우저 쿠키 설정 확인 필요&lt;/li&gt;
&lt;li&gt;서버 설정에서 tracking-mode를 쿠키로 설정했는지 확인 필요&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엄청 간단한 문제인데도 처음 겪으니 원인을 찾는 거부터 시간이 꽤나 소요되었다.&lt;br /&gt;같은 문제를 겪으시는 분이 있다면 얼른 원인을 찾아서 본인 상황에 맞는 해결방법을 적용하실 수 있길 바랍니다.&lt;/p&gt;</description>
      <category>Study/Spring boot</category>
      <category>JSESSIONID</category>
      <category>spring</category>
      <category>spring boot</category>
      <category>세션트랙킹방식</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/24</guid>
      <comments>https://geehyun.tistory.com/entry/Spring-boot-URL-%EB%98%90%EB%8A%94-%EB%A6%AC%EC%86%8C%EC%8A%A4-%EA%B2%BD%EB%A1%9C%EC%97%90-jsessionid-%EB%B0%9C%EC%83%9D-%EC%8B%9C-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95#entry24comment</comments>
      <pubDate>Fri, 21 Feb 2025 14:16:44 +0900</pubDate>
    </item>
    <item>
      <title>[Spring boot] 스프링 vs 스프링 부트</title>
      <link>https://geehyun.tistory.com/entry/Spring-boot-%EC%8A%A4%ED%94%84%EB%A7%81-vs-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[spring boot] 스프링 vs 스프링 부트.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bueySW/btsLKHAsuI4/2gKDJoVkQZe4rfJHbl4tx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bueySW/btsLKHAsuI4/2gKDJoVkQZe4rfJHbl4tx1/img.png&quot; data-alt=&quot;[spring boot] 스프링 vs 스프링 부트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bueySW/btsLKHAsuI4/2gKDJoVkQZe4rfJHbl4tx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbueySW%2FbtsLKHAsuI4%2F2gKDJoVkQZe4rfJHbl4tx1%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;1280&quot; height=&quot;720&quot; data-filename=&quot;[spring boot] 스프링 vs 스프링 부트.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[spring boot] 스프링 vs 스프링 부트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;Spring 이란&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Spring의 핵심 가치&lt;/b&gt;&lt;br /&gt;&quot;애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비스니스 로직 구현에만 집중할 수 있게끔 하는 것&quot;&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;Spring은 Java 기반 애플리케이션 개발을 위한 프레임워크입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;  프레임워크? 라이브러리?&lt;/b&gt;&lt;br /&gt;&lt;code&gt;프레임워크&lt;/code&gt;란 소프트웨어 개발에 필요한&amp;nbsp;&lt;b&gt;기본적인 코드와 설계 패턴을 제공&lt;/b&gt;하여, 개발에 필요한 기능 및 규칙 등의 &lt;b&gt;뼈대를 제공하여 더 효율적이고 체계적인 개발을 도와주는 도구&lt;/b&gt; 입니다.&lt;br /&gt;&lt;code&gt;라이브러리&lt;/code&gt;는 개발에 필요한 &lt;b&gt;특정 기능을 제공해주는 도구&lt;/b&gt;로 개발자의 필요에 의해 라이브러리를 호출하여 사용할 수 있습니다.&lt;br /&gt;&lt;br /&gt;프레임워크와 라이브러리의 가장 큰 &lt;b&gt;차이점&lt;/b&gt;은 &lt;b&gt;제어권이 누구에게 있냐&lt;/b&gt;가 있습니다.&lt;br /&gt;- 라이브러리의 경우 개발자가 직접 해당 라이브러리를 호출하여 사용하는 반면&lt;br /&gt;- 스프링에서는 객체를 개발자가 직접 생성하지 않고 객체의 생명주기를 스프링 컨테이너에 위임합니다.&lt;br /&gt;즉, 제어의 역전(IoC: Inversion of Control)을 통해 프레임워크가 개발자의 코드를 호출하고 객체의 생명 주기를 관리합니다.&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;Spring은 다음과 같은 특징을 갖습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;경량화&lt;/b&gt;&lt;br /&gt;필요한 기능만 선택적으로 사용할 수 있슴니다.&lt;br /&gt;(필요한 모듈만 선택적으로 dependency에 추가하거나 XML, Java Congit 기반으로 설정 가능)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의존성 주입 (DI)&lt;/b&gt;&lt;br /&gt;객체 생성을 직접하지 않고 스프링 컨테이너가 관리합니다.&lt;br /&gt;이를 통해 코드 간 결합도를 낮추고 유연성과 재사용성을 높일 수 있습니다.
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public class MyClass {
	public MyClass() {}
}


// 기존 방식
public class MyController {
	private MyClass myClass = new MyClass();
}

// 의존성 주입 방식 1 : 생성자를 통한 주입
@Controller
public class MyController {
	private MyClass myClass;
    @Autowired
    public MyController(MyClass myClass) {
        this.myClass = myClass;
    }
}

// 의존성 주입 방식 2 : 각각 필드 선언을 통한 의존성 주입
@Controller
public class MyController {
    @Autowired
    private MyClass myClass;
}

// 의존성 주입 방식 3 : @RequiredArgsContstructor을 통한 final 필드에 대한 자동 의존성 주입
@Controller
@RequiredArgsContstructor
public class MyController {
    private MyClass myClass;
}

// 의존성 주입 방식 4 : setter메서드를 이용한 방식
@Controller
public class MyController {
    private MyClass myClass;
    @Autowired
    public setMyClass(MyClass myClass) {
        this.myClass = myClass;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;관점 지향 프로그래밍 (AOP)&lt;/b&gt;&lt;br /&gt;로직을 &lt;b&gt;핵심기능 : 비즈니스 로직&lt;/b&gt; 과 &lt;b&gt;부가기능 : 로깅, 보안, 트랜잭션 등 공통 기능&lt;/b&gt; 의 관점으로 구분하여&lt;br /&gt;코드 중복을 줄이고 유지보수에 용이합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1865&quot; data-origin-height=&quot;1735&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8CVLy/btsLLMHLTn4/RDx5vbzZIOIpIz4YDktwEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8CVLy/btsLLMHLTn4/RDx5vbzZIOIpIz4YDktwEk/img.png&quot; data-alt=&quot;AOP 로직 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8CVLy/btsLLMHLTn4/RDx5vbzZIOIpIz4YDktwEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8CVLy%2FbtsLLMHLTn4%2FRDx5vbzZIOIpIz4YDktwEk%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;1865&quot; height=&quot;1735&quot; data-origin-width=&quot;1865&quot; data-origin-height=&quot;1735&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AOP 로직 예시&lt;/figcaption&gt;
&lt;/figure&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;br /&gt;&lt;i&gt;Spring MVC, Spring Data, Spring Security, Spring Batch, Spring Web &lt;/i&gt;등의 다양한 기능을 모듈로 제공하고 있습니다.&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXVNpe/btsLLUeGRRR/659dhKHLv8PhnXLjTkOS8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXVNpe/btsLLUeGRRR/659dhKHLv8PhnXLjTkOS8K/img.png&quot; data-alt=&quot;스프링 프레임워크의 모듈 예시 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXVNpe/btsLLUeGRRR/659dhKHLv8PhnXLjTkOS8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXVNpe%2FbtsLLUeGRRR%2F659dhKHLv8PhnXLjTkOS8K%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;720&quot; height=&quot;540&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스프링 프레임워크의 모듈 예시 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Spring Boot 란&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Spring boot 공식 사이트 문구&lt;br /&gt;&lt;/b&gt;&quot;스프링 부트를 이용하면 단독으로 실행 가능한 사용 수준의 스프링 기반 애플리케이션을 손쉽게 만들 수 있습니다.&quot;&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;Spring Boot는 이러한 Spring 프레임워크를 기반으로&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-ke-style=&quot;style3&quot;&gt;설정 간소화(Auto-Configuration)&lt;/li&gt;
&lt;li data-ke-style=&quot;style3&quot;&gt;내장 tomcat 제공&lt;/li&gt;
&lt;li data-ke-style=&quot;style3&quot;&gt;단독 실행 가능한 JAR 파일 생성&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 기존 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Spring&lt;span&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;h1&gt;Spring 과 Spring Boot의 차이점 정리&lt;/h1&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 설정 방식의 차이&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring의 경우 XML 기반 설정방식으로 초기 설정이 다소 복잡할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1736676108039&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- spring-config.xml --&amp;gt;
&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd&quot;&amp;gt;

    &amp;lt;!-- Bean 설정 --&amp;gt;
    &amp;lt;bean id=&quot;myService&quot; class=&quot;com.example.MyService&quot;&amp;gt;
        &amp;lt;property name=&quot;repository&quot; ref=&quot;myRepository&quot;/&amp;gt;
    &amp;lt;/bean&amp;gt;

    &amp;lt;bean id=&quot;myRepository&quot; class=&quot;com.example.MyRepository&quot;/&amp;gt;
&amp;lt;/beans&amp;gt;&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;Spring Boot의 경우 자동설정(Auto-Configuration)을 지원하여 프레임워크 자체에서 필요한 의존성을 자동으로 관리합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1736676306803&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Spring Boot의 자동 설정
@SpringBootApplication
public class SpringBootApplication {
	public static void main(Stirng[] args) {
    	SpringBootApplication.run(SpringBootApplication.class, args);
    }
}&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;b&gt;2. 의존성 관리&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring에서는 개발에 필요한 각 모듈 별 의존성을 개발자가 직접 설정해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1736676389539&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- pom.xml --&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-webmvc&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;5.3.6&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-context&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;5.3.6&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&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;반면, Spring Boot 에서는&amp;nbsp; &lt;code&gt;spring-boot-starter&lt;/code&gt; 를 사용하여 의존성을 한번에 관리할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1736676563644&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- pom.xml --&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-boot-starter-web&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;&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;b&gt;3. 서버 의존성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring으로 웹 애플리케이션 개발을 하는 경우 tomcat 과 같은 외부 WAS(Web Applicaiton Server)가 필요하며, war파일로 빌드하여 배포합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Boot 의 웹 애플리케이션 개발을 할 때 내장 WAS를 포함합니다. 예를들어 &lt;code&gt;spring-boot-starter-web&lt;/code&gt; 의존성 내에는 tomcat이 포함됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lHPvM/btsLK7ZQrj9/UEJB9MpBKJkoVrvkBYAtb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lHPvM/btsLK7ZQrj9/UEJB9MpBKJkoVrvkBYAtb1/img.png&quot; data-alt=&quot;내장 tomcat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lHPvM/btsLK7ZQrj9/UEJB9MpBKJkoVrvkBYAtb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlHPvM%2FbtsLK7ZQrj9%2FUEJB9MpBKJkoVrvkBYAtb1%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;587&quot; height=&quot;419&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내장 tomcat&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&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;b&gt;차이점 정리&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.938%; text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.7751%; text-align: center;&quot;&gt;&lt;b&gt;Spring&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.2868%; text-align: center;&quot;&gt;&lt;b&gt;Spring Boot&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.938%; text-align: center;&quot;&gt;&lt;b&gt;설정방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.7751%;&quot;&gt;XML/Java Config 파일을 통한 다소 복잡한 설정 방식&lt;/td&gt;
&lt;td style=&quot;width: 42.2868%;&quot;&gt;자동설정(Auto-Configuration) 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.938%; text-align: center;&quot;&gt;&lt;b&gt;서버&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.7751%;&quot;&gt;외부 WAS 필요&lt;/td&gt;
&lt;td style=&quot;width: 42.2868%;&quot;&gt;내장 WAS 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.938%; text-align: center;&quot;&gt;&lt;b&gt;실행 파일&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.7751%;&quot;&gt;WAR&lt;/td&gt;
&lt;td style=&quot;width: 42.2868%;&quot;&gt;JAR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.938%; text-align: center;&quot;&gt;&lt;b&gt;장/단점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.7751%;&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;br /&gt;- 다양한 애플리케이션 아키턱처 지원&lt;br /&gt;- 세밀한 설정 제어로 복잡한 비즈니스 로직 구현에 용이&lt;br /&gt;- 커스터 마이징이 용이하고, 대규모 앤터프라이즈 프로젝트에 적합&lt;br /&gt;&lt;br /&gt;&lt;b&gt;단점&lt;/b&gt;&lt;br /&gt;- 초기 설정이 복잡하고 시간이 많이 소요됨&lt;br /&gt;- 학습 곡선이 가파름&lt;/td&gt;
&lt;td style=&quot;width: 42.2868%;&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;br /&gt;- 자동설정을 통해 빠른 개발 돌입 가능&lt;br /&gt;- 내장 서버와 독립 적으로 실행가능한 JAR 파일을 이용하여 쉽게 배포 가능&lt;br /&gt;- 학습 곡선이 비교적 완만함&lt;br /&gt;&lt;br /&gt;&lt;b&gt;단점&lt;/b&gt;&lt;br /&gt;- 커스터 마이징 설정이 다소 복잡함&lt;br /&gt;- 기존 Spring 프로젝트 보다 유연성일 떨어짐&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;참고&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;스프링 부트 핵심 가이드 - 스프링 부트를 활용한 애플리케이션 개발 실무&amp;nbsp; - 정지우 지음&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 책을 공부하며 작성합니다.&lt;/p&gt;</description>
      <category>Study/Spring boot</category>
      <category>spring</category>
      <category>spring boot</category>
      <category>라이브러리</category>
      <category>스프링</category>
      <category>스프링과 스프링 부트의 차이점</category>
      <category>스프링부트</category>
      <category>프레임워크</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/22</guid>
      <comments>https://geehyun.tistory.com/entry/Spring-boot-%EC%8A%A4%ED%94%84%EB%A7%81-vs-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8#entry22comment</comments>
      <pubDate>Sun, 12 Jan 2025 19:20:33 +0900</pubDate>
    </item>
    <item>
      <title>[MariaDB] 내장 함수① - 문자/시간/수치 관련</title>
      <link>https://geehyun.tistory.com/entry/MariaDB-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98%E2%91%A0-%EB%AC%B8%EC%9E%90%EC%8B%9C%EA%B0%84%EC%88%98%EC%B9%98-%EA%B4%80%EB%A0%A8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;velog에서 이관해온 글&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[MariaDB] 내장 함수①.png&quot; data-origin-width=&quot;4726&quot; data-origin-height=&quot;2475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S2Xt6/btsJQBhzIo0/D9KiQYuJ9p7qpR3sokcFw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S2Xt6/btsJQBhzIo0/D9KiQYuJ9p7qpR3sokcFw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S2Xt6/btsJQBhzIo0/D9KiQYuJ9p7qpR3sokcFw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS2Xt6%2FbtsJQBhzIo0%2FD9KiQYuJ9p7qpR3sokcFw1%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;4726&quot; height=&quot;2475&quot; data-filename=&quot;[MariaDB] 내장 함수①.png&quot; data-origin-width=&quot;4726&quot; data-origin-height=&quot;2475&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;함수&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 기능을 수행하는 작은 프로그램으로 다양한 프로그래밍 언어에서 사용되는 개념입니다.&lt;br /&gt;SQL에서도 해당 개념을 사용하며 다양한 내장 함수를 제공하고 있어 이를 이용할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;autohotkey&quot;&gt;&lt;code&gt;함수명(인자, 인자,,,)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;형식으로 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인자로 넣어야하는 값들은 함수마다 다르니 아래의 MariaDB에서 주로 사용하는 함수 리스트를 보고 활용해보세요!&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내장함수의 경우 양이 많아 두 개로 나눠서 작성했습니다.&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;➡️ &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://velog.io/@wkdwl578/SQL-MariaDB-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98-%EC%A0%9C%EC%96%B4%ED%9D%90%EB%A6%84%EC%A0%95%EB%B3%B4-%EA%B4%80%EB%A0%A8&quot;&gt;MariaDB 내장 함수② - 제어흐름/정보 관련&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문자 관련 함수&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 다루는 내장 함수입니다! 가장 많이 사용됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;문자열 자르기&lt;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35px; text-align: center;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 319px; text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 498px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35px;&quot; align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 319px;&quot;&gt;&lt;code&gt;LEFT(문자열 \ 변수 \ 열, 문자수)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 498px;&quot;&gt;- 문자열의 왼쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.&lt;br /&gt;- 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35px;&quot; align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 319px;&quot;&gt;&lt;code&gt;RIGHT(문자열 \ 변수 \ 열, 문자수)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 498px;&quot;&gt;- 문자열의 오른쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.&lt;br /&gt;- 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35px;&quot; align=&quot;center&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 319px;&quot;&gt;&lt;code&gt;MID(문자열 \ 변수 \ 열, 시작위치, 문자수)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 498px;&quot;&gt;- 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.&lt;br /&gt;- 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다.&lt;br /&gt;- 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35px;&quot; align=&quot;center&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 319px;&quot;&gt;&lt;code&gt;SUBSTRING(문자열 \ 변수 \ 열, 시작위치, 문자수)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 498px;&quot;&gt;- 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.&lt;br /&gt;- 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다.&lt;br /&gt;- 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35px;&quot; align=&quot;center&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 319px;&quot;&gt;&lt;code&gt;SUBSTR(문자열 \ 변수 \ 열, 시작위치, 문자수)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 498px;&quot;&gt;- 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.&lt;br /&gt;- 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다.&lt;br /&gt;- 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35px;&quot; align=&quot;center&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 319px;&quot;&gt;&lt;code&gt;SUBSTRING_INDEX(문자열 \ 변수 \ 열, 구분문자, 개수)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 498px;&quot;&gt;- 문자열의 왼쪽부터 입력받은 '구분문자'기준으로 잘라서 입력한 개수만큼 문자열을 리턴합니다.&lt;br /&gt;- 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1727604386702&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 1. LEFT(문자열 | 변수 | 열, 문자수)  : 문자열의 왼쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
-- 2. RIGHT(문자열 | 변수 | 열, 문자수) : 문자열의 오른쪽부터 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
# 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.
SELECT LEFT('나는 바보가 아니다', 5) AS result;                # result : '나는 바보'
SELECT LEFT('나는 바보가 아니다', 100) AS result;              # result : '나는 바보가 아니다'
SELECT RIGHT('나는 바보가 아니다', 3) AS result;               # result : '아니다'
SELECT RIGHT('나는 바보가 아니다', 100) AS result;             # result : '나는 바보가 아니다'

-- 3. MID(문자열 | 변수 | 열, 시작위치, 문자수) : 문자열에서 지정한 시작위치부터(시작위치 포함) 왼쪽으로 입력받은 문자 수 만큼 부분 문자열을 리턴합니다.
-- 4. SUBSTRING(문자열 | 변수 | 열, 시작위치, 문자수) : 동일
-- 5. SUBSTR(문자열 | 변수 | 열, 시작위치, 문자수) : 동일
# 다른 프로그래밍 언어와 다르게 MariaDB에서는 문자열 첫 시작점이 0이 아니라 1부터 시작합니다.
# 주어진 문자열보다 큰 값의 문자수를 넣을 시 시작위치부터(시작위치 포함) 왼쪽의 남은 문자열 전체를 리턴합니다.
SELECT MID('나는 바보가 아니다', 4, 2) AS result;              # result : '바보'
SELECT MID('나는 바보가 아니다', 4, 100) AS result;            # result : '나는 바보가 아니다'
SELECT SUBSTRING('나는 바보가 아니다', 4, 2) AS result;        # result : '바보'
SELECT SUBSTRING('나는 바보가 아니다', 4, 100) AS result;      # result : '나는 바보가 아니다'
SELECT SUBSTR('나는 바보가 아니다', 4, 2) AS result;           # result : '바보'
SELECT SUBSTR('나는 바보가 아니다', 4, 100) AS result;         # result : '나는 바보가 아니다'

-- 6. SUBSTRING_INDEX(문자열 | 변수 | 열, 구분문자, 개수) : 문자열의 왼쪽부터 입력받은 '구분문자'기준으로 잘라서 입력한 개수만큼 문자열을 리턴합니다.
# 주어진 문자열보다 큰 값의 문자수를 넣을 시 문자열 전체를 리턴합니다.
SELECT SUBSTRING_INDEX('www.naver.com', '.', 2) AS result;   # result : 'www.naver'
# '.'으로 짜른 후 두번째 나눠진 곳 까지 문자열로 리턴 (=&amp;gt; 두번쨰 구분자를 만나기 직전까지의 문자열 리턴)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;문자열-내-위치-찾기&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문자열 내 위치 찾기&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;background-color: #ffffff; color: #212529; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 5.81396%;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 31.8605%;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 62.093%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 5.81396%; text-align: center;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 31.8605%;&quot;&gt;INSTR(문자열 \ 변수 \ 열, 부분 문자열)&lt;/td&gt;
&lt;td style=&quot;width: 62.093%;&quot;&gt;- 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.&lt;br /&gt;- 해당 부분 문자열이 없다면 0을 반환합니다.&lt;br /&gt;- 해당 부분 문자열이 문자열 내 다수 있을 시 가장 처음 만나는 자리위치만 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 5.81396%; text-align: center;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 31.8605%;&quot;&gt;POSITION(부분 문자열 IN 문자열 \ 변수 \ 열)&lt;/td&gt;
&lt;td style=&quot;width: 62.093%;&quot;&gt;- 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.&lt;br /&gt;- 해당 부분 문자열이 없다면 0을 반환합니다.&lt;br /&gt;- 해당 부분 문자열이 문자열 내 다수 있을 시 가장 처음 만나는 자리위치만 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 5.81396%; text-align: center;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;width: 31.8605%;&quot;&gt;LOCATE(부분 문자열, 문자열 \ 변수 \ 열, (생략가능) 시작위치)&lt;/td&gt;
&lt;td style=&quot;width: 62.093%;&quot;&gt;- 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.&lt;br /&gt;- 시작위치는 생략가능하며, 생략 시 문자의 첫번째위치부터 찾고, 지정해줄 시 입력한 위치부터 부분문자열을 찾습니다.&lt;br /&gt;- 해당 부분 문자열이 없다면 0을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 5.81396%; text-align: center;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 31.8605%;&quot;&gt;ELT(정수, 문자열 목록(값, 값2,,,))&lt;/td&gt;
&lt;td style=&quot;width: 62.093%;&quot;&gt;- 주어진 문자열 목록에서 입력된 정수번째 값을 리턴해줍니다.&lt;br /&gt;- 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 5.81396%; text-align: center;&quot;&gt;11&lt;/td&gt;
&lt;td style=&quot;width: 31.8605%;&quot;&gt;FIELD(찾을 값, 문자열 목록(값1, 값2,,,))&lt;/td&gt;
&lt;td style=&quot;width: 62.093%;&quot;&gt;- 주어진 문자열 목록에서 찾을 값의 위치를 반환해줍니다.&lt;br /&gt;- 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 5.81396%; text-align: center;&quot;&gt;12&lt;/td&gt;
&lt;td style=&quot;width: 31.8605%;&quot;&gt;FIELD_IN_SET(찾을 값, 문자열(문자열 내에서 콤마로 구분필요))&lt;/td&gt;
&lt;td style=&quot;width: 62.093%;&quot;&gt;- 주어진 문자열 목록에서 찾을 값의 위치를 반환해줍니다.&lt;br /&gt;- 찾을 값과 콤마로 구분된 값이 완벽히 일치해야해서 콤마로 구분된 기준으로 띄어쓰기라도 하나 더 있으면 못찾습니다.&lt;br /&gt;- 콤마로 구분 안되어있어도 못찾습니다.&lt;br /&gt;- 찾을 값이 해당 문자열 내에 없을 경우 0을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 7. INSTR(문자열 | 변수 | 열, 부분 문자열) : 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.
-- 8. POSITION(부분 문자열 IN 문자열 | 변수 | 열) : 위와 동일
# 해당 부분 문자열이 없다면 0을 반환합니다.
# 해당 부분 문자열이 문자열 내 다수 있을 시 가장 처음 만나는 자리위치만 반환합니다.
SELECT INSTR('010-0000-0000', '-');
SELECT POSITION('-' IN '010-0000-0000');

-- 9. LOCATE(부분 문자열, 문자열 | 변수 | 열, (생략가능) 시작위치) : 문자열에서 입력받은 부분 문자열의 시작위치를 리턴해줍니다.
# 시작위치는 생략가능하며, 생략 시 문자의 첫번째위치부터 찾고, 지정해줄 시 입력한 위치부터 부분문자열을 찾습니다.
# 해당 부분 문자열이 없다면 0을 반환합니다.
SELECT LOCATE('-', '010-0000-0000');    # 맨 처음자리 부터 찾음
SELECT LOCATE('-', '010-0000-0000', 5); # 5 번째 자리부터 찾음

-- 10. ELT(정수, 문자열 목록(값, 값2,,,)) : 주어진 문자열 목록에서 입력된 정수번째 값을 리턴해줍니다.
# 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다.
SELECT ELT(2, '월', '화', '수', '목', '금', '토'),  # '화' 반환
ELT(8, '월', '화', '수', '목', '금', '토');         # NULL 반환

-- 11. FIELD(찾을 값, 문자열 목록(값1, 값2,,,)) : 주어진 문자열 목록에서 찾을 값의 위치를 반환해줍니다.
# 주어진 값 리스트 보다 큰 정수가 들어오면 NULL이 반환됩니다.
select FIELD('수', '월', '화', '수', '목', '금', '토'); # 3 반환

-- 12. FIELD_IN_SET(찾을 값, 문자열(문자열 내에서 콤마로 구분필요)) : 콤마로 값이 구분되어있는 문자열 내에서 찾을 값이 콤마로 구분한 위치로 몇번째에 위치해있는지 반환합니다.
# 찾을 값과 콤마로 구분된 값이 완벽히 일치해야해서 콤마로 구분된 기준으로 띄어쓰기라도 하나 더 있으면 못찾습니다.
# 콤마로 구분 안되어있어도 못찾습니다.
# 찾을 값이 해당 문자열 내에 없을 경우 0을 반환합니다.
SELECT FIND_IN_SET('수', '월,화,수,목,금,토');      # 3 반환
SELECT FIND_IN_SET('수', '월, 화, 수, 목, 금, 토'); # 0 반환 : 띄어쓰기 들어가서 못찾음
SELECT FIND_IN_SET('수', '월화수목금토');           # 0 반환 : 콤마로 구분안되어있어서 못찾음&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;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 134px;&quot;&gt;NO&lt;/td&gt;
&lt;td style=&quot;width: 293px;&quot;&gt;함수명&lt;/td&gt;
&lt;td style=&quot;width: 425px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 134px;&quot; align=&quot;center&quot;&gt;13&lt;/td&gt;
&lt;td style=&quot;width: 293px;&quot;&gt;&lt;code&gt;LCASE(문자열 \ 변수 \ 열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 425px;&quot;&gt;- 영문 문자열에 대해 소문자로 변환해줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 134px;&quot; align=&quot;center&quot;&gt;14&lt;/td&gt;
&lt;td style=&quot;width: 293px;&quot;&gt;&lt;code&gt;LOWER(문자열 \ 변수 \ 열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 425px;&quot;&gt;- 영문 문자열에 대해 소문자로 변환해줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 134px;&quot; align=&quot;center&quot;&gt;15&lt;/td&gt;
&lt;td style=&quot;width: 293px;&quot;&gt;&lt;code&gt;UCASE(문자열 \ 변수 \ 열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 425px;&quot;&gt;- 영문 문자열에 대해 대문자로 변환해줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 134px;&quot; align=&quot;center&quot;&gt;16&lt;/td&gt;
&lt;td style=&quot;width: 293px;&quot;&gt;&lt;code&gt;UPPER(문자열 \ 변수 \ 열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 425px;&quot;&gt;- 영문 문자열에 대해 대문자로 변환해줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 134px;&quot; align=&quot;center&quot;&gt;17&lt;/td&gt;
&lt;td style=&quot;width: 293px;&quot;&gt;&lt;code&gt;LTRIM(문자열 \ 변수 \ 열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 425px;&quot;&gt;- 문자열의 좌측 공백 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 134px;&quot; align=&quot;center&quot;&gt;18&lt;/td&gt;
&lt;td style=&quot;width: 293px;&quot;&gt;&lt;code&gt;RTRIM(문자열 \ 변수 \ 열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 425px;&quot;&gt;- 문자열의 우측 공백 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 134px;&quot; align=&quot;center&quot;&gt;19&lt;/td&gt;
&lt;td style=&quot;width: 293px;&quot;&gt;&lt;code&gt;TRIM(문자열 \ 변수 \ 열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 425px;&quot;&gt;- 문자열의 좌우 공백 제거&lt;br /&gt;- 문자열 사이사이에 있는 공백은 제거하지 못합니다. (제거하려면 REPLACE 함수 이용필요)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1727604518896&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 13. LCASE(문자열 | 변수 | 열) : 영문 문자열에 대해 소문자로 변환해줍니다.
-- 14. LOWER(문자열 | 변수 | 열) : 위와 동일                       
SELECT LCASE(TitlE), LOWER(TitlE);              # 반환 : title, title

-- 15. UCASE(문자열 | 변수 | 열) : 영문 문자열에 대해 대문자로 변환해줍니다.
-- 16. UPPER(문자열 | 변수 | 열) : 위와 동일
SELECT UCASE(TitlE), UPPER(TitlE);             # 반환 : TITLE, TITLE

-- 17. LTRIM(문자열 | 변수 | 열) : 문자열의 좌측 공백 제거
-- 18. RTRIM(문자열 | 변수 | 열) : 문자열의 우측 공백 제거
-- 19. TRIM(문자열 | 변수 | 열) : 문자열의 좌우 공백 제거
# 문자열 사이사이에 있는 공백은 제거하지 못합니다. (제거하려면 REPLACE 함수 이용필요)
SET @str = '       빈 문자열    ';
SELECT LTRIM(@str);                           # 반환 : 빈 문자열    
SELECT RTRIM(@str);                           # 반환 :        빈 문자열
SELECT TRIM(@str);                            # 반환 : 빈 문자열&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;문자열-길이-및-바이트-수&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문자열 길이 및 바이트 수&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;background-color: #ffffff; color: #212529; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.04651%;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 33.0233%;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 60.814%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.04651%;&quot;&gt;20&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;CHAR_LENGTH(문자열 \ 변수 \ 열)&lt;/td&gt;
&lt;td style=&quot;width: 60.814%;&quot;&gt;- 문자열 내 문자수를 반환합니다. (공백포함)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.04651%;&quot;&gt;21&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;CHARACTER_LENGTH(문자열 \ 변수 \ 열)&lt;/td&gt;
&lt;td style=&quot;width: 60.814%;&quot;&gt;- 문자열 내 문자수를 반환합니다. (공백포함)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.04651%;&quot;&gt;22&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;LENGTH(문자열 \ 변수 \ 열)&lt;/td&gt;
&lt;td style=&quot;width: 60.814%;&quot;&gt;- 문자열의 바이트수를 반환합니다.&lt;br /&gt;- (MariaDB)한 글자 당 영문,숫자 1바이트 / 한글,한문 3바이트 / 이모지 4바이트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.04651%;&quot;&gt;23&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;LENGTHB(문자열 \ 변수 \ 열)&lt;/td&gt;
&lt;td style=&quot;width: 60.814%;&quot;&gt;- 문자열의 바이트수를 반환합니다.&lt;br /&gt;- (MariaDB)한 글자 당 영문,숫자 1바이트 / 한글,한문 3바이트 / 이모지 4바이트&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 class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 20. CHAR_LENGTH(문자열 | 변수 | 열) :  문자열 내 문자수를 반환합니다. (공백포함)
-- 21. CHARACTER_LENGTH(문자열 | 변수 | 열) : 위와 동일
SELECT CHAR_LENGTH('홍길동');                  # 반환 : 3
SELECT CHAR_LENGTH('Senior Engineer');        # 반환 : 15
SELECT CHAR_LENGTH('데이터베이스SQL\u2506');    # 반환 : 14
SELECT CHAR_LENGTH(' MariaDB');               # 반환 : 8
SELECT CHARACTER_LENGTH(' MariaDB');          # 반환 : 8  

-- 22. LENGTH(문자열 | 변수 | 열) : 문자열의 바이트수를 반환합니다.
-- 23. LENGTHB(문자열 | 변수 | 열) : 위와동일
# 한 글자 당 영문,숫자 1바이트 / 한글,한문 3바이트 / 이모지 4바이트
SELECT LENGTH('홍길동');                       # 반환 : 9
SELECT LENGTH('Senior Engineer');             # 반환 : 15
SELECT LENGTHB(' MariaDB');                   # 반환 : 8&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;b&gt;문자열 결합&lt;/b&gt;&lt;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;24&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CONCAT(문자열 \ 변수 \ 열, 문자열 \ 변수 \ 열,,,)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-입력된 문자열을 합쳐서 하나의 문자열로 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;25&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CONCAT_WS(구분문자, 문자열 \ 변수 \ 열, 문자열 \ 변수 \ 열,,,)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;- 입력된 문자열을 구분문자로 구분하여 하나의 문자열로 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1727604625250&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 24. CONCAT(문자열 | 변수 | 열, 문자열 | 변수 | 열,,,) : 입력된 문자열을 합쳐서 하나의 문자열로 반환합니다.
# SQL에서는 '문자열 + 문자열'로 합칠 수 없어 CONCAT() 함수를 이용해야합니다.
SELECT CONCAT('문자열A', '문자열B');           # 반환 : 문자열A문자열B

-- 25. CONCAT_WS(구분문자, 문자열 | 변수 | 열, 문자열 | 변수 | 열,,,) : 입력된 문자열을 구분문자로 구분하여 하나의 문자열로 반환합니다.
SELECT CONCAT_WS('|','문자열A', '문자열B', '문자열C')     # 반환 : 문자열A | 문자열B | 문자열C&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;문자열-추가삭제교체반전-및-공백함수&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문자열 추가/삭제/교체/반전 및 공백함수&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;background-color: #ffffff; color: #212529; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.27907%;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 34.4186%;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 59.3023%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.27907%;&quot;&gt;26&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;LPAD(문자열 \ 변수 \ 열, 길이, (생략가능) 패딩 문자열)&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;- 좌측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수&lt;br /&gt;- 패딩 문자열 미입력 시 공백문자가 채워집니다.&lt;br /&gt;- 대상 문자열보다 짧은 길이 입력 시 해당 길이 만큼만 표시됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.27907%;&quot;&gt;27&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;RPAD(문자열 \ 변수 \ 열, 길이, (생략가능) 패딩 문자열)&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;- 우측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수&lt;br /&gt;- 패딩 문자열 미입력 시 공백문자가 채워집니다.&lt;br /&gt;- 대상 문자열보다 짧은 길이 입력 시 해당 길이 만큼만 표시됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.27907%;&quot;&gt;28&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;INSERT(문자열 \ 변수 \ 열, 시작위치, 길이, 추가할 문자열)&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;- 문자열에서 시작위치부터 입력받은 개수만큼 삭제 후 입력받은 문자로 삽입한 결과를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.27907%;&quot;&gt;29&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;REPLACE(문자열 \ 변수 \ 열, 문자열1, 문자열2)&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;대상에서 문자열1을 찾아 문자열2로 교체합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.27907%;&quot;&gt;30&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;REPEAT(문자열 \ 변수 \ 열, 반복횟수)&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;- 주어진 문자열을 주어진 반복횟수만큼 반복한 문자열을 만들어 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.27907%;&quot;&gt;31&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;REVERSE(문자열 \ 변수 \ 열)&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;- 문자열의 좌우 바꿉니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 6.27907%;&quot;&gt;32&lt;/td&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;SPACE(숫자)&lt;/td&gt;
&lt;td style=&quot;width: 59.3023%;&quot;&gt;- 공백을 입력한 숫자 만큼 만들어 줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 26. LPAD(문자열 | 변수 | 열, 길이, (생략가능) 패딩 문자열) : 좌측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수
-- 27, RPAD(문자열 | 변수 | 열, 길이, (생략가능) 패딩 문자열) : 우측으로 내가원하는 글자수만큼 되도록 특정문자로 채우는 함수
# 패딩 문자열 미입력 시 공백문자가 채워집니다.
SELECT LPAD('문자열', 5);                      # 결과 :   문자열
SELECT LPAD('문자열', 5, '@');                 # 결과 : @@문자열
SELECT LPAD('문자열', 2, '@');                 # 결과 : 문자
SELECT RPAD('문자열', 5);                      # 결과 : 문자열  
SELECT RPAD('문자열', 5, '@');                 # 결과 : 문자열@@

-- 28. INSERT(문자열 | 변수 | 열, 시작위치, 길이, 추가할 문자열) : 문자열에서 시작위치부터 입력받은 개수만큼 삭제 후 입력받은 문자로 삽입한 결과를 반환합니다.
# INSERT문과 완전히 다른 내장함수
# 삭제만 하고싶을 때는 추가할 문자열에 '' 공백 입력하면 됩니다.
SELECT INSERT('열심히 살자!', 5,3,'해야지...');  # 결과 : 열심히 해야지...
SELECT INSERT('열심히 살자!', 5,3,'');          # 결과 : 열심히

-- 29. REPLACE(문자열 | 변수 | 열, 문자열1, 문자열2) : 대상에서 문자열1을 찾아 문자열2로 교체합니다.
# 문자열1은 대/소문자를 구분해서 찾습니다.
# 대상에서 문자열1을 없는 경우 대상을 원래 그대로 반환합니다.
SELECT REPLACE('나는 Babo다', 'Babo', '바보');  # 결과 : 나는 바보다
SELECT REPLACE('나는 Babo다', 'babo', '바보');  # 결과 : 나는 Babo다
SELECT REPLACE('나는 Babo다', 'Babo다', '');    # 결과 : 나는 

-- 30. REPEAT(문자열 | 변수 | 열, 반복횟수) : 주어진 문자열을 주어진 반복횟수만큼 반복한 문자열을 만들어 반환합니다.
SELECT REPEAT('바보',3);                       # 결과 : 바보바보바보

-- 31. REVERSE(문자열 | 변수 | 열) : 문자열의 좌우 바꿔 반환합니다.
SELECT REVERSE('나는 바보다!');                 # 결과 : !다보바 는나

-- 32. SPACE(숫자) : 공백을 입력한 숫자 만큼 만들어 줍니다.
SELECT SPACE(1);                              # 결과 : 
SELECT CONCAT('나는', SPACE(10), '바보다');     # 결과 : 나는          바보다&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;b&gt;문자열로 변환 / 문자열을 변환&lt;/b&gt;&lt;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 106px; text-align: center;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 282px; text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 464px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 106px;&quot; align=&quot;center&quot;&gt;33&lt;/td&gt;
&lt;td style=&quot;width: 282px;&quot;&gt;&lt;code&gt;FORMAT(수치형 데이터, 소수점 아래 자리수, (생략가능) 로케일)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 464px;&quot;&gt;- 수치형 데이터를 출력을 위해 문자열 형식으로 반환합니다.&lt;br /&gt;- 문자열로 변환할 때 표시할 소수점 아래 자리수를 입력합니다. (바로 아래자리에서 반올림)&lt;br /&gt;- 로케일(지역)을 입력해서 해당 지역에 맞는 표시방법으로 표시할 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 106px;&quot; align=&quot;center&quot;&gt;34&lt;/td&gt;
&lt;td style=&quot;width: 282px;&quot;&gt;&lt;code&gt;ASCII(문자열 \ 변수 \ 열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 464px;&quot;&gt;아스키코드로 변환 합니다. (문자 여러개 넣으면 처음 넣은 문자만 ASCII로 변환합니다.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 106px;&quot; align=&quot;center&quot;&gt;35&lt;/td&gt;
&lt;td style=&quot;width: 282px;&quot;&gt;&lt;code&gt;CHR(숫자)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 464px;&quot;&gt;입력된 숫자를 아스키모드로 간주하고 해당 아스키코드에 해당하는 문자로 변환해 줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 106px;&quot; align=&quot;center&quot;&gt;36&lt;/td&gt;
&lt;td style=&quot;width: 282px;&quot;&gt;&lt;code&gt;CHAR(숫자, 숫자,,,)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 464px;&quot;&gt;- 입력된 숫자를 아스키모드로 간주하고 해당 아스키코드에 해당하는 문자로 변환해 줍니다.&lt;br /&gt;- ,(쉼표)로 구분해서 값을 여러개 넣을 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 106px;&quot; align=&quot;center&quot;&gt;37&lt;/td&gt;
&lt;td style=&quot;width: 282px;&quot;&gt;&lt;code&gt;HEX(문자열 \ 변수 \ 열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 464px;&quot;&gt;- 문자를 헥사코드로 변환 합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 106px;&quot; align=&quot;center&quot;&gt;38&lt;/td&gt;
&lt;td style=&quot;width: 282px;&quot;&gt;&lt;code&gt;UNHEX(헥사코드)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 464px;&quot;&gt;- 헥사코드를 문자코드로 변환 합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1727604742990&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 33. FORMAT(수치형 데이터, 소수점 아래 자리수, (생략가능) 로케일) : 수치형 데이터를 출력을 위해 문자열 형식으로 반환합니다. 
# 문자열로 변환할 때 표시할 소수점 아래 자리수를 입력합니다. (바로 아래자리에서 반올림)
# 로케일(지역)을 입력해서 해당 지역에 맞는 표시방법으로 표시할 수 있습니다.
SELECT FORMAT(12345.6289, 2);           # 결과 : 12,345.63
SELECT FORMAT(12345.6289, 2, 'es_ES');  # 결과 : 12.345,63
#에스파냐는 12,345.00이 아니라 12.345,00입니다!

-- 34. ASCII(문자열 | 변수 | 열) : 아스키코드로 변환 (문자 여러개 넣으면 처음 넣은 문자만 ASCII로 변환함)
SELECT ASCII('A');                     # 결과 : 65
SELECT ASCII('a');                     # 결과 : 97

-- 35. CHR(숫자) : 입력된 숫자를 아스키모드로 간주하고 해당 아스키코드에 해당하는 문자로 변환해 줍니다.
-- 36. CHAR(숫자, 숫자,,,) : 위와 동일 단, 값을 여러개 넣을 수 있음! 그것만 다름
SELECT CHR(65), CHR(48);              # 결과 : A, 0
SELECT CHAR(65, 48, 66, 67);          # 결과 : A0BC

-- 37. HEX(문자열 | 변수 | 열) : 문자를 헥사코드로 변환 합니다.
-- 38. UNHEX(헥사코드) : 헥사코드를 문자코드로 변환 합니다.
SELECT HEX('AB');                     # 결과 : 4142 
SELECT UNHEX('4142');                 # 결과 : AB&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-CRwJqW29GxJEoeCe&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;형type-변환&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;형(TYPE) 변환&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;타입을 바꿔주는 함수입니다.&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #212529; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;39&lt;/td&gt;
&lt;td&gt;CAST(값 \ 변수 \ 열 AS 데이터유형)&lt;/td&gt;
&lt;td&gt;입력된 인자를 입력한 데이터 유형으로 변경합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;40&lt;/td&gt;
&lt;td&gt;CONVERT(값 \ 변수 \ 열, 데이터유형)&lt;/td&gt;
&lt;td&gt;입력된 인자를 입력한 데이터 유형으로 변경합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 39. CAST(값 | 변수 | 열 AS 데이터유형) : 입력된 인자를 입력한 데이터 유형으로 변경합니다.
-- 40. CONVERT(값 | 변수 | 열, 데이터유형) : 위와 동일
SELECT CAST(123 AS VARCHAR(20));          #반환 : 123
SELECT CONVERT(123,VARCHAR(20));          #반환 : 123
SELECT 123 + 123;                         #반환 : 243
SELECT CONCAT(CAST(123 AS VARCHAR(20)),CAST(123 AS VARCHAR(20)));    #반환 : 123123&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  명시적 형변환 vs 묵시적 형변환&lt;br /&gt;&lt;/b&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;b&gt;명시적 형변환&lt;/b&gt;&lt;br /&gt;위 처럼 CAST(), CONVERT() 함수 또는 타입에 따라 to_char(), DATE_FORMAT() 등으로 명시적으로 형변환을 하는 경우를 말합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;묵시적 형변환&lt;/b&gt;&lt;br /&gt;상황에 따라 자동으로 데이터 형 변환이 이루어지는 것 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1727604810414&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 상황 1 : 문자열 내 숫자가 담겨있는 경우 수치형으로 자동 형변환되서 계산 됨
SELECT '100' + '200';                     # 결과 : 300
SELECT '100' = 100;                       # 결과 : 1(true)
# 자동 형변환 발생 안하려면 CONCAT으로 써야함
SELECT CONCAT('100', '200');              # 결과 : 100200 

# 상황 2 : 숫자 + 문자(문자로 시작하는)일때는 숫자가 아닌건 전부 0 취급 함(MariaDB, MySQL 특징)
SELECT 100 + 'A100', 200 + 'B300A';       # 결과 : 100, 200
SELECT 'A100' + 100 , 'B300A' + 200;      # 결과 : 100, 200
SELECT 100 * 'A100', 200 / 'B300A';       # 결과 : 0, NULL
SELECT 100 = 'A100', 200 = 'B300A';       # 결과 : 0(false), 0(false)

# 상황 3 : 숫자 + 문자(숫자로 시작하는)일 때는 문자에서 숫자 부분만 갖고와서 계산 함
SELECT 100 + '100A', 200 + '300BA';       # 결과 : 200, 500
SELECT '100A' + 100 , '300BA' + 200;      # 결과 : 200, 500
SELECT 100 * '100A', 200 / '300BA';       # 결과 : 1000, 0.6666(생략)
SELECT 100 = '100A', 200 = '300BA';       # 결과 : 1(true), 0(false) 

# 상황 4 : 시간/날짜 유형의 경우 수치형으로 변환되어 계산됩니다.
SELECT TIME'10:20:30' + 150;              # 결과 : 102180
SELECT TIME'10:20:30' + '문자';           # 결과 : 102030
SELECT DATE'24-02-20' + 150;             # 결과 : 20240370
SELECT DATE'24-02-20' + '문자';           # 결과 : 20240220

# 상황 5 : 수치형 중 FLOAT, DOUBLE형을 포함하는 경우 결과는 해당 형이 됩니다.
# 문자형 내 실수형이 있을 경우 DOUBLE형으로 자동 변환됩니다.
SELECT 2.2 / 3;                          # 결과 : 0.73333
SELECT '2.2' / 3;                        # 결과 : 0.73333333(생략)&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;날짜&amp;amp;시간 함수&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;날짜와 시간을 연산, 결과를 문자열로 반환하는 내장 함수 입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;날짜 연산&lt;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 65px;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 404px;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 384px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 65px;&quot; align=&quot;center&quot;&gt;41&lt;/td&gt;
&lt;td style=&quot;width: 404px;&quot;&gt;&lt;code&gt;ADDDATE(날짜 유형의 데이터, 증감숫자 \ INTERVAL 증감숫자 단위)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 384px;&quot;&gt;특정날짜로 부터 증감숫자 만큼 양수면 더하고, 음수면 뺍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 65px;&quot; align=&quot;center&quot;&gt;42&lt;/td&gt;
&lt;td style=&quot;width: 404px;&quot;&gt;&lt;code&gt;DATE_ADD(날짜 유형의 데이터, INTERVAL 증감숫자 단위)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 384px;&quot;&gt;ADDDATE()와 동일하나 INTERVAL을 이용해서 작성해줘야 합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 65px;&quot; align=&quot;center&quot;&gt;43&lt;/td&gt;
&lt;td style=&quot;width: 404px;&quot;&gt;&lt;code&gt;SUBDATE(날짜 유형의 데이터, 증감숫자 \ INTERVAL 증감숫자 단위)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 384px;&quot;&gt;특정날짜로 부터 증감숫자 만큼 양수면 빼고, 음수면 더합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 65px;&quot; align=&quot;center&quot;&gt;44&lt;/td&gt;
&lt;td style=&quot;width: 404px;&quot;&gt;&lt;code&gt;DATE_SUB(날짜 유형의 데이터, INTERVAL 증감숫자 단위)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 384px;&quot;&gt;SUBDATE()와 동일하나 IINTERVAL을 이용해서 작성해줘야 합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1727604866871&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 41. ADDDATE(날짜 유형의 데이터, 증감숫자 | INTERVAL 증감숫자 단위) : 특정날짜로 부터 증감숫자 만큼 양수면 더하고, 음수면 뺍니다.
-- 42. DATE_ADD(날짜 유형의 데이터, INTERVAL 증감숫자 단위) : ADDDATE()와 동일하나 INTERVAL을 이용해서 작성해줘야 합니다.
SELECT ADDDATE('2024-02-18 20:48:00', 30);                 # 결과 : 2024-03-19 20:48:00
SELECT ADDDATE('2024-02-18 20:48:00', -30);                # 결과 : 2024-01-19 20:48:00
SELECT ADDDATE('2024-02-18 20:48:00', INTERVAL 2 MONTH);   # 결과 : 2024-04-18 20:48:00
SELECT ADDDATE('2024-02-18 20:48:00', INTERVAL 30 YEAR);   # 결과 : 2054-02-18 20:48:00
SELECT DATE_ADD('2024-02-18 20:48:00', INTERVAL 30 YEAR);  # 결과 : 2054-02-18 20:48:00

-- 43. SUBDATE(날짜 유형의 데이터, 증감숫자 | INTERVAL 증감숫자 단위) : 특정날짜로 부터 증감숫자 만큼 양수면 빼고, 음수면 더합니다.
-- 44. DATE_SUB(날짜 유형의 데이터, INTERVAL 증감숫자 단위) : SUBDATE()와 동일하나 IINTERVAL을 이용해서 작성해줘야 합니다.
SELECT SUBDATE('2024-02-18 20:48:00', 30);                 # 결과 : 2024-01-19 20:48:00
SELECT SUBDATE('2024-02-18 20:48:00', -30);                # 결과 : 2024-03-19 20:48:00
SELECT DATE_SUB('2024-02-18 20:48:00', INTERVAL 30 YEAR);  # 결과 : 1994-02-18 20:48:00&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;b&gt;  ADDDATE(), SUBDATE()...하나로도 더하기 빼기 다 할 수 있는데 왜 나눠져있을까?&lt;/b&gt;&lt;br /&gt;둘 중하나로도 더하기 빼기 다 쓸 수 있지만, 함수명으로 해당 함수의 기능이 명시적으로 표현되어있어서 쿼리를 읽을 때 더 직관적으로 볼 수 있도록 사용하도록 하기 위함입니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;  INTERVAL 키워드 내 사용할 수 있는 단위&lt;/b&gt;&lt;br /&gt;단위설명YEAR연도를 증감QUATRER분기 단위를 증감(3개월 단위)MONTH월을 증감WEEK주 단위로 증감DAY날 수를 증감HOUR시 단위를 증감MINUTE분 단위를 증감SECOND초 단위를 증감&lt;br /&gt;&lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style9&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4851%;&quot;&gt;단위&lt;/td&gt;
&lt;td style=&quot;width: 73.5149%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4851%;&quot;&gt;&lt;code&gt;YEAR&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5149%;&quot;&gt;연도를 증감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4851%;&quot;&gt;&lt;code&gt;QUATRER&lt;/code&gt;&amp;lt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5149%;&quot;&gt;분기 단위를 증감 (3개월 단위)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4851%;&quot;&gt;&lt;code&gt;MONTH&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5149%;&quot;&gt;월을 증감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4851%;&quot;&gt;&lt;code&gt;WEEK&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5149%;&quot;&gt;주 단위를 증감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4851%;&quot;&gt;&lt;code&gt;DAY&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5149%;&quot;&gt;날 수를 증감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4851%;&quot;&gt;&lt;code&gt;HOUR&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5149%;&quot;&gt;시 단위를 증감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4851%;&quot;&gt;&lt;code&gt;MINUTE&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5149%;&quot;&gt;분 단위를 증감&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.4851%;&quot;&gt;&lt;code&gt;SECOND&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5149%;&quot;&gt;초 단위를 증감&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;현재-날짜시간-구하기&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;현재 날짜/시간 구하기&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;background-color: #ffffff; color: #212529; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;45&lt;/td&gt;
&lt;td&gt;NOW((생략가능)정확도)&lt;/td&gt;
&lt;td&gt;- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.&lt;br /&gt;- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.&lt;br /&gt;- 표시형식 : YYYY-MM-DD HH:MM:SS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;46&lt;/td&gt;
&lt;td&gt;CURRENT_TIMESTAMP((생략가능)정확도)&lt;/td&gt;
&lt;td&gt;- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.&lt;br /&gt;- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.&lt;br /&gt;- 표시형식 : YYYY-MM-DD HH:MM:SS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;47&lt;/td&gt;
&lt;td&gt;SYSDATE((생략가능)정확도)&lt;/td&gt;
&lt;td&gt;-- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.&lt;br /&gt;- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.&lt;br /&gt;- 표시형식 : YYYY-MM-DD HH:MM:SS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;48&lt;/td&gt;
&lt;td&gt;LOCALTIME((생략가능)정확도)&lt;/td&gt;
&lt;td&gt;- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.&lt;br /&gt;- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.&lt;br /&gt;- 표시형식 : YYYY-MM-DD HH:MM:SS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;49&lt;/td&gt;
&lt;td&gt;LOCALTIMESTAMP((생략가능)정확도)&lt;/td&gt;
&lt;td&gt;- 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다.&lt;br /&gt;- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.&lt;br /&gt;- 표시형식 : YYYY-MM-DD HH:MM:SS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;50&lt;/td&gt;
&lt;td&gt;CURDATE()&lt;/td&gt;
&lt;td&gt;- 로컬 시간에 맞춰 현재 날짜를 출력합니다.&lt;br /&gt;- 표시형식 : YYYY-MM-DD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;51&lt;/td&gt;
&lt;td&gt;CURRENT_DATE()&lt;/td&gt;
&lt;td&gt;- 로컬 시간에 맞춰 현재 날짜를 출력합니다.&lt;br /&gt;- 표시형식 : YYYY-MM-DD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;52&lt;/td&gt;
&lt;td&gt;CURTIME((생략가능)정확도)&lt;/td&gt;
&lt;td&gt;- 로컬 시간에 맞춰 현재 시간을 출력합니다.&lt;br /&gt;- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.&lt;br /&gt;- 표시형식 : HH:MM:SS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;53&lt;/td&gt;
&lt;td&gt;CURRENT_TIME((생략가능)정확도)&lt;/td&gt;
&lt;td&gt;- 로컬 시간에 맞춰 현재 시간을 출력합니다.&lt;br /&gt;- 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.&lt;br /&gt;- 표시형식 : HH:MM:S&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 45. NOW((생략가능)정확도) : 로컬 시간에 맞춰 현재 날짜 및 시간을 출력합니다. YYYY-MM-DD HH:MM:SS
-- 46. CURRENT_TIMESTAMP((생략가능)정확도) : 위와 동일
-- 47. SYSDATE((생략가능)정확도) : 위와 동일
-- 48. LOCALTIME((생략가능)정확도) : 위와 동일
-- 49. LOCALTIMESTAMP((생략가능)정확도) : 위와 동일
SELECT NOW();                 # 결과 : 2024-02-18 21:16:43
SELECT CURRENT_TIMESTAMP();   # 결과 : 2024-02-18 21:16:43
SELECT SYSDATE();             # 결과 : 2024-02-18 21:16:43
SELECT LOCALTIMESTAMP();      # 결과 : 2024-02-18 21:16:43
SELECT LOCALTIME();           # 결과 : 2024-02-18 21:16:43
# 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
SELECT NOW(2);                # 결과 : 2024-02-18 21:16:43.94
SELECT NOW(6);                # 결과 : 2024-02-18 21:16:43.947440

-- 50. CURDATE() : 로컬 시간에 맞춰 현재 날짜를 출력합니다. YYYY-MM-DD
-- 51. CURRENT_DATE() : 위와 동일
SELECT CURDATE();             # 결과 : 2024-02-18
SELECT CURRENT_DATE();        # 결과 : 2024-02-18

-- 52. CURTIME((생략가능)정확도) : 로컬 시간에 맞춰 현재 시간을 출력합니다. HH:MM:DD
-- 53. CURRENT_TIME((생략가능)정확도) : 위와 동일
SELECT CURTIME();             # 결과 : 21:27:50
SELECT CURRENT_TIME();        # 결과 : 21:27:50
# 정확도는 최대 6자리까지 입력할 수 있으며, 초 단위 이하의 시각을 표시할 수 있습니다.
SELECT CURTIME(2);            # 결과 : 21:27:50.83
SELECT CURTIME(6);            # 결과 : 21:27:50.837833&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;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px; text-align: center;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 309px; text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px;&quot; align=&quot;center&quot;&gt;54&lt;/td&gt;
&lt;td style=&quot;width: 309px;&quot;&gt;&lt;code&gt;YEAR(날짜형 데이터)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px;&quot;&gt;- 날짜에서 연도 부분만 숫자형식으로 반환합니다.&lt;br /&gt;- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px;&quot; align=&quot;center&quot;&gt;55&lt;/td&gt;
&lt;td style=&quot;width: 309px;&quot;&gt;&lt;code&gt;MONTH(날짜형 데이터)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px;&quot;&gt;- 날짜에서 월 부분만 숫자형식으로 반환합니다.&lt;br /&gt;- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px;&quot; align=&quot;center&quot;&gt;56&lt;/td&gt;
&lt;td style=&quot;width: 309px;&quot;&gt;&lt;code&gt;DAY(날짜형 데이터)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px;&quot;&gt;- 날짜에서 일자 부분만 숫자형식으로 반환합니다.&lt;br /&gt;- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px;&quot; align=&quot;center&quot;&gt;57&lt;/td&gt;
&lt;td style=&quot;width: 309px;&quot;&gt;&lt;code&gt;HOUR(날짜/시간형 데이터)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px;&quot;&gt;- 날짜/시간 데이터에서 시간 부분만 숫자형식으로 반환합니다.&lt;br /&gt;- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px;&quot; align=&quot;center&quot;&gt;58&lt;/td&gt;
&lt;td style=&quot;width: 309px;&quot;&gt;&lt;code&gt;MINUTE(날짜/시간형 데이터)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px;&quot;&gt;- 날짜/시간 데이터에서 분 부분만 숫자형식으로 반환합니다.&lt;br /&gt;- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px;&quot; align=&quot;center&quot;&gt;59&lt;/td&gt;
&lt;td style=&quot;width: 309px;&quot;&gt;&lt;code&gt;SECOND(날짜/시간형 데이터)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px;&quot;&gt;- 날짜/시간 데이터에서 초 부분만 숫자형식으로 반환합니다.&lt;br /&gt;- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px;&quot; align=&quot;center&quot;&gt;60&lt;/td&gt;
&lt;td style=&quot;width: 309px;&quot;&gt;&lt;code&gt;MICROSECOND(날짜/시간형 데이터)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px;&quot;&gt;- 날짜/시간 데이터에서 밀리초 부분만 숫자형식으로 반환합니다.&lt;br /&gt;- 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px;&quot; align=&quot;center&quot;&gt;61&lt;/td&gt;
&lt;td style=&quot;width: 309px;&quot;&gt;&lt;code&gt;DATE(날짜/시간형 데이터)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px;&quot;&gt;- 날짜/시간 데이터에서 날짜 부분만 문자열로 반환합니다.&lt;br /&gt;- 표시형식 : YYYY-MM-DD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 58px;&quot; align=&quot;center&quot;&gt;62&lt;/td&gt;
&lt;td style=&quot;width: 309px;&quot;&gt;&lt;code&gt;TIME(날짜/시간형 데이터)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 486px;&quot;&gt;- 날짜/시간 데이터에서 시간 부분만 문자열로 반환합니다.&lt;br /&gt;- 표시형식 : HH:MM:SS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1727605325336&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 54. YEAR(날짜형 데이터) : 날짜에서 연도 부분만 숫자형식으로 반환합니다.
-- 55. MONTH(날짜형 데이터) : 날짜에서 월 부분만 숫자형식으로 반환합니다.
-- 56. DAY(날짜형 데이터) : 날짜에서 일 부분만 숫자형식으로 반환합니다.
SELECT YEAR('2024-02-18 21:50:20');                     # 결과 : 2,024
SELECT MONTH('2024-02-18 21:50:20');                    # 결과 : 2
SELECT DAY('2024-02-18 21:50:20');                      # 결과 : 18
# 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요
SELECT CAST(YEAR('2024-02-18 21:50:20') as CHAR(4));    # 결과 : 2024

-- 57. HOUR(날짜/시간형 데이터) : 날짜/시간 데이터에서 시간 부분만 숫자형식으로 반환합니다.
-- 58. MINUTE(날짜/시간형 데이터) : 날짜/시간 데이터에서 분 부분만 숫자형식으로 반환합니다.
-- 59. SECOND(날짜/시간형 데이터) : 날짜/시간 데이터에서 초 부분만 숫자형식으로 반환합니다.
-- 60. MICROSECOND(날짜/시간형 데이터) : 날짜/시간 데이터에서 밀리초 부분만 숫자형식으로 반환합니다.
SELECT HOUR('2024-02-18 21:50:20');                     # 결과 : 21
SELECT MINUTE('2024-02-18 21:50:20');                   # 결과 : 50
SELECT SECOND('2024-02-18 21:50:20');                   # 결과 : 20
SELECT MICROSECOND('2024-02-18 21:50:20');              # 결과 : 0
# 숫자 형식으로 반환하기 때문에 문자열로 바꿔서 사용하려면 변환 작업 필요
SELECT CAST(HOUR('2024-02-18 21:50:20') AS VARCHAR(2)); # 결과 : 21

-- 61. DATE(날짜/시간형 데이터) : 날짜/시간 데이터에서 날짜 부분만 문자열로 반환합니다. YYYY-MM-DD
-- 62. TIME(날짜/시간형 데이터) : 날짜/시간 데이터에서 시간 부분만 문자열로 반환합니다. HH:MM:SS
SELECT DATE('2024-02-18 21:50:20');    # 결과 : 2024-02-18
SELECT TIME('2024-02-18 21:50:20');    # 결과 : 21:50:20&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;날짜-정보-확인하기&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;날짜 정보 확인하기&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;background-color: #ffffff; color: #212529; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;63&lt;/td&gt;
&lt;td&gt;DAYOFYEAR(날짜형 데이터)&lt;/td&gt;
&lt;td&gt;- 기준일이 해당년도가 시작되고 며칠이 지났는지 보여주는 함수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;64&lt;/td&gt;
&lt;td&gt;DAYOFMONTH(날짜형 데이터)&lt;/td&gt;
&lt;td&gt;- 기준일이 해당월이 시작되고 며칠이 지났는지 보여주는 함수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;65&lt;/td&gt;
&lt;td&gt;DAYOFWEEK(날짜형 데이터)&lt;/td&gt;
&lt;td&gt;- 기준일이 해당주가 시작되고 며칠이 지났는지 보여주는 함수&lt;br /&gt;- 주의 경우 일요일부터 시작(1) ~ 토요일 종료(7)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;66&lt;/td&gt;
&lt;td&gt;MONTHNAME(날짜형 데이터)&lt;/td&gt;
&lt;td&gt;- 기준일의 월 풀네임을 표시해줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;67&lt;/td&gt;
&lt;td&gt;LAST_DAY(날짜형 데이터)&lt;/td&gt;
&lt;td&gt;- 주어진 날짜 데이터에 해당하는 달의 마지막 일자를 문자열로 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;68&lt;/td&gt;
&lt;td&gt;QUARTER(날짜형 데이터)&lt;/td&gt;
&lt;td&gt;- 입력한 날짜가 몇번째 분기에 있는가를 보여주는 함수&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 63. DAYOFYEAR(날짜형 데이터) : 기준일이 해당년도가 시작되고 며칠이 지났는지 보여주는 함수
-- 64. DAYOFMONTH(날짜형 데이터) : 기준일이 해당월이 시작되고 며칠이 지났는지 보여주는 함수
-- 65. DAYOFWEEK(날짜형 데이터) : 기준일이 해당주가 시작되고 며칠이 지났는지 보여주는 함수
# 주의 경우 일요일부터 시작(1) ~ 토요일 종료(7)
SELECT DAYOFYEAR('2024-02-18');     # 결과 : 49
SELECT DAYOFMONTH('2024-02-18');    # 결과 : 18
SELECT DAYOFWEEK('2024-02-18');     # 결과 : 1

-- 66. MONTHNAME(날짜형 데이터) : 기준일의 월 풀네임을 표시해줍니다.
SELECT MONTHNAME('2024-02-18');    # 결과 : Februrary

-- 67. LAST_DAY(날짜형 데이터) : 주어진 날짜 데이터에 해당하는 달의 마지막 일자를 문자열로 반환합니다.
SELECT LAST_DAY('2024-02-18');     # 결과 : 2024-02-29

-- 68. QUARTER : 입력한 날짜가 몇번째 분기에 있는가를 보여주는 함수
SELECT QUARTER('2024-10-01');      # 결과 : 4&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;b&gt;두 날짜/시간 차이 구하기&lt;/b&gt;&lt;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 81px;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 423px;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 348px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 81px;&quot; align=&quot;center&quot;&gt;69&lt;/td&gt;
&lt;td style=&quot;width: 423px;&quot;&gt;&lt;code&gt;DATEDIFF(날짜형 데이터1, 날짜형 데이터2)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 348px;&quot;&gt;- 첫번째 인자에서 두번째 인자를 빼서 날짜 차이 계산해주는 함수&lt;br /&gt;- 두 인자의 표현식이 같아야합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 81px;&quot; align=&quot;center&quot;&gt;70&lt;/td&gt;
&lt;td style=&quot;width: 423px;&quot;&gt;&lt;code&gt;TIMEDIFF(날짜시간 데이터1 \ 데이터1, 날짜시간 데이터2 \ 시간 데이터2)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 348px;&quot;&gt;- 첫번째 인자에서 두번째 인자를 빼서 시간 차이 계산해주는 함수&lt;br /&gt;- 두 인자의 표현식이 같아야하고, 두 인자 모두 시간이거나 둘다 날짜시간이어야합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1727605442362&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 63. DAYOFYEAR(날짜형 데이터) : 기준일이 해당년도가 시작되고 며칠이 지났는지 보여주는 함수
-- 64. DAYOFMONTH(날짜형 데이터) : 기준일이 해당월이 시작되고 며칠이 지났는지 보여주는 함수
-- 65. DAYOFWEEK(날짜형 데이터) : 기준일이 해당주가 시작되고 며칠이 지났는지 보여주는 함수
# 주의 경우 일요일부터 시작(1) ~ 토요일 종료(7)
SELECT DAYOFYEAR('2024-02-18');     # 결과 : 49
SELECT DAYOFMONTH('2024-02-18');    # 결과 : 18
SELECT DAYOFWEEK('2024-02-18');     # 결과 : 1

-- 66. MONTHNAME(날짜형 데이터) : 기준일의 월 풀네임을 표시해줍니다.
SELECT MONTHNAME('2024-02-18');    # 결과 : Februrary

-- 67. LAST_DAY(날짜형 데이터) : 주어진 날짜 데이터에 해당하는 달의 마지막 일자를 문자열로 반환합니다.
SELECT LAST_DAY('2024-02-18');     # 결과 : 2024-02-29

-- 68. QUARTER : 입력한 날짜가 몇번째 분기에 있는가를 보여주는 함수
SELECT QUARTER('2024-10-01');      # 결과 : 4&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;날짜데이터 생성&lt;/b&gt;&lt;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;71&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MAKEDATE(년도 \ 날짜형 데이터, 일자)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;- 입력한 년도 또는 입력한 날짜의 년도가 시작하고 입력한 일자가 지난 시점을 계산해서 날짜를 반환해줍니다.&lt;br /&gt;- 날짜형 데이터를 넣을경우 해당 날짜로부터가 아니라 해당 날짜의 연도가 시작한 뒤로 부터로 계산된다는 점을 주의해야합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;72&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MAKETIME(시, 분, 초)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;- 입력한 시간, 분, 초로 시간을 만들어줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1727605482472&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 71. MAKEDATE(년도 | 날짜형 데이터, 일자) : 입력한 년도 또는 입력한 날짜의 년도가 시작하고 입력한 일자가 지난 시점을 계산해서 날짜를 반환해줍니다.
-- 72. MAKETIME(시, 분, 초) : 입력한 시간, 분, 초로 시간을 만들어줍니다.
# MAKEDATE()에 날짜형 데이터를 넣을경우 해당 날짜로부터가 아니라 해당 날짜의 연도가 시작한뒤로부터로 계산된다는 점을 주의해야합니다.
SELECT MAKEDATE(2024, 60);          # 결과 : 2024-02-29
SELECT MAKEDATE('2024-02-18', 60);  # 결과 : 2024-02-29
SELECT MAKETIME(15, 35, 30);        # 결과 : 15:35:30&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  MAKEDATE()와 ADDDATE()&lt;/b&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;code&gt;MAKEDATE()&lt;/code&gt; : 입력한 년도 또는 입력한 날짜의 년도가 시작하고 입력한 일자가 지난 시점을 계산해서 날짜를 반환해줍니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ADDDATE()&lt;/code&gt; : 특정날짜로 부터 증감숫자 만큼 양수면 더하고, 음수면 뺍니다.&lt;br /&gt;위 두 함수의 경우 비슷한 용도로 사용할 수 있습니다.&lt;br /&gt;다만, 날짜를 더한다의 개념이 조금 달라 그 부분을 주의해야합니다.
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT MAKEDATE(2024, 60);           # 결과 : 2024-02-29
SELECT ADDDATE('2024-01-01', 60);    # 결과 : 2024-03-01
SELECT ADDDATE('2024-01-01', 59);    # 결과 : 2024-02-29
# MAKEDATE의 경우 해당 년도로부터 입력한 일자만큼 지난 날짜를 반환해주고, 
# ADDDATE는 입력한 일자로 부터 입력한 일자를 더한 날짜를 반환해준다는 점이 다릅니다.&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;날짜 형식지정 출력&lt;/h4&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 82px;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 402px;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 368px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 82px;&quot; align=&quot;center&quot;&gt;73&lt;/td&gt;
&lt;td style=&quot;width: 402px;&quot;&gt;&lt;code&gt;DATE_FORMAT(날짜형 데이터, 형식문자, (생략가능) 로케일)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 368px;&quot;&gt;- 입력된 날짜의 포맷을 지정해서 출력해줍니다. &lt;br /&gt;- 3번째 인자로 로케일을 작성할 경우 해당 나라에 맞는 날짜 형식으로 변환해줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 82px;&quot; align=&quot;center&quot;&gt;74&lt;/td&gt;
&lt;td style=&quot;width: 402px;&quot;&gt;&lt;code&gt;to_char(날짜유형의 데이터 \ 시간유형의 데이터, 형식 문자열)&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 368px;&quot;&gt;- 날짜/시간을 원하는 포맷으로 바꿔서 출력합니다.&lt;br /&gt;- 날짜/시간 관련 포맷은 아래 예시 부분 참고&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1727605568334&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 73. DATE_FORMAT(날짜형 데이터, 형식문자, (생략가능) 로케일) : 입력된 날짜의 포맷을 지정해서 출력해줍니다. 
# 3번째 인자로 로케일을 작성할 경우 해당 나라에 맞는 날짜 형식으로 변환해줍니다.
# 한국의 경우 'ko_KO'
SELECT DATE_FORMAT('2024-02-18', '%Y년 %b %d 일', 'ko_KR');   # 결과 : 2024년 2월 18일
SELECT DATE_FORMAT('2024-02-18', '%Y/%m/%d');                # 결과 : 2024/02/18

-- 74. to_char((날짜유형의 데이터 \ 시간유형의 데이터, 형식 문자열) : 날짜/시간을 원하는 포맷으로 바꿔서 출력합니다.
SELECT to_char('2024-02-18 19:23:00', 'YY-MM-DD');   # 결과 : 24-02-18
SELECT to_char('2024-02-18 19:23:00', 'DD-MONTH-YYYY (DY)');  # 결과 : 18-February-2024 (Sun)&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;p style=&quot;color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  to_char()에서 사용할 수 있는 날짜/시간 관련 형식문자&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;color: #212529; text-align: start; border-collapse: collapse; width: 100%; height: 310px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style9&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 style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;YYYY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 연도를 4자리로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;YYY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 연도를 3자리로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;YY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 연도를 2자리로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;RRRR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 연도를 4자리로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;RR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 연도를 2자리로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;MM&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 월을 두 자리 숫자로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;01 ~ 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;MON&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 월 이름을 약자로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Jan ~ Dec / 1월 ~ 12월&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;MONTH&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 월 이름을 풀네임으로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;January ~ December / 일월 ~ 십이월&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;DD&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 일을 두 자리 숫자로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;01 ~ 31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;DY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 요일을 약자로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Mon ~ Sun / 월 ~ 일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;DAY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 요일을 풀네임으로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Monday ~ Sunday / 월요일 ~ 일요일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;HH,&lt;span&gt;&amp;nbsp;&lt;/span&gt;HH12&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 시간을 2자리로 12시간 단위로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~ 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;HH24&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 시간을 2자리로 24시간 단위로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~ 24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;MI&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 분을 2자리로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~ 59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;SS&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 초를 2자리로 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~ 59&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 style=&quot;color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  DATE_FORMAT()에서 사용할 수 있는 형식문자&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;color: #212529; text-align: start; border-collapse: collapse; width: 100%; height: 757px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style9&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;형식&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;표시예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;%Y&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 연도를 4자리 숫자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%y&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 연도를 2자리 숫자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;%X&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;- 연도를 4자리 숫자로 표현합니다.&lt;br /&gt;- 일요일을 한주의 시작으로 할 때 사용하며&lt;span&gt;&amp;nbsp;&lt;/span&gt;%V와 함께 사용합니다.&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;%x&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;- 연도를 4자리 숫자로 표현합니다.&lt;br /&gt;- 월요일을 한주의 시작으로 할 때 사용하며&lt;span&gt;&amp;nbsp;&lt;/span&gt;%v와 함께 사용합니다.&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%b&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 월 이름을 약자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Jan ~ Dec / 1월 ~ 12월&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%M&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 월 이름을 풀네임으로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;January ~ December / 일월 ~ 십이월&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;%m&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 월을 2자리 숫자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;01~12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;%c&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 월을 1~2자리 숫자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;1~12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;%U&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;- 날짜의 주차를 2자리 숫자로 표현합니다.&lt;br /&gt;- 일요일을 한주로 시작할 때 사용합니다.&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;01~53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;%u&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;- 날짜의 주차를 2자리 숫자로 표현합니다.&lt;br /&gt;- 월요일을 한주로 시작할 때 사용합니다.&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;01~53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;%V&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;- 날짜의 주차를 2자리 숫자로 표현합니다.&lt;br /&gt;- 일요일을 한주로 시작할 때 사용하며&lt;span&gt;&amp;nbsp;&lt;/span&gt;%X와 함께 사용합니다.&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;01~53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;%v&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;- 날짜의 주차를 2자리 숫자로 표현합니다.&lt;br /&gt;- 월요일을 한주로 시작할 때 사용합하며&lt;span&gt;&amp;nbsp;&lt;/span&gt;%x와 함께 사용합니다.&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;01~53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%D&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 일자를 서수의 형태로 표현 합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;1st, 2nd, 3rd, 4th,,,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;%d&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 일자를 2자리 숫자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;01~31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%e&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 일자를 1~2자리 숫자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;1~31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%j&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 해당 날짜가 해당 년도에서 몇 번째 날인지 3자리 숫자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;001 ~ 365&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%p&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 오전이면 AM, 오후면 PM을 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;AM, PM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%r&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 시간을 12시간 단위로 표현하고 뒤에 AM, PM까지 한번에 표시합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;07:00:00 AM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%T&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 시간을 24시간 단위로 한번에 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;19:00:00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;%H&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 시 단위를 24시간 범위의 2글자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~ 23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;%h&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 시 단위를 12시간 범위의 2글자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~ 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%I&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 시 단위를 12시간 범위의 2글자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~ 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%k&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 시 단위를 24시간 범위의 1~2글자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;0 ~ 23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%l&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 시 단위를 12시간 범위의 1~2글자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;0 ~ 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;%i&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 분 단위를 2자리 숫자로 표현 합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~ 59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;%S&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 초 단위를 2자리 숫자로 표현 합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~ 59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%s&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 초 단위를 2자리 숫자로 표현 합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;00 ~59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%f&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 초 아래 단위를 6자리 숫자로 표현 합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;000000 ~ 999999&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%a&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;요일 이름을 약자로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Mon ~ Sun / 월 ~ 일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%W&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;요일 이름을 풀네임으로 표현합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Monday ~ Sunday / 월요일 ~ 일요일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;%w&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;요일을 숫자로 표시합니다.&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;0(일요일) ~ 6(토요일)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;수치-함수&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;수치 함수&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;수치 데이터를 다루어 연산, 결과를 수치 데이터로 반환하는 함수&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #212529; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;75&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;ABS(수치형 데이터)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 입력한 수치 데이터의 절대값 반환 합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;76&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;SIGN(수치형 데이터)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 주어진 수치형 데이터의 부호를 반환합니다.&lt;br /&gt;- 음수 : -1 / 0 : 0 / 양수 : 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;77&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;CEILING(수치형 데이터)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 주어진 인자에서 주어진 실수보다 큰 정수 중 가장 작은 정수를 반환합니다. (정수로 만들기 위해 소수점을 올림처리)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;78&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;CEIL(수치형 데이터)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 주어진 인자에서 주어진 실수보다 큰 정수 중 가장 작은 정수를 반환합니다. (정수로 만들기 위해 소수점을 올림처리)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;79&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;FLOOR(수치형 데이터)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 주어진 인자에서 주어진 실수보다 작은 수 중 가장 큰 정수를 반환합니다. (정수로 만들기 위해 소수점을 버림처리)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;80&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;TRUNCATE(수치형 데이터, 기준 소수점 자리)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 첫번쨰 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 까지만 남기고 전부 버림처리 합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;81&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;ROUND(수치형 데이터, 기준 소수점 자리)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 첫번째 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 아래에서 반올림합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;82&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;MOD(수치형 데이터1, 수치형 데이터2)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 첫번째 인자에서 두번째 인자를 나눈 후 나머지를 반환합니다.&lt;br /&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;수치형 데이터1 MOD 수치형 데이터2&lt;span&gt;&amp;nbsp;&lt;/span&gt;로도 사용할 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;83&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;POW(수치형 데이터1, 수치형 데이터2)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 첫번째 인자의 두번째 인자 제곱을 계산하여 반환해줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;84&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;POWER(수치형 데이터1, 수치형 데이터2)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 첫번째 인자의 두번째 인자 제곱을 계산하여 반환해줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;85&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;SQRT(수치형 데이터)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 입력된 값의 루트값을 계산하여 반환해 줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;86&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;PI()&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 원주율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;87&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;GREATEST(값1, 값2,,,)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 인자 중 가장 큰 값을 구하는 함수 입니다.&lt;br /&gt;- 개별값을 콤마로 구분해서만 인자로 입력할 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;88&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;LEAST(값1, 값2,,,)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 인자 중 가장 작은 값을 구하는 함수&lt;br /&gt;- 개별값을 콤마로 구분해서만 인자로 입력할 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;89&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;DEGREES(수치형 데이터)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 주어진 값을 라디안 값으로 간주하여 각도값으로 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;90&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;RADIANS(수치형 데이터)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 주어진 값을 각도로 간주하여 라디안값으로 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 4.88372%; text-align: center;&quot;&gt;91&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%;&quot;&gt;RAND((생략가능)숫자)&lt;/td&gt;
&lt;td style=&quot;width: 69.0698%;&quot;&gt;- 0~1에서 랜덤한 난수생성합니다.&lt;br /&gt;- 아무런 인자도 없이 실행시, 실행할 떄 마다 다른 난수가 생성됩니다.&lt;br /&gt;- 인자를 전달할 경우 해당 인자로 호출할 때는 처음 나온 난수 결과가 동일하게 나옵니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 75. ABS(수치형 데이터) : 입력한 수치 데이터의 절대값 반환 합니다.
SELECT ABS(-50);                 # 결과 : 50

-- 76. SIGN(수치형 데이터) : 주어진 수치형 데이터의 부호를 반환합니다. 
# 음수 : -1 / 0 : 0 / 양수 : 1
SELECT SIGN(-10);                # 결과 : -1
SELECT SIGN(0);                  # 결과 : 0
SELECT SIGN(100);                # 결과 : 1

-- 77. CEILING(수치형 데이터) : 주어진 인자에서 주어진 실수보다 큰 정수 중 가장 작은 정수를 반환합니다. (정수로 만들기 위해 소수점을 올림처리)
-- 78. CEIL(수치형 데이터) : 위와 동일
SELECT CEILING(70.89);          # 결과 : 71
SELECT CEILING(-70.89);         # 결과 : -70
SELECT CEIL(70.21);             # 결과 : 71
SELECT CEIL(-70.21);            # 결과 : -70

-- 79. FLOOR(수치형 데이터) : 주어진 인자에서 주어진 실수보다 작은 수 중 가장 큰 정수를 반환합니다. (정수로 만들기 위해 소수점을 버림처리)
SELECT FLOOR(70.89);           # 결과 : 70
SELECT FLOOR(-70.89);          # 결과 : -71

-- 80. TRUNCATE(수치형 데이터, 기준 소수점 자리) : 첫번쨰 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 까지만 남기고 전부 버림처리
SELECT TRUNCATE(70.89, 1);     # 결과 : 70.8
SELECT TRUNCATE(-70.89, 1);    # 결과 : -70.8

-- 81. ROUND(수치형 데이터, 기준 소수점 자리) : 첫번째 인자는 계산할 값, 두번째 인자는 기준 소수점 자리를 받아 주어진 값에서 기준자리 아래에서 반올림합니다.
SELECT ROUND(70.89, 1);        # 결과 : 70.9   
SELECT ROUND(-70.89, 1);       # 결과 : -70.9

-- 82. MOD(수치형 데이터1, 수치형 데이터2) : 첫번째 인자에서 두번째 인자를 나눈 후 나머지를 반환합니다. 
# 수치형 데이터1 MOD 수치형 데이터2 로도 사용할 수 있습니다.
SELECT MOD(7,4);              # 결과 : 3
SELECT 7 MOD 4;               # 결과 : 3

-- 83. POW(수치형 데이터1, 수치형 데이터2) : 첫번째 인자의 두번째 인자 제곱을 계산하여 반환해줍니다.
-- 84. POWER(수치형 데이터1, 수치형 데이터2) : 위와 동일
SELECT POW(2,3);             # 결과 : 8
SELECT POWER(2,3);           # 결과 : 8

-- 85. SQRT(수치형 데이터) : 입력된 값의 루트값을 계산하여 반환해 줍니다.
# 인자가 음수면 NULL을 반환해줍니다.
SELECT SQRT(9);             # 결과 : 3

-- 86. PI() : 원주율
SELECT PI();
SELECT PI() + 0.00000000000; # 원주율의 원하는 자리수까지 0.000....을 더해서 구할 수 있음

-- 87. GREATEST(값1, 값2,,,) : 가장 큰 값을 구하는 함수
-- 88. LEAST(값1, 값2,,,) : 가장 작은 값을 구하는 함수
# 콤마로 구분되어있는 개별 값이 들어올때만 쓸수있어서 MIN(), MAX()를 더 많이 활용합니다.
SELECT GREATEST(30, 10, 5, 40);   # 결과 : 40
SELECT LEAST(30, 10, 5, 40);      # 결과 : 5

-- 89. DEGREES(수치형 데이터) : 주어진 값을 라디안 값으로 간주하여 각도값으로 반환합니다.
-- 90. RADIANS(수치형 데이터) : 주어진 값을 각도로 간주하여 라디안값으로 반환합니다.
SELECT DEGREES(PI());             # 결과 : 180
SELECT RADIANS(180);              # 결과 : 3.14(생략)

-- 91. RAND((생략가능)숫자) : 0~1에서 랜덤한 난수생성합니다.
# 아무런 인자도 없이 실행시, 실행할 떄 마다 다른 난수가 생성됩니다.
# 인자를 전달할 경우 해당 인자로 호출할 때는 처음 나온 난수 결과가 동일하게 나옵니다.
SELECT RAND();                   # 결과 : 0.87(생략)
SELECT RAND();                   # 결과 : 0.18(생략)
SELECT RAND(1);                  # 결과 : 0.40(생략)
SELECT RAND(1);                  # 결과 : 0.40(생략)
# 실제 테스트해보면 위 값과는 다르나 같은 인자로 생성한 난수는 처음 나온 난수값으로 계속 동일하게 나오는것을 확인할 수 있을겁니다!&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;참고&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;MariaDB로 따라 하며 배우는 SQL프로그래밍 데이터베이스 기초에서 실무까지 - 나익수, 서연경 지음&lt;/i&gt;&lt;br /&gt;위 책을 공부하며 작성하고 있습니다!&lt;/p&gt;</description>
      <category>Study/DB</category>
      <category>mariadb</category>
      <category>SQL</category>
      <category>내장함수</category>
      <category>함수</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/21</guid>
      <comments>https://geehyun.tistory.com/entry/MariaDB-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98%E2%91%A0-%EB%AC%B8%EC%9E%90%EC%8B%9C%EA%B0%84%EC%88%98%EC%B9%98-%EA%B4%80%EB%A0%A8#entry21comment</comments>
      <pubDate>Sun, 29 Sep 2024 19:31:31 +0900</pubDate>
    </item>
    <item>
      <title>[MariaDB] 연산자</title>
      <link>https://geehyun.tistory.com/entry/MariaDB-%EC%97%B0%EC%82%B0%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;velog 원글&quot; href=&quot;https://velog.io/@wkdwl578/SQL-%EC%97%B0%EC%82%B0%EC%9E%90%EC%99%80-%EC%A1%B0%EA%B1%B4%EB%AC%B8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;velog에서 이관해온 글&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;[MariaDB] 연산자.png&quot; data-origin-width=&quot;4726&quot; data-origin-height=&quot;2475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wSmUs/btsJQm5UMJI/1bLKckmpkJ0HX1JuzmpiT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wSmUs/btsJQm5UMJI/1bLKckmpkJ0HX1JuzmpiT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wSmUs/btsJQm5UMJI/1bLKckmpkJ0HX1JuzmpiT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwSmUs%2FbtsJQm5UMJI%2F1bLKckmpkJ0HX1JuzmpiT1%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;4726&quot; height=&quot;2475&quot; data-filename=&quot;[MariaDB] 연산자.png&quot; data-origin-width=&quot;4726&quot; data-origin-height=&quot;2475&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;연산자&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL의 경우 산술연산자, 대입연산자, 비교연산자, 논리연산자, 등이 있습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  값 입력 시 주의할 점&lt;/b&gt;&lt;br /&gt;숫자, 수치형 자료일 경우 값 자체를 입력해주면 되고, 수치형 자료가 아닐 경우 &lt;code&gt;''&lt;/code&gt;로 감싸줘야합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;# 수치형 자료 O
SELECT *
FROM tbl_member
WHERE mileage = 1000  
;
#수치형 자료 X
SELECT *
FROM tbl_member
WHERE memberId = 'gee1'    
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수치형 자료도 &lt;code&gt;''&lt;/code&gt; 감싸줘도 되지만, 이럴 경우 DBMS가 자동으로 캐스팅해서 실행하므로 속도이슈가 발생할 수 있으므로 지양하는 것이 옳습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;산술연산자&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL에서 산술연산자는 수치 연산에서만 사용되며, 문자열을 연결시키져줄 때는 &lt;code&gt;concat()&lt;/code&gt; 등의 다양한 메서드로 이용해야 합니다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;형식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;+&lt;/td&gt;
&lt;td&gt;op1 + op2&lt;/td&gt;
&lt;td&gt;- op1과 op2를 더한 값을 반환합니다.&lt;br /&gt;- op1과 op2가 integer일 경우 값은 BIGINT로 반환됩니다.&lt;br /&gt;- op1과 op2에 부호가 없으면 반환되는 값에도 부호가 없습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;-&lt;/td&gt;
&lt;td&gt;op1 - op2&lt;/td&gt;
&lt;td&gt;- op1에서 op2를 뺀 값을 반환합니다.&lt;br /&gt;- op1과 op2가 integer일 경우 값은 BIGINT로 반환됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;*&lt;/td&gt;
&lt;td&gt;op1 * op2&lt;/td&gt;
&lt;td&gt;- op1과 op2를 곱해줍니다. &lt;br /&gt;- op1과 op2가 integer일 경우 값은 BIGINT로 반환됩니다.&lt;br /&gt;- op1과 op2에 부호가 없으면 반환되는 값에도 부호가 없습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;/&lt;/td&gt;
&lt;td&gt;op1 / op2&lt;/td&gt;
&lt;td&gt;- op1을 op2를 나눗셈합니다. &lt;br /&gt;- 0이 들어갈 경우 null이 출력되거나 오류가 발생할 수 있습니다. &lt;br /&gt;- 나눗셈 계산의 경우 기본적으로 소수점 4자리까지 계산됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;DIV&lt;/td&gt;
&lt;td&gt;op1 DIV op2&lt;/td&gt;
&lt;td&gt;- op1을 op2로 나눈 몫을 구합니다. &lt;br /&gt;- op2가 0일 경우 결과는 null이 나옵니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;%&lt;br /&gt;MOD()&lt;/td&gt;
&lt;td&gt;op1 % op2&lt;br /&gt;MOD(op1,op2)&lt;/td&gt;
&lt;td&gt;- op1을 op2로 나눈 후 나머지를 구합니다. &lt;br /&gt;- op2가 0일 경우 결과는 null입니다. &lt;br /&gt;- &lt;code&gt;%&lt;/code&gt;와 &lt;code&gt;MOD&lt;/code&gt; 결과는 같으나, &lt;code&gt;MOD()&lt;/code&gt;의 경우 함수로 구분됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;대입연산자&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;할당연산자로, 변수에 대입해줄 때와 select 문에서 대입해줄 때 사용하는 연산자가 다릅니다.&lt;/p&gt;
&lt;table style=&quot;height: 81px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;형식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;=&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;변수명/컬럼명 = 값&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;- 변수 또는 컬럼에 값을 할당합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot; align=&quot;center&quot;&gt;:=&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;변수명/컬럼명 = 값&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;- 변수 또는 컬럼에 값을 할당합니다.&lt;br /&gt;- select 문 내에서는 &lt;code&gt;=&lt;/code&gt;이 아니라 &lt;code&gt;:=&lt;/code&gt;로 사용해줘야합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  SQL 에서 변수 선언은 어떻게 할까?&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1727603939031&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 사용법
set @변수명 = 값;
set @변수명1 = 값1, @변수명2 = 값2;
--사용예시
SET @TEMP_ADDR = '', @SSN1 = '', @SSN2='';
SELECT @TEMP_ADDR := CONCAT(addr1, addr2), @SSN1 := LEFT(jumin, 6), @SSN2 := RIGHT(jumin,7)
FROM tbl_member;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;변수를 선언 시에는 &lt;code&gt;set&lt;/code&gt;키워드로 선언해줍니다. sql에서 변수는 &lt;code&gt;@&lt;/code&gt;로 표시해주는 식으로 사용합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;비교연산자&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 연산자의 경우 값을 비교해주는 경우 사용됩니다. &lt;code&gt;where&lt;/code&gt;문 안에 주로 사용됩니다.&lt;/p&gt;
&lt;table style=&quot;width: 852px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 112px;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 186px;&quot;&gt;&lt;b&gt;형식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 554px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;=&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;비교대상 = 값&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 비교대상을 값과 비교하여 완벽히 일치할 경우 1(true), 다를 경우 0(false)를 반환합니다.&lt;br /&gt;- 비교대상, 값 둘 중 하나라도 null일 경우 null을 반환합니다.&lt;br /&gt;- 문자 비교일 경우 대소문자를 구분하지 않습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;&amp;lt;=&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;비교대상 &amp;lt;=&amp;gt; 값&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 비교대상을 값과 비교하여 완벽히 일치할 경우 1(true), 다를 경우 0(false)를 반환합니다.&lt;br /&gt;- 비교대상, 값 둘 하나가 null일 경우 0(false)를 반환하고 둘 다 null일 경우 1(true)를 반환합니다.&lt;br /&gt;- 문자 비교일 경우 대소문자를 구분하지 않습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;&amp;lt;&amp;gt;&lt;br /&gt;!=&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;비교대상 &amp;lt;&amp;gt; 값&lt;br /&gt;비교대상 != 깂&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 비교대상을 값과 비교하여 일치하지 않을 경우 1(true), 일치할 경우 0(false)를 반환합니다.&lt;br /&gt;- 비교대상, 값 둘 중 하나라도 null일 경우 null을 반환합니다.&lt;br /&gt;- 문자 비교일 경우 대소문자를 구분하지 않습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;&amp;lt;&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;비교대상 &amp;lt; 값&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 비교대상이 값보다 작을 경우(같은경우 X) 1(true), 크거나 같을 경우 0(false)를 반환합니다..&lt;br /&gt;- 비교대상, 값 둘 중 하나라도 null일 경우 null을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;비교대상 &amp;gt; 값&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 비교대상이 값보다 클 경우(같은경우 X) 1(true), 작거나 같을 경우 0(false)를 반환합니다..&lt;br /&gt;- 비교대상, 값 둘 중 하나라도 null일 경우 null을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;&amp;lt;=&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;비교대상 &amp;lt;= 값&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 비교대상이 값보다 같거나 작을 경우 1(true), 클(같은경우 X) 경우 0(false)를 반환합니다..&lt;br /&gt;- 비교대상, 값 둘 중 하나라도 null일 경우 null을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;&amp;gt;=&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;비교대상 &amp;gt;= 값&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 비교대상이 값보다 같거나 클 경우 1(true), 작을(같은경우 X) 경우 0(false)를 반환합니다..&lt;br /&gt;- 비교대상, 값 둘 중 하나라도 null일 경우 null을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;&lt;code&gt;BETWEEN ... AND&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;비교대상 BETWEEN 값1 AND 값2&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 비교대상이 값1보다 같거나 크고, 값2 보다는 같거나 작은경우 1(TRUE)를 반환, 그 외는 0(FALSE)를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;&lt;code&gt;IN&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;비교대상 IN(값1, 값2,,,)&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 비교대상이 IN 괄호 안 값 중 하나라도 해당되면 1(TRUE) 모두 해당되지 않으면 0(FALSE)를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; rowspan=&quot;3&quot; align=&quot;center&quot;&gt;&lt;code&gt;IS...&lt;/code&gt;&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;대상 IS boolean_value&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- boolean_value : TURE/FALSE/UNKNOWN이 올 수 있습니다.&lt;br /&gt;- 대상이 boolean_value로 입력한 값에 대해 맞으면 1, 아니면 0을 리턴합니다.&lt;br /&gt;- 예 : 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN 결과 : 1, 1, 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;대상 IS NULL&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 대상이 null이면 1, 아니면 0을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;대상 IS NOT NULL&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 대상이 null이 아니면 1, 맞으면 0을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;LEAST&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;LEAST(값1, 값,,,)&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 나열된 값 중 가장 작은 값을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 112px;&quot; align=&quot;center&quot;&gt;LIKE&lt;/td&gt;
&lt;td style=&quot;width: 186px;&quot;&gt;대상 LIKE '%'&lt;/td&gt;
&lt;td style=&quot;width: 554px;&quot;&gt;- 대상에 특정문자가 포함된 값을 찾을 수 있습니다.&lt;br /&gt;- '%'는 와일드카드라고도 불리며 &lt;br /&gt;'%특정문자' : 특정문자로 끝나는 값 &lt;br /&gt;'특정문자%' : 특정문자로 시작하는 값 &lt;br /&gt;'%특정문자%' : 특정문자가 중간 어디든 포함되어있는 값 을 찾을 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;  문자열에서 빈 값 체크는?&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;code&gt;IS NULL&lt;/code&gt; / &lt;code&gt;IS NOT NULL&lt;/code&gt;의 경우 수치형에서 사용할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1727604060621&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 문자열에서 NULL인경우 체크
WHERE 컬럼명 = &quot;&quot; OR 컬럼명 IS NULL
# 문자열에서 NULL이 아닌 경우 체크
WHERE 컬럼명 &amp;lt;&amp;gt; &quot;&quot; OR 컬럼명 IS NOT NULL
WHERE 컬럼명 != &quot;&quot; OR 컬럼명 IS NOT NULL   
# &amp;lt;&amp;gt;연산자와 != 연산자는 동일한 의미입니다.&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;논리연산자&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리연산자는 두 가지 이상의 조건을 확인할 수 있도록 만들 수 있습니다!&lt;/p&gt;
&lt;table style=&quot;height: 258px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 40px;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 40px;&quot;&gt;&lt;b&gt;형식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 40px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;height: 60px;&quot; align=&quot;center&quot;&gt;AND&lt;br /&gt;&amp;amp;&amp;amp;&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;조건1 AND 조건2&lt;br /&gt;조건1 &amp;amp;&amp;amp; 조건2&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;- 조건1과 조건2 모두 true일 경우 1(true)이고 아니면 0(false)를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;height: 57px;&quot; align=&quot;center&quot;&gt;OR&lt;br /&gt;||&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;조건1 OR 조건2&lt;br /&gt;조건1 || 조건2&lt;/td&gt;
&lt;td style=&quot;height: 57px;&quot;&gt;- 조건1과 조건2 중 하나라도 true가 있을 경우 1(true)를 반환하고, 모두 false일 경우만 0(false)를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot; align=&quot;center&quot;&gt;XOR&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;조건1 XOR 조건2&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;- 조건1과 조건2 모두 true거나 모두 false일 때만 0(false)를 반환하고 하나라도 true일 경우 1(true)를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot; align=&quot;center&quot;&gt;NOT&lt;br /&gt;!&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;NOT 조건식&lt;br /&gt;! 조건식&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;- 해당 조건식이 1(true)일 때 0(false), 해당 조건식이 0(false)일 때 1(true)를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-7596212597454555&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;연산자 우선선위&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;INTERVAL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BINARY&lt;/code&gt;, &lt;code&gt;COLLATE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-&lt;/code&gt; (산술연산자 X, 단항연산자)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;^&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;*&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;DIV&lt;/code&gt;, &lt;code&gt;%&lt;/code&gt;, &lt;code&gt;MOD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt; (산술연산자 O)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;|&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;=&lt;/code&gt;, &lt;code&gt;&amp;lt;=&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;=&lt;/code&gt;, &lt;code&gt;&amp;gt;=&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt;, &lt;code&gt;!=&lt;/code&gt;, &lt;code&gt;IS&lt;/code&gt;, &lt;code&gt;LIKE&lt;/code&gt;, &lt;code&gt;REGEXP&lt;/code&gt;, &lt;code&gt;IN&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BETWEEN&lt;/code&gt;, &lt;code&gt;CASE&lt;/code&gt;, &lt;code&gt;WHEN&lt;/code&gt;, &lt;code&gt;THEN&lt;/code&gt;, &lt;code&gt;ELSE&lt;/code&gt;, &lt;code&gt;END&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NOT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;, &lt;code&gt;AND&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;XOR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;||&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;=&lt;/code&gt; (대입연산자)&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  연산자 우선순위를 변겨하고자 할 때&lt;/b&gt;&lt;br /&gt;기본적으로 위 우선순위로 동작하며, 해당 우선순위가 아니라 먼저 계산이 필요한 경우 &lt;code&gt;()&lt;/code&gt;로 묶어서 먼저 계산하도록 지정해줄 수 있습니다!&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;연산자 우선순위 관련해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;color: #0070d1; text-align: start;&quot; href=&quot;https://mariadb.com/kb/en/operator-precedence/&quot;&gt;MariaDB&lt;/a&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서 더 자세한 내용을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;참고&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;MariaDB로 따라 하며 배우는 SQL프로그래밍 데이터베이스 기초에서 실무까지 - 나익수, 서연경 지음&lt;/i&gt;&lt;br /&gt;위 책을 공부하며 작성하고 있습니다!&lt;/p&gt;</description>
      <category>Study/DB</category>
      <category>mariadb</category>
      <category>SQL</category>
      <category>논리연산자</category>
      <category>대입연산자</category>
      <category>비교연산자</category>
      <category>산술연산자</category>
      <category>연산자</category>
      <category>연산자 우선순위</category>
      <author>geehyun</author>
      <guid isPermaLink="true">https://geehyun.tistory.com/20</guid>
      <comments>https://geehyun.tistory.com/entry/MariaDB-%EC%97%B0%EC%82%B0%EC%9E%90#entry20comment</comments>
      <pubDate>Sun, 29 Sep 2024 19:02:59 +0900</pubDate>
    </item>
  </channel>
</rss>