<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>All about IT</title>
    <link>https://shuu.tistory.com/</link>
    <description>공부용 블로그입니다. :)

</description>
    <language>ko</language>
    <pubDate>Sat, 4 Jul 2026 18:19:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>KR_DEV</managingEditor>
    <image>
      <title>All about IT</title>
      <url>https://tistory1.daumcdn.net/tistory/5159736/attach/5bb411c4ff1f4bdc9f31b9355d95e283</url>
      <link>https://shuu.tistory.com</link>
    </image>
    <item>
      <title>git commit하면 .git 안에서 무슨 일이 벌어질까?</title>
      <link>https://shuu.tistory.com/239</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;들어가며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 버전 관리를 위해 우리 모두 Git을 쓰지만, 정작 .git 폴더 안을 열어본 적은 별로 없을 거예요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 저도 그랬습니다. &lt;b&gt;git commit&lt;/b&gt; 하면 저장되고, &lt;b&gt;git push&lt;/b&gt; 하면 올라가고 그 정도만 알고도 쓰는 데 전혀 지장이 없었거든요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스트에서는 .git 폴더를 살펴보며 커밋할 때마다 내부가 어떻게 변해가는지 하나씩 살펴보겠습니다!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Repository 생성&lt;/h2&gt;
&lt;pre id=&quot;code_1776955755745&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;shu@sHu-MacBook-Pro Source Code % git init
Initialized empty Git repository in /Users/shu/Desktop/Source Code/ossca/.git/

shu@sHus-MacBook-Pro .git % cd git &amp;amp;&amp;amp; ll
total 24
drwxr-xr-x   9 shu  staff  288  4 23 23:48 ./
drwxr-xr-x   3 shu  staff   96  4 23 23:48 ../
-rw-r--r--   1 shu  staff  137  4 23 23:48 config
-rw-r--r--   1 shu  staff   73  4 23 23:48 description
-rw-r--r--   1 shu  staff   21  4 23 23:48 HEAD
drwxr-xr-x  15 shu  staff  480  4 23 23:48 hooks/
drwxr-xr-x   3 shu  staff   96  4 23 23:48 info/
drwxr-xr-x   4 shu  staff  128  4 23 23:48 objects/
drwxr-xr-x   4 shu  staff  128  4 23 23:48 refs/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git init 명령어를 통해 repository를 생성하게 되면 이처럼 .git 폴더가 생성이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git 폴더 안에는 여러 개의 폴더와 파일들로 구성되어 있는데, 이번에 집중적으로 볼 건 &lt;span style=&quot;color: #ee2323;&quot;&gt;objects&lt;/span&gt;&amp;nbsp;폴더에요!&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;objects 폴더는 실제 데이터가 저장되는 곳이에요. 파일 내용, 디렉토리 구조, 커밋 정보가 전부 여기 들어있어요!&lt;br /&gt;각각 &lt;b&gt;blob&lt;/b&gt;, &lt;b&gt;tree&lt;/b&gt;, &lt;b&gt;commit&lt;/b&gt; 이라는 타입으로 구분되서 저장되어요.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;refs 폴더는 브랜치나 태그가 어떤 커밋을 가리키는지 저장하는 곳이에요.&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Working Directory &amp;rarr; Staging Area&amp;nbsp;&lt;/h2&gt;
&lt;pre id=&quot;code_1777203148711&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;shu@sHus-MacBook-Pro ossca % echo &quot;hello, World&quot; | tee first.txt &amp;gt; /dev/null
shu@sHus-MacBook-Pro ossca % git add first.txt 
shu@sHus-MacBook-Pro ossca % git status
On branch main

No commits yet

Changes to be committed:
  (use &quot;git rm --cached &amp;lt;file&amp;gt;...&quot; to unstage)
        new file:   first.txt
        
shu@sHus-MacBook-Pro ossca % cd .git/objects/bd &amp;amp;&amp;amp; ll
total 8
drwxr-xr-x  3 shu  staff   96  4 26 20:34 ./
drwxr-xr-x  5 shu  staff  160  4 26 20:34 ../
-r--r--r--  1 shu  staff   29  4 26 20:34 c395c2a4533f9951b648b5234f435935e526a8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 파일을 생성하고 &lt;b&gt;git add&lt;/b&gt; 명령어로 해당 파일을 Staging Area로 올리게 되면 objects 폴더 내에 파일이 생성되어요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파일은 해당 텍스트 파일에 대한 상태를 저장하고 있어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 내용을 SHA-1 해싱하여 나온 40자리 중 맨 &lt;span style=&quot;color: #ee2323;&quot;&gt;처음 2자리를 폴더명&lt;/span&gt;&amp;nbsp;/ &lt;span style=&quot;color: #006dd7;&quot;&gt;나머지 38자리를 파일명&lt;/span&gt;으로 사용해요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 first.txt 파일에 대한 SHA-1 해싱값은 &quot;&lt;span style=&quot;color: #ee2323;&quot;&gt;bd&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;c395c2a4533f9951b648b5234f435935e526a8&lt;/span&gt;&quot; 라고 볼 수 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 해당 파일은 데이터 공간을 절약하기 위해 zlib 형식으로 압축되어 있기 때문에 아래의 파이썬 코드를 통해 원문 내용을 확인할 수 있어요!&lt;/p&gt;
&lt;pre id=&quot;code_1777204127230&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import zlib

file_path = &quot;c395c2a4533f9951b648b5234f435935e526a8&quot; 
decom_content = zlib.decompress(open(file_path, &quot;rb&quot;).read())

print(decom_content)

# [결과] b'blob 13\x00hello, World\n'&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;텍스트 파일을 'git restore --staged first.txt' 명령어를 통해 Working Directory로 바꾸어도 objects 폴더 내 파일은 삭제되지 않아요.&lt;br /&gt;git의 object store는 'append-only' 방식을 취하고 있기 때문에 한 번 생긴 파일은 GC에 의해 삭제되기 전까진 유지되어요.&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Staging Area &amp;rarr; Repository&lt;/h2&gt;
&lt;pre id=&quot;code_1777204652102&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;shu@sHus-MacBook-Pro ossca % git add first.txt 
shu@sHus-MacBook-Pro ossca % git commit -m &quot;first commit&quot;
[main (root-commit) fffc3b9] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 first.txt
 
shu@sHus-MacBook-Pro ossca % git log
commit fffc3b97302a953e011f55246de5069d8adc2e53 (HEAD -&amp;gt; main)
Author: xxx &amp;lt;xxx@xxxx.xxxx&amp;gt;
Date:   Sun Apr 26 20:57:48 2026 +0900

    first commit
    
shu@sHus-MacBook-Pro ossca % cd .git/objects &amp;amp;&amp;amp; ll
total 0
drwxr-xr-x   7 shu  staff  224  4 26 20:57 ./
drwxr-xr-x  12 shu  staff  384  4 26 20:57 ../
drwxr-xr-x   3 shu  staff   96  4 26 20:57 60/
drwxr-xr-x   3 shu  staff   96  4 26 20:34 bd/
drwxr-xr-x   3 shu  staff   96  4 26 20:57 ff/
drwxr-xr-x   2 shu  staff   64  4 26 20:33 info/
drwxr-xr-x   2 shu  staff   64  4 26 20:33 pack/

shu@sHus-MacBook-Pro objects % ls bd/
c395c2a4533f9951b648b5234f435935e526a8

shu@sHus-MacBook-Pro objects % ls 60/
e8a3a28d414830db8c260a265b5d027fe59fec

shu@sHus-MacBook-Pro objects % ls ff/
fc3b97302a953e011f55246de5069d8adc2e53&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git commit&lt;/b&gt; 명령어로 커밋을 하게 되면 objects 폴더 내에 2개의 파일이 더 추가되어요. (60/, ff/)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 'git add + git commit' 을 통해 objects 폴더 내에 총 3가지의 파일이 생성이 되었는데 각 파일들에 대해 알아보아요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;1️⃣&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Blob&lt;/h3&gt;
&lt;pre id=&quot;code_1777207889947&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import zlib

file_path = &quot;c395c2a4533f9951b648b5234f435935e526a8&quot; 
decom_content = zlib.decompress(open(file_path, &quot;rb&quot;).read())

print(decom_content)
b'blob 13\x00hello, World\n'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;gid add 시점&lt;/b&gt;에 생성된 파일이에요. 파일명이나 경로는 전혀 포함되어 있지 않고 오직 &lt;b&gt;파일 내용&lt;/b&gt;만 저장하고 있어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;2️⃣&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Tree&lt;/h3&gt;
&lt;pre id=&quot;code_1777209337259&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import zlib

file_path = &quot;e8a3a28d414830db8c260a265b5d027fe59fec&quot; 
decom_content = zlib.decompress(open(file_path, &quot;rb&quot;).read())

print(decom_content)
b'tree 37\x00100644 first.txt\x00\xbd\xc3\x95\xc2\xa4S?\x99Q\xb6H\xb5#OCY5\xe5&amp;amp;\xa8'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Blob 만으로는 이 파일 내용이 어떤 파일에 대한 &lt;b&gt;상태&lt;/b&gt;를 관리하는지 알 수 없어서 Tree가 파일명과 Blob을 연결해주는 &lt;b&gt;매핑테이블&lt;/b&gt; 역할을 해요.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Tree 정보를 아래처럼 읽을 수 있어요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;tree 37 = 오브젝트 타입 + 크기&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;\x00 = 구분자&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;100644 = 파일 권한&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;first.txt = 파일명&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;\x00 = 구분자&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;/span&gt;&lt;u&gt;\xbd\xc3\x95\xc2\xa4S?\x99Q\xb6H\xb5#OCY5\xe5&amp;amp;\xa8 = blob 해시 (바이너리 20byte)&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;✅ &lt;u&gt;파일이 여러 개면 파일 수만큼 줄이 늘어나고 파일이 많아질수록 Tree 오브젝트의 크기도 커지게 되어요.&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;✅ &lt;u&gt;또한 파일이 폴더인 경우, blob 대신 또 다른 Tree를 가리켜요.&lt;/u&gt; (Tree가 Tree를 가리키는 방식으로 계층 구조를 표현해요!)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;3️⃣&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;Commit&lt;/h3&gt;
&lt;pre id=&quot;code_1777207544899&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import zlib

file_path = &quot;fc3b97302a953e011f55246de5069d8adc2e53&quot; 
decom_content = zlib.decompress(open(file_path, &quot;rb&quot;).read())

print(decom_content)
b'commit 209\x00tree 60e8a3a28d414830db8c260a265b5d027fe59fec\nauthor \xe1\x84\x87\xe1\x85\xa1\xe1\x86\xa8\xe1\x84\x89\xe1\x85\xa5\xe1\x86\xbc\xe1\x84\x89\xe1\x85\xae &amp;lt;ssp0622@diffchild.com&amp;gt; 1777204668 +0900\ncommitter \xe1\x84\x87\xe1\x85\xa1\xe1\x86\xa8\xe1\x84\x89\xe1\x85\xa5\xe1\x86\xbc\xe1\x84\x89\xe1\x85\xae &amp;lt;xxxxx@xxxxx.xxxxx&amp;gt; 1777204668 +0900\n\nfirst commit\n'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Tree 오브젝트를 가리키면서 &lt;b&gt;작성자, 시간, 커밋 메시지&lt;/b&gt; 등의 정보를 담고 있어요.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;흔히 &lt;b&gt;git log&lt;/b&gt; 에서 보는 커밋 해시가 바로 이 commit 오브젝트의 경로라고 볼수 있어요.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Commit 정보를 아래처럼 읽을 수 있어요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;commit 209 = 오브젝트 타입 + 크기&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;\x00 = 구분자&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;tree &lt;span style=&quot;color: #ee2323;&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;e8a3a28d414830db8c260a265b5d027fe59fec&lt;span style=&quot;color: #000000;&quot;&gt; = Tree 해시&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;author ... = 작성자 + 시간 (Unix timestamp)&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;committer = 커미터 + 시간&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;first commit = 커밋 메시지&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 살펴본 Blob, Tree, Commit 세 오브젝트의 관계를 아래와 같이 정리할 수 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dd0nVo/dJMcajaUMja/NEaOdWFMaNG6rDYPFm3et1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dd0nVo/dJMcajaUMja/NEaOdWFMaNG6rDYPFm3et1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dd0nVo/dJMcajaUMja/NEaOdWFMaNG6rDYPFm3et1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdd0nVo%2FdJMcajaUMja%2FNEaOdWFMaNG6rDYPFm3et1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;262&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;마치며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.git 폴더를 직접 뜯어보기 전까지는 그냥 &quot;어딘가에 저장되겠지&quot; 하고 넘겼는데, 이번 블로깅을 통해 내부 동작 과정을 알게 됐어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git add 하는 순간 이미 blob 오브젝트가 생기고, git commit 하면 tree, commit 오브젝트가 체인으로 연결되고, 그리고 우리가 당연하게 쓰던 브랜치도 결국 특정 커밋 해시를 가리키는 포인터에 불과하다는 것도요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고 보면 되게 단순한 구조인데, 결국 단순함이 git을 더 강력하게 만드는 이유라고 생각해요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히, 명령어만 외워서 썼던 시절과 달리 이제는 제대로 이해하고 쓰는 느낌이 들어서 좋았습니다!&lt;/p&gt;</description>
      <category>  연재 시리즈/OSSCA 체험형 프로젝트 (Valkey)</category>
      <category>Git</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/239</guid>
      <comments>https://shuu.tistory.com/239#entry239comment</comments>
      <pubDate>Thu, 23 Apr 2026 23:18:14 +0900</pubDate>
    </item>
    <item>
      <title>Spring Batch를 활용하여 오라클 클라우드 가상머신 (인스턴스) 자동 생성 스케쥴러를 만들어보자!</title>
      <link>https://shuu.tistory.com/233</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼블릭 클라우드에서 제공하는 프리티어 혜택이 가장 큰 곳은 Oracle Cloud 입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 프리티어 혜택이 좋은 만큼 해당 리전에 대한 가용량이 꽉 차면 인스턴스 생성이 되지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언제 가용량이 확보될 지도 모르기 때문에 인스턴스를 자동으로 생성하는 스케쥴러를 개발하였고 이를 공유하고자 포스트를 작성하게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이미 클리앙의 theb1ue 님이 php로 만든 자동 스크립트가 있기 때문에 php에 익숙하신 분은 아래 링크를 참고해주세요!&lt;br /&gt;&lt;a title=&quot;php&quot; href=&quot;https://svrforum.com/cloud/319909&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://svrforum.com/cloud/319909&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;개발 환경&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Spring Boot 2.7.15&lt;/li&gt;
&lt;li&gt;Spring Batch&lt;/li&gt;
&lt;li&gt;JDK 11&lt;/li&gt;
&lt;li&gt;IntelliJ Ulimate&lt;/li&gt;
&lt;li&gt;FileZilla&lt;/li&gt;
&lt;li&gt;Putty, Mobaxterm&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;Spring Boot 3 버전이 아닌 2 버전으로 진행하였습니다&lt;/u&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;이는 Oracle Cloud SDK 라이브러리에서 사용하는 일부 의존성 라이브러리들이 javax 패키지를 사용하기 때문입니다&lt;/u&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;API Key 추가 및 Key 다운로드&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.PNG&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vuhzp/btsH4oqtWt3/LrcmJKnSJOcASTGrW8Atw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vuhzp/btsH4oqtWt3/LrcmJKnSJOcASTGrW8Atw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vuhzp/btsH4oqtWt3/LrcmJKnSJOcASTGrW8Atw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvuhzp%2FbtsH4oqtWt3%2FLrcmJKnSJOcASTGrW8Atw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;521&quot; height=&quot;456&quot; data-filename=&quot;1.PNG&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;/span&gt;&lt;u&gt;오라클 클라우드 접속하여 로그인한 다음 우상단의 프로필 이미지 클릭 후 내 프로파일 메뉴로 들어가주세요!&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a title=&quot;오라클 클라우드&quot; href=&quot;https://www.oracle.com/kr/cloud/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.oracle.com/kr/cloud/&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;881&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ecnx6/btsH3nFRelO/VH8fgtmKUQ2lMt7DNz0FS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ecnx6/btsH3nFRelO/VH8fgtmKUQ2lMt7DNz0FS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ecnx6/btsH3nFRelO/VH8fgtmKUQ2lMt7DNz0FS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEcnx6%2FbtsH3nFRelO%2FVH8fgtmKUQ2lMt7DNz0FS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1151&quot; height=&quot;881&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;881&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;/span&gt;&lt;u&gt;좌하단의 API 키 메뉴를 누른 다음 API 키 추가 버튼을 클릭해주세요.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;다음으로 프라이빗 키 및 퍼블릭 키 모두 다운로드한 다음 추가 버튼을 눌러주세요!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Private 키는 API 호출에 필요한 인증 키로 사용되기 때문에 유실되지 않도록 유의해야 합니다!&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCPFv3/btsH3OJYyqL/XWpkwoHJXD3ZopMI6h3dBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCPFv3/btsH3OJYyqL/XWpkwoHJXD3ZopMI6h3dBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCPFv3/btsH3OJYyqL/XWpkwoHJXD3ZopMI6h3dBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCPFv3%2FbtsH3OJYyqL%2FXWpkwoHJXD3ZopMI6h3dBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;980&quot; height=&quot;549&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;추가 버튼을 누르게 되면 다음과 같은 창이 뜨게 됩니다.&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;해당 내용을 모두 복사하여 메모장 or 노트패드에 붙여넣기 해줍니다!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;API 호출에 필요한 파라미터 추출&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스를 생성하는 API를 호출하기 위해서는 해당 인스턴스의 이미지, 서브넷 등의 파라미터가 필요합니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, F12 개발자 도구를 활용하여 오라클 클라우드에서 인스턴스 생성 버튼을 눌러 API 요청이 어떠한 형태로 나가는 지 확인해봅시다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;987&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buJpYm/btsH4JHUiNI/Uxy3yKKW7TkZMn1kt6t1gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buJpYm/btsH4JHUiNI/Uxy3yKKW7TkZMn1kt6t1gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buJpYm/btsH4JHUiNI/Uxy3yKKW7TkZMn1kt6t1gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuJpYm%2FbtsH4JHUiNI%2FUxy3yKKW7TkZMn1kt6t1gK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1196&quot; height=&quot;987&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;987&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/49qBF/btsH4YSoNr0/Yl626mrkJzjStE8QSztjf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/49qBF/btsH4YSoNr0/Yl626mrkJzjStE8QSztjf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/49qBF/btsH4YSoNr0/Yl626mrkJzjStE8QSztjf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F49qBF%2FbtsH4YSoNr0%2FYl626mrkJzjStE8QSztjf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1195&quot; height=&quot;545&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;SSH 키 추가에서 &quot;공용 키 저장&quot;은 추후 API 호출에서 사용하므로 꼭 저장해주세요.&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;1072&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q8Vae/btsH5g6mcG9/h2aoPwGbrR5v6fm07AfIK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q8Vae/btsH5g6mcG9/h2aoPwGbrR5v6fm07AfIK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q8Vae/btsH5g6mcG9/h2aoPwGbrR5v6fm07AfIK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ8Vae%2FbtsH5g6mcG9%2Fh2aoPwGbrR5v6fm07AfIK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1206&quot; height=&quot;1072&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;1072&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;여기까지 모두 설정하였다면 F12 개발자 도구를 열고 생성 버튼을 눌러주세요!&lt;/u&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;957&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xnt0g/btsH4MR9syY/eZznmgXXhjvpCemvHScJ2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xnt0g/btsH4MR9syY/eZznmgXXhjvpCemvHScJ2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xnt0g/btsH4MR9syY/eZznmgXXhjvpCemvHScJ2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXnt0g%2FbtsH4MR9syY%2FeZznmgXXhjvpCemvHScJ2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1198&quot; height=&quot;957&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;957&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;위 그림처럼 빨간색 instances 항목에서 우클릭 후 Copy as cuRL (bash) 버튼을 눌러줍니다!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718731615388&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl 'https://iaas.ap-singapore-1.oraclecloud.com/20160918/instances/' \
  -H 'Accept: */*' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: https://cloud.oracle.com' \
  -H 'Referer: https://cloud.oracle.com/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: xxxxxx' \
  -H 'accept-language: ko' \
  -H 'authorization: Signature keyId=&quot;xxxxxxxxxxxxxxxxxx&quot;' \
  -H 'opc-request-id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'sec-ch-ua: &quot;Google Chrome&quot;;v=&quot;125&quot;, &quot;Chromium&quot;;v=&quot;125&quot;, &quot;Not.A/Brand&quot;;v=&quot;24&quot;' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: &quot;Windows&quot;' \
  -H 'x-content-sha256: /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'x-date: Tue, 18 Jun 2024 17:17:43 GMT' \
  --data-raw 
  {
  &quot;metadata&quot;: {
    &quot;ssh_authorized_keys&quot;: &quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;
  },
  &quot;shape&quot;: &quot;VM.Standard.A1.Flex&quot;,
  &quot;compartmentId&quot;: &quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;,
  &quot;displayName&quot;: &quot;SRV1&quot;,
  &quot;availabilityDomain&quot;: &quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;,
  &quot;sourceDetails&quot;: {
    &quot;sourceType&quot;: &quot;image&quot;,
    &quot;imageId&quot;: &quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;,
    &quot;bootVolumeSizeInGBs&quot;: 50,
    &quot;bootVolumeVpusPerGB&quot;: 10
  },
  &quot;isPvEncryptionInTransitEnabled&quot;: true,
  &quot;createVnicDetails&quot;: {
    &quot;assignPublicIp&quot;: true,
    &quot;subnetId&quot;: &quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;,
    &quot;assignPrivateDnsRecord&quot;: true,
    &quot;assignIpv6Ip&quot;: false
  },
  &quot;agentConfig&quot;: {
    &quot;pluginsConfig&quot;: [
      { &quot;name&quot;: &quot;Vulnerability Scanning&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; },
      { &quot;name&quot;: &quot;Oracle Java Management Service&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; },
      { &quot;name&quot;: &quot;OS Management Service Agent&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; },
      { &quot;name&quot;: &quot;OS Management Hub Agent&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; },
      { &quot;name&quot;: &quot;Management Agent&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; },
      { &quot;name&quot;: &quot;Custom Logs Monitoring&quot;, &quot;desiredState&quot;: &quot;ENABLED&quot; },
      { &quot;name&quot;: &quot;Compute RDMA GPU Monitoring&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; },
      { &quot;name&quot;: &quot;Compute Instance Run Command&quot;, &quot;desiredState&quot;: &quot;ENABLED&quot; },
      { &quot;name&quot;: &quot;Compute Instance Monitoring&quot;, &quot;desiredState&quot;: &quot;ENABLED&quot; },
      { &quot;name&quot;: &quot;Compute HPC RDMA Auto-Configuration&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; },
      { &quot;name&quot;: &quot;Compute HPC RDMA Authentication&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; },
      { &quot;name&quot;: &quot;Cloud Guard Workload Protection&quot;, &quot;desiredState&quot;: &quot;ENABLED&quot; },
      { &quot;name&quot;: &quot;Block Volume Management&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; },
      { &quot;name&quot;: &quot;Bastion&quot;, &quot;desiredState&quot;: &quot;DISABLED&quot; }
    ],
    &quot;isMonitoringDisabled&quot;: false,
    &quot;isManagementDisabled&quot;: false
  },
  &quot;definedTags&quot;: {},
  &quot;freeformTags&quot;: {},
  &quot;instanceOptions&quot;: {
    &quot;areLegacyImdsEndpointsDisabled&quot;: false
  },
  &quot;availabilityConfig&quot;: {
    &quot;recoveryAction&quot;: &quot;RESTORE_INSTANCE&quot;
  },
  &quot;shapeConfig&quot;: {
    &quot;ocpus&quot;: 4,
    &quot;memoryInGBs&quot;: 24
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;붙여넣기 하게 되면 위와 같은 내용이 보일텐데 여기서 필요한 파라미터만을 추출해야 합니다!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;imageId, compartmentId, subnetId, &lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;availabilityDomain 이 4가지 파라미터의 값을 뽑아서 메모장에 복사해주세요!&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;GitHub 프로젝트 Clone&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 URL로 들어가 프로젝트를 Clone 해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;a title=&quot;스케쥴러 프로젝트&quot; href=&quot;https://github.com/dev-toyproject/oracle-cloud-auto-create-vm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/dev-toyproject/oracle-cloud-auto-create-vm&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Application.yml 수정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718732122190&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;oracle:
  cloud:
    apiKey:
      profile: DEFAULT
      user: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      fingerprint: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      tenancy: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      region: ap-singapore-1
      privKey:
        path: /root/test123@gmail.com_2024-05-24T13_12_12.293Z.pem
      pubKey:
        path: /root/ssh-key-2024-05-24.key.pub

    instance:
      x86:
        # x86 인스턴스 생성하지 않음      --&amp;gt; displayName : null
        # x86 인스턴스 1개 생성          --&amp;gt; displayName : srv1
        # x86 인스턴스 2개 생성          --&amp;gt; displayName : srv1,srv2     (콤마로 구분)
        displayName: null
        imageId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        shape: VM.Standard.E2.1.Micro
        volume: 50
        availabilityDomain: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        compartmentId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        subnetId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

      arm:
        # arm 인스턴스 생성하지 않음      --&amp;gt; displayName : null
        # arm 인스턴스 1개 생성          --&amp;gt; displayName : srv1
        # arm 인스턴스 2개 생성          --&amp;gt; displayName : srv1,srv2     (콤마로 구분)
        # 추가적으로 arm 인스턴스는 1개 생성할 때는 vcpu: 4, memory: 24, volume: 100 (프리티어 최대 한도) 로 변경해주세요.
        displayName: srv3,srv4
        imageId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        shape: VM.Standard.A1.Flex
        vcpu: 2
        memory: 12
        volume: 50
        availabilityDomain: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        compartmentId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        subnetId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;oracle.cloud.apiKey 하위 항목들 중 user, fingerprint, tenancy 항목은 &quot;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;API 키 추가 및 Key 다운로드&lt;/span&gt;&quot; 부분에서 복사해뒀던 값으로 바꿔줍니다!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp;&lt;span&gt; &lt;/span&gt;&lt;u&gt;&lt;span&gt;oracle.cloud.apiKey.&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;&lt;u&gt;rivKey.path&lt;/u&gt; 항목은 &quot;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;API 키 추가 및 Key 다운로드&lt;/span&gt;&quot; 부분에서 저장했던 Private Key 파일의 절대 경로를 입력해주세요!&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;oracle.cloud.apiKey.pubKey.path 항목은 인스턴스 생성할 때 SSH 키 추가 부분에서 저장했던 공용 키 파일의 절대 경로를 입력해주세요!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;oracle.cloud.instance 하위 항목들 중 imageId, subnetId, .. 등은 &quot;API 호출에 필요한 파라미터 부분&quot;에서 추출했던 값들로 바꿔줍니다!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;oracle.cloud.instance.x86 or arm.displayName 항목 값이 &quot;null&quot; 문자열이면 생성하지 않고 예시는 주석에 달아놨으니 참고해주세요!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;x86 인스턴스의 경우에 vcpu, memory 값을 설정하지 않은 이유는 프리티어 인스턴스는 vcpu, memory가 고정되어 있기 때문입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로젝트 빌드 및 배포&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 빌드하기에 앞서, 배포하고자 하는 서버에 미리 PrivKey, PubKey를 업로드한 다음 해당 Key 파일들의 절대 경로를 복사한 다음 꼭 application.yml에 반영해주어야 합니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 헷갈릴 소지가 있어 말씀드리지만 PrivKey는 &quot;API 키 추가 및 다운로드&quot; 부분에서 다운로드 했던 프라이빗 키이고 PubKey는 인스턴스 생성할 때, 다운로드 했던 공용 키 입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;API 키 추가 및 다운로드&quot; 부분에서 다운로드 했던 퍼블릭 키가 아닙니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718733518733&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# [로컬] 프로젝트 빌드
./gradlew build -x test

# [서버] 패키지 설치
dnf install -y java-11-openjdk

# [서버] 배포
nohup java -jar oci-vm-0.0.1-SNAPSHOT.jar&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &amp;nbsp; &lt;u&gt;콘솔 로그는 별도의 로깅 파일로 생성되며 날짜별로 분리되도록 설정해놓았습니다!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;추가적으로 궁금하신 사항이나 잘못된 부분이 있다면 댓글로 남겨주시면 감사하겠습니다!&lt;/p&gt;</description>
      <category>  Toy Project</category>
      <category>free tier</category>
      <category>oralce cloud</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/233</guid>
      <comments>https://shuu.tistory.com/233#entry233comment</comments>
      <pubDate>Wed, 19 Jun 2024 01:05:18 +0900</pubDate>
    </item>
    <item>
      <title>[RHEL] Failed to set locale defaulting to c.utf-8 오류 해결</title>
      <link>https://shuu.tistory.com/232</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) 문제 상황&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Oracle Linux 8 설치 후, dnf install 명령어로 패키지를 설치하려 했으나 아래와 같은 에러가 발생했네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무래도 Locale 설정이 잘못되어 있는 것 같으니 확인해봅시다!&lt;/p&gt;
&lt;pre id=&quot;code_1717508895333&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@SRV2 ~]# dnf install -y mongodb
Failed to set locale, defaulting to C.UTF-8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) 원인&lt;/h3&gt;
&lt;pre id=&quot;code_1717509294528&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@SRV2 ~]# localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us
      
[root@SRV2 ~]# localectl list-locales | grep -i utf
C.utf8
	...
en_US.utf8
en_US.utf8@ampm
	...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;localectl 명령어로 locale 설정을 살펴봤지만 크게 문제점은 없어보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어팩 (langpacks)이 누락되었을 수도 있으니 언어팩을 한 번 다시 설치해보겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) 해결&lt;/h3&gt;
&lt;pre id=&quot;code_1717509723876&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[root@SRV4 ~]# dnf install glibc-all-langpacks -y
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 1 day, 10:43:56 ago on Mon Jun  3 03:35:37 2024.
Dependencies resolved.
=============================================================================================================================================================================================================================================
 Package                                                     Architecture                                    Version                                                         Repository                                                 Size
=============================================================================================================================================================================================================================================
Installing:
 glibc-all-langpacks                                         aarch64                                         2.28-251.0.2.el8_10.2                                           ol8_baseos_latest                                          25 M

Transaction Summary
=============================================================================================================================================================================================================================================
                ...
                ...
                ...
Complete!

[root@SRV4 ~]# dnf search mongodb
=================================================================================================== 이름 &amp;amp; 요약과 일치하는 항목: mongodb ====================================================================================================
collectd-write_mongodb.aarch64 : MongoDB output plugin for collectd
pcp-pmda-mongodb.aarch64 : Performance Co-Pilot (PCP) metrics for MongoDB
syslog-ng-mongodb.aarch64 : MongoDB support for syslog-ng
				...
                ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어팩을 설치하고 다시 dnf install 명령어를 실행해보니 말끔하게 해결이 됐네요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 이유로 언어팩이 누락된 건지 모르겠지만 일단 해결되었으니 기분이 좋습니다 &lt;span style=&quot;color: #555555; text-align: start;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;✅ 참고 내용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt; &lt;/span&gt;&amp;nbsp; &lt;u&gt;스토리지 공간으로 인해 모든 언어팩이 아니라 특정 언어팩만 설치하고자 한다면 패키지 명을 &quot;glibc-langpack-ko&quot;와 같이 마지막 부분을 언어 코드로 바꿔서 설치하시면 됩니다!&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;Linux 및 Unix 와 같은 POSIX 운영체제에서 Locale 식별자는 ISO/IEC 15987 규칙을 따릅니다!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #3f4257; text-align: start;&quot;&gt;  &lt;u&gt;예를 들어, UTF-8 인코딩을 사용하는 Unisted State 언어 코드는 &quot;en_US.UTF-8&quot; 입니다!&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> ️ Devops/Linux</category>
      <category>linux</category>
      <category>locale</category>
      <category>rhel</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/232</guid>
      <comments>https://shuu.tistory.com/232#entry232comment</comments>
      <pubDate>Tue, 4 Jun 2024 23:59:44 +0900</pubDate>
    </item>
    <item>
      <title>MacBook에서 자주 사용하는 단축키 정리</title>
      <link>https://shuu.tistory.com/216</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1) 기본 단축키&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일단 먼저 알아야 할 점은 윈도우와 맥북의 키보드 자판 배열이 조금 다르다는 점이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;맥북의 Command 키는 윈도우의 Ctrl, Option 키는 윈도우의 Alt 로 이해하면 된다!&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;기능&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;단축키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;잘라내기&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;복사&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;붙여넣기&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + v&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;실행 취소&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;저장 하기&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;찾기&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + f&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;작업 화면 전환&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + tab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;한/영 전환&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;control + spacebar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;현재 창 최대화&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;control + command + f&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;현재 창 최소화&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;현재 창 닫기&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + w&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;프로그램 종료&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + q&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;바탕화면 보기&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;f11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2) 화면 캡쳐 단축키&lt;/span&gt;&lt;/h1&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;기능&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;단축키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;전체화면 캡쳐 (파일 저장)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + shift + 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;전체화면 캡쳐 (클립보드)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;control + command + shift + 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;선택영역 캡쳐 (파일 저장)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + shift + 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;선택영역 캡쳐 (클립보드)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;control + command + shift + 4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;3) 멀티태스킹 단축키&lt;/span&gt;&lt;/h1&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;기능&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;단축키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Desktop 창&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;fn + f3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Desktop 오른쪽 이동&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;ctrl + &amp;rarr;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Desktop 왼쪽 이동&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;ctrl + &amp;larr;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;4) 터미널 단축키&lt;/span&gt;&lt;/h1&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;기능&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;단축키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;단어 삭제&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;ctrl + w&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;줄 삭제&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;ctrl + u&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;단어 간 이동&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;option + &amp;harr;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;해당 줄의 처음으로 이동&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + &amp;larr;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;해당 줄의 끝으로 이동&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;command + &amp;rarr;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>  연재 시리즈/잡다한 IT 정보</category>
      <category>macbook</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/216</guid>
      <comments>https://shuu.tistory.com/216#entry216comment</comments>
      <pubDate>Wed, 10 Apr 2024 16:40:57 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 (Lv 3) - 없어진 기록 찾기</title>
      <link>https://shuu.tistory.com/215</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1) 문제 설명&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;ANIMAL_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;ANIMAL_TYPE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;DATETIME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DATETIME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;INTAKE_CONDITION&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;SEX_UPON_INTAKE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;ANIMAL_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;ANIMAL_TYPE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;DATETIME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DATETIME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;SEX_UPON_OUTCOME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2) 문제&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;천재지변으로 인해 일부 데이터가 유실되었습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;3) 예시&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를 들어, ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블이 다음과 같다면&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ANIMAL_INS]&lt;/b&gt;&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;ANIMAL_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;ANIMAL_TYPE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DATETIME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;INTAKE_CONDITION&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;SEX_UPON_INTAKE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;A352713&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Cat&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2017-04-13 16:29:00&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Normal&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Gia Spayed&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;A350375&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Cat&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2017-03-06 15:01:00&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Normal&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Meo Neutered&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Male&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ANIMAL_OUTS]&lt;/b&gt;&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;ANIMAL_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;ANIMAL_TYPE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DATETIME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;SEX_UPON_OUTCOME&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;A349733&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Dog&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2017-09-27 19:09:00&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Allie Spayed&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;A352713&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Cat&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2017-04-25 12:25:00&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Gia Spayed&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;A349990&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Cat&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2018-02-02 14:18:00&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Spice Spayed&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Female&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ANIMAL_OUTS 테이블에서 Allie의 ID는 ANIMAL_INS에 없으므로, Allie의 데이터는 유실되었습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gia의 ID는 ANIMAL_INS에 있으므로, Gia의 데이터는 유실되지 않았습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Spice의 ID는 ANIMAL_INS에 없으므로, Spice의 데이터는 유실되었습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;ANIMAL_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NAME&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;A349733&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Allie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;A349990&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Spice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;4) 풀이&lt;/span&gt;&lt;/h1&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT o.ANIMAL_ID
     , o.NAME
FROM ANIMAL_OUTS o
LEFT JOIN ANIMAL_INS i
ON o.ANIMAL_ID = i.ANIMAL_ID
WHERE i.ANIMAL_ID IS NULL
ORDER BY o.ANIMAL_ID;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;[Reference]&lt;/b&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59042&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/59042&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1712578555702&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59042&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmL5X6/hyVMN3XAkc/f4hExmKzdYJ5ApOFHQ6y21/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/wbLR9/hyVMXS1CPk/cJFG0L0wqQ3kzz2590va81/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59042&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59042&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmL5X6/hyVMN3XAkc/f4hExmKzdYJ5ApOFHQ6y21/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/wbLR9/hyVMXS1CPk/cJFG0L0wqQ3kzz2590va81/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Coding Test/SQL 테스트</category>
      <category>Lv 3</category>
      <category>SQL</category>
      <category>프로그래머스</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/215</guid>
      <comments>https://shuu.tistory.com/215#entry215comment</comments>
      <pubDate>Mon, 8 Apr 2024 21:13:05 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스 개론 - 데이터베이스 시스템</title>
      <link>https://shuu.tistory.com/214</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;1) 데이터베이스 시스템이란 (DBS : Database System)&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스에 데이터를 저장하고, 저장된 데이터를 관리하여 조직에 필요한 정보를 생성해주는 시스템이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;흔히, 데이터베이스, 데이터베이스 관리 시스템, 데이터베이스 시스템을 같은 의미로 사용하지만 각 용어의 개념을 구분하고 관계를 명확히 이해할 필요가 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KnODl/btsGrbzwBeD/do1aGhyQQUul0713S67dJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KnODl/btsGrbzwBeD/do1aGhyQQUul0713S67dJ1/img.png&quot; data-alt=&quot;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;amp;pg=PA37&amp;amp;amp;hl=ko&amp;amp;amp;source=gbs_toc_r&amp;amp;amp;cad=2#v=onepage&amp;amp;amp;q&amp;amp;amp;f=false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KnODl/btsGrbzwBeD/do1aGhyQQUul0713S67dJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKnODl%2FbtsGrbzwBeD%2Fdo1aGhyQQUul0713S67dJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;566&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;pg=PA37&amp;amp;hl=ko&amp;amp;source=gbs_toc_r&amp;amp;cad=2#v=onepage&amp;amp;q&amp;amp;f=false&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위의 그림을 보면 데이터를 저장해두는 곳이 데이터베이스이고, 데이터베이스 관리 시스템은 데이터베이스에 저장된 데이터가 일관되고 무결한 상태로 유지되도록 관리한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;데이터베이스 시스템 = 데이터베이스 + 데이터베이스 관리 시스템&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;2) 데이터베이스의 구조&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(1) 스키마 (Schema)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스키마는 데이터베이스에 저장되는 데이터 구조와 제약 조건을 정의한 것이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKNLQt/btsGq14UFls/gZ3nO7CCe9nD8pXLw407W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKNLQt/btsGq14UFls/gZ3nO7CCe9nD8pXLw407W1/img.png&quot; data-alt=&quot;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;amp;pg=PA37&amp;amp;amp;hl=ko&amp;amp;amp;source=gbs_toc_r&amp;amp;amp;cad=2#v=onepage&amp;amp;amp;q&amp;amp;amp;f=false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKNLQt/btsGq14UFls/gZ3nO7CCe9nD8pXLw407W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKNLQt%2FbtsGq14UFls%2FgZ3nO7CCe9nD8pXLw407W1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;605&quot; height=&quot;125&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;pg=PA37&amp;amp;hl=ko&amp;amp;source=gbs_toc_r&amp;amp;cad=2#v=onepage&amp;amp;q&amp;amp;f=false&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정의된 스키마에 따라 데이터베이스에 실제로 저장된 값을 인스턴스 (Instance)라고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보통 스키마는 한 번 정의되면 자주 변경되지 않지만 인스턴스는 계속 변하는 특성이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비유하자면 한 번 지어진 집의 구조는 잘 바뀌지 않지만 이사 등을 통해 임차인이 계속 바뀌는 점과 같다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(2) 3단계 데이터베이스 구조 (3-Level Database Architecture)&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;3단계 데이터베이스 구조란 하나의 데이터베이스를 &quot;사용자의 관점&quot;에 따라 3단계 계층 구조로 나눈 것을 말한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스를 3단계로 나누는 이유는 데이터베이스의 복잡한 내부 구조를 감추고 일반 사용자가 데이터베이스를 쉽게 이해하고 사용하기 위해서이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;3단계 데이터베이스 구조는 미국의 표준화 기관인 ANSI/SPARC에서 제안하였으며 &quot;개별 사용자 관점&quot; 에서 바라보는 외부 단계, &quot;조직 전체의 관점&quot; 에서 바라보는 개념 단계, &quot;물리적인 저장 장치의 관점&quot; 에서 바라보는 내부 단계로 볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스 하나를 세 단계로 나누고, 각 단계별로 다른 추상화를 제공하면 데이터베이스를 효과적으로 관리할 수 있고, 일반적으로 내부 단계에서 외부 단계로 갈수록 추상화 레벨이 높아지게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉, 3단계 데이터베이스 구조를 통해 모든 데이터의 저장 및 유지와 관련된 복잡한 내용을 숨기고 필요한 데이터만 단순화한 외부 단계의 관점을 일반 사용자들에게 제공할 수 있다는 것이다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단순 설명만으로는 직관적으로 이해하기 어려우니 3단계 데이터베이스 구조의 개념을 아파트를 짓는 예시를 통해 조금 더 자세히 살펴 보자!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oamnK/btsGqhtYdB8/rIMjoKcfifuG1a3O3D0qpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oamnK/btsGqhtYdB8/rIMjoKcfifuG1a3O3D0qpK/img.png&quot; data-alt=&quot;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;amp;pg=PA37&amp;amp;amp;hl=ko&amp;amp;amp;source=gbs_toc_r&amp;amp;amp;cad=2#v=onepage&amp;amp;amp;q&amp;amp;amp;f=false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oamnK/btsGqhtYdB8/rIMjoKcfifuG1a3O3D0qpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoamnK%2FbtsGqhtYdB8%2FrIMjoKcfifuG1a3O3D0qpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;621&quot; height=&quot;600&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;pg=PA37&amp;amp;hl=ko&amp;amp;source=gbs_toc_r&amp;amp;cad=2#v=onepage&amp;amp;q&amp;amp;f=false&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위의 그림을 보면 집주인 관점 (외부 단계)에서는 자신이 살고 있는 호수의 구조에만 관심이 있고 다른 호수의 집까지 알 필요는 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관리인 관점 (개념 단계)에서는 아파트를 문제없이 관리하기 위해 아파트 전체에 관심이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;건설 업체 관점 (내부 단계)에서는 아파트 건축할 당시의 콘크리트, 철근 구조처럼 뼈대나 구조에 관심이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;음.. 아직까지 확 와닿지 않으므로.. 3단계 데이터베이스 구조를 단계별로 좀 더 자세히 알아 보자!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/siO2u/btsGspjHHFQ/kMpvsk5m5Jv7bE3IHVdKDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/siO2u/btsGspjHHFQ/kMpvsk5m5Jv7bE3IHVdKDK/img.png&quot; data-alt=&quot;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;amp;pg=PA37&amp;amp;amp;hl=ko&amp;amp;amp;source=gbs_toc_r&amp;amp;amp;cad=2#v=onepage&amp;amp;amp;q&amp;amp;amp;f=false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/siO2u/btsGspjHHFQ/kMpvsk5m5Jv7bE3IHVdKDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsiO2u%2FbtsGspjHHFQ%2FkMpvsk5m5Jv7bE3IHVdKDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1053&quot; height=&quot;786&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;786&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;pg=PA37&amp;amp;hl=ko&amp;amp;source=gbs_toc_r&amp;amp;cad=2#v=onepage&amp;amp;q&amp;amp;f=false&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;외부 단계 (External Level)&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 단계란 개별 사용자 관점에서 데이터베이스를 이해하고 표현하는 단계이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 데이터베이스를 조직 내의 사용자들이 함께 사용하지만 각 사용자가 데이터베이스 &quot;전체&quot;에 관심이 있는 것은 아니며 사용자마다 업무 내용과 사용 목적이 달라 필요한 데이터 내용이 다를 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉, 개별 사용자마다 필요로 하는 데이터의 관심사가 다를 수도 있다는 것이며 예를 들어, 위 그림의 외부 단계처럼 사용자 가운데 고객 관리를 담당하는 직원은 고객과 관련된 데이터에만, 상품 관리를 담당하는 직원은 상품과 관련된 데이터에만 관심을 가지고 있는 것처럼 말이다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이처럼 외부 단계에서는 개별 사용자가 데이터베이스를 어떻게 보는 가를 표현하므로 사용자마다 생각하는 데이터베이스의 구조가 다르며 외부 단계에서 사용자에게 필요한 데이터베이스를 정의한 것을 외부 스키마라고 부른다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Note] 외부 스키마 (External Schema)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부 스키마는 각 사용자가 생각하는 데이터베이스의 모습을 표현한 논리적인 구조로 사용자마다 다르다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 데이터베이스에는 외부 스키마가 여러 개 존재할 수 있고 외부 스키마 하나를 사용 목적이 같은 사용자들과 공유할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;u&gt;ex. RDB의 View&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부 스키마는 전체 데이터베이스 중 사용자가 관심을 가지는 일부분으로 볼 수 있기 때문에 서브 스키마 (Sub Schema) 라고도 부른다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;개념 단계 (Conceptual Level)&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념 단계란 데이터베이스를 이용하는 사용자들의 관점을 통합하여 데이터베이스를 조직 전체의 관점에서 이해하고 표현하는 단계이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개념 단계에서는 데이터베이스 관리 시스템이나 관리자의 관점에서 모든 사용자에게 필요한 데이터를 통합하여 전체 데이터베이스의 논리적인 구조를 정의하며 이를 개념 스키마라고 부른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개념 스키마는 조직 전체의 관점에서 생각하는 데이터베이스의 모습이며, 모든 개별 사용자가 생각하는 데이터베이스의 모습을 하나로 합친 형태이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 데이터베이스에 어떠한 데이터가 저장되는지, 데이터들 간에 어떠한 관계가 존재하는지, 어떠한 제약 조건이 있는 지에 대한 정의 뿐만 아니라 데이터에 대한 보안 정책이나 접근 권한에 대한 정의도 포함한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다만 데이터를 물리적으로 저장하는 방법이나 데이터 저장 장치와는 독립적이다. (이것은 내부 단계!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Note] 개념 스키마 (Conceptual Schema)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 데이터베이스에는 개념 스키마가 하나만 존재하고, 각 사용자는 개념 스키마의 일부분을 사용한다. (외부 스키마!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉, 외부 스키마는 개념 스키마를 기초로 하여 사용자의 이용 목적에 맞게 만들어지는 것이며 일반적으로 DB 스키마라고 하면 개념 스키마를 의미한다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;내부 단계 (Internal Level)&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부 단계란 데이터베이스를 디스크나 테이프 같은 저장 장치의 관점에서 이해하고 표현하는 단계이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부 단계에서는 전체 데이터베이스가 저장 장치에 실제로 저장되는 방법을 정의하며 이를 내부 스키마라고 부른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스는 저장 장치에 파일 형태로 저장되는데 내부 스키마는 파일에 데이터를 저장하는 레코드의 구조, 레코드를 구성하는 필드 크기, 인덱스를 이용한 레코드 접근 경로 등을 정의한다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Note] 내부 스키마 (Internal Schema)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부 스키마는 데이터베이스의 개념 스키마에 대한 물리적인 저장 구조를 표현하므로 하나의 데이터베이스에 하나만 존재한다!!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(3) 데이터 독립성&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 데이터베이스에는 세 가지 유형의 스키마가 존재하지만 각각의 스키마는 데이터베이스를 바라보는 관점이 다를 뿐 모두 같은 데이터베이스를 표현한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실제 데이터는 물리적 저장 장치에 저장된 데이터베이스에 존재하므로 사용자가 자신의 외부 스키마를 통해 원하는 데이터를 얻고자 한다면 내부 스키마에 따라 저장된 데이터베이스에 접근해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;따라서, 세 가지 스키마 사이에는 유기적인 대응 관계가 성립하게 되는데 예를 들어, 상품 배송 팀의 외부 스키마에 있는 고객번호 데이터는 개념 스키마에 있는 번호 데이터에 대응하고 개념 스키마에 있는 번호 데이터는 내부 스키마에 있는 번호 필드에 대응한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;618&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NLo8A/btsGsTZe5IQ/SMkcs2LpYT1zNrCiwyIRk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NLo8A/btsGsTZe5IQ/SMkcs2LpYT1zNrCiwyIRk0/img.png&quot; data-alt=&quot;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;amp;pg=PA37&amp;amp;amp;hl=ko&amp;amp;amp;source=gbs_toc_r&amp;amp;amp;cad=2#v=onepage&amp;amp;amp;q&amp;amp;amp;f=false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NLo8A/btsGsTZe5IQ/SMkcs2LpYT1zNrCiwyIRk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNLo8A%2FbtsGsTZe5IQ%2FSMkcs2LpYT1zNrCiwyIRk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;618&quot; height=&quot;480&quot; data-origin-width=&quot;618&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;pg=PA37&amp;amp;hl=ko&amp;amp;source=gbs_toc_r&amp;amp;cad=2#v=onepage&amp;amp;q&amp;amp;f=false&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이처럼 스키마 사이의 대응 관계를 사상 또는 매핑 이라고 하는데, 외부 스키마와 개념 스키마는 외부/개념 사상에 의해 대응되고, 개념 스키마와 내부 스키마는 개념/내부 사상에 의해 대응된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;u&gt;데이터베이스 관리 시스템은 미리 정의된 외부/개념 사상과 개념/내부 사상 정보를 이용해 사용자가 원하는 데이터에 접근할 수 있다!&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스를 3단계 구조로 나누고, 단계별로 스키마를 유지하며 스키마 사이의 대응 관계를 정의하는 궁극적인 목적은 데이터 독립성 (Data Independency)을 실현하기 위해서이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 독립성이란 하위 스키마를 변경하더라도 상위 스키마가 영향을 받지 않는 특성을 뜻하며, 3단계 데이터베이스 구조에는 논리적 데이터 독립성과 물리적 데이터 독립성이 존재한다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;논리적 데이터 독립성&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리적 데이터 독립성이란 개념 스키마가 변경되어도 외부 스키마가 영향을 받지 않는 특성을 말한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 데이터베이스의 논리적인 구조가 변경되어도 관련된 외부/개념 사상 정보만 적절히 수정해주면 직접 관련이 없는 사용자를 위한 외부 스키마는 변경할 필요가 없다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉, 개념 스키마가 변경되어도 외부 스키마가 영향을 받지 않는다는 것은 결국 외부 스키마의 사용자가 전체 데이터베이스의 논리적 구조가 변경되었다는 사실을 알 필요가 없다는 것을 의미한다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Note] 응용 인터페이스 (Application Interface)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부/개념 사상은 외부 스키마와 개념 스키마의 대응 관계를 정의한 것이므로 응용 인터페이스 라고도 부른다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;물리적 데이터 독립성&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물리적 데이터 독립성이란 내부 스키마가 변경되더라도 개념 스키마가 영향을 받지 않는 특성을 말한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부 스키마가 변경되어 개념 스키마가 영향을 받지 않는다는 것은 결과적으로 외부 스키마도 영향을 받지 않는다는 것을 의미한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;물리적 데이터 독립성이 실현되면 데이터베이스의 저장 구조가 변경되어도 관련된 개념/내부 사상 정보만 수정해주면 직접적으로 관련이 없는 데이터베이스의 논리적 구조는 영향을 받지 않는다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Note] 저장 인터페이스 (Stored Interface)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개념/내부 사상은 개념 스키마와 내부 스키마의 대응 관계를 정의한 것이므로 저장 인터페이스 라고도 부른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(4) 데이터 사전 (Data Dictionary)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 사전이란 데이터베이스에 저장되는 데이터에 관한 정보를 저장하는 곳을 말한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스는 조직 운영에 필요한 데이터를 저장하는데, 저장된 데이터를 관리하고 이용하려면 필요한 부가 정보도 저장해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대표적인 부가 정보가 스키마와 사상 정보이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 사전은 위에서 설명한 세 가지 스키마에 대한 정보와 스키마 간의 사상 정보를 저장할 때 사용한다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;흔히, 데이터 사전을 시스템 카탈로그 (System Catalog)라고 부르기도 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;3) 데이터베이스 사용자&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(1) 데이터베이스 관리자&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스 관리자는 데이터베이스 시스템을 운영하고 관리하는 사람이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보통 데이터 정의어와 데이터 제어어를 사용하는 사용자이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스 관리자는 스키마, 물리적 저장 구조 및 접근 정의, 보안 및 접근 권한 정책 결정, 무결성 유지를 위한 제약조건 정의, 백업 및 회복 정의, 시스템 데이터베이스 관리 등의 업무를 하게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(2) 최종 사용자&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보통 회사에 입사하게 되면 이미 데이터베이스 관리자에 의해 데이터베이스가 설계되어 운영되고 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이러한 환경에서 최종 사용자는 데이터베이스에 접근하여 데이터 조작어를 통해 데이터를 조작(삽입, 삭제, 수정, 검색)을 하는 사용자이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(3) 응용 프로그래머&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;응용 프로그래머는 데이터 언어를 삽입하여 응용 프로그램을 개발하는 사람입니다. 보통 데이터 조작어를 사용하게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;4) 데이터 언어&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 언어는 사용자와 데이터베이스 관리 시스템 간의 통신 수단으로 사용 목적에 따라 데이터 정의어, 데이터 조작어, 데이터 제어어로 구분되어진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(1) 데이터 정의어 (DDL: Data Define Language)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 정의어란 새로운 데이터베이스를 구착하기 위해 스키마를 정의하거나 기존 스키마의 정의를 삭제 또는 수정하기 위해 사용하는 언어이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉, 새로 만들려는 데이터베이스의 스키마를 설명하거나 이미 정의된 스키마의 구조나 제약 조건 등을 변경 또는 삭제하고 싶어 이를 데이터베이스 관리 시스템에 알리고자 할 때 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(2) 데이터 조작어 (DML: Data Manipulation Language)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 조작어란 사용자가 데이터의 삽입, 삭제, 수정, 검색 등의 처리를 데이터베이스 관리 시스템에 요구하기 위해 사용하는 언어이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 정의어를 이용해 스키마를 정의하면 스키마에 따라 조직에 필요한 데이터 값 (인스턴스)이 저장되는데, 사용자가 실제 데이터 값을 활용하기 위해 사용하는 것이 데이터 조작어이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(3) 데이터 제어어 (DCL: Data Control Language)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 제어어란 데이터베이스에 저장된 데이터를 여러 사용자가 무결성과 일관성을 유지하며 문제없이 공유할 수 있도록 내부적으로 필요한 규칙이나 기법을 정의하는 데 사용하는 언어이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자는 데이터베이스를 올바르게 관리하기 위해 필요한 규칙과 기법을 데이터 제어어를 이용해 데이터베이스 관리 시스템에 설명하고 데이터베이스 관리 시스템은 이 규칙과 기법에 따라 데이터베이스를 제어하고 보호한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;5) 데이터베이스 관리 시스템의 구성&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFhqj4/btsGsq30zzH/8C5VlRhJKJuOWdKraOjakk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFhqj4/btsGsq30zzH/8C5VlRhJKJuOWdKraOjakk/img.png&quot; data-alt=&quot;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;amp;pg=PA37&amp;amp;amp;hl=ko&amp;amp;amp;source=gbs_toc_r&amp;amp;amp;cad=2#v=onepage&amp;amp;amp;q&amp;amp;amp;f=false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFhqj4/btsGsq30zzH/8C5VlRhJKJuOWdKraOjakk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFhqj4%2FbtsGsq30zzH%2F8C5VlRhJKJuOWdKraOjakk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;692&quot; height=&quot;540&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://books.google.co.kr/books?id=jTJaEAAAQBAJ&amp;amp;pg=PA37&amp;amp;hl=ko&amp;amp;source=gbs_toc_r&amp;amp;cad=2#v=onepage&amp;amp;q&amp;amp;f=false&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스 관리 시스템은 사용자와 데이터베이스 사이에 위치하며, 기능에 따라 크게 질의 처리기와 저장 데이터 관리자로 구분할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(1) 질의 처리기 (Query Processor)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;질의 처리기는 사용자의 데이터 처리 요구를 해석하여 처리한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(2) 저장 데이터 관리자 (Stored Data Manager)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장 데이터 관리자는 디스크에 저장된 데이터베이스와 데이터 사전을 관리하고 실제로 접근하는 역할을 담당한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다만 디스크에 저장된 데이터에 접근하는 것은 운영체제의 기본 기능이므로 저장 데이터 관리자는 운영체제의 도움을 받아 데이터베이스에 대한 접근을 수행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[Reference]&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터베이스 개론 (박연희)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>  Computer Science/Database</category>
      <category>3단계 스키마</category>
      <category>database</category>
      <category>개념 스키마</category>
      <category>내부 스키마</category>
      <category>외부 스키마</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/214</guid>
      <comments>https://shuu.tistory.com/214#entry214comment</comments>
      <pubDate>Sun, 7 Apr 2024 14:25:32 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 (Lv 4) - 취소되지 않은 진료 예약 조회하기</title>
      <link>https://shuu.tistory.com/213</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1) 문제 설명&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음은 환자 정보를 담은 PATIENT 테이블과 의사 정보를 담은 DOCTOR 테이블, 그리고 진료 예약목록을 담은 APPOINTMENT에 대한 테이블입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PATIENT 테이블은 다음과 같으며 PT_NO, PT_NAME, GEND_CD, AGE, TLNO는 각각 환자번호, 환자이름, 성별코드, 나이, 전화번호를 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PT_NO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PT_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;GEND_CD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;AGE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;INTEGER&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;TLNO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DOCTOR 테이블은 다음과 같으며 DR_NAME, DR_ID, LCNS_NO, HIRE_YMD, MCDP_CD, TLNO는 각각 의사이름, 의사ID, 면허번호, 고용일자, 진료과코드, 전화번호를 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;DR_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;DR_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;LCNS_NO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;HIRE_YMD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DATE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;MCDP_CD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;TLNO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;APPOINTMENT 테이블은 다음과 같으며 APNT_YMD, APNT_NO, PT_NO, MCDP_CD, MDDR_ID, APNT_CNCL_YN, APNT_CNCL_YMD는 각각 진료 예약일시, 진료예약번호, 환자번호, 진료과코드, 의사ID, 예약취소여부, 예약취소날짜를 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;APNT_YMD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TIMESTAMP&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;APNT_NO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;INTEGER&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PT_NO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;MCDP_CD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;MDDR_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;APNT_CNCL_YN&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;APNT_CNCL_YMD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DATE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2) 문제&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;3) 예시&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PATIENT 테이블이 다음과 같고,&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PT_NO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;GEND_CD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;AGE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TLNO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PT22000019&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;바라&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;W&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;01079068799&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PT22000043&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;오스왈드&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;M&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;68&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;01031294124&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PT22000052&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;제니&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;W&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;60&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PT22000071&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;몬몬&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;M&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;31&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;01076489209&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PT22000097&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;슈가&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;M&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;19&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DOCTOR 테이블이 다음과 같고,&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;height: 135px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;th style=&quot;height: 18px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 18px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 18px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 18px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 18px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 18px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;DR_NAME&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;DR_ID&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;LCNS_NO&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;HIRE_YMD&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;MCDP_CD&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;TLNO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;루피&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;DR20090029&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;LC00010001&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;2009-03-01&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;CS&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;01085482011&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;니모&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;DR20200012&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;LC00911162&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;2020-03-01&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;CS&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;01089483921&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;핑크퐁&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;DR20140011&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;LC00082201&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;2014-03-01&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;NP&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;01098428957&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;젤라비&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;DR20160031&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;LC00340327&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;2016-11-01&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;OB&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;01023981922&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;토리&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;DR20190129&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;LC00099911&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;2019-03-01&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;NS&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;01058390758&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;APPOINTMENT 테이블이 다음과 같을 때,&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;APNT_YMD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;APNT_NO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT_NO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;MCDP_CD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;MDDR_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;APNT_CNCL_YN&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;APNT_CNCL_YMD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;2022-04-13 12:30:00.000000&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;42&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT22000071&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CS&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DR20090029&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;N&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;2022-04-13 15:30:00.000000&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;43&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT22000019&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CS&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DR20200012&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;N&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;2022-04-13 09:00:00.000000&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;46&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT22000043&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CS&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DR20090029&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;N&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;2022-07-09 11:00:00.000000&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;74&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT22000042&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NP&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DR20100011&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;N&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;2022-12-13 12:30:00.000000&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;110&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT22000097&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NP&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DR20160011&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Y&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2022-12-03&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL을 실행하면 다음과 같이 출력되어야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;APNT_NO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT_NO&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;MCDP_CD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DR_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;APNT_YMD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;46&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;오스왈드&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT22000043&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CS&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;루피&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2022-04-13 09:00:00.000000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;42&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;몬몬&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT22000071&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CS&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;루피&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2022-04-13 12:30:00.000000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;43&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;바라&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PT22000019&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CS&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;니모&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2022-04-13 15:30:00.000000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;4) 풀이&lt;/span&gt;&lt;/h1&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT APNT_NO
     , (SELECT PT_NAME
        FROM PATIENT p
        WHERE p.PT_NO = a.PT_NO) AS &quot;PT_NAME&quot;
     , PT_NO
     , MCDP_CD
     , (SELECT DR_NAME
        FROM DOCTOR d
        WHERE d.DR_ID = a.MDDR_ID) AS &quot;DR_NAME&quot;
     , APNT_YMD
FROM APPOINTMENT a
WHERE MCDP_CD = 'CS' 
AND DATE_FORMAT(APNT_YMD, '%Y-%m-%d') = '2022-04-13'
AND APNT_CNCL_YN = 'N'
ORDER BY APNT_YMD ASC;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;[Reference]&lt;/b&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/132204&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/132204&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1712455686348&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/132204&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pUZKr/hyVMYD971s/UmAuTCyohJtLSkvqUrFe10/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bVA2Fa/hyVJVbexwi/nwESxukvGXukTTgRXCDcA0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/132204&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/132204&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pUZKr/hyVMYD971s/UmAuTCyohJtLSkvqUrFe10/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bVA2Fa/hyVJVbexwi/nwESxukvGXukTTgRXCDcA0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Coding Test/SQL 테스트</category>
      <category>Lv 4</category>
      <category>SQL</category>
      <category>프로그래머스</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/213</guid>
      <comments>https://shuu.tistory.com/213#entry213comment</comments>
      <pubDate>Sun, 7 Apr 2024 11:05:57 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 (Lv 4) - 식품분류별 가장 비싼 식품의 정보 조회하기</title>
      <link>https://shuu.tistory.com/212</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1) 문제 설명&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE는 식품 ID, 식품 이름, 식품코드, 식품분류, 식품 가격을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;height: 121px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;PRODUCT_ID&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;VARCHAR(10)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;PRODUCT_NAME&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;VARCHAR(50)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;PRODUCT_CD&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;VARCHAR(10)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;CATEGORY&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;VARCHAR(10)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;PRICE&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;NUMBER&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2) 문제&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FOOD_PRODUCT 테이블에서 식품분류별로 가격이 제일 비싼 식품의 분류, 가격, 이름을 조회하는 SQL문을 작성해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 때 식품분류가 '과자', '국', '김치', '식용유'인 경우만 출력시켜 주시고 결과는 식품 가격을 기준으로 내림차순 정렬해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;3) 예시&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FOOD_PRODUCT 테이블이 다음과 같을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PRODUCT_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PRODUCT_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PRODUCT_CD&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CATEGORY&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PRICE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0018&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는고추기름&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_OL00008&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;식용유&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0019&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는카놀라유&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_OL00009&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;식용유&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0020&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는산초유&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_OL00010&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;식용유&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0021&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는케첩&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_SC00001&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;소스&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0022&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는마요네즈&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_SC00002&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;소스&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4700&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0039&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는황도&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_CN00008&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;캔&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0040&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는명이나물&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_CN00009&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;캔&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0041&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는보리차&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_TE00010&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;차&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3400&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0042&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는메밀차&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_TE00001&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;차&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;P0099&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는맛동산&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CD_CK00002&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;과자&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1800&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL을 실행하면 다음과 같이 출력되어야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;CATEGORY&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;MAX_PRICE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PRODUCT_NAME&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;식용유&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6500&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는산초유&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;과자&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1800&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;맛있는맛동산&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;4) 풀이&lt;/span&gt;&lt;/h1&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT CATEGORY
     , PRICE AS &quot;MAX_PRICE&quot;
     , PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE (CATEGORY, PRICE) IN (SELECT CATEGORY, MAX(PRICE)
                            FROM FOOD_PRODUCT
                            WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
                            GROUP BY CATEGORY)
ORDER BY 2 DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;[Reference]&lt;/b&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131116&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/131116&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1712250777638&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131116&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lCMT2/hyVJ6QI7ME/hECYcS92NHbdn7ZV7RhFAK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dqn2Cp/hyVJRF3bsg/qJ9c4k6AdFqUvXkNlGgf71/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131116&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131116&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lCMT2/hyVJ6QI7ME/hECYcS92NHbdn7ZV7RhFAK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dqn2Cp/hyVJRF3bsg/qJ9c4k6AdFqUvXkNlGgf71/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Coding Test/SQL 테스트</category>
      <category>Lv 4</category>
      <category>SQL</category>
      <category>프로그래머스</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/212</guid>
      <comments>https://shuu.tistory.com/212#entry212comment</comments>
      <pubDate>Fri, 5 Apr 2024 02:11:41 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 (Lv 3) - 즐겨찾기가 가장 많은 식당 정보 출력하기</title>
      <link>https://shuu.tistory.com/211</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1) 문제 설명&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음은 식당의 정보를 담은 REST_INFO 테이블입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REST_INFO 테이블은 다음과 같으며 REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;REST_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(5)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;REST_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(50)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;FOOD_TYPE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(20)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;VIEWS&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NUMBER&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;FAVORITES&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;NUMBER&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;PARKING_LOT&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(1)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;ADDRESS&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(100)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;TEL&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(100)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TRUE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2) 문제&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;3) 예시&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REST_INFO 테이블이 다음과 같을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;height: 184px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;REST_ID&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;REST_NAME&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;FOOD_TYPE&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;VIEWS&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;FAVORITES&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;PARKING_LOT&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;ADDRESS TEL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;00001&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;은돼지식당&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;한식&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;1150345&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;734&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;N&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;서울특별시 중구 다산로 149&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;00002&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;하이가쯔네&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;일식&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;120034&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;112&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;N&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;서울시 중구 신당동 375-21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 34px;&quot;&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;00003&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;따띠따띠뜨&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;양식&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;1234023&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;102&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;N&lt;/td&gt;
&lt;td style=&quot;height: 34px;&quot; align=&quot;center&quot;&gt;서울시 강남구 신사동 627-3 1F&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 37px;&quot;&gt;
&lt;td style=&quot;height: 37px;&quot; align=&quot;center&quot;&gt;00004&lt;/td&gt;
&lt;td style=&quot;height: 37px;&quot; align=&quot;center&quot;&gt;스시사카우스&lt;/td&gt;
&lt;td style=&quot;height: 37px;&quot; align=&quot;center&quot;&gt;일식&lt;/td&gt;
&lt;td style=&quot;height: 37px;&quot; align=&quot;center&quot;&gt;1522074&lt;/td&gt;
&lt;td style=&quot;height: 37px;&quot; align=&quot;center&quot;&gt;230&lt;/td&gt;
&lt;td style=&quot;height: 37px;&quot; align=&quot;center&quot;&gt;N&lt;/td&gt;
&lt;td style=&quot;height: 37px;&quot; align=&quot;center&quot;&gt;서울시 서울시 강남구 신사동 627-27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;00005&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;코슌스&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;일식&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;15301&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;123&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;N&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;서울특별시 강남구 언주로153길&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL을 실행하면 다음과 같이 출력되어야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;FOOD_TYPE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;REST_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;REST_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FAVORITES&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;한식&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;00001&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;은돼지식당&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;734&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;일식&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;00004&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;스시사카우스&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;230&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;양식&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;00003&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;따띠따띠뜨&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;102&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;4) 풀이&lt;/span&gt;&lt;/h1&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT FOOD_TYPE
     , REST_ID
     , REST_NAME
     , FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN (SELECT FOOD_TYPE, MAX(FAVORITES)
                                 FROM REST_INFO
                                 GROUP BY FOOD_TYPE)
ORDER BY 1 DESC;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;[Reference]&lt;/b&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131123&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/131123&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1712152417463&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131123&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4fWyk/hyVJTi68MQ/07Z45PGl01B2FjxglCyd7K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/o5zCu/hyVJ03A4sa/XrGVg5Vmk6FYK8PGxN76Ok/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131123&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131123&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4fWyk/hyVJTi68MQ/07Z45PGl01B2FjxglCyd7K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/o5zCu/hyVJ03A4sa/XrGVg5Vmk6FYK8PGxN76Ok/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Coding Test/SQL 테스트</category>
      <category>Lv 3</category>
      <category>SQL</category>
      <category>프로그래머스</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/211</guid>
      <comments>https://shuu.tistory.com/211#entry211comment</comments>
      <pubDate>Wed, 3 Apr 2024 22:52:28 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 (Lv 4) - 저자 별 카테고리 별 매출액 집계하기</title>
      <link>https://shuu.tistory.com/210</link>
      <description>&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1) 문제 설명&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음은 어느 한 서점에서 판매중인 도서들의 도서 정보(BOOK), 저자 정보(AUTHOR) 테이블입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BOOK 테이블은 각 도서의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;height: 136px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;Description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;BOOK_ID&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;INTEGER&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;도서 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;CATEGORY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;카테고리 (경제, 인문, 소설, 생활, 기술)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;AUTHOR_ID&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;INTEGER&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;저자 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;PRICE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;INTEGER&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;판매가 (원)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;PUBLISHED_DATE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;DATE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;출판일&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AUTHOR 테이블은 도서의 저자의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;AUTHOR_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;INTEGER&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;저자 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;AUTHOR_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;VARCHAR(N)&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;저자명&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BOOK_SALES 테이블은 각 도서의 날짜 별 판매량 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;Column name&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Type&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Nullable&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;Description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;BOOK_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;INTEGER&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;도서 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;SALES_DATE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;DATE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;판매일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;SALES&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;INTEGER&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;FALSE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;판매량&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2) 문제&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2022년 1월의 도서 판매 데이터를 기준으로 저자 별, 카테고리 별 매출액(TOTAL_SALES = 판매량 * 판매가) 을 구하여, 저자 ID(AUTHOR_ID), 저자명(AUTHOR_NAME), 카테고리(CATEGORY), 매출액(SALES) 리스트를 출력하는 SQL문을 작성해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결과는 저자 ID를 오름차순으로, 저자 ID가 같다면 카테고리를 내림차순 정렬해주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;3) 예시&lt;/span&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를 들어 BOOK 테이블과 AUTHOR 테이블, BOOK_SALES 테이블이 다음과 같다면&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;BOOK_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CATEGORY&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;AUTHOR_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PRICE&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;PUBLISHED_DATE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;인문&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;10000&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2020-01-01&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;경제&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;9000&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2021-02-05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;경제&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;9000&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2021-03-11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;AUTHOR_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;AUTHOR_NAME&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;홍길동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;김영호&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;height: 155px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;BOOK_ID&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;SALES_DATE&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;SALES&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2022-01-01&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2022-01-02&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2022-01-05&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2022-01-20&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2022-01-21&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2022-01-22&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;2022-02-11&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2022년 1월의 도서 별 총 매출액은 도서 ID 가 1 인 도서가 총 3권 * 10,000원 = 30,000원, 도서 ID 가 2 인 도서가 총 14권 * 9,000 = 126,000원 이고, 도서 ID 가 3 인 도서가 총 2권 * 9,000 = 18,000원 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;저자 별 카테고리 별로 매출액을 집계하면 결과는 다음과 같습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;AUTHOR_ID&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;AUTHOR_NAME&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;CATEGORY&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;TOTAL_SALES&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;홍길동&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;인문&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;30000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;홍길동&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;경제&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;126000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;김영호&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;경제&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;18000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그리고 저자 ID, 카테고리 순으로 내림차순 정렬하면 다음과 같이 나와야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;height: 96px;&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;thead&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;th style=&quot;height: 19px;&quot; align=&quot;center&quot;&gt;&amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;AUTHOR_ID&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;AUTHOR_NAME&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;CATEGORY&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot; align=&quot;center&quot;&gt;TOTAL_SALES&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;홍길동&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;인문&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;30000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;홍길동&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;경제&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;126000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;김영호&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;경제&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; align=&quot;center&quot;&gt;18000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;4) 풀이&lt;/span&gt;&lt;/h1&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT b.AUTHOR_ID
     , a.AUTHOR_NAME
     , b.CATEGORY
     , SUM(PRICE * SALES) AS &quot;TOTAL_SALES&quot;
FROM BOOK b
INNER JOIN (SELECT BOOK_ID, SUM(SALES) AS &quot;SALES&quot;
            FROM BOOK_SALES
            WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-01'
            GROUP BY BOOK_ID) s
ON b.BOOK_ID = s.BOOK_ID
INNER JOIN AUTHOR a
ON b.AUTHOR_ID = a.AUTHOR_ID
GROUP BY b.AUTHOR_ID, CATEGORY
ORDER BY 1 ASC, 3 DESC;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;[Reference]&lt;/b&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/144856&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/144856&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1712141148773&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/144856&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vkRZq/hyVJRyJ76c/PzasILFf8WFIPzIQIUj0YK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cNulyP/hyVGPCz6t4/aCJSCcISzo6hnJkO1K3zjK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/144856&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/144856&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vkRZq/hyVJRyJ76c/PzasILFf8WFIPzIQIUj0YK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cNulyP/hyVGPCz6t4/aCJSCcISzo6hnJkO1K3zjK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Coding Test/SQL 테스트</category>
      <category>Lv 4</category>
      <category>SQL</category>
      <category>프로그래머스</category>
      <author>KR_DEV</author>
      <guid isPermaLink="true">https://shuu.tistory.com/210</guid>
      <comments>https://shuu.tistory.com/210#entry210comment</comments>
      <pubDate>Wed, 3 Apr 2024 19:43:51 +0900</pubDate>
    </item>
  </channel>
</rss>