<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[lenny.dev RSS Feed]]></title><description><![CDATA[프론트엔드 개발자 Lenny의 기술 블로그. React, TypeScript, JavaScript 등 웹 개발 관련 글과 일상을 공유합니다.]]></description><link>https://pjj186.github.io</link><generator>GatsbyJS</generator><lastBuildDate>Wed, 31 Dec 2025 02:37:06 GMT</lastBuildDate><item><title><![CDATA[MySQL 데이터 타입]]></title><description><![CDATA[MySQL 데이터 타입  에는 다음과 같은 데이터 타입이 있습니다. 데이터 타입 설명 CHAR 고정 길이 문자열 VARCHAR 가변 길이 문자열 ENUM 열거형 SET 집합 TEXT 텍스트 BLOB 바이너리 데이터 DATE 날짜 INT…]]></description><link>https://pjj186.github.io/250923-mysql-data-type/</link><guid isPermaLink="false">https://pjj186.github.io/250923-mysql-data-type/</guid><pubDate>Tue, 23 Sep 2025 13:12:24 GMT</pubDate><content:encoded>&lt;h1 id=&quot;mysql-데이터-타입&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#mysql-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85&quot; aria-label=&quot;mysql 데이터 타입 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MySQL 데이터 타입&lt;/h1&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;MySQL&lt;/code&gt; 에는 다음과 같은 데이터 타입이 있습니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;데이터 타입&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CHAR&lt;/td&gt;
&lt;td&gt;고정 길이 문자열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VARCHAR&lt;/td&gt;
&lt;td&gt;가변 길이 문자열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ENUM&lt;/td&gt;
&lt;td&gt;열거형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SET&lt;/td&gt;
&lt;td&gt;집합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TEXT&lt;/td&gt;
&lt;td&gt;텍스트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BLOB&lt;/td&gt;
&lt;td&gt;바이너리 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DATE&lt;/td&gt;
&lt;td&gt;날짜&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INT&lt;/td&gt;
&lt;td&gt;정수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BOOLEAN&lt;/td&gt;
&lt;td&gt;불리언&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DECIMAL&lt;/td&gt;
&lt;td&gt;고정 소수점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FLOAT&lt;/td&gt;
&lt;td&gt;부동소수점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;날짜와 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DATETIME&lt;/td&gt;
&lt;td&gt;날짜와 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;char&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#char&quot; aria-label=&quot;char permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CHAR&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;CHAR&lt;/code&gt; 는 고정 길이 문자열을 저장하는 데이터 타입입니다.
최대 255자까지 저장할 수 있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  title &lt;span class=&quot;token keyword&quot;&gt;CHAR&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;title&lt;/code&gt; 이 만약 10글자보다 적은 경우에는 공백으로 빈자리를 채웁니다.&lt;/p&gt;
&lt;h2 id=&quot;varchar&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#varchar&quot; aria-label=&quot;varchar permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;VARCHAR&lt;/h2&gt;
&lt;p&gt;VARCHAR는 가변 길이 문자열을 저장하는 데이터 타입입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  contents &lt;span class=&quot;token keyword&quot;&gt;VARCHAR&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;CHAR&lt;/code&gt; 와 다르게 &lt;code class=&quot;language-text&quot;&gt;contents&lt;/code&gt; 가 100글자보다 적은 경우에는 빈 공간을 공백으로 채우지 않고, &lt;code class=&quot;language-text&quot;&gt;contents&lt;/code&gt; 의 길이만큼만 저장합니다.&lt;/p&gt;
&lt;h2 id=&quot;enum&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#enum&quot; aria-label=&quot;enum permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ENUM&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;ENUM&lt;/code&gt; 은 열거형을 저장하는 데이터 타입입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  rating &lt;span class=&quot;token keyword&quot;&gt;ENUM&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;G&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;PG&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;R&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;rating&lt;/code&gt; 은 &lt;code class=&quot;language-text&quot;&gt;G&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;PG&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;R&lt;/code&gt; 중 &lt;span style=&quot;color:orange&quot;&gt;&lt;strong&gt;하나의 값&lt;/strong&gt;&lt;/span&gt;만 저장할 수 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;set&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#set&quot; aria-label=&quot;set permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SET&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;MySQL&lt;/code&gt; 의 &lt;code class=&quot;language-text&quot;&gt;SET&lt;/code&gt; 데이터타입은 미리 정의된 값들의 집합에서 0개 이상의 값을 선택할 수 있는 문자열 객체입니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;SET&lt;/code&gt; 은 &lt;code class=&quot;language-text&quot;&gt;ENUM&lt;/code&gt; 과 유사하지만, &lt;code class=&quot;language-text&quot;&gt;ENUM&lt;/code&gt;이 하나의 값만 선택할 수 있는 반면 &lt;code class=&quot;language-text&quot;&gt;SET&lt;/code&gt; 은 여러 개의 값을 동시에 선택할 수 있습니다. 내부적으로는 비트마스크를 사용하여 각 값을 저장합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; user_interests &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  hobbies &lt;span class=&quot;token keyword&quot;&gt;SET&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;reading&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;sports&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;music&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;travel&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;cooking&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;hobbies&lt;/code&gt; 는 &lt;code class=&quot;language-text&quot;&gt;reading&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;sports&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;music&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;travel&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;cooking&lt;/code&gt; 중 하나 또는 여러 개의 값을 저장할 수 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;text&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#text&quot; aria-label=&quot;text permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TEXT&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;TEXT&lt;/code&gt; 는 텍스트를 저장하는 데이터 타입입니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;TEXT&lt;/code&gt; 타입은 또 종류가 나뉩니다. 아래와 같이 총 4가지가 있습니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;데이터 타입&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TINYTEXT&lt;/td&gt;
&lt;td&gt;최대 255자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TEXT&lt;/td&gt;
&lt;td&gt;최대 65,535자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MEDIUMTEXT&lt;/td&gt;
&lt;td&gt;최대 16,777,215자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LONGTEXT&lt;/td&gt;
&lt;td&gt;최대 4,294,967,295자&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;근데 위 종류를 보면 그냥 LONGTEXT를 사용하면 되지 않나? 라는 의문이 들 수 있습니다.&lt;/p&gt;
&lt;p&gt;그러나 데이터베이스가 처리하는 방식의 차이때문에 (성능과 관련) 최대한 용도에 맞는 타입 설정이 중요합니다.&lt;/p&gt;
&lt;h2 id=&quot;blob&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#blob&quot; aria-label=&quot;blob permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;BLOB&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;BLOB (Binary Large Object)&lt;/code&gt; 데이터타입은 이진 데이터를 저장하기 위한 데이터타입입니다.&lt;/p&gt;
&lt;p&gt;MySQL은 크기에 따라 4가지 BLOB 타입을 제공합니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;데이터 타입&lt;/th&gt;
&lt;th&gt;최대 길이&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TINYBLOB&lt;/td&gt;
&lt;td&gt;255 bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BLOB&lt;/td&gt;
&lt;td&gt;65,535 bytes (64KB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MEDIUMBLOB&lt;/td&gt;
&lt;td&gt;16,777,215 bytes (16MB)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LONGBLOB&lt;/td&gt;
&lt;td&gt;4,294,967,295 bytes (4GB)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;int&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#int&quot; aria-label=&quot;int permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;INT&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;INT&lt;/code&gt; 는 정수를 저장하는 데이터 타입입니다.&lt;/p&gt;
&lt;p&gt;크기에 따라 5가지 정수형 타입을 제공합니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;데이터 타입&lt;/th&gt;
&lt;th&gt;바이트&lt;/th&gt;
&lt;th&gt;범위(SIGNED)&lt;/th&gt;
&lt;th&gt;범위(UNSIGNED)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TINYINT&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;-128 ~ 127&lt;/td&gt;
&lt;td&gt;0 ~ 255&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMALLINT&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;-32,768 ~ 32,767&lt;/td&gt;
&lt;td&gt;0 ~ 65,535&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MEDIUMINT&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;-8,388,608 ~ 8,388,607&lt;/td&gt;
&lt;td&gt;0 ~ 16,777,215&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INT&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;-2,147,483,648 ~ 2,147,483,647&lt;/td&gt;
&lt;td&gt;0 ~ 4,294,967,295&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807&lt;/td&gt;
&lt;td&gt;0 ~ 18,446,744,073,709,551,615&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;column_name &lt;span class=&quot;token keyword&quot;&gt;INT&lt;/span&gt;

column_name &lt;span class=&quot;token keyword&quot;&gt;INT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;UNSIGNED&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;기본적으로 위와 같이 사용하는데, 기본값은 SIGNED 입니다.&lt;/p&gt;
&lt;h2 id=&quot;boolean&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#boolean&quot; aria-label=&quot;boolean permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;BOOLEAN&lt;/h2&gt;
&lt;p&gt;MySQL에서 BOOLEAN은 실제로는 TINYINT(1)의 별칭입니다.&lt;/p&gt;
&lt;p&gt;진정한 불린 타입이 아닌 정수 타입으로 구현되어 있습니다.&lt;/p&gt;
&lt;p&gt;TRUE, FALSE 대신 1, 0을 사용합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;-- 모두 동일한 의미&lt;/span&gt;
column_name &lt;span class=&quot;token keyword&quot;&gt;BOOLEAN&lt;/span&gt;
column_name &lt;span class=&quot;token keyword&quot;&gt;BOOL&lt;/span&gt;
column_name &lt;span class=&quot;token keyword&quot;&gt;TINYINT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;decimal&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#decimal&quot; aria-label=&quot;decimal permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DECIMAL&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;DECIMAL&lt;/code&gt; 은 고정소수점(Fixed-Point) 숫자를 정확하게 저장하는 데이터타입입니다.&lt;/p&gt;
&lt;p&gt;부동소수점과 달리 정확한 계산이 가능하여 금융 데이터나 정밀한 수치 계산에 필수적입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;-- 다양한 DECIMAL 정의&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; decimal_examples &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    id &lt;span class=&quot;token keyword&quot;&gt;INT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;KEY&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    price &lt;span class=&quot;token keyword&quot;&gt;DECIMAL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;        &lt;span class=&quot;token comment&quot;&gt;-- 99999999.99까지 (총 10자리, 소수점 2자리)&lt;/span&gt;
    percentage &lt;span class=&quot;token keyword&quot;&gt;DECIMAL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;    &lt;span class=&quot;token comment&quot;&gt;-- 9.9999까지 (총 5자리, 소수점 4자리)&lt;/span&gt;
    huge_number &lt;span class=&quot;token keyword&quot;&gt;DECIMAL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;65&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;-- 최대 크기&lt;/span&gt;
    simple_decimal &lt;span class=&quot;token keyword&quot;&gt;DECIMAL&lt;/span&gt;      &lt;span class=&quot;token comment&quot;&gt;-- DECIMAL(10,0)과 동일&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;float&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#float&quot; aria-label=&quot;float permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;FLOAT&lt;/h2&gt;
&lt;p&gt;FLOAT는 부동소수점(Floating-Point) 숫자를 저장하는 데이터타입입니다.&lt;/p&gt;
&lt;p&gt;IEEE 754 표준을 따르며, 매우 큰 범위의 수를 근사치로 저장할 수 있지만 정확도에 제한이 있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;-- 단정밀도 부동소수점&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;FLOAT&lt;/span&gt;           &lt;span class=&quot;token comment&quot;&gt;-- 4바이트, 약 7자리 정밀도&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;FLOAT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;p&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;        &lt;span class=&quot;token comment&quot;&gt;-- p는 정밀도 (0-24: FLOAT, 25-53: DOUBLE)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;-- 배정밀도 부동소수점&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;DOUBLE&lt;/span&gt;          &lt;span class=&quot;token comment&quot;&gt;-- 8바이트, 약 15자리 정밀도&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;DOUBLE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;PRECISION&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;-- DOUBLE과 동일&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;REAL&lt;/span&gt;            &lt;span class=&quot;token comment&quot;&gt;-- DOUBLE의 별칭 (sql_mode에 따라 FLOAT일 수도 있음)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;데이터 타입&lt;/th&gt;
&lt;th&gt;바이트&lt;/th&gt;
&lt;th&gt;범위&lt;/th&gt;
&lt;th&gt;정밀도&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FLOAT&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;±1.175494351E-38 ~ ±3.402823466E+38&lt;/td&gt;
&lt;td&gt;약 7자리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DOUBLE&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;±2.2250738585072014E-308 ~ ±1.7976931348623157E+308&lt;/td&gt;
&lt;td&gt;약 15자리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;timestamp-datetime&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#timestamp-datetime&quot; aria-label=&quot;timestamp datetime permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TIMESTAMP, DATETIME&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;TIMESTAMP&lt;/code&gt; 와 &lt;code class=&quot;language-text&quot;&gt;DATETIME&lt;/code&gt; 은 날짜와 시간을 저장하는 데이터 타입입니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;특성&lt;/th&gt;
&lt;th&gt;TIMESTAMP&lt;/th&gt;
&lt;th&gt;DATETIME&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;저장 공간&lt;/td&gt;
&lt;td&gt;4바이트&lt;/td&gt;
&lt;td&gt;8바이트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;범위&lt;/td&gt;
&lt;td&gt;1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 UTC&lt;/td&gt;
&lt;td&gt;1000-01-01 00:00:00 ~ 9999-12-31 23:59:59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;시간대 처리&lt;/td&gt;
&lt;td&gt;UTC로 저장, 조회시 변환&lt;/td&gt;
&lt;td&gt;입력값 그대로 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;자동 업데이트&lt;/td&gt;
&lt;td&gt;지원&lt;/td&gt;
&lt;td&gt;지원 (MySQL 5.6+)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;-- TIMESTAMP 선언&lt;/span&gt;
column_name &lt;span class=&quot;token keyword&quot;&gt;TIMESTAMP&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;UPDATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;-- DATETIME 선언&lt;/span&gt;
column_name &lt;span class=&quot;token keyword&quot;&gt;DATETIME&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;UPDATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;-- 마이크로초 지원 (MySQL 5.6+)&lt;/span&gt;
column_name &lt;span class=&quot;token keyword&quot;&gt;TIMESTAMP&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;  &lt;span class=&quot;token comment&quot;&gt;-- 마이크로초까지&lt;/span&gt;
column_name &lt;span class=&quot;token keyword&quot;&gt;DATETIME&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;   &lt;span class=&quot;token comment&quot;&gt;-- 밀리초까지&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;그럼 각각을 언제 써야하나요?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DATETIME : 1000년부터 9999년 사이의 날짜를 저장하고 싶으면 사용&lt;/li&gt;
&lt;li&gt;TIMESTAMP : 시스템 이벤트 저장 시 사용하기 적절 (타임존 고려, 저장공간도 DATETIME에 비하여 덜 차지)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;외에도 DATE, TIME, YEAR 도 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;date-time-year&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#date-time-year&quot; aria-label=&quot;date time year permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DATE, TIME, YEAR&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;DATE : 날짜를 저장하고 싶으면 사용&lt;/li&gt;
&lt;li&gt;TIME : 시간을 저장하고 싶으면 사용&lt;/li&gt;
&lt;li&gt;YEAR : 년도를 저장하고 싶으면 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;column_name &lt;span class=&quot;token keyword&quot;&gt;DATE&lt;/span&gt;
column_name &lt;span class=&quot;token keyword&quot;&gt;TIME&lt;/span&gt;
column_name &lt;span class=&quot;token keyword&quot;&gt;YEAR&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr/&gt;
&lt;p&gt;외에도 JSON, GEOMETRY, ENUM, SET 등 다양한 데이터 타입이 있습니다.&lt;/p&gt;
&lt;p&gt;자세한 내용은 &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/data-types.html&quot;&gt;MySQL 공식 문서&lt;/a&gt;를 참고해주세요.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[DML (Data Manipulation Language)]]></title><description><![CDATA[DML (Data Manipulation Language) 데이터를 조작하는 언어에요. 명령어는 크게 두 분류로 나뉘어요. Update : 데이터를 추가하거나 수정하는 명령어, 데이터의 상태를 변화시키는? 그런 명령어들 Query…]]></description><link>https://pjj186.github.io/250918-dml/</link><guid isPermaLink="false">https://pjj186.github.io/250918-dml/</guid><pubDate>Thu, 18 Sep 2025 23:27:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;dml-data-manipulation-language&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dml-data-manipulation-language&quot; aria-label=&quot;dml data manipulation language permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DML (Data Manipulation Language)&lt;/h1&gt;
&lt;p&gt;데이터를 조작하는 언어에요.&lt;/p&gt;
&lt;p&gt;명령어는 크게 두 분류로 나뉘어요.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Update : 데이터를 추가하거나 수정하는 명령어, 데이터의 상태를 변화시키는? 그런 명령어들&lt;/li&gt;
&lt;li&gt;Query : 데이터를 조회하는 명령어&lt;/li&gt;
&lt;/ol&gt;
&lt;hr/&gt;
&lt;h2 id=&quot;update-commands&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#update-commands&quot; aria-label=&quot;update commands permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Update Commands&lt;/h2&gt;
&lt;p&gt;Update 명령어는 어떤것들이 있는지 한번 살펴보겠습니다.&lt;/p&gt;
&lt;h3 id=&quot;insert-into-values&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#insert-into-values&quot; aria-label=&quot;insert into values permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;INSERT INTO VALUES&lt;/h3&gt;
&lt;p&gt;테이블에 데이터를 추가하는 명령어에요.&lt;/p&gt;
&lt;p&gt;문법은 다음과 같습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;INTO&lt;/span&gt; table_name &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;column1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;VALUES&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;value1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; value3&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;사용 예시&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;INTO&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; released&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; overview&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; rating&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; director&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;VALUES&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;The Dark Knight&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;2008&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;A superhero movie about a man who becomes a superhero and fights crime.&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;8.5&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;Christopher Nolan&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;update&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#update&quot; aria-label=&quot;update permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;UPDATE&lt;/h3&gt;
&lt;p&gt;테이블에 데이터를 수정하는 명령어에요.&lt;/p&gt;
&lt;p&gt;문법은 다음과 같습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;UPDATE&lt;/span&gt; table_name &lt;span class=&quot;token keyword&quot;&gt;SET&lt;/span&gt; column1 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; value1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; value2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; condition&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span style=&quot;color:orange&quot;&gt;🚨 주의해야 할 점은 WHERE 조건이 없으면 테이블의 모든 데이터가 수정된다는 점이에요.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;사용 예시&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;UPDATE&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;SET&lt;/span&gt; title &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;The Dark Knight&apos;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;delete&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#delete&quot; aria-label=&quot;delete permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DELETE&lt;/h3&gt;
&lt;p&gt;테이블에 데이터를 삭제하는 명령어에요.&lt;/p&gt;
&lt;p&gt;문법은 다음과 같습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;DELETE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; table_name &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; condition&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;사용 예시&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;DELETE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; id &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;query-commands&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#query-commands&quot; aria-label=&quot;query commands permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Query Commands&lt;/h2&gt;
&lt;p&gt;Query 명령어는 어떤것들이 있는지 한번 살펴보겠습니다.&lt;/p&gt;
&lt;h3 id=&quot;select&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#select&quot; aria-label=&quot;select permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SELECT&lt;/h3&gt;
&lt;p&gt;테이블에 데이터를 조회하는 명령어에요.&lt;/p&gt;
&lt;p&gt;문법은 다음과 같습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; column1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; column2&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; table_name &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; condition&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;FROM&lt;/code&gt; 이 먼저 실행되어 movies 테이블의 모든 데이터를 가져오고 &lt;code class=&quot;language-text&quot;&gt;SELECT&lt;/code&gt; 로 어떤 컬럼을 결과물로 보여줄지 지정합니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;사용 예시&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;다음과 같이 별칭을 붙여서도 조회할 수 있어요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; title &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; movie_title&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    released &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; movie_released&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    overview &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; movie_overview&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    rating &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; movie_rating&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    director &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; movie_director
&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;별칭을 붙이면 조회된 데이터의 컬럼명을 변경할 수 있습니당.&lt;/p&gt;
&lt;p&gt;다음과 같이 연산자도 쓸 수 있구요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; rating &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; double_rating &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 rating 컬럼의 값을 2배로 곱한 값이 double_rating 컬럼에 조회됩니다.&lt;/p&gt;
&lt;h2 id=&quot;where&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#where&quot; aria-label=&quot;where permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;WHERE&lt;/h2&gt;
&lt;p&gt;WHERE 절은 조회할 데이터의 조건을 지정하는 명령어임니다.&lt;/p&gt;
&lt;p&gt;위에서 봤듯이 여러가지 문법과 조합해서 사용할 수 있죵.&lt;/p&gt;
&lt;p&gt;SELECT와 함께 사용할때도 WHERE 절을 사용하여 조회하려는 데이터의 범위를 좁힐 수 있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; rating &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 rating 컬럼의 값이 8보다 큰 데이터만 조회됩니다.&lt;/p&gt;
&lt;p&gt;다음과 같이 여러 조건을 조합해서 사용할 수 있어요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; rating &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;AND&lt;/span&gt; director &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Christopher Nolan&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;and-or&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#and-or&quot; aria-label=&quot;and or permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;AND, OR&lt;/h3&gt;
&lt;p&gt;WHERE 절에서 AND, OR 조건을 사용할 수 있어요.&lt;/p&gt;
&lt;p&gt;AND 조건은 두 조건이 모두 참일 때 조회돼요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; rating &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;AND&lt;/span&gt; director &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Christopher Nolan&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 rating 컬럼의 값이 8보다 크고 director 컬럼의 값이 &apos;Christopher Nolan&apos;인 데이터만 조회됩니다.&lt;/p&gt;
&lt;p&gt;OR 조건은 두 조건 중 하나라도 참일 때 조회돼요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; rating &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;OR&lt;/span&gt; director &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Christopher Nolan&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 rating 컬럼의 값이 8보다 크거나 director 컬럼의 값이 &apos;Christopher Nolan&apos;인 데이터만 조회됩니다.&lt;/p&gt;
&lt;h3 id=&quot;between-and&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#between-and&quot; aria-label=&quot;between and permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;BETWEEN AND&lt;/h3&gt;
&lt;p&gt;BETWEEN AND 조건은 두 값 사이의 범위에 해당하는 데이터를 조회할 수 있어요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; rating &lt;span class=&quot;token operator&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 rating 컬럼의 값이 8과 9 사이인 데이터만 조회됩니다.&lt;/p&gt;
&lt;h3 id=&quot;in&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#in&quot; aria-label=&quot;in permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;IN&lt;/h3&gt;
&lt;p&gt;IN 조건은 여러 값 중 하나에 해당하는 데이터를 조회할 수 있어요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; director &lt;span class=&quot;token operator&quot;&gt;IN&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;Christopher Nolan&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;Quentin Tarantino&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 director 컬럼의 값이 &apos;Christopher Nolan&apos; 또는 &apos;Quentin Tarantino&apos;인 데이터만 조회됩니다.&lt;/p&gt;
&lt;h3 id=&quot;like--_&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#like--_&quot; aria-label=&quot;like  _ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;LIKE (%, _)&lt;/h3&gt;
&lt;p&gt;LIKE 조건은 특정 패턴에 해당하는 데이터를 조회할 수 있어요.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;%&lt;/code&gt; 는 0개 이상의 문자를 의미하고, &lt;code class=&quot;language-text&quot;&gt;_&lt;/code&gt; 는 1개의 문자를 의미합니다.&lt;/p&gt;
&lt;p&gt;다음과 같이 사용할 수 있어요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; director &lt;span class=&quot;token operator&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;N%&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 director 컬럼의 값이 &apos;N&apos;으로 시작하는 데이터만 조회됩니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; director &lt;span class=&quot;token operator&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;The ___&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 director 컬럼의 값이 &apos;The&apos;로 시작하고 3개의 문자가 있는 데이터만 조회됩니다.&lt;/p&gt;
&lt;h3 id=&quot;not&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#not&quot; aria-label=&quot;not permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;NOT&lt;/h3&gt;
&lt;p&gt;NOT 조건은 특정 조건에 해당하지 않는 데이터를 조회할 수 있어요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; director &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;LIKE&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;%Nolan%&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 director 컬럼의 값에 &apos;Nolan&apos;이 포함되지 않은 데이터만 조회됩니다.&lt;/p&gt;
&lt;h2 id=&quot;case&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#case&quot; aria-label=&quot;case permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CASE&lt;/h2&gt;
&lt;p&gt;CASE 문은 조건에 따라 다른 값을 반환하는 명령어에요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; title&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;WHEN&lt;/span&gt; rating &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;THEN&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;좋음&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;WHEN&lt;/span&gt; rating &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;THEN&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;보통&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;WHEN&lt;/span&gt; rating &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;THEN&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;나쁨&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;END&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;AS&lt;/span&gt; 영화평점 &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 rating 컬럼의 값이 8보다 크면 &apos;좋음&apos;을 반환하고 5보다 크고 8보다 작으면 &apos;보통&apos;을 반환하고 그렇지 않으면 &apos;나쁨&apos;을 반환합니다.&lt;/p&gt;
&lt;h2 id=&quot;order-by&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#order-by&quot; aria-label=&quot;order by permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ORDER BY&lt;/h2&gt;
&lt;p&gt;ORDER BY 문은 조회된 데이터를 정렬하는 명령어에요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; rating &lt;span class=&quot;token keyword&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 rating 컬럼의 값을 내림차순으로 정렬합니다.&lt;/p&gt;
&lt;h2 id=&quot;limit-offset&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#limit-offset&quot; aria-label=&quot;limit offset permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;LIMIT, OFFSET&lt;/h2&gt;
&lt;p&gt;LIMIT, OFFSET 문은 조회된 데이터의 개수를 제한하는 명령어에요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 조회된 데이터의 개수를 5개로 제한합니다.&lt;/p&gt;
&lt;p&gt;OFFSET 문은 조회된 데이터의 시작 위치를 지정하는 명령어에요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;OFFSET&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하면 조회된 데이터의 시작 위치를 10으로 지정하고 5개의 데이터를 조회합니다.&lt;/p&gt;
&lt;p&gt;쉽게말하면 위 명령문은 처음 10개의 데이터를 건너뛰고 5개의 데이터를 조회한다는 의미에요.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SQLite 명령문의 실행순서&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;-- 3&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;-- 1&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;-- 2&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;-- 4&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;LIMIT&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;-- 6&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;OFFSET&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;-- 5&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;group-by&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#group-by&quot; aria-label=&quot;group by permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;GROUP BY&lt;/h2&gt;
&lt;p&gt;GROUP BY문은 특정 컬럼을 기준으로 데이터를 그룹화하는 명령어에요.&lt;/p&gt;
&lt;p&gt;보통 집계함수랑 같이 사용됩니당.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; director&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;revenue&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;GROUP&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; director&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이런식으로 작성하면 director 컬럼을 기준으로 데이터를 그룹화하고, revenue 컬럼의 값을 합산합니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🚨 GROUP BY 없이 집계함수를 쓰면 데이터를 그룹화하지 않고 데이터베이스의 모든 데이터에 대해 집계함수를 적용합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;having&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#having&quot; aria-label=&quot;having permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;HAVING&lt;/h2&gt;
&lt;p&gt;HAVING 문은 GROUP BY 문과 함께 사용되며, 그룹화된 데이터에 대한 조건을 지정하는 명령어에요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; director&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;revenue&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; movies &lt;span class=&quot;token keyword&quot;&gt;GROUP&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;BY&lt;/span&gt; director &lt;span class=&quot;token keyword&quot;&gt;HAVING&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;revenue&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1000000000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이런식으로 작성하면 revenue 컬럼의 값이 1000000000보다 큰 데이터만 조회됩니다.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[버블 정렬 (Bubble Sort)]]></title><description><![CDATA[안녕하세요. 이번글은 버블 정렬 알고리즘이에요. 버블 정렬 (Bubble Sort) 버블 정렬이 뭘까요. 일단 시각적으로 한번 보는게 좋을것 같아요. Visualgo - Sorting 여기서 상단에 "Bubble Sort…]]></description><link>https://pjj186.github.io/250915-bubble-sort/</link><guid isPermaLink="false">https://pjj186.github.io/250915-bubble-sort/</guid><pubDate>Mon, 15 Sep 2025 10:53:00 GMT</pubDate><content:encoded>&lt;p&gt;안녕하세요. 이번글은 버블 정렬 알고리즘이에요.&lt;/p&gt;
&lt;h1 id=&quot;버블-정렬-bubble-sort&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%B2%84%EB%B8%94-%EC%A0%95%EB%A0%AC-bubble-sort&quot; aria-label=&quot;버블 정렬 bubble sort permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;버블 정렬 (Bubble Sort)&lt;/h1&gt;
&lt;p&gt;버블 정렬이 뭘까요.&lt;/p&gt;
&lt;p&gt;일단 시각적으로 한번 보는게 좋을것 같아요.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://visualgo.net/en/sorting&quot;&gt;Visualgo - Sorting&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;여기서 상단에 &quot;Bubble Sort&quot; 선택 후 왼쪽 하단에 &quot;Sort&quot; 버튼을 누르시면 시각적으로 버블 정렬이 어떻게 동작하는지 확인할 수 있어요.&lt;/p&gt;
&lt;p&gt;다음은 버블정렬을 자바스크립트 코드로 구현한 예시입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bubbleSort&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; noSwaps&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    noSwaps &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token comment&quot;&gt;// SWAP 로직&lt;/span&gt;
      &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; temp &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;j &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; temp&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        noSwaps &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;noSwaps&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;noSwaps&lt;/code&gt; 변수는 굳이 Swap이 필요하지 않은 상황일 때 Swap 하는 상황을 방지하기 위하여 선언한 변수에요.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;기본적으로 위와같이 구현할 수 있습니다.&lt;/p&gt;
&lt;p&gt;위 로직에서 For문에서 i를 배열의 길이로 먼저 설정하는 이유는 의미있는 반복을 하기 위해서에요.&lt;/p&gt;
&lt;p&gt;만약 i를 0부터 &lt;code class=&quot;language-text&quot;&gt;arr.length&lt;/code&gt; 까지 반복한다고하면 반복문은 다음과 같이 바뀌어야할거에요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// ...&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;반복문 부분을 위 처럼 작성해도 동작은 할거에요.
대신 안쪽 For문은 무조건 &lt;code class=&quot;language-text&quot;&gt;arr.length&lt;/code&gt; 만큼 반복하게되요.&lt;/p&gt;
&lt;p&gt;버블정렬 특성상 한 사이클을 지나고나면, 맨 뒤 요소는 고정이 되는데 말이에요.&lt;/p&gt;
&lt;p&gt;그래서 해당 반복문 부분을&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; j&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 작성하게되면, 이미 정렬된 맨 뒤 요소까지는 Swap 로직을 실행하지 않게되서 좀 더 효율적이게 되는것이죠.&lt;/p&gt;
&lt;p&gt;여기까지 버블정렬 알아봤구요&lt;/p&gt;
&lt;p&gt;감사합니다&lt;/p&gt;</content:encoded></item><item><title><![CDATA[슬라이딩 윈도우(Sliding Window) 알고리즘]]></title><description><![CDATA[슬라이딩 윈도우 (Sliding Window…]]></description><link>https://pjj186.github.io/250912-sliding-window/</link><guid isPermaLink="false">https://pjj186.github.io/250912-sliding-window/</guid><pubDate>Fri, 12 Sep 2025 21:02:22 GMT</pubDate><content:encoded>&lt;h1 id=&quot;슬라이딩-윈도우-sliding-window-알고리즘&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%94%A9-%EC%9C%88%EB%8F%84%EC%9A%B0-sliding-window-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98&quot; aria-label=&quot;슬라이딩 윈도우 sliding window 알고리즘 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;슬라이딩 윈도우 (Sliding Window) 알고리즘&lt;/h1&gt;
&lt;p&gt;슬라이딩 윈도우 알고리즘은 배열이나 문자열에서 특정 크기의 윈도우를 이동하며 특정 조건을 만족하는 부분을 찾는 알고리즘이에요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;maxSubarraySum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; num&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; maxSum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; tempSum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; num&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; num&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    maxSum &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  tempSum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; maxSum
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; num&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    tempSum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; tempSum &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; num&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    maxSum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;maxSum&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; tempSum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; maxSum
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위 코드는 슬라이딩 윈도우 알고리즘을 이용한 코드인데요.&lt;/p&gt;
&lt;p&gt;배열을 이동하면서, num의 수 만큼 배열의 요소를 더하고, 그 중 가장 큰 값을 반환하는 코드에요.&lt;/p&gt;
&lt;p&gt;에를들어서&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token function&quot;&gt;maxSubarraySum&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;우선 위 함수의 결과로는 19가 나옵니다.&lt;/p&gt;
&lt;p&gt;함수를 이렇게 호출한다고 해볼께요.&lt;/p&gt;
&lt;p&gt;그러면 2, 6, 9 를 일단 더하고 그 다음 6, 9, 2 를 더하고 서로 비교해요. 대충 이런식으로 배열을 순회하면서&lt;/p&gt;
&lt;p&gt;가장 큰 값을 반환하는 솔루션이에요.&lt;/p&gt;
&lt;p&gt;마치 창문이 슬라이딩 하는것 같죠?&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;[2, 6, 9] 2, 1, 8, 5, 6, 3 -&gt; 합 17
2, [6, 9, 2] 1, 8, 5, 6, 3 -&gt; 합 17
2, 6, [9, 2, 1] 8, 5, 6, 3 -&gt; 합 12
2, 6, 9, [2, 1, 8] 5, 6, 3 -&gt; 합 11
2, 6, 9, 2, [1, 8, 5] 6, 3 -&gt; 합 14
2, 6, 9, 2, 1, [8, 5, 6] 3 -&gt; 합 19
2, 6, 9, 2, 1, 8, [5, 6, 3] -&gt; 합 14&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(대충 창문이 슬라이딩 같다는 걸 이해시키려고 작성함)&lt;/p&gt;
&lt;p&gt;그래서 슬라이딩 윈도우다 이말입니다~ 엣헴.&lt;/p&gt;
&lt;p&gt;이 알고리즘의 핵심 로직은 아무래도&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; num&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  tempSum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; tempSum &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; num&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  maxSum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;maxSum&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; tempSum&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이 부분일텐데요.&lt;/p&gt;
&lt;p&gt;특히 이 부분에서도&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;tempSum &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; tempSum &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; num&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이부분이죠.&lt;/p&gt;
&lt;p&gt;이 부분이 슬라이딩 윈도우를 해주고있습니다요.&lt;/p&gt;
&lt;p&gt;보시면 이전 합계(tempSum)에서 첫번째 요소를 빼고 새로운 요소를 더해주고 있어요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// num = 3 (창문크기)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// for 문 진입시 i = 3 (num 값)&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// 여기서 왜 i에 num 값을 넣냐면&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 위의 합계는 이미&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; num&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    maxSum &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 함수 처음에 이렇게 합게를 구해놓고 시작하기 때문에&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// i = 3 으로 해줘야 배열이 이동하는 형상을 보이겠져?&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// i는 인덱스로 쓰이니깐여.&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 아무튼 핵심 로직을 한번 타면 아래와 같은 그림이됩니다.&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// tempSum = tempSum - arr[i - num] + arr[i]&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// 여기서 arr[i - num] 이 arr[3 - 3] 이니까 배열의 첫번째 인덱스잖아요?&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// 그 값을 빼주는거에요.&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// tempSum = tempSum - arr[i - num] + arr[i] 이 식을&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// tempSum = tempSum  ,  - arr[i - num] ,  + arr[i] 이렇게 나눠서 생각해보면 이해가 쉬워요.&lt;/span&gt;


&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 여기서 arr[0] 을 빼면&lt;/span&gt;

&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 이런 형상이되겟져?&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 그 다음 + arr[i] 를 해주니깐&lt;/span&gt;

&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 이렇게 되는거에요&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이해가 잘 됐으면 좋겠네요.&lt;/p&gt;
&lt;p&gt;제가 알고리즘 실력도 처참하고 설명을 막 잘하는편이아니라 설명이 길어서 더 어려울 수 있겠지만..&lt;/p&gt;
&lt;p&gt;봐주셔서 감사함다.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[이진 검색 알고리즘]]></title><description><![CDATA[이진 검색(Binary Search…]]></description><link>https://pjj186.github.io/250912-binary-search/</link><guid isPermaLink="false">https://pjj186.github.io/250912-binary-search/</guid><pubDate>Fri, 12 Sep 2025 20:13:18 GMT</pubDate><content:encoded>&lt;h1 id=&quot;이진-검색binary-search-알고리즘&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9D%B4%EC%A7%84-%EA%B2%80%EC%83%89binary-search-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98&quot; aria-label=&quot;이진 검색binary search 알고리즘 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;이진 검색(Binary Search) 알고리즘&lt;/h1&gt;
&lt;p&gt;이진 검색 알고리즘은 &lt;strong&gt;정렬&lt;/strong&gt;된 배열에서 특정 값을 찾는 알고리즘이에요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;binarySearch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; elem&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; start &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; end &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; middle &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;start &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; end&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;middle&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; elem &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; start &lt;span class=&quot;token operator&quot;&gt;&amp;lt;=&lt;/span&gt; end&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;elem &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;middle&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      end &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; middle &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      start &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; middle &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    middle &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;start &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; end&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;middle&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; elem&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; middle
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위 코드는 이진검색 알고리즘을 구현한 자바스크립트 코드에요.&lt;/p&gt;
&lt;p&gt;자바스크립트 코드를 보면 알 수 있듯이, 이진검색 알고리즘은 정렬된 배열에서 특정 값을 찾는 알고리즘이에요.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;start&lt;/code&gt; 변수는 시작 인덱스를 나타내고, &lt;code class=&quot;language-text&quot;&gt;end&lt;/code&gt; 변수는 끝 인덱스를 나타내요.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;middle&lt;/code&gt; 변수는 주어진 배열의 중간 인덱스를 나타냅니당.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;middle&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!==&lt;/span&gt; elem &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; start &lt;span class=&quot;token operator&quot;&gt;&amp;lt;=&lt;/span&gt; end&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;elem &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;middle&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    end &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; middle &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    start &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; middle &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  middle &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;floor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;start &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; end&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이 로직이 핵심로직이 될텐데요.&lt;/p&gt;
&lt;p&gt;값을 찾거나 배열 전체를 모두 순회할(start &amp;#x3C;= end)때까지 반복하는 루프로 시작을해요.&lt;/p&gt;
&lt;p&gt;찾는 값이 현재 중간값보다 작으면 끝 인덱스를 중간 인덱스 - 1로 업데이트해요.&lt;/p&gt;
&lt;p&gt;왜냐면 찾는값이 중간값보다 왼쪽에 있을거니까 기존 배열의 오른쪽 반을 버리는거져.&lt;/p&gt;
&lt;p&gt;반대로 찾는값이 중간값보다 크면 시작 인덱스를 중간 인덱스 + 1로 업데이트해요.&lt;/p&gt;
&lt;p&gt;원리는 똑같아여. 찾는값이 중간값보다 큰 지점에 있으니까 왼쪽을 다 버리는거에여.&lt;/p&gt;
&lt;p&gt;그 다음 중간값의 인덱스 업데이트하고 위 과정을 계속 반복해요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;arr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;middle&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; elem&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; middle
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이 후 값을 찾으면 해당 값이 있는 인덱스를 반환하구, 없으면 -1을 반환해요.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[250912 TIL]]></title><description><![CDATA[playwright 요즘 playwright로 테스트를 짜보고있음. 아직은 테스트를 어떻게 짜야하는지 잘 모르기때문에 컴포넌트가 잘 렌더링 됐는지, Form 유효성 검사 실패 시 나타나는 Text…]]></description><link>https://pjj186.github.io/250912-tli/</link><guid isPermaLink="false">https://pjj186.github.io/250912-tli/</guid><pubDate>Fri, 12 Sep 2025 18:55:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;playwright&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#playwright&quot; aria-label=&quot;playwright permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;playwright&lt;/h1&gt;
&lt;p&gt;요즘 playwright로 테스트를 짜보고있음.&lt;/p&gt;
&lt;p&gt;아직은 테스트를 어떻게 짜야하는지 잘 모르기때문에 컴포넌트가 잘 렌더링 됐는지, Form 유효성 검사 실패 시 나타나는 Text가 화면에 잘 나타나는지&lt;/p&gt;
&lt;p&gt;서벼 켜놓고 관리자 계정, 일반 유저 계정으로 로그인 했을 시 각각 권한에 맞게 Navigation 메뉴가 보이거나 숨겨지는지.. 아무튼 이런식으로 기존에&lt;/p&gt;
&lt;p&gt;내가 작성했던 프로젝트의 기능을 다시 한번 확인하는 느낌으로 작성중임~ 이렇게 짜는게 맞나 모르겠지만 ㅋㅋㅋ.. 정상적으로 동작하는 Action을 기준으로 테스트를 짜고있다!&lt;/p&gt;
&lt;p&gt;짜면서 느낀건데, 확실히 테스트 작성 역량이 늘면 좋을 것 같긴하다는걸 느낌. 만약 잘 작동하는 테스트가 갑자기 작동하지않는다거나? 할 때 디버깅도 수월할 것 같고..&lt;/p&gt;
&lt;p&gt;여러모로 좋은점이 많은듯.. 테스트 짜면서 기존 코드를 한번 더 점검도 하게되고.. 좋은점이 많은것 같다.&lt;/p&gt;
&lt;p&gt;오늘은 describe 랑 beforeEach 훅을 처음 써봤다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;test&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;A 페이지 테스트&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  test&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;beforeEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// 각각의 테스트를 실행하기전에 공통으로 실행 할 테스트 작성&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Test 1&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Test 2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Test 3&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이런식으로 테스트를 그룹? 지어서 할 수 있음.&lt;/p&gt;
&lt;p&gt;test.beforeEach 내부에 나는 로그인 후 특정 페이지로 리다이렉트 하는 로직을 넣었고 (왜냐하면 아래 테스트 3개가 전부 같은 페이지에서 실행되어야 하기 때문)&lt;/p&gt;
&lt;p&gt;각각 Test 1, Test 2, Test 3 에는 같은 페이지에서 사용되지만 형상이 다른 Form 컴포넌트들에 대한 테스트코드를 작성했음~&lt;/p&gt;
&lt;p&gt;아무튼 describe를 사용해보고 느낀건, 테스트 코드 가독성 향상에 큰 도움이 될 것 같다는 생각이 들었음&lt;/p&gt;
&lt;h1 id=&quot;inquirerjs&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#inquirerjs&quot; aria-label=&quot;inquirerjs permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Inquirer.js&lt;/h1&gt;
&lt;p&gt;요즘 블로그를 하면서.. 새로운 글을 만들때마다 일일히 폴더를 만들고, index.md를 만들고, 본문을 작성하기전에 Header 라고 불러야하나? 아무튼&lt;/p&gt;
&lt;p&gt;제목, 설명, 썸네일, 날짜, 카테고리, 태그 등등.. 먼저 적고 시작하는 부분.. 그 부분을 일일히 직접 하는 작업에 엄청난 귀찮음을 느껴버렸다.&lt;/p&gt;
&lt;p&gt;그래서 프롬프트로 폴더이름, 제목, 설명, 카테고리.. 등등 위 정보를 입력받은 후 자동으로 파일을 생성하게 하면 좋겠다는 생각이 들었다.&lt;/p&gt;
&lt;p&gt;그러면 그냥 편하게 본문만 쓰면되자너?&lt;/p&gt;
&lt;p&gt;그래서 어떻게 하는지 찾다가 발견한 라이브러리임.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.npmjs.com/package/@inquirer/prompts&quot;&gt;Inquirer.js&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;사용법도 그렇게 어렵지 않다! 관련된 글은 조만간 업로드 할 것 같음여.&lt;/p&gt;
&lt;p&gt;아무튼 이걸 이용해서 다음과 같이 할 수 있었음.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;pnpm&lt;/span&gt; run create-post&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;라는 명령어를 입력하면 이렇게 프롬프트가 나타나고 정보들을 입력함&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.000000000000004%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABHUlEQVR42o2Q7W6CMBSGuYVNhIGCIC1godABiiK6zW1ZTNQ4TGZ2/xfyruI+s/3Yjyd9254+56SK5zOQIEacFiB0BN200e05EveMOUD3yvo3ym5/wL45YrtrwBePMMQMF1EB1YuguiG6NoEmCzXD/pNfwuZwxOHlFZvtM+qnDcJyCcozGIRBNyyoWg+ddy6/5Y5+XlW9/1MY8xwinyIbz1AvVqjmN5hWS5TzW6TZBP4okV8SgYYcYZR+5iFl8o7D8YKvJhJF5GX7kNAA1D9DiA/HDWA5HC4RCJhAlOSSDKP4uhUHLAHjMrO0lZ9wSQglK6RQTphMH5DVa8STFcR8jbyqcHcvkI+pLD7JKXq2h/6AwLSGLaf9x7nRd1veAEl3rY+xNjDiAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/c8904f5259d27a7e826ba94f6a22bf67/f1512/result_cli.webp 200w,
/static/c8904f5259d27a7e826ba94f6a22bf67/f59aa/result_cli.webp 400w,
/static/c8904f5259d27a7e826ba94f6a22bf67/47a22/result_cli.webp 800w,
/static/c8904f5259d27a7e826ba94f6a22bf67/5bb53/result_cli.webp 1200w,
/static/c8904f5259d27a7e826ba94f6a22bf67/61476/result_cli.webp 1494w&quot;
              sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/c8904f5259d27a7e826ba94f6a22bf67/f8f3a/result_cli.png 200w,
/static/c8904f5259d27a7e826ba94f6a22bf67/6a8a8/result_cli.png 400w,
/static/c8904f5259d27a7e826ba94f6a22bf67/7842b/result_cli.png 800w,
/static/c8904f5259d27a7e826ba94f6a22bf67/5ece7/result_cli.png 1200w,
/static/c8904f5259d27a7e826ba94f6a22bf67/03426/result_cli.png 1494w&quot;
            sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/c8904f5259d27a7e826ba94f6a22bf67/7842b/result_cli.png&quot;
            alt=&quot;result cli&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;아래는 그 결과물들 이미지&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 554px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 17%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAtUlEQVR42l3IwU7CQBhF4T4DigmSSKTR0krLMNOZn86U2oaSRlkQ48al7/8Sx9mZsPhycm+SZltK5Vm9bsi6ms2x5kX2pPWOLJi4LXnnWJuKvBcW65TZ/YK7h+W/+SPz5RPPeUFSVhppR2w/oduAeW/Ze48OPrZBWYkcla5RTtjuNEWhKN5ulAojDcnBecJ44fT9y/HjzPhzpb9+Mnxd8P2ANQ3OBpwL2FhxLSI34ncIHcM08Qeh+V9684bChQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/e1efdf495468b8f63acec936ab8c0373/f1512/result_directory.webp 200w,
/static/e1efdf495468b8f63acec936ab8c0373/f59aa/result_directory.webp 400w,
/static/e1efdf495468b8f63acec936ab8c0373/3f262/result_directory.webp 554w&quot;
              sizes=&quot;(max-width: 554px) 100vw, 554px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/e1efdf495468b8f63acec936ab8c0373/f8f3a/result_directory.png 200w,
/static/e1efdf495468b8f63acec936ab8c0373/6a8a8/result_directory.png 400w,
/static/e1efdf495468b8f63acec936ab8c0373/5c9af/result_directory.png 554w&quot;
            sizes=&quot;(max-width: 554px) 100vw, 554px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/e1efdf495468b8f63acec936ab8c0373/5c9af/result_directory.png&quot;
            alt=&quot;result directory&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;옥게~ 폴더도 잘 만들었고.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 786px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABlElEQVR42o2S2XKDMAxF+w1pE8BswQabLdiBBkKabpn+/y/dyqbttJM89OGOWKyjK0t3KVeYTi8ww4Sy1pjPb1AUh/GE+ekVph8xzs/uTP84Q+sBQk+opjccxhn94UTnOzx4EdZ+jDv7sCWox1IkmUQQcdzTN6cNIwV0kA57oUvaBMmS/AWw7zZ+ywGzvCJQRkrhsxhhlMAPSVGOKKkRhMLJo2Rb5OEL/ht0E5grgV2bYzQKuimgW4Opv0DkBqb7gJKPYFFBRRQV5DehS8uidEAhOXS3AJtKot912NUt8kIT/IKuuaBSJ7T1K0TR0bWwa+D9JiRQAxZzcsjRNgLzvkRdSpSqh1ITimIkd0cq8kyRhidnVOURQZxdufzj0LZcVRwHrfB+rKhtjpQX4EKTSwPODZK0RhhLZFlHbW9vA3/uUC4Oz0OJsW+xNwOKfES3m+n/Fqt18DOQlRtOdLvlXLWuZVlaZailcAU8xhHFiia8dWu19hNs/GVNvuMV0O6RXV5rP0xSJ8ZsYkxrYvds2T3vn/oEy68VagVg5xwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/7dc55e8bc03d4731b439090632207ca4/f1512/result_md.webp 200w,
/static/7dc55e8bc03d4731b439090632207ca4/f59aa/result_md.webp 400w,
/static/7dc55e8bc03d4731b439090632207ca4/174e6/result_md.webp 786w&quot;
              sizes=&quot;(max-width: 786px) 100vw, 786px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/7dc55e8bc03d4731b439090632207ca4/f8f3a/result_md.png 200w,
/static/7dc55e8bc03d4731b439090632207ca4/6a8a8/result_md.png 400w,
/static/7dc55e8bc03d4731b439090632207ca4/dc666/result_md.png 786w&quot;
            sizes=&quot;(max-width: 786px) 100vw, 786px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/7dc55e8bc03d4731b439090632207ca4/dc666/result_md.png&quot;
            alt=&quot;result md&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;마크다운 템플릿은 약간 엉성하게 생성됐는데 그래도 만족할만한 수준인듯 ㅎ&lt;/p&gt;
&lt;p&gt;이거 쓰고 바로 수정 ㄱㄱ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[애니프사]]></title><description><![CDATA[님들이 좋아하는 애니프사 사이트 추천 (나도좋아함 ㅋㅋ) 사이트 이름은 Anime Girls Holding Programming books…]]></description><link>https://pjj186.github.io/250912-anime-girls-holding-book/</link><guid isPermaLink="false">https://pjj186.github.io/250912-anime-girls-holding-book/</guid><pubDate>Fri, 12 Sep 2025 11:35:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;님들이-좋아하는-애니프사-사이트-추천-나도좋아함-ㅋㅋ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8B%98%EB%93%A4%EC%9D%B4-%EC%A2%8B%EC%95%84%ED%95%98%EB%8A%94-%EC%95%A0%EB%8B%88%ED%94%84%EC%82%AC-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EC%B6%94%EC%B2%9C-%EB%82%98%EB%8F%84%EC%A2%8B%EC%95%84%ED%95%A8-%E3%85%8B%E3%85%8B&quot; aria-label=&quot;님들이 좋아하는 애니프사 사이트 추천 나도좋아함 ㅋㅋ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;님들이 좋아하는 애니프사 사이트 추천 (나도좋아함 ㅋㅋ)&lt;/h1&gt;
&lt;p&gt;사이트 이름은 Anime Girls Holding Programming books 라는 사이트구요.&lt;/p&gt;
&lt;p&gt;미소녀 애니캐릭들이 프로그래밍 서적을 들고 있는 짤들을 보여주는 사이트입니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 61%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAADYElEQVR42g2R6U/TBwBAu/9jWbJ92QezLdmymUjczJZsOgcOnAEcIAqUKjCQU4ocbSm08OMoo4ADOVuOFnCUSuvESi96wVoEpCniBIUoOJ1bJsuMe+uH9/XlJU/ktHoxjc8Rcq2wbHHjG3dgHw7iuRWkdXSWTsMc/dMe9FY/ZncI//pjHHYPpgkTgYibxU0Pi7+5ubMTwOCcQTSsbKM0Np11y01YCfKsqokd5QDX6pUc/jyOhvJ8plqLGKmT4OqV4gmG6FQLFJ48gbork/bRHGTdqbQYs6ntSUHk0BkZrFWzHQjC7h7/+AI8X7ExYbhK6qkUBupLCI3K8Q4rCY7Icfl9tEeFBScTqKnPoq9PxsxkG4IqiwvyeET/bgbgxQJ20wCa2mp+X3ay5buO67YJ+cV8gj11uEfUaOoUOLvKWFpwoygq4diHHzFiFAiv29h/8gC3e5h+Qz2i/55H4JmD+6vjRDx6eOqOli7gvW1GnFuKqasBt66Z9w58QI80j6fhJZTVUvLT0omNi6W0qpjyywpqVHLycsSIlJeKqSkW01EpobNcQu35RKQFZ/mxqRDj1Rx6yzL5VV9NzYVkuiqy2VrQojf0Mmjop6ejG61Qy5JziiWHhfQzUeHx774h5rMYPnn7LRTFP3D00MeI3hCRnZvCI0clzUXJbNi6WbXr8Voaebh4jo3wLKuRdbbuLrATusl9ax8OoRLx9znRQkGO2TyFoFaRmZpEcmIC77z7JoUVDawFTKxYK/lzY579VTub881sBtK4F5pkM7yG/5dr+CwT6DXd6NTNaLOyEZ1NS2JsbAzd4CBy6WWM849JzFdQVKbg4YNZHCOJrBmusGscZHW6hWVnIUPNeWiKyzDWFaDMyEG4qGZSe4WupOjlr778gvrGJtpa22gUOlFNhjmYICFDfJ61ZSt3rQLbwyp2Z7WEokyNVdMiEyM+Fs+lpBNYuzV4bXbUklzq4o4gclsGmJ/qYLztDH3KeG783MGMWYfPZebVyz1ev94johOYy03AnnGU7Vtj2K5Povr0fWTfHuHO9E+4jL1UnsvidMxBRDf0QwzJKmiXxqMp+ZolWw8vHnn548k99vdf8fdfL1lUy/GXSfDkpRIWZPhtFvpOHSYw3kLE3o9P28C0uArp8dP8D73Lpy26nDHNAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/271c1d4fbcde8f7b793ee4e78377793f/f1512/site-image.webp 200w,
/static/271c1d4fbcde8f7b793ee4e78377793f/f59aa/site-image.webp 400w,
/static/271c1d4fbcde8f7b793ee4e78377793f/47a22/site-image.webp 800w,
/static/271c1d4fbcde8f7b793ee4e78377793f/5bb53/site-image.webp 1200w,
/static/271c1d4fbcde8f7b793ee4e78377793f/485a2/site-image.webp 1600w,
/static/271c1d4fbcde8f7b793ee4e78377793f/ed5ef/site-image.webp 3322w&quot;
              sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/271c1d4fbcde8f7b793ee4e78377793f/f8f3a/site-image.png 200w,
/static/271c1d4fbcde8f7b793ee4e78377793f/6a8a8/site-image.png 400w,
/static/271c1d4fbcde8f7b793ee4e78377793f/7842b/site-image.png 800w,
/static/271c1d4fbcde8f7b793ee4e78377793f/5ece7/site-image.png 1200w,
/static/271c1d4fbcde8f7b793ee4e78377793f/0d4f8/site-image.png 1600w,
/static/271c1d4fbcde8f7b793ee4e78377793f/1e4f3/site-image.png 3322w&quot;
            sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/271c1d4fbcde8f7b793ee4e78377793f/7842b/site-image.png&quot;
            alt=&quot;site image&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;맘에 드는거 가져다가 프사 또는 배경사진으로 사용하시면 참 좋을것 같습니다.&lt;/p&gt;
&lt;p&gt;사이트 주소는 아래에 적어놓을게요.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://anime-girls-holding-programming-books-app.pages.dev/&quot;&gt;Anime Girls Holding Programming books&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[SQLite Constraints (제약조건)]]></title><description><![CDATA[SQLite에서 테이블을 대충 만들면 안좋은 사태가 발생합니다; 만약 테이블을 다음과 같이 만든다고 해볼게요. 오.. 뭐 그래도 타입도 들어가있고 썩 나쁘지 않아보입니다. 근데 문제가 있어요.  요런데에 음수를 집어넣을 수 있다거나, DB…]]></description><link>https://pjj186.github.io/250910-sqlite-constraints/</link><guid isPermaLink="false">https://pjj186.github.io/250910-sqlite-constraints/</guid><pubDate>Wed, 10 Sep 2025 20:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SQLite에서 테이블을 대충 만들면 안좋은 사태가 발생합니다;&lt;/p&gt;
&lt;p&gt;만약 테이블을 다음과 같이 만든다고 해볼게요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  title &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  released &lt;span class=&quot;token keyword&quot;&gt;INTEGER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  overview &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  rating &lt;span class=&quot;token keyword&quot;&gt;REAL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  director &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; strict&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;오.. 뭐 그래도 타입도 들어가있고 썩 나쁘지 않아보입니다.&lt;/p&gt;
&lt;p&gt;근데 문제가 있어요.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;rating&lt;/code&gt; 요런데에 음수를 집어넣을 수 있다거나, DB에 중복된 이름으로 데이터가 여러개 있을 수 있다던가.. 그런 부분들이요.&lt;/p&gt;
&lt;p&gt;이번 포스팅에서는 그런걸 막기위해 하는 제약조건에 대해 적어볼거에염.&lt;/p&gt;
&lt;h1 id=&quot;제약조건-constraints&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4-constraints&quot; aria-label=&quot;제약조건 constraints permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;제약조건 (Constraints)&lt;/h1&gt;
&lt;p&gt;일단 제약조건 거는 코드부터 떤질게염.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  title &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;UNIQUE&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  released &lt;span class=&quot;token keyword&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  overview &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  rating &lt;span class=&quot;token keyword&quot;&gt;REAL&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  director &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;
  for_adults &lt;span class=&quot;token keyword&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; strict&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이런식으로 테이블 만들 때 걸어줄 수 있습니다.&lt;/p&gt;
&lt;p&gt;보시면 데이터 타입 정의하는 부분 뒤에 막 붙죠? 이게 바로 제약조건이에염.&lt;/p&gt;
&lt;p&gt;이름에서 유추 할 수 있듯이 &lt;code class=&quot;language-text&quot;&gt;UNIQUE&lt;/code&gt; 는 중복된 값을 허용하지 않는다는 뜻이고, &lt;code class=&quot;language-text&quot;&gt;NOT NULL&lt;/code&gt; 은 해당 컬럼에 NULL을 허용하지 않는다는 뜻이에염.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;DEFAULT&lt;/code&gt; 는 해당 컬럼에 기본값을 설정한다는 뜻이에염.&lt;/p&gt;
&lt;p&gt;이런식으로 제약조건을 걸어줄 수 있어염.&lt;/p&gt;
&lt;p&gt;데이터를 넣을때 이제 저 조건에 맞춰서 안넣으면 에러가 나게 될것이에요.&lt;/p&gt;
&lt;h1 id=&quot;제약조건-종류-constraints-types&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4-%EC%A2%85%EB%A5%98-constraints-types&quot; aria-label=&quot;제약조건 종류 constraints types permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;제약조건 종류 (Constraints Types)&lt;/h1&gt;
&lt;p&gt;SQLite에서 제약조건은 다음과 같은 종류가 있구염.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;UNIQUE&lt;/td&gt;
&lt;td&gt;중복된 값을 허용하지 않는다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;해당 컬럼에 NULL을 허용하지 않는다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DEFAULT&lt;/td&gt;
&lt;td&gt;해당 컬럼에 기본값을 설정한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CHECK&lt;/td&gt;
&lt;td&gt;해당 컬럼에 조건을 추가한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PRIMARY KEY&lt;/td&gt;
&lt;td&gt;해당 컬럼을 기본키로 설정한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;CHECK 써서 좀 더 복잡한 제약조건을 만들 수 있어염.&lt;/p&gt;
&lt;p&gt;이렇게!&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  title &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;UNIQUE&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  released &lt;span class=&quot;token keyword&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  overview &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  rating &lt;span class=&quot;token keyword&quot;&gt;REAL&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  director &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;
  for_adults &lt;span class=&quot;token keyword&quot;&gt;INTEGER&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;DEFAULT&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;CHECK&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;for_adults &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;OR&lt;/span&gt; for_adults &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; strict&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이렇게 하면 &lt;code class=&quot;language-text&quot;&gt;for_adults&lt;/code&gt; 컬럼에는 0 또는 1만 들어갈 수 있어염.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;for_adults &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;OR&lt;/span&gt; for_adults &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이런것도 되고&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;for_adults &lt;span class=&quot;token operator&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이런것도 됩니다.&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;간단하게 제약조건에 대해서 알아봤습니다~&lt;/p&gt;
&lt;p&gt;그럼 이만~&lt;/p&gt;</content:encoded></item><item><title><![CDATA[SQLite Data Type]]></title><description><![CDATA[SQLite…]]></description><link>https://pjj186.github.io/250910-sqlite-data-type/</link><guid isPermaLink="false">https://pjj186.github.io/250910-sqlite-data-type/</guid><pubDate>Wed, 10 Sep 2025 16:39:00 GMT</pubDate><content:encoded>&lt;p&gt;SQLite는 상당히 자유로운 친구입니다.&lt;/p&gt;
&lt;p&gt;그래서 테이블을 만들때 다음과 같이 만들 수 있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  title&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  released&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  overview&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  rating&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  director
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;보시다시피 컬럼을 정의할 때 타입을 지정하지 않고 만들 수가 있어요.&lt;/p&gt;
&lt;p&gt;그런데 이렇게하면 문제가 생깁니다.&lt;/p&gt;
&lt;p&gt;왜냐하면, 각각의 컬럼에 아무값이나 집어넣어도 데이터가 들어간다는건데, 이건 좀 이상하잖아요?&lt;/p&gt;
&lt;p&gt;예를들어 rating은 일반적으로 숫자가 들어가야하는데 &quot;abc&quot; 이런걸 넣을 수도 있다고 생각해봅시다.&lt;/p&gt;
&lt;p&gt;또 NULL을 넣을수도있고, 날짜를 넣을수도있고.. 아무튼 아무 값이나 다 넣을 수 있다는 것 자체가 조금 이상하잖아요? (사용 사례에 따라 안이상할 수도 있지만..)&lt;/p&gt;
&lt;p&gt;그래서 우리는 데이터 타입이 어떤게 있는지 알아야하고, 테이블을 만들때 신경써서 데이터 타입도 같이 명확하게 정의하면서 만들어줘야합니다.&lt;/p&gt;
&lt;h1 id=&quot;sqlite-data-type&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sqlite-data-type&quot; aria-label=&quot;sqlite data type permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SQLite Data Type&lt;/h1&gt;
&lt;p&gt;SQLite에는 다음과 같은 데이터 타입이 있습니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;데이터 타입&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;INTEGER&lt;/td&gt;
&lt;td&gt;정수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;REAL&lt;/td&gt;
&lt;td&gt;실수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TEXT&lt;/td&gt;
&lt;td&gt;문자열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BLOB&lt;/td&gt;
&lt;td&gt;바이너리 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;다른 &lt;code class=&quot;language-text&quot;&gt;RDBMS&lt;/code&gt; 에서는 사용하는 데이터 타입이 다를 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;예시&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%98%88%EC%8B%9C&quot; aria-label=&quot;예시 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;예시&lt;/h1&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  title &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  released &lt;span class=&quot;token keyword&quot;&gt;INTEGER&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  overview &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  rating &lt;span class=&quot;token keyword&quot;&gt;REAL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  director &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; strict&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;테이블을 생성할 때 strict 키워드가 추가되면 엄격한 타이핑 규칙이 해당 테이블에 적용됩니다.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title><![CDATA[Playwright 테스트 생성하기]]></title><description><![CDATA[Generating tests playwright는 테스트를 자동으로 생성할 수 있는 기능을 제공함미다. 이게 뭐냐면 직접 개발자가 UI…]]></description><link>https://pjj186.github.io/250910-generating-tests/</link><guid isPermaLink="false">https://pjj186.github.io/250910-generating-tests/</guid><pubDate>Wed, 10 Sep 2025 16:34:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;generating-tests&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#generating-tests&quot; aria-label=&quot;generating tests permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Generating tests&lt;/h1&gt;
&lt;p&gt;playwright는 테스트를 자동으로 생성할 수 있는 기능을 제공함미다.&lt;/p&gt;
&lt;p&gt;이게 뭐냐면 직접 개발자가 UI를 만지작거리면, 해당 동작이 코드로 자동으로 생성되는거에요.&lt;/p&gt;
&lt;p&gt;되게 신기하지않나요? 테스트를 처음 만들때 유용할 것 같습니다.&lt;/p&gt;
&lt;h2 id=&quot;하는법&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%95%98%EB%8A%94%EB%B2%95&quot; aria-label=&quot;하는법 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;하는법&lt;/h2&gt;
&lt;p&gt;하는법은 아주 간단합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;npx playwright codegen demo.playwright.dev/todomvc&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;요렇게 터미널에 입력하면되는데요. demo.playwright.dev/todomvc 부분에 테스트를 실행할 페이지의 URL을 넣어주면됩니다.&lt;/p&gt;
&lt;p&gt;우선 저는 위에꺼 그대로 복붙해서 해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/250910-generating-tests/generating-test.gif&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;보시는것처럼 제가 클릭하고, 입력하고 하는 동작이 그대로 코드로 생성되는걸 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 432px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 12.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAyklEQVR42h2O3U7CQBCF+wQ+h8/tLfHGK40JRA0mNERTJAFBqdjK0rJbSumPlJaPYS8mZ+acfJnjnIoNtQnQb080uxWt3Fu1IF37tHlsp0xCmn0kWWzzy37hjqKFsIdUQanJoh8cIQgeb7m5viLx+jTVltlogOe+WLA0IcPXrn1AnTL1XN4Hz1AZzN+c3sMdX+MhnHI+Ry5OWxgq9c3yvsO/DmhyTb4JUP5UfkmLLOKwW1OLHrOY1WLC7+zD+rX4yp+wj5fSMEGHc87/mtzhw00E1wAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/2eae8af50f9c9401518cdde5b6725882/f1512/tool-box.webp 200w,
/static/2eae8af50f9c9401518cdde5b6725882/f59aa/tool-box.webp 400w,
/static/2eae8af50f9c9401518cdde5b6725882/09881/tool-box.webp 432w&quot;
              sizes=&quot;(max-width: 432px) 100vw, 432px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/2eae8af50f9c9401518cdde5b6725882/f8f3a/tool-box.png 200w,
/static/2eae8af50f9c9401518cdde5b6725882/6a8a8/tool-box.png 400w,
/static/2eae8af50f9c9401518cdde5b6725882/7c246/tool-box.png 432w&quot;
            sizes=&quot;(max-width: 432px) 100vw, 432px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/2eae8af50f9c9401518cdde5b6725882/7c246/tool-box.png&quot;
            alt=&quot;tool box&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이건 상단 툴박스인데여.&lt;/p&gt;
&lt;p&gt;기본적으로 저렇게 빨간색이 활성화되면 녹화상태이고, 이 때 상호작용하는것들이 코드로 생성되는거에요.
녹화 상태를 끄면 코드 생성 상태를 잠깐 멈출 수 있습니당.&lt;/p&gt;
&lt;p&gt;녹화버튼 오른쪽에 여러가지 툴들이 나열되어있는데요.&lt;/p&gt;
&lt;p&gt;요거는 assert 와 관련된 코드를 생성해줘요.&lt;/p&gt;
&lt;p&gt;요 기능을 활용하면, 좀 더 쉽게 테스트 코드를 작성할 수 있습니다.&lt;/p&gt;
&lt;p&gt;상당히 유용한 것 같네요.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Playwright 테스트 작성하기]]></title><description><![CDATA[안녕하세요. 이번 포스팅에서는 Playwright 테스트 작성에 대해 기록해보려고합니다요. Playwright 테스트는 간단합니다: 작업을 수행하고 예상 결과와 상태를 비교하여 검증합니다. 
Playwright…]]></description><link>https://pjj186.github.io/250909-writing-test/</link><guid isPermaLink="false">https://pjj186.github.io/250909-writing-test/</guid><pubDate>Tue, 09 Sep 2025 16:34:00 GMT</pubDate><content:encoded>&lt;p&gt;안녕하세요. 이번 포스팅에서는 Playwright 테스트 작성에 대해 기록해보려고합니다요.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Playwright 테스트는 간단합니다: 작업을 수행하고 예상 결과와 상태를 비교하여 검증합니다. &lt;br/&gt;
Playwright는 각 작업을 수행하기 전에 실행 가능성 검사를 자동으로 기다립니다. 수동으로 대기 시간을 추가하거나 경쟁 조건(race condition)을 처리할 필요가 없습니다. &lt;br/&gt;
Playwright의 단언(assertion)은 결국 충족될 것으로 예상되는 기대치를 설명하도록 설계되어, 불안정한 타임아웃과 경쟁 상태 검사를 제거합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;시작&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8B%9C%EC%9E%91&quot; aria-label=&quot;시작 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;시작&lt;/h1&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; test&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; expect &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@playwright/test&quot;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;has title&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;goto&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://playwright.dev/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// Expect a title &quot;to contain&quot; a substring.&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;page&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toHaveTitle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;Playwright&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;get started link&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;goto&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://playwright.dev/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// Click the get started link.&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByRole&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;link&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; name&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Get started&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;click&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// Expects page to have a heading with the name of Installation.&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByRole&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;heading&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; name&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Installation&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toBeVisible&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위 코드는 playwright 설치 시 같이 딸려오는 예제코드인데욤.&lt;/p&gt;
&lt;p&gt;이 예제코드를 바탕으로 PlayWright 테스트코드 작성의.. 기본적인 핵심?을 알아볼게요.&lt;/p&gt;
&lt;p&gt;공식문서에서는 Playwight는 &lt;strong&gt;액션&lt;/strong&gt;을 수행하고, 상태를 &lt;strong&gt;단언&lt;/strong&gt;하여 예상과 일치하는지 확인한다고 나와있어요.&lt;/p&gt;
&lt;p&gt;그래서 Action과 Assertion 두 가지를 중심으로 알아보려고해요.&lt;/p&gt;
&lt;h1 id=&quot;actions&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#actions&quot; aria-label=&quot;actions permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Actions&lt;/h1&gt;
&lt;p&gt;액션은 쉽게 이해하면, 브라우저에서 하는 모든 동작을 의미해요.&lt;/p&gt;
&lt;p&gt;클릭이나 페이지 이동, 입력 등 브라우저에서 사용자가 조작하는 모든 동작을 의미한다고 볼 수 있어요.&lt;/p&gt;
&lt;p&gt;대부분의 테스트는 먼저 URL로 이동하는 것으로 시작해요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;goto&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://playwright.dev/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;그 이후 페이지의 요소들과 서로 상호작용하죵.&lt;/p&gt;
&lt;p&gt;page.goto 함수는 페이지를 이동시키는 함수에요.
자세한 내용은 &lt;a href=&quot;https://playwright.dev/docs/api/class-page#page-goto&quot;&gt;여기&lt;/a&gt;에서 확인할 수 있어요.&lt;/p&gt;
&lt;h2 id=&quot;상호작용&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%83%81%ED%98%B8%EC%9E%91%EC%9A%A9&quot; aria-label=&quot;상호작용 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;상호작용&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Create a locator.&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; getStarted &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByRole&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;link&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; name&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Get started&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Click it.&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; getStarted&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;click&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;페이지에서 요소를 찾고, 그 다음 클릭하는 코드에요.&lt;/p&gt;
&lt;p&gt;위 경우에는 페이지에서 요소를 찾을때, page.getByRole 함수를 사용했어요.&lt;/p&gt;
&lt;p&gt;이제 이런걸 Locator 라고 부르는데, 여러가지 종류가 있어요.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://playwright.dev/docs/locators&quot;&gt;여기&lt;/a&gt;서 Locator의 종류를 확인할 수 있어요.&lt;/p&gt;
&lt;p&gt;다양합니다!&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Click the get started link.&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByRole&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;link&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; name&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Get started&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;click&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위 코드처럼 한줄로 줄여서 작성할 수 도 있어요!&lt;/p&gt;
&lt;p&gt;다음은 playwright에서 흔하게 사용되는 액션들이에요.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;locator.check()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;checkbox input을 체크합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;locator.click()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;요소를 클릭합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;locator.uncheck()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;checkbox input의 체크를 해제합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;locator.hover()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;마우스를 요소 위에 올립니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;locator.fill()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;폼 필드에 텍스트를 입력합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;locator.focus()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;요소에 포커스를 줍니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;locator.press()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;키를 누릅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;locator.setInputFiles()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;파일을 업로드합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;locator.selectOption()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;드롭다운 메뉴에서 옵션을 선택합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;위 테이블에서 &lt;code class=&quot;language-text&quot;&gt;locator&lt;/code&gt; 는 &lt;code class=&quot;language-text&quot;&gt;page.getByRole&lt;/code&gt; 이런식으로 뭔가 요소가 선택된 코드들을 말한다고 생각하시면 됨미당.&lt;/p&gt;
&lt;h1 id=&quot;assertions-단언문&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#assertions-%EB%8B%A8%EC%96%B8%EB%AC%B8&quot; aria-label=&quot;assertions 단언문 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Assertions (단언문)&lt;/h1&gt;
&lt;p&gt;Playwright는 &lt;code class=&quot;language-text&quot;&gt;expect&lt;/code&gt; 함수 형태의 테스트 단언문(assertions)을 포함하고있어요.&lt;/p&gt;
&lt;p&gt;단언문을 만들려면 expect(value)를 호출하고 예상하는 바를 반영하는 매처(matcher)를 선택하세요.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Playwright에는 예상 조건이 충족될 때까지 기다리는 비동기 매처가 포함되어있어요. 이런 비동기 매처를 사용하면 테스트를 좀 더 안정적으로 할 수 있어요.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;page&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toHaveTitle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;Playwright&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위 코드는 페이지 제목에 &quot;Playwright&quot;가 포함될 때까지 기다리는 코드에요.&lt;/p&gt;
&lt;p&gt;다음은 자주 사용되는 Assertion 목록이에요.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assertion&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(locator).toBeChecked()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;체크박스가 체크되어 있는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(locator).toBeEnabled()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;컨트롤이 활성화되어 있는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(locator).toBeVisible()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;요소가 화면에 보이는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(locator).toContainText()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;요소에 특정 텍스트가 포함되었는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(locator).toHaveAttribute()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;요소에 특정 속성이 있는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(locator).toHaveCount()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;요소 목록이 특정 개수인지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(locator).toHaveText()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;요소의 텍스트가 일치하는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(locator).toHaveValue()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;입력 요소에 특정 값이 있는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(page).toHaveTitle()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;페이지 제목이 맞는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code class=&quot;language-text&quot;&gt;expect(page).toHaveURL()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;페이지 URL이 맞는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;toEqual&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;toContain&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;toBeTruthy&lt;/code&gt; 와 같은 일반적인 매처(matcher)도 포함하고 있으며, 이들은 어떤 조건이든 검증하는 데 사용할 수 있어요. 이러한 단언문들은 이미 사용 가능한 값에 대해 즉시 동기적 검사를 수행하기 때문에 await 키워드를 사용하지 않아요.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;독립적인-테스트&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8F%85%EB%A6%BD%EC%A0%81%EC%9D%B8-%ED%85%8C%EC%8A%A4%ED%8A%B8&quot; aria-label=&quot;독립적인 테스트 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;독립적인 테스트&lt;/h2&gt;
&lt;p&gt;playwright는 독립적으로 테스트를 실행해요.&lt;/p&gt;
&lt;p&gt;각 테스트마다 완전히 새로운 브라우저 환경을 제공하고 그 환경에서 테스트를 진행함니당.&lt;/p&gt;
&lt;p&gt;그래서 이전의 테스트가 현재의 테스트에 영향을 주지않는다네요~&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; test &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@playwright/test&quot;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;example test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// &quot;page&quot; belongs to an isolated BrowserContext, created for this specific test.&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;another test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// &quot;page&quot; in this second test is completely isolated from the first test.&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;테스트-훅&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%9B%85&quot; aria-label=&quot;테스트 훅 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;테스트 훅&lt;/h2&gt;
&lt;p&gt;테스트 훅이라는 테스트 자체를 조정하는? 그런 함수들이 있는데여.&lt;/p&gt;
&lt;p&gt;아래 예제에서 나온 &lt;code class=&quot;language-text&quot;&gt;test.describe&lt;/code&gt; 와 &lt;code class=&quot;language-text&quot;&gt;test.beforeEach&lt;/code&gt; 가 그런 훅들이에요.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;test.describe&lt;/code&gt; 는 테스트를 그룹으로 정의하는? 그런 훅이에요.&lt;/p&gt;
&lt;p&gt;연관된 테스트들끼리 묶어서 관리하면 가독성차원에서 좋을 것 같네욤.&lt;/p&gt;
&lt;p&gt;이어서 등장하는 &lt;code class=&quot;language-text&quot;&gt;test.beforeEach&lt;/code&gt; 는 각 테스트 전/후에 실행되는 훅이에요.&lt;/p&gt;
&lt;p&gt;이외에도 여러가지가 있는데 &lt;a href=&quot;https://playwright.dev/docs/api/class-test&quot;&gt;여기&lt;/a&gt;에서 확인해보세욤.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; test&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; expect &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@playwright/test&quot;&lt;/span&gt;

test&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;navigation&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  test&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;beforeEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Go to the starting url before each test.&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;goto&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://playwright.dev/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;main navigation&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Assertions use the expect API.&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;page&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toHaveURL&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://playwright.dev/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Playwright 시작하기]]></title><description><![CDATA[안녕하세요. 프론트엔드하면서 부끄럽게도 테스트코드 작성이라는걸 말만 들어봤지 해본적이 없네요. 부끄럽네요 ㅋ 이 포스팅은 아마 제가 Playwright 를 탐구하는 글이 될것같네요 ㅎ Playwright 란? Playwright…]]></description><link>https://pjj186.github.io/250909-playwright/</link><guid isPermaLink="false">https://pjj186.github.io/250909-playwright/</guid><pubDate>Tue, 09 Sep 2025 13:39:00 GMT</pubDate><content:encoded>&lt;p&gt;안녕하세요.&lt;/p&gt;
&lt;p&gt;프론트엔드하면서 부끄럽게도 테스트코드 작성이라는걸 말만 들어봤지 해본적이 없네요.&lt;/p&gt;
&lt;p&gt;부끄럽네요 ㅋ 이 포스팅은 아마 제가 Playwright 를 탐구하는 글이 될것같네요 ㅎ&lt;/p&gt;
&lt;h1 id=&quot;playwright-란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#playwright-%EB%9E%80&quot; aria-label=&quot;playwright 란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Playwright 란?&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Playwright&lt;/strong&gt; 는 오픈소스 프레임워크로, E2E 테스트를 위한 도구입니다.&lt;/p&gt;
&lt;p&gt;다양한 언어를 지원하구요. (TypeScript, JavaScript, Python, .NET, Java)&lt;/p&gt;
&lt;p&gt;모바일 웹 테스트도 된다고합니당. 이외에 여러가지 특징들이 있지만, 우선 저는 알못이기때문에 그냥 기초적인 정도만 서술해보려고합니다.&lt;/p&gt;
&lt;p&gt;저는 일단 프로젝트를 새로 만들어서 해보기로했어요.&lt;/p&gt;
&lt;h1 id=&quot;프로젝트-생성-및-playwright-설치&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1-%EB%B0%8F-playwright-%EC%84%A4%EC%B9%98&quot; aria-label=&quot;프로젝트 생성 및 playwright 설치 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;프로젝트 생성 및 Playwright 설치&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;저는 pnpm을 주로 사용하고 있어서 패키지를 설치할 때 pnpm을 사용할거에요!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;pnpm&lt;/span&gt; create vite&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;일단 vite react 프로젝트를 생성해용.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;Project Name &lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; react-playwright
Select a framework &lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; React
Select a variant &lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; TypeScript&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;저는 위와같이 선택하고 프로젝트를 만들었습니당.&lt;/p&gt;
&lt;p&gt;이제 playwright도 설치해염.&lt;/p&gt;
&lt;p&gt;리액트 프로젝트 디렉토리로 이동 후 다음 명령어 입력&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;pnpm&lt;/span&gt; create playwright&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위 명령어를 입력하면 나오는 프롬프트에서는 다음과 같이 선택했습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 21.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA9UlEQVR42h2P23KCUAxF/ZZaq6IHVO6Hc0AExQtWe7E6PrSd6f9/w2rkYU0yyc5O0jN5RVk1mKKmKNeYvCazK4LICBlRaom1JQgNvhDGVvpLbFGivJSREzGexB2PvJeYDc32UwQHqvWZqj6L8VGM91Lbo80OR6UME81AhfSfF/QHPk8SB0Ofl1HQxQfDcUgvK7dcvn5pj1cu1x8+Lt+czndu9z/a043N9p2ybCnaV6rDG6leE0YrWbjD2IY4rcnlmHx5kI9KuVAEOmuY+znezOAmOZMgw3m8MIlwpgnK1SilcT3pi2bqpnhz2+XKy5gtrCBzKuUffTSG8p39KtYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/b8bceb8a4d883254cd9d012e607bf36b/f1512/bash01.webp 200w,
/static/b8bceb8a4d883254cd9d012e607bf36b/f59aa/bash01.webp 400w,
/static/b8bceb8a4d883254cd9d012e607bf36b/47a22/bash01.webp 800w,
/static/b8bceb8a4d883254cd9d012e607bf36b/925b7/bash01.webp 1146w&quot;
              sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/b8bceb8a4d883254cd9d012e607bf36b/f8f3a/bash01.png 200w,
/static/b8bceb8a4d883254cd9d012e607bf36b/6a8a8/bash01.png 400w,
/static/b8bceb8a4d883254cd9d012e607bf36b/7842b/bash01.png 800w,
/static/b8bceb8a4d883254cd9d012e607bf36b/601e5/bash01.png 1146w&quot;
            sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/b8bceb8a4d883254cd9d012e607bf36b/7842b/bash01.png&quot;
            alt=&quot;bash01&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;조금 기다리면 설치가 끝나염.&lt;/p&gt;
&lt;p&gt;설치가 끝나면 다음과 같은 파일들이 생기는데여.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;playwright.config.ts         # playwright 설정파일
package.json
package-lock.json            # Or yarn.lock / pnpm-lock.yaml
tests/
  example.spec.ts            # 간단한 예제 테스트 파일
tests-examples/
  demo-todo-app.spec.ts      # 더 복잡한 예제 테스트 파일&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;간단한 예제 테스트 파일을 한번 살펴보겠습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;ts&quot;&gt;&lt;pre class=&quot;language-ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; test&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; expect &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@playwright/test&quot;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;has title&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;goto&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://playwright.dev/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// Expect a title &quot;to contain&quot; a substring.&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;page&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toHaveTitle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token regex&quot;&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;token regex-source language-regex&quot;&gt;Playwright&lt;/span&gt;&lt;span class=&quot;token regex-delimiter&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;get started link&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; page &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;goto&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;https://playwright.dev/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// Click the get started link.&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByRole&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;link&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; name&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Get started&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;click&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// Expects page to have a heading with the name of Installation.&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    page&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getByRole&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;heading&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; name&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Installation&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toBeVisible&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;test&lt;/code&gt; 와 &lt;code class=&quot;language-text&quot;&gt;expect&lt;/code&gt; 함수를 import 해서 사용하고있네요.&lt;/p&gt;
&lt;p&gt;아마도 &lt;code class=&quot;language-text&quot;&gt;test&lt;/code&gt; 함수는 테스트 케이스를 정의하고, &lt;code class=&quot;language-text&quot;&gt;expect&lt;/code&gt; 함수는 테스트 결과를 확인하는 함수일 것 같네요.&lt;/p&gt;
&lt;p&gt;우선 테스트를 실행하는 명령어부터 실행해보겠습니다.&lt;/p&gt;
&lt;h1 id=&quot;테스트-예제-실행&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%98%88%EC%A0%9C-%EC%8B%A4%ED%96%89&quot; aria-label=&quot;테스트 예제 실행 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;테스트 예제 실행&lt;/h1&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;pnpm&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; playwright &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;저는 다음과 같은 결과가 나왔습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 628px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 34%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAABbklEQVR42lVQy3KbMADkD5rGBkwMGBASQgiQecVO47o5pDnl/z9nsyaTTHvYWWmk2ZenzQBVdVCqQ60dJLnkXUiLNNdQdU+4laXuoZsB2o5I+BbuBXZx+Y2I8ErToxgmyPMJ6vkJ+TSh6xeYdoTtZ9R2oEGLvDQQyq6QNMwK8y0Y/SPqbcIEm0OBOyGwkRI/ed4nko8CcaoQPuT4cR/h3o+xDVPcbR8QJwrJQf8neDtnRQ2vPz7CdjMul1dUrLQ8XplqxOXPX8yn65rw98sbhvkX6x6xnK9QnCbNmDD+FAwoFjGEaTpWZvyqsnDHhQ4abTeilA0Mp6i5WyFqDDTVxiHPK1gaCNbVskV6YIN9iYJzmKaHbR08n5WC9oytnhBUR/KIQFj4ZoHfLAiIrT3Bz2qE7pmz9Di4C7qXdwh3XuvehL7grRuYGRHFdhSKVI/oxnpYsbuxmbDLNKJ65J8WCdk+vSJRDjFTthRq7GfCD5YHy1Vp3hcKAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/210bbd961cb07345deeaccfa28e69f8d/f1512/test-result01.webp 200w,
/static/210bbd961cb07345deeaccfa28e69f8d/f59aa/test-result01.webp 400w,
/static/210bbd961cb07345deeaccfa28e69f8d/064a1/test-result01.webp 628w&quot;
              sizes=&quot;(max-width: 628px) 100vw, 628px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/210bbd961cb07345deeaccfa28e69f8d/f8f3a/test-result01.png 200w,
/static/210bbd961cb07345deeaccfa28e69f8d/6a8a8/test-result01.png 400w,
/static/210bbd961cb07345deeaccfa28e69f8d/d67bd/test-result01.png 628w&quot;
            sizes=&quot;(max-width: 628px) 100vw, 628px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/210bbd961cb07345deeaccfa28e69f8d/d67bd/test-result01.png&quot;
            alt=&quot;test result01&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이미지에 적혀있는 &lt;code class=&quot;language-text&quot;&gt;pnpm exec playwright show-report&lt;/code&gt; 명령어를 실행해서 리포트를 확인해볼게요.&lt;/p&gt;
&lt;h1 id=&quot;테스트-report-확인&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%85%8C%EC%8A%A4%ED%8A%B8-report-%ED%99%95%EC%9D%B8&quot; aria-label=&quot;테스트 report 확인 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;테스트 REPORT 확인&lt;/h1&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;pnpm&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; playwright show-report&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 49%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABFElEQVR42p2RzU7DMBCEe6VAcfxvx0nspGnSggCpXHn/xxrWToADqFJ7+OSV156d3d0wxnG33RW2D0/Y3u/+4RHWuoKvPULTou06hNBQ3KCLscScc2yksvBNRB1aKG0hTQ2p/R+UoXPFuIb+JLgQ4QuJ7sIiqKnqdHxBfP6Eju+QUq4i7iKCjHyTi/nQkaDARmmFcZpwOL3BDWfIMINXjJLVRQS5+UFwGGvARRZUCl3qcUgW1tWoVEMPxNVorZeWFQVp2OM4BiTPoAS7UXB1mIPDNGOez5hiDa8ZqkqWeVyDMbYI05YV+v2A4/ABZ0awShTr12KM+W25p5aHccC+fUWt0zL0W2eY7WaXeTk5sVQUN8LxBbyT+hWUzJQ+AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/6c768108a5aae07091cb7d716533770e/f1512/test-result02.webp 200w,
/static/6c768108a5aae07091cb7d716533770e/f59aa/test-result02.webp 400w,
/static/6c768108a5aae07091cb7d716533770e/47a22/test-result02.webp 800w,
/static/6c768108a5aae07091cb7d716533770e/5bb53/test-result02.webp 1200w,
/static/6c768108a5aae07091cb7d716533770e/485a2/test-result02.webp 1600w,
/static/6c768108a5aae07091cb7d716533770e/4aff1/test-result02.webp 2162w&quot;
              sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/6c768108a5aae07091cb7d716533770e/f8f3a/test-result02.png 200w,
/static/6c768108a5aae07091cb7d716533770e/6a8a8/test-result02.png 400w,
/static/6c768108a5aae07091cb7d716533770e/7842b/test-result02.png 800w,
/static/6c768108a5aae07091cb7d716533770e/5ece7/test-result02.png 1200w,
/static/6c768108a5aae07091cb7d716533770e/0d4f8/test-result02.png 1600w,
/static/6c768108a5aae07091cb7d716533770e/2b464/test-result02.png 2162w&quot;
            sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/6c768108a5aae07091cb7d716533770e/7842b/test-result02.png&quot;
            alt=&quot;test result02&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;오.. 실행한 테스트에 대한 자세한 내용을 보여주는 웹 브라우저가 나타납니다.&lt;/p&gt;
&lt;p&gt;webkit, firefox, chromium 세 개 브라우저 환경에서 테스트를 실행했네요.&lt;/p&gt;
&lt;p&gt;목록에서 하나를 클릭해서 상세하게 내용을 확인해볼게요.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 84%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAABuElEQVR42p2U626cMBSE+dckjbL4bnzBXFyx0CbpK/T9H2p6bKKNKiXsNj8+GQwezvGMaVomcPfwhG93j3h4PH3I/fcTTi1HiD2sc4h9Qgj92xgRaT6lEc57NF3XYV0XrNsGzvkhjLEPadsWSmsYY9DoLiL//oM0LxCcXRX97EMXQaE0pM+1Jf5FwYsw0ShtMOUz4pAhTYDq+i8hbYTUDg0XEqZzSOOEznkIqf6bouF8hCU/GsEFTXD44Mmpoe5D2ZO9DXYTjLVw5P4uKAQKLjgMVGURLK5VQXG7KUXsUqEkh2JK8JQjbSysdVBCgRWjKKecH8MYpwo9rasVKhg/IuafcOuGYVvhFuK8IG4LzI8Rpp+g3XhMmKiwKiiroIkzLZzREeWhidMuFAZoT7grkIZQllymkpW1tIflCCXaB39BSr07qa67bKhdQzq1ZRtm2OGMkJ8xLa/EC/L5FUO5j88Y+l8w9I72R+T3lrXr4VOmMUFTSOtIc/Xa7igK7hG6SyRod5eFFPQniSg/in8OPt+5JYe6nmW757BkyYeAac41S+/Bvj2HmvJbY1OzVMMt37ieu88oa/8C4q2sBQQowisAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/b1a87c10a18f9c31e2a410966a3512e3/f1512/test-result03.webp 200w,
/static/b1a87c10a18f9c31e2a410966a3512e3/f59aa/test-result03.webp 400w,
/static/b1a87c10a18f9c31e2a410966a3512e3/47a22/test-result03.webp 800w,
/static/b1a87c10a18f9c31e2a410966a3512e3/5bb53/test-result03.webp 1200w,
/static/b1a87c10a18f9c31e2a410966a3512e3/485a2/test-result03.webp 1600w,
/static/b1a87c10a18f9c31e2a410966a3512e3/ad408/test-result03.webp 2080w&quot;
              sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/b1a87c10a18f9c31e2a410966a3512e3/f8f3a/test-result03.png 200w,
/static/b1a87c10a18f9c31e2a410966a3512e3/6a8a8/test-result03.png 400w,
/static/b1a87c10a18f9c31e2a410966a3512e3/7842b/test-result03.png 800w,
/static/b1a87c10a18f9c31e2a410966a3512e3/5ece7/test-result03.png 1200w,
/static/b1a87c10a18f9c31e2a410966a3512e3/0d4f8/test-result03.png 1600w,
/static/b1a87c10a18f9c31e2a410966a3512e3/5c43f/test-result03.png 2080w&quot;
            sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/b1a87c10a18f9c31e2a410966a3512e3/7842b/test-result03.png&quot;
            alt=&quot;test result03&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;테스트 절차에 대해서 자세하게 내용을 확인할 수 있습니당.&lt;/p&gt;
&lt;h1 id=&quot;ui-모드&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ui-%EB%AA%A8%EB%93%9C&quot; aria-label=&quot;ui 모드 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;UI 모드&lt;/h1&gt;
&lt;p&gt;공식문서를 살펴보니 테스트 결과를 웹 브라우저 UI로 확인할 수 있는 모드가 있습니다?&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;pnpm&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;exec&lt;/span&gt; playwright &lt;span class=&quot;token builtin class-name&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--ui&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위 명령어를 통해 ui모드로 테스트를 할 수 있어요.&lt;/p&gt;
&lt;p&gt;ui 모드로 테스트를 실행하면, 브라우저가 하나 실행되고 다음과 같은 이미지로 나타납니당.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAACmUlEQVR42n1TS08TURjtnj4QYkyhr+nMnfcwLW2hNVSQp1FQCuqACpiwMOAKN0ACLaEGkPoIKkriD1CR1FqNce9vIMTEhWJiNK7dmRy/DmLSDZOcnMy99ztzvvudcaTTLUimUkjEE9D1JoiiBFlW/kPXVMSbI4g06eg83YGFxSyyuRwuWRYymUGk06cgSRIURSWW4dDMGKLxFhjRGERZRjjMIRQK2eB5HoGAHw0NXtTVHaMP6piamsb09E309vWhq7sHhmGgvr4eXm8D1YbhCCW6wU6eRWNzF8RIEqahgxcEciraBxZzWWxtPcPDjccoFO6RuyUs52/jznoB64W7WFlZxf0HG+Q8B44jQcZEMGpTIFZVHXFyqygaNM2wXba0dyA9cAapcz3ouTCI4ZFxZKxrGLLGkLl8Ff1DIxgYHkUy3UndBP8JCsy+uzDHwedrhN/vp82AzUa8FQNjFs5PWLAmruPK+CQujo5hfPIG+voziKXa0drWCaaZds2BIMEWpBYPxYLBwAEzFXIkjmRbF1IdvQgIKoKCRus6fGEF3qAIb0iCPywdLVgBR443n2yhVH6HFztFFJ9v4+WrIrbLb7BTKmHndRnFUhlv33/Ao82n9hVVCXJ2yz5brMKV9729PRw+v358xsef+/j29Qu+7+/j0+/K6h97b3d3t1rwUJQxBoGmLPA0acrX7OwcTbeAtdU1LCwvYT5LOZxbQHZ+EdmlZeTzeXvSMzO3qI5VC8qSAo0CypgEkaBQdLwnjqPW44bb5UKt223DU+shELuccDmdcNbU0BkPJDpfJViJjqRFoJhRqIYJrcmETsHlJRUcU45EkJchyBocqqrZv4wdHXIoma1gBMlMQDbjhAR4rRkhJXokggRBj+Ev3yCqWCLeGn0AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;picture&gt;
          &lt;source
              srcset=&quot;/static/9761c4dfb822d74ce42c2c83a5cb31f0/f1512/ui-mode.webp 200w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/f59aa/ui-mode.webp 400w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/47a22/ui-mode.webp 800w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/5bb53/ui-mode.webp 1200w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/485a2/ui-mode.webp 1600w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/eb2de/ui-mode.webp 2880w&quot;
              sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
              type=&quot;image/webp&quot;
            /&gt;
          &lt;source
            srcset=&quot;/static/9761c4dfb822d74ce42c2c83a5cb31f0/f8f3a/ui-mode.png 200w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/6a8a8/ui-mode.png 400w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/7842b/ui-mode.png 800w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/5ece7/ui-mode.png 1200w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/0d4f8/ui-mode.png 1600w,
/static/9761c4dfb822d74ce42c2c83a5cb31f0/c71fc/ui-mode.png 2880w&quot;
            sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
            type=&quot;image/png&quot;
          /&gt;
          &lt;img
            class=&quot;gatsby-resp-image-image&quot;
            src=&quot;/static/9761c4dfb822d74ce42c2c83a5cb31f0/7842b/ui-mode.png&quot;
            alt=&quot;ui mode&quot;
            title=&quot;&quot;
            loading=&quot;lazy&quot;
            decoding=&quot;async&quot;
            style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
          /&gt;
        &lt;/picture&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;직접 브라우저를 보면서, 테스트 코드가 어떻게 진행되는지 확인할 수 있어서 좋은것같네여.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id=&quot;마무리하며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%88%EB%AC%B4%EB%A6%AC%ED%95%98%EB%A9%B0&quot; aria-label=&quot;마무리하며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;마무리하며&lt;/h1&gt;
&lt;p&gt;요번 글에서는 대충 프로젝트 만들고 Playwright 깔고 playwright로 어떻게 테스트를 진행하는지 정도 확인해봤구여.&lt;/p&gt;
&lt;p&gt;앞으로도 공식문서를 따라가면서 공부하면서 기록할것같네요.&lt;/p&gt;
&lt;p&gt;감사합니당.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[SQL 테이블 생성, 삭제, 데이터 추가]]></title><description><![CDATA[DDL이란? DDL이란  의 약자로, 데이터베이스 스키마를 정의하는 데 사용되는 언어입니다. CREATE TABLE 테이블은 위와 같은 명령어로 생성할 수 있슴다. (SQLite 기준) SQLite가 아닌 다른 DB…]]></description><link>https://pjj186.github.io/250908-sql/</link><guid isPermaLink="false">https://pjj186.github.io/250908-sql/</guid><pubDate>Mon, 08 Sep 2025 21:35:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;ddl이란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ddl%EC%9D%B4%EB%9E%80&quot; aria-label=&quot;ddl이란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DDL이란?&lt;/h1&gt;
&lt;p&gt;DDL이란 &lt;code class=&quot;language-text&quot;&gt;Data Definition Language&lt;/code&gt; 의 약자로, 데이터베이스 스키마를 정의하는 데 사용되는 언어입니다.&lt;/p&gt;
&lt;h1 id=&quot;create-table&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#create-table&quot; aria-label=&quot;create table permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CREATE TABLE&lt;/h1&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  title&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  released&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  overview&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  rating&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  director
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;테이블은 위와 같은 명령어로 생성할 수 있슴다. (SQLite 기준)&lt;/p&gt;
&lt;p&gt;SQLite가 아닌 다른 DB 기준으로는 위와 같이 생성하면 안될 가능성이 높아여.&lt;/p&gt;
&lt;p&gt;정의한 컬럼들의 타입을 정확하게 지정해줘야합니당.&lt;/p&gt;
&lt;p&gt;사실 위의 명령어는 그래서 잘 작성한게 아니에여.&lt;/p&gt;
&lt;p&gt;옳게 된 작성은 아래와 같습니당.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  title &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  released &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  overview &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  rating &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  director &lt;span class=&quot;token keyword&quot;&gt;TEXT&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;대충 이런식으로 어떤 타입인지 명시적으로 지정해줘야합니당.&lt;/p&gt;
&lt;p&gt;만든 테이블을 없애려면 다음과 같은 명령어로 없앨 수 있어요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;DROP&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; movies&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;근데 &lt;code class=&quot;language-text&quot;&gt;DROP&lt;/code&gt; 명령어를 쓸 땐 조심해야돼요.&lt;/p&gt;
&lt;p&gt;그냥 바로 삭제해버립니다. 데이터 손실이 발생할 수 있어요.&lt;/p&gt;
&lt;p&gt;따라서 삭제하기 전에 반드시 확인을 해야돼요. 확인메시지 같은건 없어요..&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id=&quot;insert-into-values&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#insert-into-values&quot; aria-label=&quot;insert into values permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;INSERT INTO VALUES&lt;/h1&gt;
&lt;p&gt;테이블에 데이터를 집어넣는 명령어에요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;sql&quot;&gt;&lt;pre class=&quot;language-sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;INTO&lt;/span&gt; movies &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; released&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; overview&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; rating&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; director&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;VALUES&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;The Dark Knight&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;2008&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;A superhero movie about a man who becomes a superhero and fights crime.&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;8.5&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&apos;Christopher Nolan&apos;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위와 같이 데이터를 집어넣을 수 있어요.&lt;/p&gt;
&lt;p&gt;만약 테이블에 정의된 컬럼이 위 코드에 명시한 5개보다 더 많다면, 위에서 명시되지 않은 컬럼은 자동으로 NULL로 채워집니다.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[첫 포스팅]]></title><description><![CDATA[첫 포스팅 안녕하세요. lenny.dev 시작합니다..! 방문해주신분들 정말 감사해염]]></description><link>https://pjj186.github.io/hello-world/</link><guid isPermaLink="false">https://pjj186.github.io/hello-world/</guid><pubDate>Mon, 08 Sep 2025 14:39:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;첫-포스팅&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%B2%AB-%ED%8F%AC%EC%8A%A4%ED%8C%85&quot; aria-label=&quot;첫 포스팅 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;첫 포스팅&lt;/h1&gt;
&lt;p&gt;안녕하세요. lenny.dev 시작합니다..!&lt;/p&gt;
&lt;p&gt;방문해주신분들 정말 감사해염&lt;/p&gt;</content:encoded></item></channel></rss>