<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>캠코더 아니고 그냥 코더</title>
    <link>https://devjanghwa.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 14 Jul 2026 07:08:01 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DEV장화</managingEditor>
    <image>
      <title>캠코더 아니고 그냥 코더</title>
      <url>https://tistory1.daumcdn.net/tistory/5687184/attach/aae15e13f00a4771893d8b4eddd8ff11</url>
      <link>https://devjanghwa.tistory.com</link>
    </image>
    <item>
      <title>[JAVA] 프로그래머스 저자 별 카테고리 별 매출액 집계하기</title>
      <link>https://devjanghwa.tistory.com/209</link>
      <description>&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제 설명&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;다음은&amp;nbsp;어느&amp;nbsp;한&amp;nbsp;서점에서&amp;nbsp;판매중인&amp;nbsp;도서들의&amp;nbsp;도서&amp;nbsp;정보(BOOK),&amp;nbsp;저자&amp;nbsp;정보(AUTHOR)&amp;nbsp;테이블입니다.&amp;nbsp;BOOK&amp;nbsp;테이블은&amp;nbsp;각&amp;nbsp;도서의&amp;nbsp;정보를&amp;nbsp;담은&amp;nbsp;테이블로&amp;nbsp;아래와&amp;nbsp;같은&amp;nbsp;구조로&amp;nbsp;되어있습니다.&lt;/p&gt;
&lt;table style=&quot;background-color: #263747; color: #b2c0cc; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;BOOK_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;도서 ID&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;CATEGORY&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(N)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;카테고리 (경제, 인문, 소설, 생활, 기술)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;AUTHOR_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;저자 ID&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;PRICE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;판매가 (원)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;PUBLISHED_DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;출판일&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AUTHOR&amp;nbsp;테이블은&amp;nbsp;도서의&amp;nbsp;저자의&amp;nbsp;정보를&amp;nbsp;담은&amp;nbsp;테이블로&amp;nbsp;아래와&amp;nbsp;같은&amp;nbsp;구조로&amp;nbsp;되어있습니다.&lt;/p&gt;
&lt;table style=&quot;background-color: #263747; color: #b2c0cc; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;AUTHOR_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;저자 ID&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;AUTHOR_NAME&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;VARCHAR(N)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;저자명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BOOK_SALES&amp;nbsp;테이블은&amp;nbsp;각&amp;nbsp;도서의&amp;nbsp;날짜&amp;nbsp;별&amp;nbsp;판매량&amp;nbsp;정보를&amp;nbsp;담은&amp;nbsp;테이블로&amp;nbsp;아래와&amp;nbsp;같은&amp;nbsp;구조로&amp;nbsp;되어있습니다.&lt;/p&gt;
&lt;table style=&quot;background-color: #263747; color: #b2c0cc; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody style=&quot;color: #000000;&quot;&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;BOOK_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;도서 ID&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;SALES_DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;판매일&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;SALES&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;INTEGER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;FALSE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;판매량&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;2022년&amp;nbsp;1월의&amp;nbsp;도서&amp;nbsp;판매&amp;nbsp;데이터를&amp;nbsp;기준으로&amp;nbsp;저자&amp;nbsp;별,&amp;nbsp;카테고리&amp;nbsp;별&amp;nbsp;매출액(TOTAL_SALES&amp;nbsp;=&amp;nbsp;판매량&amp;nbsp;*&amp;nbsp;판매가)&amp;nbsp;을&amp;nbsp;구하여,&amp;nbsp;저자&amp;nbsp;ID(AUTHOR_ID),&amp;nbsp;저자명(AUTHOR_NAME),&amp;nbsp;카테고리(CATEGORY),&amp;nbsp;매출액(SALES)&amp;nbsp;리스트를&amp;nbsp;출력하는&amp;nbsp;SQL문을&amp;nbsp;작성해주세요.&amp;nbsp;결과는&amp;nbsp;저자&amp;nbsp;ID를&amp;nbsp;오름차순으로,&amp;nbsp;저자&amp;nbsp;ID가&amp;nbsp;같다면&amp;nbsp;카테고리를&amp;nbsp;내림차순&amp;nbsp;정렬해주세요.&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1709792263950&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.AUTHOR_ID
      ,A.AUTHOR_NAME
      ,B.CATEGORY
      ,SUM(B.PRICE * S.SALES) AS TOTAL_SALES
FROM BOOK B
JOIN AUTHOR A
USING(AUTHOR_ID)
JOIN BOOK_SALES S
USING(BOOK_ID)
WHERE S.SALES_DATE BETWEEN '2022-01-01' AND '2022-01-31'
GROUP BY A.AUTHOR_ID, A.AUTHOR_NAME, B.CATEGORY
ORDER BY A.AUTHOR_ID ASC
        ,B.CATEGORY DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <category>level4</category>
      <category>mysql</category>
      <category>programmers</category>
      <category>프로그래머스</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/209</guid>
      <comments>https://devjanghwa.tistory.com/209#entry209comment</comments>
      <pubDate>Thu, 7 Mar 2024 15:18:04 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 프로그래머스 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기</title>
      <link>https://devjanghwa.tistory.com/208</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제 설명&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bldefC/btszyKhemYU/KYs0yspvkBC9gamzH44BL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bldefC/btszyKhemYU/KYs0yspvkBC9gamzH44BL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bldefC/btszyKhemYU/KYs0yspvkBC9gamzH44BL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbldefC%2FbtszyKhemYU%2FKYs0yspvkBC9gamzH44BL1%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;571&quot; height=&quot;566&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;/figure&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;background-color: #ffffff; color: #263747; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;USED_GOODS_BOARD와&lt;span&gt;&amp;nbsp;&lt;/span&gt;USED_GOODS_FILE&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요. 조회수가 가장 높은 게시물은 하나만 존재합니다.&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입력예제&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;557&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elyp3A/btszyDWSnGe/bEAhsNxE259lgKNaHKyhJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elyp3A/btszyDWSnGe/bEAhsNxE259lgKNaHKyhJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elyp3A/btszyDWSnGe/bEAhsNxE259lgKNaHKyhJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Felyp3A%2FbtszyDWSnGe%2FbEAhsNxE259lgKNaHKyhJ0%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;823&quot; height=&quot;557&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;557&quot;/&gt;&lt;/span&gt;&lt;/figure&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1698728660267&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT CONCAT('/home/grep/src/', F.BOARD_ID, '/', F.FILE_ID, F.FILE_NAME, F.FILE_EXT) AS FILE_PATH
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_FILE F
USING (BOARD_ID)
WHERE B.BOARD_ID = (SELECT BOARD_ID
                 FROM USED_GOODS_BOARD  
                 ORDER BY VIEWS DESC 
                 LIMIT 1)
ORDER BY F.FILE_ID DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <category>concat</category>
      <category>Level3</category>
      <category>mysql</category>
      <category>programmers</category>
      <category>sql</category>
      <category>조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기</category>
      <category>프로그래머스</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/208</guid>
      <comments>https://devjanghwa.tistory.com/208#entry208comment</comments>
      <pubDate>Tue, 31 Oct 2023 14:05:05 +0900</pubDate>
    </item>
    <item>
      <title>[ORACLE] 프로그래머스 3월에 태어난 여성 회원 목록 출력하기</title>
      <link>https://devjanghwa.tistory.com/207</link>
      <description>&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제 설명&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음은&amp;nbsp;식당&amp;nbsp;리뷰&amp;nbsp;사이트의&amp;nbsp;회원&amp;nbsp;정보를&amp;nbsp;담은&amp;nbsp;MEMBER_PROFILE&amp;nbsp;테이블입니다.&amp;nbsp;MEMBER_PROFILE&amp;nbsp;테이블은&amp;nbsp;다음과&amp;nbsp;같으며&amp;nbsp;MEMBER_ID,&amp;nbsp;MEMBER_NAME,&amp;nbsp;TLNO,&amp;nbsp;GENDER,&amp;nbsp;DATE_OF_BIRTH는&amp;nbsp;회원&amp;nbsp;ID,&amp;nbsp;회원&amp;nbsp;이름,&amp;nbsp;회원&amp;nbsp;연락처,&amp;nbsp;성별,&amp;nbsp;생년월일을&amp;nbsp;의미합니다.&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qoL9T/btsvoYD8WDt/TSwHU436nKKzb8RZQsqjO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qoL9T/btsvoYD8WDt/TSwHU436nKKzb8RZQsqjO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qoL9T/btsvoYD8WDt/TSwHU436nKKzb8RZQsqjO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqoL9T%2FbtsvoYD8WDt%2FTSwHU436nKKzb8RZQsqjO0%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;421&quot; height=&quot;242&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MEMBER_PROFILE&amp;nbsp;테이블에서&amp;nbsp;생일이&amp;nbsp;3월인&amp;nbsp;여성&amp;nbsp;회원의&amp;nbsp;ID,&amp;nbsp;이름,&amp;nbsp;성별,&amp;nbsp;생년월일을&amp;nbsp;조회하는&amp;nbsp;SQL문을&amp;nbsp;작성해주세요.&amp;nbsp;이때&amp;nbsp;전화번호가&amp;nbsp;NULL인&amp;nbsp;경우는&amp;nbsp;출력대상에서&amp;nbsp;제외시켜&amp;nbsp;주시고,&amp;nbsp;결과는&amp;nbsp;회원ID를&amp;nbsp;기준으로&amp;nbsp;오름차순&amp;nbsp;정렬해주세요.&lt;/span&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입력예제&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MEMBER_PROFILE&amp;nbsp;테이블이&amp;nbsp;다음과&amp;nbsp;같을&amp;nbsp;때&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P9j6r/btsvlxtEDDC/DwqvL88OrKKvHNpOuyx2H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P9j6r/btsvlxtEDDC/DwqvL88OrKKvHNpOuyx2H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P9j6r/btsvlxtEDDC/DwqvL88OrKKvHNpOuyx2H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP9j6r%2FbtsvlxtEDDC%2FDwqvL88OrKKvHNpOuyx2H0%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;809&quot; height=&quot;238&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;/figure&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SQL을&amp;nbsp;실행하면&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;출력되어야&amp;nbsp;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XwYHQ/btsvmaLJcym/feKqpkGnUrehda4QBt76d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XwYHQ/btsvmaLJcym/feKqpkGnUrehda4QBt76d1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XwYHQ/btsvmaLJcym/feKqpkGnUrehda4QBt76d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXwYHQ%2FbtsvmaLJcym%2FfeKqpkGnUrehda4QBt76d1%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;648&quot; height=&quot;77&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;/figure&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;** DATE_OF_BIRTH의&amp;nbsp;데이트&amp;nbsp;포맷이&amp;nbsp;예시와&amp;nbsp;동일해야&amp;nbsp;정답처리&amp;nbsp;됩니다.&lt;/span&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1695546118180&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT MEMBER_ID
      ,MEMBER_NAME
      ,GENDER
      ,TO_CHAR(DATE_OF_BIRTH, 'YYYY-MM-DD') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE EXTRACT (MONTH FROM DATE_OF_BIRTH) = '3'
AND TLNO IS NOT NULL
AND GENDER = 'W'
ORDER BY MEMBER_ID ASC;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그냥 'SELECT DATE_OF_BIRTH' 로 출력을 하면 '1&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;992-03-16 00:00:00' 이런식으로 출력이 되는데&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #666666;&quot;&gt;DATE_OF_BIRTH의&amp;nbsp;데이트&amp;nbsp;포맷이&amp;nbsp;예시와&amp;nbsp;동일해야&amp;nbsp;정답처리&amp;nbsp;됩니다.&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;라고 적혀있듯이 'YYYY-MM-DD' 형식으로 출력이 되어야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;때문에 'TO_CHAR(DATE_OF_BIRTH, 'YYYY-MM-DD') AS DATE_OF_BIRTH' 형식으로 지정해서 출력해주었다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;EXTRACT 함수를 사용하여 월을 지정해주었는데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;EXTRACT 함수는 &lt;b&gt;날짜 유형&lt;/b&gt;의 데이터로부터 날짜 정보를 분리하여 추출해주는 역할을 해준다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 43.1395%; height: 252px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;YEAR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;연도&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MONTH&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;월&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DAY&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HOUR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;MINUTE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;분&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SECOND&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;초&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;figure id=&quot;og_1695546401805&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/131120&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bF1OWy/hyTY8J96iL/9y3E9G0MixDnkkmGwskQp1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bnTY7D/hyTY3oxvdq/zxDKYYXGfYdGbwYaIzEpSk/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/131120&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131120&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bF1OWy/hyTY8J96iL/9y3E9G0MixDnkkmGwskQp1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bnTY7D/hyTY3oxvdq/zxDKYYXGfYdGbwYaIzEpSk/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>프로그래머스</category>
      <category>3월에 태어난 여성 회원 목록 출력하기</category>
      <category>extract</category>
      <category>Level2</category>
      <category>Oracle</category>
      <category>programmers</category>
      <category>sql</category>
      <category>프로그래머스</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/207</guid>
      <comments>https://devjanghwa.tistory.com/207#entry207comment</comments>
      <pubDate>Sun, 24 Sep 2023 18:07:06 +0900</pubDate>
    </item>
    <item>
      <title>[ORACLE] 프로그래머스 강원도에 위치한 생산공장 목록 출력하기</title>
      <link>https://devjanghwa.tistory.com/206</link>
      <description>&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제 설명&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;다음은&amp;nbsp;식품공장의&amp;nbsp;정보를&amp;nbsp;담은&amp;nbsp;FOOD_FACTORY&amp;nbsp;테이블입니다.&amp;nbsp;FOOD_FACTORY&amp;nbsp;테이블은&amp;nbsp;다음과&amp;nbsp;같으며&amp;nbsp;FACTORY_ID,&amp;nbsp;FACTORY_NAME,&amp;nbsp;ADDRESS,&amp;nbsp;TLNO는&amp;nbsp;각각&amp;nbsp;공장&amp;nbsp;ID,&amp;nbsp;공장&amp;nbsp;이름,&amp;nbsp;주소,&amp;nbsp;전화번호를&amp;nbsp;의미합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;428&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJmozp/btsvmAw1ATp/p1QxgzipGHVMH3a1L1LsTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJmozp/btsvmAw1ATp/p1QxgzipGHVMH3a1L1LsTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJmozp/btsvmAw1ATp/p1QxgzipGHVMH3a1L1LsTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJmozp%2FbtsvmAw1ATp%2Fp1QxgzipGHVMH3a1L1LsTK%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;428&quot; height=&quot;204&quot; data-origin-width=&quot;428&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;FOOD_FACTORY&amp;nbsp;테이블에서&amp;nbsp;강원도에&amp;nbsp;위치한&amp;nbsp;식품공장의&amp;nbsp;공장&amp;nbsp;ID,&amp;nbsp;공장&amp;nbsp;이름,&amp;nbsp;주소를&amp;nbsp;조회하는&amp;nbsp;SQL문을&amp;nbsp;작성해주세요.&amp;nbsp;이때&amp;nbsp;결과는&amp;nbsp;공장&amp;nbsp;ID를&amp;nbsp;기준으로&amp;nbsp;오름차순&amp;nbsp;정렬해주세요.&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입력예제&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BmEKU/btsvoW7pYPG/mkB7XbnoMz1jqsV5QfliYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BmEKU/btsvoW7pYPG/mkB7XbnoMz1jqsV5QfliYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BmEKU/btsvoW7pYPG/mkB7XbnoMz1jqsV5QfliYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBmEKU%2FbtsvoW7pYPG%2FmkB7XbnoMz1jqsV5QfliYK%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;620&quot; height=&quot;164&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;/figure&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1695542835254&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY 
WHERE ADDRESS LIKE '%강원도%'
ORDER BY FACTORY_ID&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1695542866275&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/131112&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mw4j0/hyTZcMzku4/DmKFiS5VipTKKlLy5kSxcK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/joOr0/hyTY6ZQ70s/hu080dNBBssKatdg7HQli1/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/131112&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131112&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mw4j0/hyTZcMzku4/DmKFiS5VipTKKlLy5kSxcK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/joOr0/hyTY6ZQ70s/hu080dNBBssKatdg7HQli1/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>프로그래머스</category>
      <category>Level1</category>
      <category>Oracle</category>
      <category>programmers</category>
      <category>sql</category>
      <category>강원도에 위치한 생산공장 목록 출력하기</category>
      <category>프로그래머스</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/206</guid>
      <comments>https://devjanghwa.tistory.com/206#entry206comment</comments>
      <pubDate>Sun, 24 Sep 2023 17:07:53 +0900</pubDate>
    </item>
    <item>
      <title>[ORACLE] 프로그래머스 과일로 만든 아이스크림 고르기</title>
      <link>https://devjanghwa.tistory.com/205</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제 설명&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;다음은&amp;nbsp;아이스크림&amp;nbsp;가게의&amp;nbsp;상반기&amp;nbsp;주문&amp;nbsp;정보를&amp;nbsp;담은&amp;nbsp;FIRST_HALF&amp;nbsp;테이블과&amp;nbsp;아이스크림&amp;nbsp;성분에&amp;nbsp;대한&amp;nbsp;정보를&amp;nbsp;담은&amp;nbsp;ICECREAM_INFO&amp;nbsp;테이블입니다.&amp;nbsp;FIRST_HALF&amp;nbsp;테이블&amp;nbsp;구조는&amp;nbsp;다음과&amp;nbsp;같으며,&amp;nbsp;SHIPMENT_ID,&amp;nbsp;FLAVOR,&amp;nbsp;TOTAL_ORDER&amp;nbsp;는&amp;nbsp;각각&amp;nbsp;아이스크림&amp;nbsp;공장에서&amp;nbsp;아이스크림&amp;nbsp;가게까지의&amp;nbsp;출하&amp;nbsp;번호,&amp;nbsp;아이스크림&amp;nbsp;맛,&amp;nbsp;상반기&amp;nbsp;아이스크림&amp;nbsp;총주문량을&amp;nbsp;나타냅니다.&amp;nbsp;FIRST_HALF&amp;nbsp;테이블의&amp;nbsp;기본&amp;nbsp;키는&amp;nbsp;FLAVOR입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2bKqK/btsviTYAhpQ/LOszDWDneOIkkyklI2sVck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2bKqK/btsviTYAhpQ/LOszDWDneOIkkyklI2sVck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2bKqK/btsviTYAhpQ/LOszDWDneOIkkyklI2sVck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2bKqK%2FbtsviTYAhpQ%2FLOszDWDneOIkkyklI2sVck%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;426&quot; height=&quot;163&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ICECREAM_INFO&amp;nbsp;테이블&amp;nbsp;구조는&amp;nbsp;다음과&amp;nbsp;같으며,&amp;nbsp;FLAVOR,&amp;nbsp;INGREDITENT_TYPE&amp;nbsp;은&amp;nbsp;각각&amp;nbsp;아이스크림&amp;nbsp;맛,&amp;nbsp;아이스크림의&amp;nbsp;성분&amp;nbsp;타입을&amp;nbsp;나타냅니다.&amp;nbsp;INGREDIENT_TYPE에는&amp;nbsp;아이스크림의&amp;nbsp;주&amp;nbsp;성분이&amp;nbsp;설탕이면&amp;nbsp;sugar_based라고&amp;nbsp;입력되고,&amp;nbsp;아이스크림의&amp;nbsp;주&amp;nbsp;성분이&amp;nbsp;과일이면&amp;nbsp;fruit_based라고&amp;nbsp;입력됩니다.&amp;nbsp;ICECREAM_INFO의&amp;nbsp;기본&amp;nbsp;키는&amp;nbsp;FLAVOR입니다.&amp;nbsp;ICECREAM_INFO테이블의&amp;nbsp;FLAVOR는&amp;nbsp;FIRST_HALF&amp;nbsp;테이블의&amp;nbsp;FLAVOR의&amp;nbsp;외래&amp;nbsp;키입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOPjy7/btsvlAcOiLT/NXSDelfZo85HPmn3jYz6TK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOPjy7/btsvlAcOiLT/NXSDelfZo85HPmn3jYz6TK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOPjy7/btsvlAcOiLT/NXSDelfZo85HPmn3jYz6TK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOPjy7%2FbtsvlAcOiLT%2FNXSDelfZo85HPmn3jYz6TK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;452&quot; height=&quot;129&quot; data-origin-width=&quot;452&quot; data-origin-height=&quot;129&quot;/&gt;&lt;/span&gt;&lt;/figure&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: #263747; text-align: left;&quot;&gt;상반기 아이스크림 총주문량이 3,000보다 높으면서 아이스크림의 주 성분이 과일인 아이스크림의 맛을 총주문량이 큰 순서대로 조회하는 SQL 문을 작성해주세요.&lt;/span&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입력예제&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;129&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y4dvX/btsvqyZAb3Z/TKseR0nBWCzpOWj7NbQ3h1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y4dvX/btsvqyZAb3Z/TKseR0nBWCzpOWj7NbQ3h1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y4dvX/btsvqyZAb3Z/TKseR0nBWCzpOWj7NbQ3h1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy4dvX%2FbtsvqyZAb3Z%2FTKseR0nBWCzpOWj7NbQ3h1%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;129&quot; height=&quot;118&quot; data-origin-width=&quot;129&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1695542209993&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT FLAVOR
FROM FIRST_HALF
WHERE TOTAL_ORDER &amp;gt;= 3000 
AND FLAVOR IN (SELECT I.FLAVOR
                 FROM ICECREAM_INFO I
                 WHERE I.INGREDIENT_TYPE = 'fruit_based'
                )
ORDER BY TOTAL_ORDER DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1695542894225&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/133025&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CIWmc/hyTZfbs3lj/wNthkLXtm2uYYajIBYqLR1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ZU2bx/hyTY6S7oVT/16xJDBm3SK977eQOdzPEk1/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/133025&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/133025&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CIWmc/hyTZfbs3lj/wNthkLXtm2uYYajIBYqLR1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ZU2bx/hyTY6S7oVT/16xJDBm3SK977eQOdzPEk1/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>프로그래머스</category>
      <category>Level1</category>
      <category>Oracle</category>
      <category>programmers</category>
      <category>sql</category>
      <category>과일로 만든 아이스크림 고르기</category>
      <category>프로그래머스</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/205</guid>
      <comments>https://devjanghwa.tistory.com/205#entry205comment</comments>
      <pubDate>Sun, 24 Sep 2023 16:57:20 +0900</pubDate>
    </item>
    <item>
      <title>[ORACLE] 프로그래머스 인기있는 아이스크림</title>
      <link>https://devjanghwa.tistory.com/204</link>
      <description>&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제 설명&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;FIRST_HALF&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블은 아이스크림 가게의 상반기 주문 정보를 담은 테이블입니다.FIRST_HALF&lt;span&gt;&amp;nbsp;&lt;/span&gt;테이블 구조는 다음과 같으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;SHIPMENT_ID,&lt;span&gt;&amp;nbsp;&lt;/span&gt;FLAVOR,&lt;span&gt;&amp;nbsp;&lt;/span&gt;TOTAL_ORDER는 각각 아이스크림 공장에서 아이스크림 가게까지의 출하 번호, 아이스크림 맛, 상반기 아이스크림 총주문량을 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 49px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 15px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 15px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;SHIPMENT_ID&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 15px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;INT(N)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 15px;&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;FLAVOR&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;VARCHAR(N)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;TOTAL_ORDER&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;INT(N)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;FALSE&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;상반기에 판매된 아이스크림의 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회하는 SQL 문을 작성해주세요.&lt;/span&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입력예제&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상반기 아이스크림 맛을 총주문량을 기준으로 내림차순 정렬하고 총주문량이 같은 경우 출하 번호를 기준으로 오름차순 정렬하면&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;chocolate, melon, white_chocolate, strawberry, mango, orange, pineapple, vanilla, caramel, peach, watermelon, mint_chocolate&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;순서대로 조회되어야 합니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.&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;table style=&quot;border-collapse: collapse; width: 36.6279%; height: 447px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;TOTAL_ORDER&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;chocolate&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;melon&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;white_chocolate&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;strawberry&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;mango&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;orange&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;pineapple&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;vanilla&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;caramel&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;peach&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;watermelon&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;mint_chocolate&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1695540480100&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT FLAVOR
FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1695542919827&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/133024&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c2vCYh/hyTZaHYXw1/sSSVxIybFEbJrGKKU6c2W1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/vWeu6/hyTY3hNe4C/UBWzy0AURFkHEMA1HF8XAk/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/133024&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/133024&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c2vCYh/hyTZaHYXw1/sSSVxIybFEbJrGKKU6c2W1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/vWeu6/hyTY3hNe4C/UBWzy0AURFkHEMA1HF8XAk/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>프로그래머스</category>
      <category>Level1</category>
      <category>Oracle</category>
      <category>programmers</category>
      <category>sql</category>
      <category>인기있는 아이스크림</category>
      <category>프로그래머스</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/204</guid>
      <comments>https://devjanghwa.tistory.com/204#entry204comment</comments>
      <pubDate>Sun, 24 Sep 2023 16:28:40 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 프로그래머스 이진 변환 반복하기</title>
      <link>https://devjanghwa.tistory.com/202</link>
      <description>&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;문제 설명&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;0과&amp;nbsp;1로&amp;nbsp;이루어진&amp;nbsp;어떤&amp;nbsp;문자열&amp;nbsp;x에&amp;nbsp;대한&amp;nbsp;이진&amp;nbsp;변환을&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;정의합니다. &lt;br /&gt;&lt;br /&gt;1. x의 모든 0을 제거합니다. &lt;br /&gt;2. x의 길이를 c라고 하면, x를 &quot;c를 2진법으로 표현한 문자열&quot;로 바꿉니다. &lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;x&amp;nbsp;=&amp;nbsp;&quot;0111010&quot;이라면,&amp;nbsp;x에&amp;nbsp;이진&amp;nbsp;변환을&amp;nbsp;가하면&amp;nbsp;x&amp;nbsp;=&amp;nbsp;&quot;0111010&quot;&amp;nbsp;-&amp;gt;&amp;nbsp;&quot;1111&quot;&amp;nbsp;-&amp;gt;&amp;nbsp;&quot;100&quot;&amp;nbsp;이&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;0과&amp;nbsp;1로&amp;nbsp;이루어진&amp;nbsp;문자열&amp;nbsp;s가&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;s가&amp;nbsp;&quot;1&quot;이&amp;nbsp;될&amp;nbsp;때까지&amp;nbsp;계속해서&amp;nbsp;s에&amp;nbsp;이진&amp;nbsp;변환을&amp;nbsp;가했을&amp;nbsp;때,&amp;nbsp;이진&amp;nbsp;변환의&amp;nbsp;횟수와&amp;nbsp;변환&amp;nbsp;과정에서&amp;nbsp;제거된&amp;nbsp;모든&amp;nbsp;0의&amp;nbsp;개수를&amp;nbsp;각각&amp;nbsp;배열에&amp;nbsp;담아&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요. &lt;br /&gt;&amp;nbsp;&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;제한사항&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&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;s의&amp;nbsp;길이는&amp;nbsp;1&amp;nbsp;이상&amp;nbsp;150,000&amp;nbsp;이하입니다. &lt;br /&gt;s에는&amp;nbsp;'1'이&amp;nbsp;최소&amp;nbsp;하나&amp;nbsp;이상&amp;nbsp;포함되어&amp;nbsp;있습니다. &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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #009a87; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입력예제&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;s&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&quot;110010101001&quot;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;[3,8]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&quot;01110&quot;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;[3,3]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&quot;1111111&quot;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;[4,1]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;풀이&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1694160836563&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int[] solution(String s) {

        int[] answer = new int[2];
        // 회차
        int score = 0;
        // 제거한 0 개수
        int count = 0;
        // 2진수로 변환 된 값
        String decimal = s;


        for (int i = 0; i &amp;lt; 10000; i++) {
            // 0을 잘라주기
            String ss[] = decimal.split(&quot;0&quot;);
            
            // 한글자씩 잘라줄 때 잠시 넣어줄 변수
            String ssss = &quot;&quot;;
            
            // ssss에 ss[] 값을 넣어줌
            for (int j = 0; j &amp;lt; ss.length; j++) {
                ssss += ss[j];
            }
            
            // 한글자씩 잘라주기
            ss = ssss.split(&quot;&quot;);

            // 회차 ++ 해주기
            score++;
            // 기존 s 길이 - 0을 제거한 ss의 길이
            count += decimal.length() - ss.length;
            
            // decimal에 10진수 값을 2진수로 변환한 값 대입
            decimal = Integer.toBinaryString(ss.length);

            // decimal이 1이 될 때까지 반복
            if (decimal.equals(&quot;1&quot;)) break;
        }

        answer[0] = score;
        answer[1] = count;


        
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래머스</category>
      <category>Java</category>
      <category>Level2</category>
      <category>programmers</category>
      <category>이진 변환 반복하기</category>
      <category>프로그래머스</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/202</guid>
      <comments>https://devjanghwa.tistory.com/202#entry202comment</comments>
      <pubDate>Sat, 9 Sep 2023 17:14:03 +0900</pubDate>
    </item>
    <item>
      <title>[SQL] mariaDB 기본 문법 (create, insert, update, delete, drop, db생성)</title>
      <link>https://devjanghwa.tistory.com/201</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/udAcb/btstsOD05bt/9PDOyk4Hfd2Wbt2UaQpLkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/udAcb/btstsOD05bt/9PDOyk4Hfd2Wbt2UaQpLkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/udAcb/btstsOD05bt/9PDOyk4Hfd2Wbt2UaQpLkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FudAcb%2FbtstsOD05bt%2F9PDOyk4Hfd2Wbt2UaQpLkk%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;364&quot; height=&quot;364&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;704&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;기본적으로 mariaDB는 mySQL과 비슷한 문법이기 때문에&amp;nbsp; 기존에 mySQL을 써봤다면 무리없이 사용할 수 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;oracleDB랑은 약간의 차이가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 mariaDB 문법을 알아보고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;데이터베이스 생성&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1694155540058&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE DATABASE mydatabase;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CREATE DATABASE 데이터베이스명;&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 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;데이터베이스 목록 조회&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복되는 데이터 베이스명이 있는지 확인해보기 위해서는 아래 명령문을 검색하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1694155640047&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SHOW DATABASES;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;데이터베이스 선택&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1694155938443&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;USE mydatabase;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;USE 데이터베이스명;&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;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;테이블 생성 (CREATE TABLE)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1694155991294&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CREATE TABLE 테이블명 (&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;필드 이름, 타입, 제약 등,&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;);&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;* ORACLE에서는 존재하는 NUMBER, VARCHAR2는 mariaDB, mySQL에 없다.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;데이터 삽입 (INSERT INTO ~)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1694156209128&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO employees (first_name, last_name, email)
VALUES ('John', 'Doe', 'john.doe@example.com');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;INSERT INTO 테이블명 (필드 이름) VALUES (값);&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;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;데이터 조회 (SELECT ~ FROM)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1694156324175&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM employees;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SELECT 필드이름 FROM 테이블명;&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;여기서 *는 전체를 뜻한다. 해당 테이블의 필드 전체 목록을 조회하겠다는 의미.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;데이터 업데이트 (UPDATE ~ SET)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1694156448732&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;UPDATE employees
SET email = 'jane.smith@example.com'
WHERE first_name = 'Jane' AND last_name = 'Smith';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;UPDATE 테이블명 SET 필드명 = '변경할 필드 값' WHERE 필드명 = '이름' ;&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;&lt;i&gt;* WHERE은 조건절이다.&lt;/i&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;employees 테이블에서 first_name이 'Jone' 이고 last_name 이 'Smith'인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회원의 email을 'jane.smith@example.com'로 바꾸겠다는 의미가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;데이터 삭제 (DELETE FROM ~)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1694156659528&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DELETE FROM employees
WHERE id = 1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DELETE FROM 테이블명;&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;위 코드를 해석하면 employees 테이블에서 id = 1인 회원을 삭제하겠다는 의미이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 코드가 적혀있다면&lt;/p&gt;
&lt;pre id=&quot;code_1694156748139&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DELETE FROM employees;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;employees 테이블에 있는 행을 삭제하겠다는 의미이다.&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;i&gt;*테이블은 삭제되지 않는다.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;테이블 삭제 (DROP TABLE ~)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1694156902195&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP TABLE employees;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DROP FROM 테이블명;&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;테이블이 삭제된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS공부</category>
      <category>create</category>
      <category>DB생성</category>
      <category>db조회</category>
      <category>DELETE</category>
      <category>DROP</category>
      <category>insert</category>
      <category>MariaDB</category>
      <category>mysql</category>
      <category>sql</category>
      <category>Update</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/201</guid>
      <comments>https://devjanghwa.tistory.com/201#entry201comment</comments>
      <pubDate>Fri, 8 Sep 2023 16:14:13 +0900</pubDate>
    </item>
    <item>
      <title>XSS와 CSRF의 차이 (웹 사이트 보안 공격)</title>
      <link>https://devjanghwa.tistory.com/198</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FjJvH/btstq5LS2Ip/nkAQlLRm1CQRXuF6bWHewk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FjJvH/btstq5LS2Ip/nkAQlLRm1CQRXuF6bWHewk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FjJvH/btstq5LS2Ip/nkAQlLRm1CQRXuF6bWHewk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFjJvH%2Fbtstq5LS2Ip%2FnkAQlLRm1CQRXuF6bWHewk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;412&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;702&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;인터넷 사용이 증가함에 따라 웹 보안은 나날이 중요해지고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그 중에서도 XSS와 CSRF는 웹 개발자와 사용자 모두 주의해야 할 중요한 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 둘에 대해서 자세히 알아보고자 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;XSS 란&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #1a5490;&quot;&gt;공격 목적&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;XSS는 &lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;&amp;nbsp;&quot;Cross-Site Scripting&quot;의 약자이며,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;악의적인 스크립트를 웹 페이지에 삽입하여&lt;b&gt; 사용자 브라우저에서 실행시켜 공격&lt;/b&gt;하는 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #374151;&quot;&gt;이로써 공격자는 다른 사용자의 세션 쿠키나 민감한 정보를 탈취 또는 조작할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #1a5490;&quot;&gt;공격 대상&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;주로 &lt;b&gt;사용자의 브라우저&lt;/b&gt;와 &lt;b&gt;해당 웹 페이지&lt;/b&gt;를 공격한다.&lt;/span&gt;&lt;/span&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #1a5490;&quot;&gt;공격 방식&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;XSS 공격자는 사용자의 브라우저에서 실행되는 스크립트를 통해 사용자의 쿠키, 세션 정보 등을 탈취한다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공격자는 웹 페이지에 악의적인 내용을 삽입하여 웹 페이지의 내용을 변조하거나 공격자가 원하는 내용을 표시할 수 있다.&lt;/span&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #1a5490;&quot;&gt;방어 및 예방&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #212529; text-align: start;&quot;&gt;XSS는 주로&lt;i&gt;&amp;nbsp;1.&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #212529; text-align: start;&quot;&gt;확인되지 않은 경로를 통해 데이터가 입력되거나&lt;/span&gt;&lt;/i&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;color: #212529; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 동적인 데이터의 유효성 검사가 적절히 이루어지지 않고 사용자에게 보내지는 경우에 발생한다.&lt;/span&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 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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입력 값 제한&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입력 값 치환&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;XSS 공격은 기본적으로 &amp;lt;script&amp;gt; 태그를 사용하기 때문에 XSS 공격을 차단하기 위해&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;태그 문자(&amp;lt;, &amp;gt;) 등 위험한 문자 입력 시 문자 참조(HTML entity)로 필터링하고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서버에서 브라우저로 전송 시 문자를 인코딩하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HTML 문자 참조란 ASCII 문자를 동일한 의미의 HTML 문자로 변경하는 과정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를 들어, 문자 &amp;ldquo;&amp;lt;&amp;rdquo;는 동일한 의미의 HTML &amp;ldquo;&amp;amp;lt;&amp;rdquo; 로 변경한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;HTML 엔터티는 대부분의 인터프리터(특히, 브라우저)에서 특수한 의미를 가지지 않으며, &lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;단순한 문자로 처리된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이렇게 인코딩하면 사용자는 &amp;lt;script&amp;gt;가 &amp;lt;script&amp;gt;로 보이지만&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HTML 문서에서는 &amp;amp;lt;script&amp;amp;gt; 로 나타나서 브라우저에서 일반 문자로 인식하고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;스크립트 영역에서 출력 자제&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이벤트 핸들러 영역에 스크립트가 삽입되는 경우 보호기법들을 우회할 수 있기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 사용자의 입력을 출력하는 것을 최대한 자제해야 하며 필요한 경우 대응 방안과 함께 사용해야 한다.&lt;/span&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;CSRF 란&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #1a5490;&quot;&gt;공격 목적&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;CSRF는 &quot;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;Cross-Site Request Forgery&quot; 의 약자이며,&lt;/span&gt;&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;특정 웹 애플리케이션에서 사용자의 인증된 세션을 이용하여 &lt;b&gt;서버에 악의적인 요청을 보내는 공격&lt;/b&gt;이다.&lt;/span&gt;&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;피해자가 로그인한 상태에서 공격자가 조작한 웹 페이지나 이메일 링크를 클릭하게 만들어 공격을 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #1a5490;&quot;&gt;공격 대상&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;주로 &lt;b&gt;특정 웹 애플리케이션의 서버&lt;/b&gt;를 공격한다.&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;특정 웹 애플리케이션에서 인증된 사용자로서 악의적인 요청을 보내려는 것이 목표이다.&lt;/span&gt;&lt;/span&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #1a5490;&quot;&gt;공격 방식&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;피해자가 웹 애플리케이션 A에 로그인한 상태이다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;CSRF 공격자는 피해자의 인증된 세션을 이용하여 서버에 특정 상태 변경 요청을 보낸다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;공격자가 조작한 이메일을 피해자가 클릭하면, 공격자가 은행 계좌 이체를 위한 요청을 피해자의 계정으로 전송할 수 있다.&lt;/span&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #1a5490;&quot;&gt;방어 및 예방&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #212529; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일반적으로 CSRF 공격 방어는 GET 메소드와 같은 조회성 요청은 제외하고, 데이터 조작이 가능한 POST, PATCH, DELETE 메소드에 적용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;CRSF 토큰 사용&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서버측에서 CSRF 공격을 보호하기 위한 문자열을 유저의 브라우저와 웹 앱에만 제공한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Same-Site Cookie&amp;nbsp;사용 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;같은 도메인에서만 세션, 쿠키를 사용할 수 있도록 만든다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;Referer 검증&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Request Header에 포함된 Referer는 현재 요청된 페이지의 링크 이전의 웹 페이지 주소를 포함한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #212529; text-align: start;&quot;&gt;요청을 받는 서버는 CSRF를 막기위해 정해준&amp;nbsp;&lt;/span&gt;Referer&lt;span style=&quot;color: #212529; text-align: start;&quot;&gt;만 허용해주는 유효성 검사 로직을 추가하는 조치를 취한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS공부</category>
      <category>csrf</category>
      <category>XSS</category>
      <category>대상</category>
      <category>목적</category>
      <category>방식</category>
      <category>예방</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/198</guid>
      <comments>https://devjanghwa.tistory.com/198#entry198comment</comments>
      <pubDate>Fri, 1 Sep 2023 11:54:52 +0900</pubDate>
    </item>
    <item>
      <title>CORS (Cross-Origin Resource Sharing) 란?</title>
      <link>https://devjanghwa.tistory.com/197</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btFfK3/btstkwql5aN/4t1PBP0b6B1GkNv8dKiHN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btFfK3/btstkwql5aN/4t1PBP0b6B1GkNv8dKiHN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btFfK3/btstkwql5aN/4t1PBP0b6B1GkNv8dKiHN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtFfK3%2Fbtstkwql5aN%2F4t1PBP0b6B1GkNv8dKiHN0%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;440&quot; height=&quot;440&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;704&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;CORS란&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;CORS 웹개발에서 중요한 보안 관련 주제 중 하나로, &quot;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Cross-Origin Resource Sharing&quot; (교차 출처 리소스 공유) 의 약어이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;서로 다른 도메인 간에 데이터 요청과 응답을 허용하는 웹 보안 메커니즘으로 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;출처가 다른 자원들을 공유한다는 의미이다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;쉽게 말해,&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;&lt;b&gt;한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념&lt;/b&gt;이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹 브라우저에서 실행되는 스크립트가 다른 출처(도메인)에서 리소스를 요청할 때, &lt;b&gt;동일 출처 정책&lt;/b&gt; (Same-origin policy)에 따라 요청을 차단하는데, 이를 허용하기 위해 필요한 것이 CORS이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;CORS에 대해 자세히 알기 전에 &lt;u&gt;출처&lt;/u&gt; 와 &lt;u&gt;동일 출처 정책&lt;/u&gt; 이 무엇인지 먼저 알아보자.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;출처란?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;여기서 출처가 무엇인지, 어디서부터 어디까지가 출처라고 할 수 있을까?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q190E/btstmE8JUZ3/0sYzhsSOKYWTmkgdaRv5Yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q190E/btstmE8JUZ3/0sYzhsSOKYWTmkgdaRv5Yk/img.png&quot; data-alt=&quot;https://beomy.github.io/tech/browser/cors/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q190E/btstmE8JUZ3/0sYzhsSOKYWTmkgdaRv5Yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq190E%2FbtstmE8JUZ3%2F0sYzhsSOKYWTmkgdaRv5Yk%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;952&quot; height=&quot;204&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://beomy.github.io/tech/browser/cors/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;프로토콜(Protocol) + 호스트(Host) + 포트(Port)&lt;/span&gt;&amp;nbsp;&lt;/b&gt;3가지가 같으면 동일 출처(Origin) 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다른 출처 요청일 경우, CORS 정책에 준수하여 요청해야만 정상적으로 응답을 받을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;동일 출처 정책 (Same-origin policy)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;동일 출처 정책은 웹 브라우저에서 실행되는 스크립트가 &lt;b&gt;다른 출처로부터 웹 페이지에 접근하거나 리소스를 요청하는 것을 제한&lt;/b&gt;하는 보안 규칙이다.&lt;/span&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;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;i&gt;만일, 동일 출처 정책이 없다면?&lt;/i&gt;&lt;/b&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;color: #374151; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;color: #374151; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;XSS, CSRF 공격과 같은 공격을 할 수 있습니다.&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예를들어, &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;'포리'라는 사용자가 웹사이트 A에 로그인을 한 후, 그 토큰이 브라우저의 쿠키에 저장이 되었다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이때, '포리'가 개인 정보를 탈취하기 위해 악의적으로 만들어진 웹사이트 B에 접속하면,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;웹사이트 B의 자바스크립트 코드가 브라우저에 다운로드되어 실행된다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 자바스크립트 코드는 웹사이트 B에서 '포리'의 브라우저에 저장된 웹사이트 A의 토큰을 사용하여 웹사이트 A의 서버로 요청을 보낸다.이렇게 함으로써 웹사이트 A의 서버로부터 '포리'의 정보를 탈취하고, 그 정보를 웹사이트 B의 서버로 전송할 수 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이렇게 동일 출처 정책을 우회하려는 시도로 개인정보가 탈취될 수 있다.&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&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;color: #000000; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단, 다른 출처에서 얻은 이미지를 담는 &amp;lt;img&amp;gt;, 외부 주소를 담는 &amp;lt;link&amp;gt; 같은 여러 태그들은 허용한다.&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;CORS의 필요성&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서로 다른 도메인 간에 자유롭게 데이터를 주고 받는데에는 위에 적힌 글과 같이 많은 보안 문제를 일으킬 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다른 도메인을 열 수 없도록 한다면 좋겠지만,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금의 웹에서는 다른 도메인에서 데이터를 가져와야 하는 경우가 많아졌기 때문에&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;더 안전하게 요청하고 공유&lt;/b&gt;할 수 있도록 하는 CORS가 필요해졌다.&lt;/span&gt;&lt;/span&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;&amp;nbsp;&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;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;CORS의 동작 원리&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;CORS는 HTTP 헤더를 통해 구현된다. &lt;/span&gt;&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;1. 다른 도메인에 요청을 보낼 때, 브라우저는 요청 헤더에 도메인(Origin) 정보를 포함시킨다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1694063634538&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Origin : https://pory.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #374151; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위와 같이 Origin 정보가 요청에 포함된다.&lt;/span&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;&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;2. 서버는 이 Origin 정보를 확인하고, 허용되는 도메인인 경우 응답을 반환한다.&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;서버는 응답 헤더에&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Access-Control-Allow-Origin&lt;/span&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;&amp;nbsp;헤더를 포함하여 허용되는 리소스를 지정한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1694064283483&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Access-Control-Allow-Origin: pory.com&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #374151; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;pory.com 이라는 해당 도메인에서만 리소스에 접근이 허용하다는 의미이다.&lt;/span&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;pre id=&quot;code_1694064446709&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Access-Control-Allow-Origin: *&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #374151;&quot;&gt;위와 같은 경우에는 &lt;span style=&quot;color: #374151; text-align: left;&quot;&gt; 모든 출처에서의 요청을 허용하는 것을 나타낸다. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #374151;&quot;&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;즉, 어떤 도메인에서도 해당 리소스에 접근할 수 있다는 의미이다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #374151;&quot;&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;참고로 이는 보안상 권장되지 않는다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;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;&amp;nbsp;&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;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;참고&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://escapefromcoding.tistory.com/724&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CORS란 무엇인가?&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://beomy.github.io/tech/browser/cors/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Browser] CORS란?&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://velog.io/@nemo/cors&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CORS, 기본 동작 원리와 이슈 해결 방법&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS공부</category>
      <category>CORS</category>
      <category>CS</category>
      <category>동일 출처 정책</category>
      <category>동작원리</category>
      <category>출처</category>
      <category>필요성</category>
      <author>DEV장화</author>
      <guid isPermaLink="true">https://devjanghwa.tistory.com/197</guid>
      <comments>https://devjanghwa.tistory.com/197#entry197comment</comments>
      <pubDate>Wed, 30 Aug 2023 10:37:28 +0900</pubDate>
    </item>
  </channel>
</rss>