<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>sy1214ei 님의 블로그</title>
    <link>https://sy1214ei.tistory.com/</link>
    <description>sy1214ei 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 9 May 2026 12:34:51 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sy1214ei</managingEditor>
    <image>
      <title>sy1214ei 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7338285/attach/1c7fcdb93d8f44ac8b651d79abfaeb65</url>
      <link>https://sy1214ei.tistory.com</link>
    </image>
    <item>
      <title>by 백준 1158 요세푸스</title>
      <link>https://sy1214ei.tistory.com/83</link>
      <description>&lt;h3 data-path-to-node=&quot;3&quot; data-ke-size=&quot;size23&quot;&gt;1. 입출력 (Input/Output)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,0,0&quot;&gt;실수 포인트:&lt;/b&gt; 데이터 양이 많은 문제에서 input()을 사용해 '시간 초과(TLE)' 발생.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,1,0&quot;&gt;해결책:&lt;/b&gt; sys.stdin.readline을 사용하여 입력 속도를 최적화한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1768928387506&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline # 습관적으로 맨 위에 선언

# 숫자 하나 읽기
n = int(input())
# 공백으로 구분된 여러 숫자 리스트로 읽기
nums = list(map(int, input().split()))
# 여러 줄에 걸쳐 들어오는 숫자들을 한꺼번에 읽기
data = list(map(int, sys.stdin.read().split()))&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-path-to-node=&quot;5&quot; data-ke-size=&quot;size23&quot;&gt;2. 인덱스 순환 구조 (Circular Index)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;실수 포인트:&lt;/b&gt; 리스트 끝에서 다시 앞으로 돌아갈 때 while이나 if로 인덱스를 직접 빼다가 실수함.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,0&quot;&gt;해결책:&lt;/b&gt; 나머지 연산자(%)를 활용하여 인덱스 범위를 항상 유지한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1768928414025&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 현재 인덱스에서 K번째 요소를 찾을 때 (0번 인덱스 기준)
# 현재 리스트의 길이를 n이라고 하면
index = (index + (K - 1)) % n&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size23&quot;&gt;3. 리스트 연산의 시간 복잡도 (&lt;span data-index-in-node=&quot;19&quot; data-math=&quot;O(n^2)&quot;&gt;O(n^2)&lt;/span&gt;&amp;nbsp;주의)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;실수 포인트:&lt;/b&gt; 반복문 안에서 list.pop(i)나 list.remove()를 사용하여 전체 복잡도가 O(n^2)이 됨. (데이터가 10,000개만 넘어도 위험)&lt;/li&gt;
&lt;li&gt;해결책:&lt;/li&gt;
&lt;li&gt;1. 데이터 삭제가 빈번하다면 collections.deque의 popleft()를 사용하여 O(1)로 처리.&lt;/li&gt;
&lt;li&gt;2. 삭제 대신 값을 변경(예: 0으로 바꿈)하고 나중에 한꺼번에 처리.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,0&quot;&gt;주의:&lt;/b&gt; pop()은 맨 뒤 요소를 뺄 때만 O(1)이고, 중간이나 맨 앞을 뺄 때는 O(n)이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;9&quot; data-ke-size=&quot;size23&quot;&gt;4. 출력 형식 (Formatted Output)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;10&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,0,0&quot;&gt;실수 포인트:&lt;/b&gt; &amp;lt;3, 6, 2&amp;gt;와 같이 특수 문자나 공백이 포함된 형식을 맞추지 못해 '출력 형식이 잘못되었습니다' 발생.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,1,0&quot;&gt;해결책:&lt;/b&gt; f-string과 join()을 조합하여 문자열을 만든다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1768928553797&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;visit = [3, 6, 2, 7, 5, 1, 4]

# 1. 숫자 리스트를 문자열로 변환 후 &quot;, &quot;로 연결
res = &quot;, &quot;.join(map(str, visit))

# 2. 양 끝에 괄호 붙여서 출력
print(f&quot;&amp;lt;{res}&amp;gt;&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리스트가 비어있는지 확인할 때는 if not num:을 사용하자. (if num is None:은 금지!)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>[Coding]/오늘의 삽질</category>
      <category>1158</category>
      <category>Python</category>
      <category>백준</category>
      <category>요세푸스</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/83</guid>
      <comments>https://sy1214ei.tistory.com/83#entry83comment</comments>
      <pubDate>Wed, 21 Jan 2026 02:03:30 +0900</pubDate>
    </item>
    <item>
      <title>HTTP 설명</title>
      <link>https://sy1214ei.tistory.com/82</link>
      <description>&lt;h2 style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;1) URL(Uniform Resource Locato)&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpWuaB/btsQ5g6ayc5/JvRVFEaY9GtqFyq0hV1O40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpWuaB/btsQ5g6ayc5/JvRVFEaY9GtqFyq0hV1O40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpWuaB/btsQ5g6ayc5/JvRVFEaY9GtqFyq0hV1O40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpWuaB%2FbtsQ5g6ayc5%2FJvRVFEaY9GtqFyq0hV1O40%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;641&quot; height=&quot;81&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  URL (Uniform Resource Locator)의 구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;**URL(Uniform Resource Locator)**은 인터넷상의 &lt;b&gt;리소스(자원)의 위치&lt;/b&gt;를 나타내는 표준화된 주소 체계입니다. 기술적으로는 **URI(Uniform Resource Identifier)**의 하위 개념이지만, 웹 환경에서는 현재 거의 같은 의미로 혼용되어 사용되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제공된 예시 URL: &lt;b&gt;&lt;a href=&quot;http://www.wooteco.com/webcontents/index.html&quot;&gt;http://www.wooteco.com/webcontents/index.html&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URL은 크게 &lt;b&gt;스킴(Scheme)&lt;/b&gt;, &lt;b&gt;호스트명(Host)&lt;/b&gt;, &lt;b&gt;경로명(Path)&lt;/b&gt; 세 가지 주요 요소로 구성됩니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-ved=&quot;0CAAQ3ecQahgKEwjD5tPY6Z2QAxUAAAAAHQAAAAAQ1QE&quot; data-hveid=&quot;0&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;구성 요소&lt;/td&gt;
&lt;td&gt;예시&lt;/td&gt;
&lt;td&gt;역할&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;스킴(Scheme)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;http&lt;/td&gt;
&lt;td&gt;리소스를 &lt;b&gt;획득하는 방법&lt;/b&gt; (통신 프로토콜)을 지정합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;호스트명(Host)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;www.wooteco.com&lt;/td&gt;
&lt;td&gt;리소스가 존재하는 **서버(컴퓨터)**의 이름을 나타냅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;경로명(Path)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;/webcontents/index.html&lt;/td&gt;
&lt;td&gt;호스트 내에서 리소스의 &lt;b&gt;정확한 위치&lt;/b&gt;를 나타냅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 스킴 (Scheme)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스킴&lt;/b&gt;은 클라이언트가 서버로부터 리소스를 가져오기 위해 사용해야 할 &lt;b&gt;프로토콜&lt;/b&gt; 또는 &lt;b&gt;접근 방법&lt;/b&gt;을 나타냅니다. 웹 애플리케이션에서는 대부분 &lt;b&gt;HTTP&lt;/b&gt; 프로토콜을 사용합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  주요 스킴 종류&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-ved=&quot;0CAAQ3ecQahgKEwjD5tPY6Z2QAxUAAAAAHQAAAAAQ1gE&quot; data-hveid=&quot;0&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;스킴&lt;/td&gt;
&lt;td&gt;의미&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;http&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;H&lt;/b&gt;yper&lt;b&gt;T&lt;/b&gt;ext &lt;b&gt;T&lt;/b&gt;ransfer &lt;b&gt;P&lt;/b&gt;rotocol&lt;/td&gt;
&lt;td&gt;암호화되지 않은 일반적인 웹 통신 프로토콜입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;https&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;HTTP &lt;b&gt;S&lt;/b&gt;ecure&lt;/td&gt;
&lt;td&gt;&lt;b&gt;암호화된&lt;/b&gt; 보안 HTTP 통신 프로토콜입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;ftp&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;F&lt;/b&gt;ile &lt;b&gt;T&lt;/b&gt;ransfer &lt;b&gt;P&lt;/b&gt;rotocol&lt;/td&gt;
&lt;td&gt;FTP 프로토콜을 통한 파일 전송 및 획득을 나타냅니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;mailto&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;메일 수취인&lt;/td&gt;
&lt;td&gt;이메일 클라이언트를 실행하여 특정 주소로 이메일을 보내기 위한 스킴입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;file&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;파일 시스템&lt;/td&gt;
&lt;td&gt;로컬 컴퓨터의 파일 시스템 속 파일이나 디렉토리를 참조할 때 사용합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 호스트명 (Host)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;호스트명&lt;/b&gt;은 리소스가 실제로 저장되어 있고, 클라이언트의 요청을 받아 처리할 수 있는 &lt;b&gt;서버 컴퓨터의 이름&lt;/b&gt;을 나타냅니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;호스트 컴퓨터:&lt;/b&gt; 네트워크에 연결되어 다른 컴퓨터(클라이언트)로부터 요청을 받고 그 결과를 되돌려주는 컴퓨터를 일반적으로 &lt;b&gt;호스트 컴퓨터&lt;/b&gt;라고 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; 웹 환경에서 호스트명은 보통 &lt;b&gt;도메인 이름&lt;/b&gt;으로 사용되며, 이 도메인 이름은 DNS(Domain Name System)를 통해 서버의 실제 &lt;b&gt;IP 주소&lt;/b&gt;로 변환되어 통신이 이루어집니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예시에서 www.wooteco.com이 호스트명입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 경로명 (Path)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;경로명&lt;/b&gt;은 호스트명으로 지정된 &lt;b&gt;서버 컴퓨터 내부&lt;/b&gt;에서 리소스가 &lt;b&gt;정확히 어디에 위치&lt;/b&gt;하는지를 나타냅니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;계층적 구조:&lt;/b&gt; 경로명은 파일 시스템처럼 / (슬래시)를 구분자로 사용하여 **디렉토리(폴더)**와 &lt;b&gt;파일 이름&lt;/b&gt;을 계층적으로 지정합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; URL을 통해 **도메인 &lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 컴퓨터 &lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 디렉토리 &lt;span&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 파일명**과 같이 상세한 위치를 지정함으로써, 인터넷상에서 특정 리소스를 고유하게 식별하고 접근할 수 있게 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예시에서 /webcontents/index.html은 webcontents 디렉토리 하위에 있는 index.html 파일을 나타냅니다.&lt;/li&gt;
&lt;li&gt;경우에 따라 파일명 없이 디렉토리까지만 지정하면, 서버 설정에 따라 해당 디렉토리의 기본 파일(예: index.html)이 자동으로 로드됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  URI와 URL의 관계 (참고)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;URI (Uniform Resource Identifier):&lt;/b&gt; 인터넷상의 자원을 &lt;b&gt;식별&lt;/b&gt;하는 통합적인 방법입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;URL (Uniform Resource Locator):&lt;/b&gt; URI 중에서도 자원의 **위치(Location)**를 나타내는 데 특화된 개념입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 URL은 URI이지만, 모든 URI가 URL인 것은 아닙니다. (예: URN(Uniform Resource Name)은 자원의 이름만 나타냄)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실제 사용:&lt;/b&gt; 웹 환경에서는 '주소'를 의미하는 경우가 많아 &lt;b&gt;URL&lt;/b&gt;이라는 용어가 널리 쓰이며, 현재는 두 용어가 혼용되어 사용되므로, 일반적인 웹 주소는 URL이자 URI로 이해해도 무방합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;2) HTTP Request Line&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GBzQB/btsQ4lGAYY1/pTp5mHz6kKrYLO4xKMRnVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GBzQB/btsQ4lGAYY1/pTp5mHz6kKrYLO4xKMRnVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GBzQB/btsQ4lGAYY1/pTp5mHz6kKrYLO4xKMRnVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGBzQB%2FbtsQ4lGAYY1%2FpTp5mHz6kKrYLO4xKMRnVK%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;647&quot; height=&quot;215&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 요청 메시지는 크게 &lt;b&gt;요청 라인(Request Line)&lt;/b&gt;, &lt;b&gt;요청 헤더(Request Headers)&lt;/b&gt;, 그리고 **요청 메시지 본문(Request Message Body)**으로 구성되어 있습니다.&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;1. 요청 라인 구성 요소 (첫 번째 줄)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 요청의 첫 번째 줄은 &lt;b&gt;요청 라인&lt;/b&gt;입니다: GET /doc/test.html HTTP/1.1&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;a) 메서드 (Method)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; 요청의 &lt;b&gt;종류&lt;/b&gt;를 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 이미지에서는 &lt;b&gt;GET&lt;/b&gt;입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미:&lt;/b&gt; 'URI에서 지정한 정보를 나에게 보내주세요'라는 의미입니다. 웹 브라우저에서 서버로 보내는 대부분의 요청은 GET 메서드를 따릅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;b) URI (Uniform Resource Identifier)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; &lt;b&gt;무엇을&lt;/b&gt; 원하는지, 즉 요청 대상의 자원을 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 이미지에서는 &lt;b&gt;/doc/test.html&lt;/b&gt;입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미:&lt;/b&gt; GET 메서드가 단순히 '정보를 달라'는 의미라면, URI는 '어떤 정보를 원하는가'를 명확히 지정합니다. 일반적으로 URL과 거의 같은 것으로 생각해도 무방합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;c) HTTP 버전 (HTTP Version)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; 사용 중인 HTTP 프로토콜의 버전을 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 이미지에서는 &lt;b&gt;HTTP/1.1&lt;/b&gt;입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미:&lt;/b&gt; 버전에 따라 사용할 수 있는 메서드나 헤더의 종류가 달라지므로, 요청이 어떤 버전에 기반하는지 명시합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 요청 헤더 구성 요소 (메시지 헤더)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청 라인 다음 줄부터는 &lt;b&gt;요청 헤더&lt;/b&gt;이며, 요청에 대한 &lt;b&gt;부가적인 정보&lt;/b&gt;를 나타냅니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;g) Host&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; 요청을 보낸 곳의 &lt;b&gt;호스트명&lt;/b&gt;과 (선택적으로) 포트 번호를 지정합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 이미지에서는 **&lt;a href=&quot;https://www.test101.com&quot; data-ved=&quot;0CAAQ_4QMahcKEwjD5tPY6Z2QAxUAAAAAHQAAAAAQVg&quot; data-hveid=&quot;0&quot;&gt;www.test101.com&lt;/a&gt;**입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미:&lt;/b&gt; 하나의 서버가 여러 웹사이트를 운영할 때(가상 호스팅), 서버가 클라이언트가 원하는 웹사이트가 무엇인지 식별하는 데 매우 중요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;d) Accept&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; 웹 클라이언트가 &lt;b&gt;받을 수 있는 데이터의 종류&lt;/b&gt;를 표시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 이미지에서는 image/gif, image/jpeg, */* 입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미:&lt;/b&gt; 데이터 종류는 &lt;b&gt;Content-Type&lt;/b&gt; 형식으로 표시되며, 클라이언트가 받을 수 있는 Content-Type을 쉼표(,)로 구분하여 지정합니다. 서버는 이 필드를 참조하여 클라이언트가 처리할 수 없는 불필요한 정보를 보내지 않을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;e) Accept-Language&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; 웹 클라이언트가 받을 수 있는 &lt;b&gt;자연 언어&lt;/b&gt;의 종류(사람이 사용하는 언어)를 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 이미지에서는 &lt;b&gt;en-us&lt;/b&gt; (미국식 영어)입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미:&lt;/b&gt; 서버가 다국어 버전을 제공할 때, 이 정보를 참조하여 사용자에게 가장 적합한 언어의 콘텐츠를 제공할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;f) User-Agent&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; 이용 중인 &lt;b&gt;웹 브라우저(웹 클라이언트)의 종류와 버전&lt;/b&gt;을 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 이미지에서는 &lt;b&gt;Mozilla/4.0&lt;/b&gt;입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미:&lt;/b&gt; 서버가 특정 브라우저에 최적화된 콘텐츠를 제공하는 데 참고할 수 있는 정보입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 요청 메시지 본문 (Request Message Body)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헤더 섹션과 &lt;b&gt;빈 줄&lt;/b&gt;로 구분된 다음 부분이 &lt;b&gt;요청 메시지 본문&lt;/b&gt;입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; 서버로 전송하려는 실제 데이터(예: 폼 데이터)를 담고 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 이미지에서는 bookId=12345&amp;amp;author=Tan+Ah+Teck입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미:&lt;/b&gt; 이미지의 예시는 데이터를 포함하고 있습니다. GET 요청의 경우 보통 데이터가 URI에 포함되지만, POST와 같은 다른 메서드에서는 이 본문이 필수적이며 사용자가 입력한 내용이나 업로드할 파일 등이 여기에 담깁니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cg6qFp/btsQ6V0WcOw/tHUrNwaHOSae9GgmgPMZS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg6qFp/btsQ6V0WcOw/tHUrNwaHOSae9GgmgPMZS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg6qFp/btsQ6V0WcOw/tHUrNwaHOSae9GgmgPMZS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg6qFp%2FbtsQ6V0WcOw%2FtHUrNwaHOSae9GgmgPMZS0%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;643&quot; height=&quot;209&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 응답 메시지는 클라이언트(웹 브라우저)의 요청에 대해 서버가 보내는 메시지이며, 크게 &lt;b&gt;상태 라인(Status Line)&lt;/b&gt;, &lt;b&gt;응답 헤더(Response Headers)&lt;/b&gt;, 그리고 **응답 메시지 본문(Response Message Body)**으로 구성됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;3) HTTP response&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;a) 상태 라인 (Status Line)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP 응답에서 가장 중요한 첫 번째 줄을 &lt;b&gt;상태 라인&lt;/b&gt;이라고 합니다. 이 라인은 요청이 성공했는지, 실패했는지 등 처리 결과를 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 라인은 세 부분으로 나뉩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8ohLV/btsQ7zbXlar/BcmppYgwIqeQuFJaPvZ2Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8ohLV/btsQ7zbXlar/BcmppYgwIqeQuFJaPvZ2Ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8ohLV/btsQ7zbXlar/BcmppYgwIqeQuFJaPvZ2Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8ohLV%2FbtsQ7zbXlar%2FBcmppYgwIqeQuFJaPvZ2Ik%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;345&quot; height=&quot;119&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;119&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;HTTP 버전 (HTTP/1.1):&lt;/b&gt; 사용된 프로토콜 버전을 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;상태 코드 (200):&lt;/b&gt; 요청의 &lt;b&gt;처리 결과&lt;/b&gt;를 숫자로 나타냅니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예시의 &lt;b&gt;200&lt;/b&gt;은 요청이 &lt;b&gt;성공(OK)&lt;/b&gt; 하여 정상적인 응답이 돌아왔음을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;응답 구문 (OK):&lt;/b&gt; 상태 코드를 사람이 읽기 쉬운 텍스트로 설명합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  대표적인 HTTP 상태 코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 코드는 세 자리 숫자로 구성되며, 첫 번째 자릿수에 따라 요청 처리의 성공, 실패, 리다이렉션 등을 구분합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-ved=&quot;0CAAQ3ecQahgKEwjD5tPY6Z2QAxUAAAAAHQAAAAAQqgE&quot; data-hveid=&quot;0&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;구분&lt;/td&gt;
&lt;td&gt;범위&lt;/td&gt;
&lt;td&gt;의미&lt;/td&gt;
&lt;td&gt;대표적인 코드&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;2XX&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;성공&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;클라이언트의 요청이 서버에 의해 &lt;b&gt;성공적으로 수신, 이해, 처리&lt;/b&gt;되었습니다.&lt;/td&gt;
&lt;td&gt;&lt;b&gt;200 OK&lt;/b&gt; (성공), &lt;b&gt;201 Created&lt;/b&gt; (자원 생성 성공)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;3XX&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;리다이렉션&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;클라이언트가 요청을 완료하기 위해 **추가적인 동작(다른 위치로 이동 등)**이 필요합니다.&lt;/td&gt;
&lt;td&gt;&lt;b&gt;302 Found&lt;/b&gt; (임시 이동), &lt;b&gt;304 Not Modified&lt;/b&gt; (캐시된 자원 사용)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;4XX&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;클라이언트 오류&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;요청에 오류가 있어 &lt;b&gt;클라이언트 측&lt;/b&gt;에서 요청을 완료할 수 없습니다.&lt;/td&gt;
&lt;td&gt;&lt;b&gt;401 Unauthorized&lt;/b&gt; (권한 없음), &lt;b&gt;404 Not Found&lt;/b&gt; (자원 없음)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;5XX&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;서버 오류&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;서버가 유효한 요청을 &lt;b&gt;명백하게 수행하지 못했을 때&lt;/b&gt; 발생한 오류입니다.&lt;/td&gt;
&lt;td&gt;&lt;b&gt;500 Internal Server Error&lt;/b&gt; (내부 서버 오류), &lt;b&gt;503 Service Unavailable&lt;/b&gt; (서비스 이용 불가)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;b) 메시지 헤더 (Response Headers)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 라인에 이어서 두 번째 줄부터 빈 줄까지 계속되는 부분이며, 응답에 대한 &lt;b&gt;부가적인 정보&lt;/b&gt;가 들어있습니다. 요청 메시지 헤더와 같은 형식으로 구성됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Date:&lt;/b&gt; 응답이 생성된 날짜 및 시간&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Server:&lt;/b&gt; 응답을 처리한 웹 서버의 종류와 버전&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Content-Length:&lt;/b&gt; 응답 메시지 본문의 길이 (크기)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Content-Type:&lt;/b&gt; 메시지 본문에 담긴 데이터의 종류 (예: text/html)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;c) 메시지 본문 (Response Message Body)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메시지 본문은 헤더와 빈 줄로 구분된 다음 부분이며, 클라이언트에게 &lt;b&gt;실제로 전달하려는 데이터&lt;/b&gt;가 담겨 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;역할:&lt;/b&gt; 요청한 자원, 즉 &lt;b&gt;데이터 자체&lt;/b&gt;가 위치하는 곳입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시:&lt;/b&gt; 이미지에서와 같이 HTML 파일을 요청했을 경우, &amp;lt;H1&amp;gt;My Home page&amp;lt;/H1&amp;gt;과 같은 &lt;b&gt;HTML 텍스트&lt;/b&gt;가 여기에 저장됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다양한 데이터:&lt;/b&gt; HTML 외에도, GIF나 JPEG 같은 &lt;b&gt;이미지 파일&lt;/b&gt;, &lt;b&gt;JSON 데이터&lt;/b&gt; 등 요청에 따라 다양한 형식의 데이터가 메시지 본문에 들어가며, 웹 브라우저는 이 본문을 해석하여 화면에 표시합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;4) HTTP method&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beIbWH/btsQ74bIyaJ/gQQuRvabjxudC1ol6MKqDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beIbWH/btsQ74bIyaJ/gQQuRvabjxudC1ol6MKqDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beIbWH/btsQ74bIyaJ/gQQuRvabjxudC1ol6MKqDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeIbWH%2FbtsQ74bIyaJ%2FgQQuRvabjxudC1ol6MKqDK%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;659&quot; height=&quot;386&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>[Study]/[Server] Server</category>
      <category>HTTP</category>
      <category>REQUEST</category>
      <category>response</category>
      <category>Server</category>
      <category>Url</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/82</guid>
      <comments>https://sy1214ei.tistory.com/82#entry82comment</comments>
      <pubDate>Sun, 12 Oct 2025 15:28:28 +0900</pubDate>
    </item>
    <item>
      <title>[MLOps] AutoML (MLJAR)</title>
      <link>https://sy1214ei.tistory.com/81</link>
      <description>&lt;pre id=&quot;code_1745748572704&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- [실습 목표] MLJAR를 이용한 AutoML 프로세스 실습
- [실습 흐름]
  1. 환경 세팅 (Python, MLJAR 설치)
  2. 다양한 모델 학습 및 평가 (UCI Heart Disease 데이터셋 사용)
  3. 결과 해석 및 시각화
- [데이터셋] UCI Heart Disease (새로운 데이터셋!)
- [목적] AutoML이 실제로 어떻게 동작하는지 경험해보기&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745748582349&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- [환경 요구사항]
  - Python 3.8 이상
  - Ubuntu 20.04 이상
  - HDD 여유공간 10GB 이상

- [AWS 주의사항]
  - t2.micro 사용 시 EBS 볼륨 크기 늘려야 함

- [설치 명령어]
  - pip install mljar-supervised

- [설치 소요 시간]
  - 약 3~5분&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;pre id=&quot;code_1745748629764&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- [문제] 기본 AWS EBS 용량(8GB) &amp;rarr; AutoML에 부족

- [해결책] EBS 볼륨을 30GB로 확장

- [AWS 무료 정책] 12개월 동안 30GB까지 무료 사용 가능

- [확장 방법]
  1. AWS Console 접속
  2. EC2 &amp;rarr; Volumes &amp;rarr; 내 볼륨 선택
  3. Modify &amp;rarr; 크기 조정

- [주의사항] Volumes 상태가 &quot;in-use&quot;여야 함

########################################################

- [목적] EBS 볼륨이 EC2 인스턴스에 연결되어 있어야 확장 가능

- [확인 방법]
  1. EC2 &amp;rarr; Volumes 이동
  2. 볼륨 상태(State)가 &quot;in-use&quot;인지 확인

- [주의사항] &quot;available&quot; 상태 볼륨은 사용 불가&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;pre id=&quot;code_1745748648678&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- [이유] EBS 볼륨 크기를 늘린 뒤 -&amp;gt; OS 파티션도 확장해야 함

       * EBS: AWS에서 제공하는 '가상 하드디스크' 서비스 (Elastic Block Store) -&amp;gt; EC2 인스턴스에 연결해서 쓰는 가상 SSD/HDD

- [확인 명령어]
  - sudo lsblk (디스크/파티션 확인)

- [확장 명령어]
  - sudo growpart [디스크 이름] [파티션 번호]

- [예시]
  - sudo growpart /dev/xvda 1&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;pre id=&quot;code_1745748663210&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- [이유] 파티션 확장 후 파일 시스템도 확장해야 새 공간 사용 가능

- [파일 시스템 타입 확인]
  - 명령어: df -hT

- [파일 시스템 확장 명령어]
  - ext4: sudo resize2fs /dev/xvda1
  - xfs: sudo xfs_growfs -d /

- [스토리지 확장 절차]
  1. AWS Console: 볼륨 크기 변경
  2. EC2: growpart로 파티션 확장
  3. df -hT로 파일 시스템 종류 확인
  4. 파일 시스템 확장 (resize2fs 또는 xfs_growfs)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;pre id=&quot;code_1745748680257&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- [AutoML 실습 흐름]
  1. 데이터 준비 (CSV 읽기, 전처리)
  2. AutoML 설정 (AutoML 객체 생성, 모드 설정)
  3. AutoML 실행 (fit 호출, 다양한 모델 학습)
  4. 최적 모델로 예측 (predict 호출)

- [사용 라이브러리]
  - pandas, mljar-supervised

- [결과]
  - artifacts 폴더에 결과 저장&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ditwgQ/btsNAizE5ip/OxlVYKv7aUA5sMIvr2gJHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ditwgQ/btsNAizE5ip/OxlVYKv7aUA5sMIvr2gJHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ditwgQ/btsNAizE5ip/OxlVYKv7aUA5sMIvr2gJHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FditwgQ%2FbtsNAizE5ip%2FOxlVYKv7aUA5sMIvr2gJHK%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;850&quot; height=&quot;543&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;pre id=&quot;code_1745746963780&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- [AutoML이 사용하는 알고리즘]
  - Baseline, Linear, Decision Tree, Random Forest, XGBoost, Neural Network
- [AutoML 단계(steps)]
  - simple_algorithms &amp;rarr; default_algorithms &amp;rarr; ensemble
- [로그 예시]
  - 각 모델의 logloss, 학습시간 기록
- [best model]
  - logloss가 가장 낮은 모델 선택 (예시: Ensemble)
- [logloss란?]
  - 값이 낮을수록 좋은 분류 성능&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1745747116098&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Generated Artifacts

- [artifacts란?]
  - AutoML 결과물(모델, 실험 요약, 설정 파일, 그래프 등)
- [다운로드 명령어 예시]
  - pscp -i aws_key.ppk ubuntu@[IP주소]:[서버경로] [내컴퓨터경로]
- [주요 파일 종류]
  - artifacts 폴더 (모델 결과)
  - README.md (실험 요약)
  - *.json, *.npy (설정 및 모델정보 저장)
  - *.png (시각화된 그래프)
- [주의사항]
  - Windows는 pscp, Mac/Linux는 scp 사용&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1745747693065&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 추가 설명

- [artifacts 폴더]
  - AutoML 실행(automl.fit) 시 자동 생성
  - 모델, 실험 결과, 그래프, 설정 파일 저장
  - 실험 재현과 결과 분석을 쉽게 만들어줌&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1745747231730&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Artifacts Analysis: General Performance

- [README.md]
  - 실험 결과 텍스트 요약 파일
  - 모델별 성능 비교 및 베스트 모델 기록
- [ldb_performance.png]
  - 모델 성능을 시각화한 그래프
  - X축: 모델 이름, Y축: 성능 지표(logloss 등)
- [확인 포인트]
  - 베스트 모델 찾기
  - 성능 격차 분석
- [Tip]
  - 기본 지표: logloss (설정 변경 가능)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1745747388897&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Artifacts Analysis: General Performance

- [Correlation Heatmap]
  - Feature 간 상관관계 시각화
  - 1에 가까움: 강한 양의 상관관계
  - -1에 가까움: 강한 음의 상관관계
- [Feature Importance]
  - 모델이 예측에 의존한 Feature들의 중요도 표시
  - 중요도가 높은 Feature를 우선 활용
- [Tip]
  - Feature Importance는 모델마다 다를 수 있음
  - 상관관계 높은 Feature는 중복 제거 고려 가능&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciytpI/btsNAWv3jrm/n89UqNsCQbD1dWnPV3kf0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciytpI/btsNAWv3jrm/n89UqNsCQbD1dWnPV3kf0k/img.png&quot; data-alt=&quot;바로 위 코드블럭의 참고 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciytpI/btsNAWv3jrm/n89UqNsCQbD1dWnPV3kf0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciytpI%2FbtsNAWv3jrm%2Fn89UqNsCQbD1dWnPV3kf0k%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;686&quot; height=&quot;382&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;바로 위 코드블럭의 참고 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1745747536691&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Note: You Can Generate Web-Style Summary

- [웹 스타일 요약 리포트 생성]
  - 한 줄 명령어: automl.report()
  - 결과물: README.html
  
- [장점]
  - 텍스트보다 보기 쉬운 웹 페이지 형식
  - 그래프/테이블을 통합하여 시각적으로 분석 가능
  - 문서화 및 제출용으로 사용 가능
  
- [Tip]
  - 학습이 끝난 artifacts 폴더 기반으로 HTML 리포트 자동 생성&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745747652760&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Artifacts Analysis: Individual Models

- [개별 모델 분석]
  - 각 모델 학습 결과를 artifacts 폴더에서 개별 분석
  
- [예시]
  - 베스트 모델: Linear + Default XGBoost + Default Neural Network (앙상블)
  
- [artifacts 폴더 구조]
  - 각 모델별 디렉토리에 설정 정보, 평가 지표, feature importance 저장
- [앙상블 모델]
  - 여러 모델을 조합하여 최종 결과 도출&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1745747956425&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Let's Test with Your Taste: Change modes

- [AutoML 모드]
  - 실험 목표에 따라 Explain / Perform / Compete 모드를 선택

- [모드별 특징]
  - Explain: 빠르고 설명 가능한 모델
  - Perform: 실용성 좋은 모델
  - Compete: 최고 성능 모델 (시간 오래 걸림)

- [Tip]
  - Compete 모드는 24시간 이상 소요될 수 있음 (주의)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745748095079&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Let's Test with Your Taste: Change Config

- [Config 변경]
  - Mode 선택과 별개로 세부 설정 가능

- [설정 항목 예시]
  - algorithms: 사용할 알고리즘 선택
  - hyperparameter_search: 튜닝 방법 선택 (random/grid search)
  - validation_strategy: 데이터 검증 방식 설정 (ex: kfold)

- [예시 코드]
  - AutoML(algorithms=[&quot;Random Forest&quot;], hyperparameter_search=&quot;random&quot;, validation_strategy={&quot;validation_type&quot;: &quot;kfold&quot;, &quot;k_folds&quot;: 5})

- [Tip]
  - 공식 문서(supervised.mljar.com/api)에서 더 많은 설정 가능

#############################################################

# Config 설정 예시 코드

automl = AutoML(
	mode='Explain',
    algorithms=[&quot;Random Forest&quot;],
    train_ensemble=False,
    stack_models=False,
    eval_metric='f1'
    validation_strategy={
    	&quot;validation_type': 'kfold',
        &quot;k_folds&quot;: 5,
        &quot;shuffle&quot;: True,
        &quot;stratify&quot;: True,
        &quot;random_seed&quot;: 123
    },
    explain_level=0
)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1745748457339&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Summary

- [Week 7 Lab 요약]
  - AutoML(MLJAR)로 머신러닝 실험 자동화
  - 환경 세팅 &amp;rarr; 모델 학습 &amp;rarr; 결과 분석

- [AutoML 장점]
  - 빠른 실험 속도
  - 높은 재현성
  - 유연한 모드/세팅
  - 다양한 모드로 목표 설정 가능 (Explain / Perform / Compete)

- [실험 후 분석]
  - artifacts 폴더 활용 (README, 그래프, feature 분석)

- [Tip]
  - 실험 반복하면서 성능 개선 방향 스스로 찾아야 함&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Subject/[MLOps] ML Operations</category>
      <category>AutoML</category>
      <category>mljar</category>
      <category>mlops</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/81</guid>
      <comments>https://sy1214ei.tistory.com/81#entry81comment</comments>
      <pubDate>Sun, 27 Apr 2025 19:11:30 +0900</pubDate>
    </item>
    <item>
      <title>[Programmers] SQL 조건에 맞는 도서와 저자 리스트 출력하기</title>
      <link>https://sy1214ei.tistory.com/80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/144854&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/144854&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744886379396&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/144854&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c8Zx2q/hyYHaCzM9k/PBLEYj3f1ldpeffPIROBaK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bvgA02/hyYIc7l95j/iMaT4Y6OkIoFruWyG6bHM0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/144854&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/144854&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c8Zx2q/hyYHaCzM9k/PBLEYj3f1ldpeffPIROBaK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bvgA02/hyYIc7l95j/iMaT4Y6OkIoFruWyG6bHM0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&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;pre id=&quot;code_1744886395170&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- mysql
SELECT book_id, author_name, DATE_FORMAT(published_date, '%Y-%m-%d')
FROM book INNER JOIN AUTHOR
USING (author_id)
WHERE category = '경제'
ORDER BY published_date;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Coding]/[Programmers]</category>
      <category>Database</category>
      <category>db</category>
      <category>SQL</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/80</guid>
      <comments>https://sy1214ei.tistory.com/80#entry80comment</comments>
      <pubDate>Thu, 17 Apr 2025 19:40:05 +0900</pubDate>
    </item>
    <item>
      <title>[Programmers] SQL 상품 별 오프라인 매출 구하기</title>
      <link>https://sy1214ei.tistory.com/79</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131533&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/131533&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744886036468&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131533&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/7rngb/hyYH9v1Hi5/axAmYg7mgS1VPs6qUWoxfk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/zdkgJ/hyYChbotCr/TTqkNlyvlg4OUT9N6MI3ok/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131533&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131533&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/7rngb/hyYH9v1Hi5/axAmYg7mgS1VPs6qUWoxfk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/zdkgJ/hyYChbotCr/TTqkNlyvlg4OUT9N6MI3ok/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&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;pre id=&quot;code_1744886065884&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- mysql

SELECT product_code, price * SUM(sales_amount) AS sales
FROM product P JOIN offline_sale OFF
ON P.product_id = OFF.product_id
GROUP BY product_code
ORDER BY price * SUM(sales_amount) DESC, product_code;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Coding]/[Programmers]</category>
      <category>Database</category>
      <category>db</category>
      <category>SQL</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/79</guid>
      <comments>https://sy1214ei.tistory.com/79#entry79comment</comments>
      <pubDate>Thu, 17 Apr 2025 19:34:36 +0900</pubDate>
    </item>
    <item>
      <title>[Programmers] SQL 경기도에 위치한 식품창고 목록 출력하기</title>
      <link>https://sy1214ei.tistory.com/78</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131114&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/131114&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744884913420&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131114&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kE9jt/hyYH6TBDSb/UKakPMrTJLsDIRUn0qeUik/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bAk70U/hyYFBNt0rg/sMyedaHkmckl46bQnMZJN0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131114&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131114&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kE9jt/hyYH6TBDSb/UKakPMrTJLsDIRUn0qeUik/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bAk70U/hyYFBNt0rg/sMyedaHkmckl46bQnMZJN0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&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;pre id=&quot;code_1744884928920&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- mysql
SELECT warehouse_id, warehouse_name, address,
       CASE WHEN freezer_yn IS NULL THEN 'N'
       ELSE freezer_yn END
FROM food_warehouse
WHERE address LIKE &quot;경기도%&quot;
ORDER BY warehouse_id;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Coding]/[Programmers]</category>
      <category>Database</category>
      <category>db</category>
      <category>mysql</category>
      <category>SQL</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/78</guid>
      <comments>https://sy1214ei.tistory.com/78#entry78comment</comments>
      <pubDate>Thu, 17 Apr 2025 19:15:39 +0900</pubDate>
    </item>
    <item>
      <title>[Programmers] SQL 부서별 평균 연봉 조회하기</title>
      <link>https://sy1214ei.tistory.com/77</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/284529&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/284529&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744884290686&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/284529&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfHAVq/hyYIhAOKSw/jBISCO08dbHGZmKMnEP7m1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/Ftr0o/hyYH8cNYyW/9ImwNfLhPOoWJoTVkOtd71/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/284529&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/284529&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfHAVq/hyYIhAOKSw/jBISCO08dbHGZmKMnEP7m1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/Ftr0o/hyYH8cNYyW/9ImwNfLhPOoWJoTVkOtd71/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&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;pre id=&quot;code_1744884307986&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- mysql
SELECT D.dept_id, dept_name_en, ROUND(AVG(sal), 0) AS AVG_SAL
FROM hr_department D CROSS JOIN hr_employees E
WHERE D.dept_id = E.dept_id
GROUP BY D.dept_id, dept_name_en
ORDER BY AVG(sal) DESC;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Coding]/[Programmers]</category>
      <category>Database</category>
      <category>db</category>
      <category>mysql</category>
      <category>SQL</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/77</guid>
      <comments>https://sy1214ei.tistory.com/77#entry77comment</comments>
      <pubDate>Thu, 17 Apr 2025 19:05:21 +0900</pubDate>
    </item>
    <item>
      <title>[Programmers] SQL 노선별 평균 역 사이 거리 조회하기</title>
      <link>https://sy1214ei.tistory.com/76</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/284531&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/284531&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744881163382&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/284531&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ch99cD/hyYG7Z56SV/KyH8kjtY4tRwrTo80dlQn0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/GL7ul/hyYG9cyp6j/VqoLTPwIVN7S7vwDsusam0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/284531&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/284531&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ch99cD/hyYG7Z56SV/KyH8kjtY4tRwrTo80dlQn0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/GL7ul/hyYG9cyp6j/VqoLTPwIVN7S7vwDsusam0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&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;pre id=&quot;code_1744881181468&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- mysql

SELECT route, CONCAT(ROUND(SUM(d_between_dist),1),'km') AS TOTAL_DISTANCE, CONCAT(ROUND(AVG(d_between_dist), 2),'km') AS AVERAGE_DISTANCE
FROM subway_distance
GROUP BY route
ORDER BY ROUND(SUM(d_cumulative),1) DESC;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Coding]/[Programmers]</category>
      <category>Database</category>
      <category>db</category>
      <category>mysql</category>
      <category>SQL</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/76</guid>
      <comments>https://sy1214ei.tistory.com/76#entry76comment</comments>
      <pubDate>Thu, 17 Apr 2025 18:16:49 +0900</pubDate>
    </item>
    <item>
      <title>[Programmers] SQL 가격대 별 상품 개수 구하기</title>
      <link>https://sy1214ei.tistory.com/75</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131530&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/131530&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744880459525&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131530&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cJSad3/hyYFzWq1K0/VFjNwyqJPpZNimHIWpQHKk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bgT9tU/hyYFy4iqZk/mEeQbr6YixKW8zk0xNsVFK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131530&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/131530&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cJSad3/hyYFzWq1K0/VFjNwyqJPpZNimHIWpQHKk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bgT9tU/hyYFy4iqZk/mEeQbr6YixKW8zk0xNsVFK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&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;pre id=&quot;code_1744880463795&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- mysql

SELECT (price DIV 10000)*10000 AS PRICE_GROUP, COUNT(*)
FROM product
GROUP BY (price DIV 10000)
ORDER BY (price DIV 10000)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Coding]/[Programmers]</category>
      <category>Database</category>
      <category>db</category>
      <category>mysql</category>
      <category>SQL</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/75</guid>
      <comments>https://sy1214ei.tistory.com/75#entry75comment</comments>
      <pubDate>Thu, 17 Apr 2025 18:01:16 +0900</pubDate>
    </item>
    <item>
      <title>[Programmers] SQL 고양이와 개는 몇 마리 있을까</title>
      <link>https://sy1214ei.tistory.com/74</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59040&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/59040&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744879912785&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59040&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/o8bQf/hyYH5Am3m5/3B107Y6hguHVByceAUbLCK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/xg3s4/hyYG2xHIp4/MKDCKx1NSdfhBLPkdKPFG0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59040&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/59040&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/o8bQf/hyYH5Am3m5/3B107Y6hguHVByceAUbLCK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/xg3s4/hyYG2xHIp4/MKDCKx1NSdfhBLPkdKPFG0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&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;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&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;pre id=&quot;code_1744879915486&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- mysql
SELECT animal_type, COUNT(*)
FROM animal_ins
WHERE animal_type LIKE 'Cat' OR animal_type LIKE 'Dog'
GROUP BY animal_type
ORDER BY animal_type&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[Coding]/[Programmers]</category>
      <category>Database</category>
      <category>db</category>
      <category>mysql</category>
      <category>SQL</category>
      <author>sy1214ei</author>
      <guid isPermaLink="true">https://sy1214ei.tistory.com/74</guid>
      <comments>https://sy1214ei.tistory.com/74#entry74comment</comments>
      <pubDate>Thu, 17 Apr 2025 17:52:07 +0900</pubDate>
    </item>
  </channel>
</rss>