<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>나만의 개발 블로그</title>
    <link>https://naman-develop.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 14 Apr 2026 23:38:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>내만</managingEditor>
    <image>
      <title>나만의 개발 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/5431408/attach/d59e3835ecdc415fbd2a43a34ef89e1c</url>
      <link>https://naman-develop.tistory.com</link>
    </image>
    <item>
      <title>그래프</title>
      <link>https://naman-develop.tistory.com/197</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cteqo3/btrT6uU2kNv/njf3rX326AlfK5NGPAe1Jk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cteqo3/btrT6uU2kNv/njf3rX326AlfK5NGPAe1Jk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cteqo3/btrT6uU2kNv/njf3rX326AlfK5NGPAe1Jk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcteqo3%2FbtrT6uU2kNv%2Fnjf3rX326AlfK5NGPAe1Jk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-L8CyiHZdqlV12S82&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8392839309180094&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;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 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️ 그래프&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프란 노드와 그 노드를 모아놓은 간선을 하나로 모은 자료구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 객체와 다른 객체가 연결되어 있는 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;종류&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무방향 그래프 &amp;gt; 간선에 방향이 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방향 그래프 &amp;gt; 간선에 방향이 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가중치 그래프 &amp;gt; 간선에 가중치가 할당된 그래프, 네트워크라고도 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부분 그래프 &amp;gt; 특정 그래프에서 일부분을 때어낸 그래프&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;용어&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;노드, 간선, 인접 정점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;차수&lt;/b&gt; &amp;gt; 연결되어 있는 간선 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;무방향 그래프&lt;/b&gt; : 차수의 합 == 간선 * 2&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;단순경로&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;연결 그래프&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;완전 그래프&lt;/b&gt; - 모든 정점 간에 간선이 존재할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;구현&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인접 행렬 or 인접 리스트 or 노드와 같이 리스트로&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;제일 좋은 것은 딕셔너리와 set을 활용하여 구현&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671504258702&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;&quot;&quot;
A - C - E - G
|   |       |
B - D - F   H
&quot;&quot;&quot;
graph = {
    'A':set(['B','C']),
    'B':set(['A','D']),
    'C':set(['A','D','E']),
    'D':set(['B','C','F']),
    'E':set(['C','G','H']),
    'F':set(['D']),
    'G':set(['E','H']),
    'H':set(['G']),
}

graph['C']&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;39&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nrsGf/btrT5s9Hvpt/8QntKsdkPGYQmG4UYzJpmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nrsGf/btrT5s9Hvpt/8QntKsdkPGYQmG4UYzJpmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nrsGf/btrT5s9Hvpt/8QntKsdkPGYQmG4UYzJpmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnrsGf%2FbtrT5s9Hvpt%2F8QntKsdkPGYQmG4UYzJpmK%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;300&quot; height=&quot;94&quot; data-origin-width=&quot;125&quot; data-origin-height=&quot;39&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;탐색&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DFS ( 깊이 우선 탐색)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671504883122&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def dfs(graph,start,visited=set()):
    if start not in visited:
        visited.add(start)
        print(start, end=' =&amp;gt; ')
        subt = graph[start] - visited
        for v in subt:
            dfs(graph,v,visited)

&quot;&quot;&quot;
A - C - E - G
|   |       |
B - D - F   H
&quot;&quot;&quot;
dfs(graph,'A')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJsw8i/btrT6uMSOMQ/srdDcvWmFmI3odiDGVzjxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJsw8i/btrT6uMSOMQ/srdDcvWmFmI3odiDGVzjxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJsw8i/btrT6uMSOMQ/srdDcvWmFmI3odiDGVzjxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJsw8i%2FbtrT6uMSOMQ%2FsrdDcvWmFmI3odiDGVzjxk%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;500&quot; height=&quot;68&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BFS ( 너비 우선 탐색 )&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671505219147&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import collections
def bfs(graph,start):
    visited = set([start])
    queue = collections.deque([start])
    while queue:
        vertex = queue.popleft()
        print(vertex, end=&quot; =&amp;gt; &quot;)
        subt = graph[vertex] - visited
        for v in subt:
            visited.add(v)
            queue.append(v)
&quot;&quot;&quot;
A - C - E - G
|   |       |
B - D - F   H
&quot;&quot;&quot;
bfs(graph,'A')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;237&quot; data-origin-height=&quot;18&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IOe9o/btrT4qkxCjC/44f91Dx6gKp066H914uu20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IOe9o/btrT4qkxCjC/44f91Dx6gKp066H914uu20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IOe9o/btrT4qkxCjC/44f91Dx6gKp066H914uu20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIOe9o%2FbtrT4qkxCjC%2F44f91Dx6gKp066H914uu20%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;500&quot; height=&quot;38&quot; data-origin-width=&quot;237&quot; data-origin-height=&quot;18&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;연결 성분&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대로 연결된 부분 그래프들을 구함&lt;/p&gt;
&lt;pre id=&quot;code_1671507333008&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;&quot;&quot;
C - A - B   &amp;gt; graph
D - E       &amp;gt; graph
&quot;&quot;&quot;

graph = {
    'A':set({'B','C'}),
    'B':set({'A'}),
    'C':set({'A'}),
    'D':set({'E'}),
    'E':set({'D'}),
}

def find_com(graph):
    allvisited = set()
    g_com = []
    
    for v in graph:
        if v not in allvisited:
            visited = set()
            dfs(graph,v,visited)
            allvisited.update(visited)
            g_com.append(visited.copy())
            print(visited)
find_com(graph)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCMwtG/btrT4GALa5o/VEHG68mRk06eR5oD8HKXTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCMwtG/btrT4GALa5o/VEHG68mRk06eR5oD8HKXTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCMwtG/btrT4GALa5o/VEHG68mRk06eR5oD8HKXTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCMwtG%2FbtrT4GALa5o%2FVEHG68mRk06eR5oD8HKXTk%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;500&quot; height=&quot;137&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;70&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;신장 트리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래프 내의 모든 정점을 포함하는 트리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이클 x&lt;/p&gt;
&lt;pre id=&quot;code_1671508517762&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;graph = {
    'A':set(['B','C']),
    'B':set(['A','D']),
    'C':set(['A','D','E']),
    'D':set(['B','C','F']),
    'E':set(['C','G','H']),
    'F':set(['D']),
    'G':set(['E','H']),
    'H':set(['G']),
}

import collections
def bfs(graph,start):
    visited = set([start])
    queue = collections.deque([start])
    while queue:
        vertex = queue.popleft()
#         print(vertex, end=&quot; =&amp;gt; &quot;) bfs에서 이건 지워지고
        subt = graph[vertex] - visited
        for v in subt:
            print(f&quot;({vertex}, {v})&quot;, end=&quot; =&amp;gt; &quot;)
            visited.add(v)
            queue.append(v)
&quot;&quot;&quot;
A - C - E - G
|   |       |
B - D - F   H
&quot;&quot;&quot;
bfs(graph,'A')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyJuiO/btrT1HgazXe/gukyU1I8rwTFOheWygVcL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyJuiO/btrT1HgazXe/gukyU1I8rwTFOheWygVcL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyJuiO/btrT1HgazXe/gukyU1I8rwTFOheWygVcL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyJuiO%2FbtrT1HgazXe%2FgukyU1I8rwTFOheWygVcL1%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;600&quot; height=&quot;54&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;위상정렬&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방향 그래프에 대한 정점들의 선행 순서를 위배하지 않으면서 모든 정점을 나열하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcruAH/btrT4pTGCQJ/PSW5ZM3hnKkk3VwRgItBWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcruAH/btrT4pTGCQJ/PSW5ZM3hnKkk3VwRgItBWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcruAH/btrT4pTGCQJ/PSW5ZM3hnKkk3VwRgItBWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcruAH%2FbtrT4pTGCQJ%2FPSW5ZM3hnKkk3VwRgItBWK%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;500&quot; height=&quot;465&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;184&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/알고리즘&amp;amp;자료구조</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/197</guid>
      <comments>https://naman-develop.tistory.com/197#entry197comment</comments>
      <pubDate>Tue, 20 Dec 2022 18:08:10 +0900</pubDate>
    </item>
    <item>
      <title>[자료구조] 트리 - 탐색 트리</title>
      <link>https://naman-develop.tistory.com/196</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQOAbx/btrT4qkuOF3/mvlUUmYakMNL7ZnfxRVHA1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQOAbx/btrT4qkuOF3/mvlUUmYakMNL7ZnfxRVHA1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQOAbx/btrT4qkuOF3/mvlUUmYakMNL7ZnfxRVHA1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQOAbx%2FbtrT4qkuOF3%2FmvlUUmYakMNL7ZnfxRVHA1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-L8CyiHZdqlV12S82&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8392839309180094&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;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 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️ 이진 탐색 트리&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;278&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VLVLc/btrT4AG6g6x/sIhyq9KQrMT7KdK6MvoXqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VLVLc/btrT4AG6g6x/sIhyq9KQrMT7KdK6MvoXqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VLVLc/btrT4AG6g6x/sIhyq9KQrMT7KdK6MvoXqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVLVLc%2FbtrT4AG6g6x%2FsIhyq9KQrMT7KdK6MvoXqk%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;278&quot; height=&quot;276&quot; data-origin-width=&quot;278&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 정렬할 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;이진탐색트리 :&lt;/b&gt;&amp;nbsp;특정 값을 빠르게 탐색하기 위한 목적&lt;/p&gt;
&lt;pre id=&quot;code_1671472027253&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#binary search tree
class BSTNode:
    def __init__(self, key, value):
        self.key=key
        self.value=value
        self.left=None
        self.right=None&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;연산&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;탐색연산&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbLyLp/btrT6vx3m2b/ZwpqF5Rt6kgtI8kZ7jjSA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbLyLp/btrT6vx3m2b/ZwpqF5Rt6kgtI8kZ7jjSA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbLyLp/btrT6vx3m2b/ZwpqF5Rt6kgtI8kZ7jjSA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbLyLp%2FbtrT6vx3m2b%2FZwpqF5Rt6kgtI8kZ7jjSA1%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;607&quot; height=&quot;181&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;logn의 연산속도를 갖음.&lt;/p&gt;
&lt;pre id=&quot;code_1671472366917&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def search(n,key):
    if n==None:
        return None
    elif n.key == key:
        return n
    elif n.key &amp;gt; key:
        return search(n.left, key)
    elif n.key &amp;lt; key:
        return search(n.right, key)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1671472378502&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def search_max(n):
    while n != None and n.right !=None:
        n = n.right
    return n

def search_min(n):
    while n != None and n.left !=None:
        n = n.left
    return n&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;삽입연산&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1671472600071&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def insert(root,n):
    if n.key &amp;lt; root.key:
        if root.left is None:
            root.left = n
            return True
        else:
            return insert(root.left,n)
    elif n.key &amp;gt; root.key:
        if root.right is None:
            root.right = n
            return True
        else:
            return insert(root.right,n)
    else:
        return False&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;삭제연산&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;case 1 : 단말 노드 삭제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671475167020&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def delete_case1(parent,n,root):
    if parent is None:
        root = None
    else:
        if parent.left == n:
            parent.left=None
        else:
            parent.right = None
    return root&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;b&gt;case 2 : 자식이 하나인 노드 삭제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671475329581&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def delete_case2(parent,n,root):
    if n.left is not None:
        child = n.left
    else:
        child = n.right
    
    if n == root:
        root = child
    else:
        if n is parent.left:
            parent.left = child
        else:
            parent.right = child
    return root&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;b&gt;case 3 : 두 개의 자식을 가진 노드 삭제&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671477298145&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def delete_case3(parent,n,root):
    succ_p = n
    succ = n.right
    while succ.left != None:
        succ_p = succ
        succ = succ.left
        
    if succ_p.left == succ:
        succ_p.left = succ.right
    else:
        succp.right = succ.right
    n.key = succ.key
    n.value = succ.value
    return root&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;b&gt;전체 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671477361100&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def delete_all(root,key):
    if root == None:
        return None
    
    parent = None
    node = root
    while node is not None and node.key is not key:
        parent = node
        if key &amp;lt; node.key:
            node = node.left
        else:
            node = node.right
    if node == None:
        return None
    if node.left == None and node.right == None:
        root = delete_case1(parent,node,root)
    elif node.left == None or node.right == None:
        root = delete_case2(parent,node,root)
    else:
        root = delete_case3(parent,node,root)
        
    return root&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;맵(map)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 탐색키를 가진 레코드 값을 찾는 자료구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬의 dictionary와 같음.&lt;/p&gt;
&lt;pre id=&quot;code_1671473939212&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class BSTMap():
    def __init__(self):
        self.root = None
    def isEmt(self): return self.root == None
    def search(self,key):
        return search(self.root,key)
    def findMax(self):
        return search_max(self.root)
    def findMin(self):
        return search_min(self.root)
    def insert(self, key, value=None):
        n = BSTNode(key,value)
        if self.isEmt():
            self.root=n
        else:
            insert(self.root, n)
    def inorder(self,n):
        if n is not None:
            self.inorder(n.left)
            print(f'({n.key},{n.value})',end=&quot; &quot;)
            self.inorder(n.right)
    
    def levelorder(self,n):
        import queue  
        q = queue.Queue()
        q.put(n)
        while q.empty() == False:
            next_n = q.get()
            if next_n is not None:
                print(f'({next_n.key},{next_n.value})',end=&quot; &quot;)
                q.put(next_n.left)
                q.put(next_n.right)
            
    def display_sort(self):       #오름차순 출력(중위 순회)
        print(&quot;MAP : &quot;,end=&quot; &quot;)
        self.inorder(self.root)
        print()
        
    def display_tree(self):       #트리 레벨을 출력
        print(&quot;MAP-lv : &quot;,end=&quot; &quot;)
        self.levelorder(self.root)
        print()
        
    def delKey(self,key):
        self.root = delete_all(self.root, key)
            
b_map = BSTMap()
key_data = [35,18,68,7,26,99,3,12,22,30]
for key in key_data:
    b_map.insert(key)

b_map.display_sort()
b_map.display_tree()

print(&quot;key 26 : &quot;,b_map.search(26))
print(&quot;key 26 : &quot;,b_map.search(28))
print(b_map.findMax().key)

b_map.delKey(18)
b_map.display_sort()
b_map.display_tree()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uUxZB/btrT6wqbNpT/EG423ahubesA7iuHt7EGV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uUxZB/btrT6wqbNpT/EG423ahubesA7iuHt7EGV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uUxZB/btrT6wqbNpT/EG423ahubesA7iuHt7EGV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuUxZB%2FbtrT6wqbNpT%2FEG423ahubesA7iuHt7EGV0%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;631&quot; height=&quot;142&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;142&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; &amp;zwj;♂️ 균형 이진 탐색 트리&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AVL 균형이진탐색트리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 경우에 log n 시간복잡도를 보장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;균형 인수가 1~ -1이 넘어가면 안됩니다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;회전 방법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. LL 회전 방법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671478599677&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def rotateLL(A):
    B=A.left
    A.left = B.right
    B.right = A
    return B&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. RR 회전 방법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671478607879&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def rotateRR(A):
    B=A.right
    A.right = B.left
    B.left = A
    return B&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. RL 회전 방법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671478613268&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def rotateRL(A):
    B = A.right
    A.right = rotateLL(B)
    return rotateRR(A)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. LR 회전 방법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671478623875&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def rotateLR(A):
    B = A.left
    A.left = rotateRR(B)
    return rotateLL(A)&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/알고리즘&amp;amp;자료구조</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/196</guid>
      <comments>https://naman-develop.tistory.com/196#entry196comment</comments>
      <pubDate>Tue, 20 Dec 2022 11:23:55 +0900</pubDate>
    </item>
    <item>
      <title>[자료구조] 트리 - 일반 트리, 이진 트리, 결정트리, 힙</title>
      <link>https://naman-develop.tistory.com/195</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cplfGH/btrT5rCP1JV/VrKUkXpuXqDvKabrT1QTh0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cplfGH/btrT5rCP1JV/VrKUkXpuXqDvKabrT1QTh0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cplfGH/btrT5rCP1JV/VrKUkXpuXqDvKabrT1QTh0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcplfGH%2FbtrT5rCP1JV%2FVrKUkXpuXqDvKabrT1QTh0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-L8CyiHZdqlV12S82&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8392839309180094&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;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 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️일반 트리&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;최상위 노드&lt;/b&gt;를 &lt;b&gt;루트 노드&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;pre id=&quot;code_1671461475189&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class TNode:
    def __init__(self,data, left, right):
        self.data = data
        self.left = left
        self.right = right
        
d = TNode('D',None,None)
e = TNode('E',None,None)
f = TNode('F',None,None)
b = TNode('B',d,e)
c = TNode('C',f,None)
a = TNode('A',b,c)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blG0p8/btrT2QXZlCe/vMTjQG1qppWIT4me1w451K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blG0p8/btrT2QXZlCe/vMTjQG1qppWIT4me1w451K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blG0p8/btrT2QXZlCe/vMTjQG1qppWIT4me1w451K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblG0p8%2FbtrT2QXZlCe%2FvMTjQG1qppWIT4me1w451K%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;440&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;440&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; &amp;zwj;♂️이진 트리&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이진 트리 : 모든 노드가 2개의 서브 트리를 갖는 트리&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BVRwX/btrT4ISsZhf/KVRFk3dvwkxg305nCDwzrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BVRwX/btrT4ISsZhf/KVRFk3dvwkxg305nCDwzrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BVRwX/btrT4ISsZhf/KVRFk3dvwkxg305nCDwzrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBVRwX%2FbtrT4ISsZhf%2FKVRFk3dvwkxg305nCDwzrK%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;773&quot; height=&quot;480&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완전 이진트리 : 왼쪽부터 꽉찬 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포화 이진트리 : 모든 노드가 꽉차있는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이진트리의 특징1&lt;/b&gt; : &lt;span style=&quot;background-color: #f6e199;&quot;&gt;노드의 개수가 n개&lt;/span&gt;면 &lt;span style=&quot;background-color: #9feec3;&quot;&gt;간선의 개수는 n-1&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이진트리의 특징2&amp;nbsp;&lt;/b&gt;: 높이가 h이면 h~2^h-1개의 노드를 가짐.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 반대로 생각하면 n개 노드의 이진 트리 높이는 log2(n+1) ~ n이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;표현법&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.배열 표현법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 연결된 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;배열 표현법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점 - 구현이 쉬움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점 - 메모리 낭비가 심함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;연결된 구조&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHBeBT/btrT5T0bPwN/gBsOzJIIE6WmATnIeXZejK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHBeBT/btrT5T0bPwN/gBsOzJIIE6WmATnIeXZejK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHBeBT/btrT5T0bPwN/gBsOzJIIE6WmATnIeXZejK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHBeBT%2FbtrT5T0bPwN%2FgBsOzJIIE6WmATnIeXZejK%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;390&quot; height=&quot;107&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공간의 제약이 적습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;순회&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순회란 트리에 속하는 모든 노드를 한 번씩 방문하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 전위 순회&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 중위 순회&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 후위 순회&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 레벨 순회&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;전위 순회&lt;/b&gt; : 루트 &amp;gt; 왼쪽 서브트리 &amp;gt; 오른쪽 서브트리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징 - 부모를 처리한 다음에 자식을 처리하는 경우&lt;/p&gt;
&lt;pre id=&quot;code_1671461495393&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class TNode:
    def __init__(self,data, left, right):
        self.data = data
        self.left = left
        self.right = right

def pre(n):
    if n is not None:
        print(n.data, end=&quot; &quot;)
        pre(n.left)
        pre(n.right)

#   A
# B   C
#DE  F

d = TNode('D',None,None)
e = TNode('E',None,None)
f = TNode('F',None,None)
b = TNode('B',d,e)
c = TNode('C',f,None)
a = TNode('A',b,c)

pre(a)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pBfDv/btrT6ddavS0/iM0dTO6QhsZxlzFUplB0N0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pBfDv/btrT6ddavS0/iM0dTO6QhsZxlzFUplB0N0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pBfDv/btrT6ddavS0/iM0dTO6QhsZxlzFUplB0N0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpBfDv%2FbtrT6ddavS0%2FiM0dTO6QhsZxlzFUplB0N0%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;440&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;95&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ulvXi/btrT4dekFSx/PsTUXNdznazYnBeUpsHVTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ulvXi/btrT4dekFSx/PsTUXNdznazYnBeUpsHVTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ulvXi/btrT4dekFSx/PsTUXNdznazYnBeUpsHVTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FulvXi%2FbtrT4dekFSx%2FPsTUXNdznazYnBeUpsHVTK%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;300&quot; height=&quot;92&quot; data-origin-width=&quot;95&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중위 순회&lt;/b&gt; : 왼쪽 서브트리 &amp;gt; 루트 &amp;gt; 오른쪽 서브트리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징 - 이진탐색트리의 경우 제일 작은 값이 왼쪽 아래에 위치하게 되어서 정렬에 용이합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1671461841993&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def inO(n):
    if n is not None:
        inO(n.left)
        print(n.data, end=&quot; &quot;)
        inO(n.right)

inO(a)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;69&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XMFsZ/btrTZAgUcQx/CMwDTFm2crdWc9xfiK72Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XMFsZ/btrTZAgUcQx/CMwDTFm2crdWc9xfiK72Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XMFsZ/btrTZAgUcQx/CMwDTFm2crdWc9xfiK72Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXMFsZ%2FbtrTZAgUcQx%2FCMwDTFm2crdWc9xfiK72Jk%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;300&quot; height=&quot;91&quot; data-origin-width=&quot;69&quot; data-origin-height=&quot;21&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;후위 순회 : 왼쪽 서브트리 &amp;gt; 오른쪽 서브트리 &amp;gt; 루트&lt;/p&gt;
&lt;pre id=&quot;code_1671462049546&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def post(n):
    if n is not None:
        post(n.left)
        post(n.right)
        print(n.data, end=&quot; &quot;)
        
post(a)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;82&quot; data-origin-height=&quot;23&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kETyH/btrT2PLuMm9/Zc4GTKVlLEuXs0FSXte6GK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kETyH/btrT2PLuMm9/Zc4GTKVlLEuXs0FSXte6GK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kETyH/btrT2PLuMm9/Zc4GTKVlLEuXs0FSXte6GK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkETyH%2FbtrT2PLuMm9%2FZc4GTKVlLEuXs0FSXte6GK%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;300&quot; height=&quot;84&quot; data-origin-width=&quot;82&quot; data-origin-height=&quot;23&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레벨 순회 : 노드를 레벨 순으로 검사하는 순회 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큐를 이용해서 구현할 수 있음.&lt;/p&gt;
&lt;pre id=&quot;code_1671462372735&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from queue import Queue
def level(root):
    queue = Queue()
    queue.put(root)
    while not queue.empty():
        n = queue.get()
        if n is not None:
            print(n.data, end=&quot; &quot;)
            queue.put(n.left)
            queue.put(n.right)
            
level(a)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;76&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVi8bN/btrT3p0c9UT/1EfJsCw0KFRrVdbvOOwBKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVi8bN/btrT3p0c9UT/1EfJsCw0KFRrVdbvOOwBKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVi8bN/btrT3p0c9UT/1EfJsCw0KFRrVdbvOOwBKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVi8bN%2FbtrT3p0c9UT%2F1EfJsCw0KFRrVdbvOOwBKK%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;300&quot; height=&quot;21&quot; data-origin-width=&quot;76&quot; data-origin-height=&quot;21&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;연산&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;노드 개수&lt;/b&gt; : 아래에서 위로 각 자식의 후손 노드 수를 합해서 올라가서 최종적으로 루트 노드에서 총 합을 구하게 되는 방식입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1671462727187&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def cntN(n):
    if n is None:
        return 0
    else:
        return cntN(n.left) + cntN(n.right)+1
        
cntN(a)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;30&quot; data-origin-height=&quot;31&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coXj8s/btrT5U5SkHc/k0fpII7v00avaaTOLgrYn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coXj8s/btrT5U5SkHc/k0fpII7v00avaaTOLgrYn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coXj8s/btrT5U5SkHc/k0fpII7v00avaaTOLgrYn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoXj8s%2FbtrT5U5SkHc%2Fk0fpII7v00avaaTOLgrYn1%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;100&quot; height=&quot;31&quot; data-origin-width=&quot;30&quot; data-origin-height=&quot;31&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단말 노드의 수&lt;/b&gt; : 단말 노드인 경우만 sum&lt;/p&gt;
&lt;pre id=&quot;code_1671462870466&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def cntL(n):
    if n is None:
        return 0
    elif n.left ==None and n.right ==None:
        return 1
    else:
        return cntL(n.left) + cntL(n.right)
        
cntL(a)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;24&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xvvl1/btrT5bthIUt/OH4SvgAzrQkIUV58EtklC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xvvl1/btrT5bthIUt/OH4SvgAzrQkIUV58EtklC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xvvl1/btrT5bthIUt/OH4SvgAzrQkIUV58EtklC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXvvl1%2FbtrT5bthIUt%2FOH4SvgAzrQkIUV58EtklC1%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;100&quot; height=&quot;121&quot; data-origin-width=&quot;24&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;트리의 높이&lt;/b&gt; : 좌우 서브 트리 중 더 큰 서브트리에 1을 더해서 높이 구함.&lt;/p&gt;
&lt;pre id=&quot;code_1671462983585&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def tree_H(n):
    if n is None:
        return 0
    
    return max([tree_H(n.left),tree_H(n.right)])+1

tree_H(a)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;24&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xvvl1/btrT5bthIUt/OH4SvgAzrQkIUV58EtklC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xvvl1/btrT5bthIUt/OH4SvgAzrQkIUV58EtklC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xvvl1/btrT5bthIUt/OH4SvgAzrQkIUV58EtklC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXvvl1%2FbtrT5bthIUt%2FOH4SvgAzrQkIUV58EtklC1%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;100&quot; height=&quot;121&quot; data-origin-width=&quot;24&quot; data-origin-height=&quot;29&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; &amp;zwj;♂️ 결정 트리&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 단계의 복잡한 조건을 갖는 문제에 대해 조건과 그에 따른 해결 방법을 트리 형태로 나타낸 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모스부호를 통한 실습 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모스 부호 테이블&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671464275509&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;table = [('A', '.-'), ('B', '-...'),
         ('C', '-.-.'), ('D', '-..'), ('E', '.'),
         ('F', '..-.'), ('G', '--.'), ('H', '....'),
         ('I', '..'), ('J', '.---'), ('K', '-.-'),
         ('L', '.-..'), ('M', '--'), ('N', '-.'),
         ('O', '---'), ('P', '.--.'), ('Q', '--.-'),
         ('R', '.-.'), ('S', '...'), ('T', '-'),
         ('U', '..-'), ('V', '...-'), ('W', '.--'),
         ('X', '-..-'), ('Y', '-.--'), ('Z', '--..')]&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;&lt;b&gt;결정 트리 생성&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671464282529&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def d_tree():
    root = TNode(None,None,None)
    for mrs in table:
        code = mrs[1]
        node = root
        
        for c in code:
            if c == &quot;.&quot;:
                if node.left == None:
                    node.left = TNode(None,None,None)
                node = node.left
            elif c == &quot;-&quot;:
                if node.right == None:
                    node.right = TNode(None,None,None)
                node = node.right
        node.data = mrs[0]
    return root
    
mrsTree = d_tree()&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;b&gt;문자열 &amp;gt; 모스부호 인코딩&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671464336799&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def enc(text):
    code_lst = []
    for c in text:
        idx = ord(c) - ord('A')
        code = table[idx][1]
        code_lst.append(code)
    return code_lst
    
python_code = enc(&quot;PYTHON&quot;)
print(python_code)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8r8to/btrT7F8emm8/aRaa7lgy69SRYZP3HKM8k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8r8to/btrT7F8emm8/aRaa7lgy69SRYZP3HKM8k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8r8to/btrT7F8emm8/aRaa7lgy69SRYZP3HKM8k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8r8to%2FbtrT7F8emm8%2FaRaa7lgy69SRYZP3HKM8k0%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;500&quot; height=&quot;46&quot; data-origin-width=&quot;228&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모스부호 &amp;gt; 문자열 디코딩&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671464349804&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def decode(mrsTree, code_lst):
    text = &quot;&quot;
    for code in code_lst:
        node = mrsTree
        for c in code:
            if c == '.':
                node = node.left
            elif c == &quot;-&quot;:
                node = node.right
        text = text+node.data
    return text
    
    
print(decode(mrsTree,python_code))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;65&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nTsQs/btrT7GMPaZ6/hpknDMqpmnD0KRWvnEFx50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nTsQs/btrT7GMPaZ6/hpknDMqpmnD0KRWvnEFx50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nTsQs/btrT7GMPaZ6/hpknDMqpmnD0KRWvnEFx50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnTsQs%2FbtrT7GMPaZ6%2FhpknDMqpmnD0KRWvnEFx50%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;200&quot; height=&quot;86&quot; data-origin-width=&quot;65&quot; data-origin-height=&quot;28&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;h2 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️ 힙&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;힙&lt;/b&gt;은 완전이진트리 기반의 자료구조, 최대값 혹은 최소값을 root에 올리고 이를 바탕으로 빠르게 값을 찾는 트리입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 최대 힙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 최소 힙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 힙이 아님&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEY1ey/btrT4yWMWkW/NAukTBDzunimPg2dKxO4Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEY1ey/btrT4yWMWkW/NAukTBDzunimPg2dKxO4Q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEY1ey/btrT4yWMWkW/NAukTBDzunimPg2dKxO4Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEY1ey%2FbtrT4yWMWkW%2FNAukTBDzunimPg2dKxO4Q0%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;679&quot; height=&quot;526&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;최대힙&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671465416479&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MaxHeap:
    def __init__(self):
        self.heap=[]
        self.heap.append(0)
    def size(self): return len(self.heap) -1
    def isEpt(self): return self.size() == 0
    def Parent(self, i):
        return self.heap[i//2]
    def Left(self, i):
        return self.heap[i*2]
    def Right(self, i):
        return self.heap[i*2+1]
    def display(self):
        print(&quot;heap : &quot;,self.heap[1:])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;연산&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 삽입연산&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삽입연산은 힙이여서 가능한거임 즉 완전이진트리라 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삽입한 노드와 루트 노드 크기 비교해서 삽입한 노드가 크다면 루트노드와 교환&lt;/p&gt;
&lt;pre id=&quot;code_1671466341394&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def insert(self,n):
        self.heap.append(n)
        i = self.size()
        while (i != 1 and n &amp;gt; self.Parent(i)):
            self.heap[i]=self.Parent(i)
            i=i//2
        self.heap[i]=n
        
        
heap = MaxHeap()
heap.insert(2)
heap.display()
heap.insert(5)
heap.display()
heap.insert(4)
heap.display()
heap.insert(8)
heap.display()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;148&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rYVzG/btrT493iKzL/OwIgFgT13RnF0hhUrtjXdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rYVzG/btrT493iKzL/OwIgFgT13RnF0hhUrtjXdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rYVzG/btrT493iKzL/OwIgFgT13RnF0hhUrtjXdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrYVzG%2FbtrT493iKzL%2FOwIgFgT13RnF0hhUrtjXdk%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;300&quot; height=&quot;152&quot; data-origin-width=&quot;148&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 삭제 연산&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671467262778&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def delete(self):
    if not self.isEmt():
        hroot = self.heap[1] #삭제할 값
        last = self.heap[self.size()] #힙의 제일 마지막 값이 최상단으로 
        self.heap.pop(-1)    #삭제함

        i=1
        while(i*2&amp;lt;=self.size()):
            max_idx = 0 #좌
            if i*2+1 &amp;lt; self.size() and self.Left(i) &amp;lt; self.Right(i):
                max_idx=1 #우
            if last &amp;gt;= self.heap[i*2 + max_idx]:  #최상단으로 간 마지막값과 자식 중 큰 값이랑 비교
                break                             #last가 크져서 더 이상 노드를 변경하지 않아도 되는 경우 탈출
            self.heap[i] = self.heap[i*2+max_idx]      #last가 있던 값과 교환당하는 코드
            i = i*2 + max_idx        # i 값에 더큰 자식 노드 저장
        self.heap[i] = last
        return hroot
            
            
            
            
heap = MaxHeap()
heap.insert(2)
heap.display()
heap.insert(5)
heap.display()
heap.insert(4)
heap.display()
heap.insert(8)
heap.display()

print(heap.delete())
heap.display()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;130&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l9hRi/btrT4RIzSWF/K2p9PogWzzjLEDNQLEa5aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l9hRi/btrT4RIzSWF/K2p9PogWzzjLEDNQLEa5aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l9hRi/btrT4RIzSWF/K2p9PogWzzjLEDNQLEa5aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl9hRi%2FbtrT4RIzSWF%2FK2p9PogWzzjLEDNQLEa5aK%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;300&quot; height=&quot;238&quot; data-origin-width=&quot;130&quot; data-origin-height=&quot;103&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;&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;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>코딩테스트/알고리즘&amp;amp;자료구조</category>
      <category>결정트리</category>
      <category>이진트리</category>
      <category>자료구조</category>
      <category>전위순회</category>
      <category>중위순회</category>
      <category>트리</category>
      <category>트리 연산</category>
      <category>후위순회</category>
      <category>힙</category>
      <category>힙 연산</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/195</guid>
      <comments>https://naman-develop.tistory.com/195#entry195comment</comments>
      <pubDate>Tue, 20 Dec 2022 01:29:45 +0900</pubDate>
    </item>
    <item>
      <title>[웹 크롤링 프로젝트] 06. 구름 IDE로 Fast API 간단 배포</title>
      <link>https://naman-develop.tistory.com/194</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biNXkP/btrSF6uoeAN/deB5mLsuCBbxctu2GUuUzK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biNXkP/btrSF6uoeAN/deB5mLsuCBbxctu2GUuUzK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biNXkP/btrSF6uoeAN/deB5mLsuCBbxctu2GUuUzK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiNXkP%2FbtrSF6uoeAN%2FdeB5mLsuCBbxctu2GUuUzK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;203&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;203&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;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-L8CyiHZdqlV12S82&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8392839309180094&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; &amp;zwj;♂️ 환경설정&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;0. 구름 IDE&lt;/b&gt;&lt;/h4&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;a href=&quot;https://ide.goorm.io/my/dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ide.goorm.io/my/dashboard&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669965335840&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;goorm&quot; data-og-description=&quot;구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.&quot; data-og-host=&quot;goorm.co&quot; data-og-source-url=&quot;https://ide.goorm.io/my/dashboard&quot; data-og-url=&quot;https://accounts.goorm.io&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b9nmLb/hyQKNWVI8N/9KoqGSxmO44C2F8L5G1v01/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/AGQWF/hyQL8yPx4L/goZ85jiE8WwbuANSNZfnt0/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/tX7fD/hyQL70YNnh/k7HfYipfRYJfaBEVgki1pK/img.png?width=576&amp;amp;height=1080&amp;amp;face=0_0_576_1080&quot;&gt;&lt;a href=&quot;https://ide.goorm.io/my/dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ide.goorm.io/my/dashboard&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b9nmLb/hyQKNWVI8N/9KoqGSxmO44C2F8L5G1v01/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/AGQWF/hyQL8yPx4L/goZ85jiE8WwbuANSNZfnt0/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/tX7fD/hyQL70YNnh/k7HfYipfRYJfaBEVgki1pK/img.png?width=576&amp;amp;height=1080&amp;amp;face=0_0_576_1080');&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;goorm&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;goorm.co&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃허브 아이디로 구름 IDE에 로그인 하시면 하나의 컨테이너를 항상 켜둘 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vkVVM/btrSHU0mZGv/dAKrti7RVxpRxlK2L9B73k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vkVVM/btrSHU0mZGv/dAKrti7RVxpRxlK2L9B73k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vkVVM/btrSHU0mZGv/dAKrti7RVxpRxlK2L9B73k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvkVVM%2FbtrSHU0mZGv%2FdAKrti7RVxpRxlK2L9B73k%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;908&quot; height=&quot;752&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별다른 설명 할 것 없이 그냥 플러스 버튼을 클릭하며 새 컨테이너를 만들어주고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. FastAPI를 위한 패키지 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDebyM/btrSIqZaGYd/Gj6Jv6cORirLHCul0quSLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDebyM/btrSIqZaGYd/Gj6Jv6cORirLHCul0quSLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDebyM/btrSIqZaGYd/Gj6Jv6cORirLHCul0quSLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDebyM%2FbtrSIqZaGYd%2FGj6Jv6cORirLHCul0quSLk%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;761&quot; height=&quot;287&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpGt0h/btrSHuONuNf/sqqvS8FbLTKPqRkiTkVMR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpGt0h/btrSHuONuNf/sqqvS8FbLTKPqRkiTkVMR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpGt0h/btrSHuONuNf/sqqvS8FbLTKPqRkiTkVMR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpGt0h%2FbtrSHuONuNf%2FsqqvS8FbLTKPqRkiTkVMR1%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;764&quot; height=&quot;281&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fast API를 위한 패키지를 설치해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 추가로 API에서 필요한 라이브러리들을 설치해줍니다. 저 같은 경우에는 크롤링 API이기 때문에 BeuatifulSoup4를 설치해줬습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Fast API 코드 작성&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1669965597871&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get(&quot;/&quot;)
def read_root():
    return {&quot;Hello&quot;: &quot;World&quot;}


@app.get(&quot;/items/{item_id}&quot;)
def read_item(item_id: int, q: Union[str, None] = None):
    return {&quot;item_id&quot;: item_id, &quot;q&quot;: q}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 위의 코드를 사용하지는 않았지만 예시 코드가 필요하신 분들은 위의 코드를 사용하셔도 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1611&quot; data-origin-height=&quot;852&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K0jEm/btrSEhwkaai/k9AikwR4forz9JWl3TUKk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K0jEm/btrSEhwkaai/k9AikwR4forz9JWl3TUKk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K0jEm/btrSEhwkaai/k9AikwR4forz9JWl3TUKk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK0jEm%2FbtrSEhwkaai%2Fk9AikwR4forz9JWl3TUKk1%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;1611&quot; height=&quot;852&quot; data-origin-width=&quot;1611&quot; data-origin-height=&quot;852&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 켤 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밑에 터미널을 통해서 api 서버 여는 코드를 치면&lt;/p&gt;
&lt;pre id=&quot;code_1669966133202&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uvicorn index:app --reload&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L4U98/btrSE6H0VqS/FbHyg2Ky1a7j8En8msZye1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L4U98/btrSE6H0VqS/FbHyg2Ky1a7j8En8msZye1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L4U98/btrSE6H0VqS/FbHyg2Ky1a7j8En8msZye1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL4U98%2FbtrSE6H0VqS%2FFbHyg2Ky1a7j8En8msZye1%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;576&quot; height=&quot;130&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면의 우측 아래에 URL로 배포되고 있는 것입니다.&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;pre id=&quot;code_1669966841166&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nohup uvicorn index:app --reload &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nohup라는 명령어를 통해서 API 서버 실행하는 코드를 백그라운드로 실행 시켜주고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; /dev/null 코드를 통해서 nohup 실행에 따른 다른 파일이 생성되지 않도록 합니다.&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;추가로 Fast API에 CORS 문제를 겪고 계시면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@wlsdud2194/cors&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@wlsdud2194/cors&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 게시물을 참고하시면 될 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹 개발/프로젝트</category>
      <category>Fast API 배포</category>
      <category>groom IDE</category>
      <category>nobup배포</category>
      <category>구름 always on 안됨</category>
      <category>구름 IDE</category>
      <category>백그라운드 배포</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/194</guid>
      <comments>https://naman-develop.tistory.com/194#entry194comment</comments>
      <pubDate>Fri, 2 Dec 2022 16:43:42 +0900</pubDate>
    </item>
    <item>
      <title>[pygame] 10. 깃허브에 올리기</title>
      <link>https://naman-develop.tistory.com/193</link>
      <description>&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-L8CyiHZdqlV12S82&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8392839309180094&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;0_nr8xfIriulC1eIkW.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf5ClA/btrShHfRexc/EIuWNqPSaCzAOZFvlcwyHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf5ClA/btrShHfRexc/EIuWNqPSaCzAOZFvlcwyHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf5ClA/btrShHfRexc/EIuWNqPSaCzAOZFvlcwyHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf5ClA%2FbtrShHfRexc%2FEIuWNqPSaCzAOZFvlcwyHK%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;640&quot; height=&quot;253&quot; data-filename=&quot;0_nr8xfIriulC1eIkW.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;253&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;h2 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️ Git Hub에 올리는 절차&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 해당 경로로 이동&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KeuBg/btrSaq0WeKF/ylEVJbi1o1YKApEoKPfaf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KeuBg/btrSaq0WeKF/ylEVJbi1o1YKApEoKPfaf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KeuBg/btrSaq0WeKF/ylEVJbi1o1YKApEoKPfaf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKeuBg%2FbtrSaq0WeKF%2FylEVJbi1o1YKApEoKPfaf1%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;402&quot; height=&quot;45&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;45&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. README.md 파일 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qJG5d/btrScbvtVvU/hugNl2Ml7269UqUBxegrq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qJG5d/btrScbvtVvU/hugNl2Ml7269UqUBxegrq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qJG5d/btrScbvtVvU/hugNl2Ml7269UqUBxegrq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqJG5d%2FbtrScbvtVvU%2FhugNl2Ml7269UqUBxegrq0%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;495&quot; height=&quot;48&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1669557416548&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ echo &quot;# py-shooting-game&quot; &amp;gt;&amp;gt; README.md&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. git init 하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blc2Nv/btrShAA03QB/vG3pxUeKq7MobxSBF6wMDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blc2Nv/btrShAA03QB/vG3pxUeKq7MobxSBF6wMDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blc2Nv/btrShAA03QB/vG3pxUeKq7MobxSBF6wMDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblc2Nv%2FbtrShAA03QB%2FvG3pxUeKq7MobxSBF6wMDK%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;561&quot; height=&quot;74&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1669557446840&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. git add 하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmrdQ2/btrSeN8HqbO/7qAqz7ZgN9Zc0NuSoTo920/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmrdQ2/btrSeN8HqbO/7qAqz7ZgN9Zc0NuSoTo920/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmrdQ2/btrSeN8HqbO/7qAqz7ZgN9Zc0NuSoTo920/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmrdQ2%2FbtrSeN8HqbO%2F7qAqz7ZgN9Zc0NuSoTo920%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;560&quot; height=&quot;136&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1669557823011&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git add .&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. 커밋하기&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0RL69/btrSa6VtsBB/MknBOmbbqaFHdpWxPKAXnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0RL69/btrSa6VtsBB/MknBOmbbqaFHdpWxPKAXnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0RL69/btrSa6VtsBB/MknBOmbbqaFHdpWxPKAXnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0RL69%2FbtrSa6VtsBB%2FMknBOmbbqaFHdpWxPKAXnK%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;554&quot; height=&quot;202&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1669557864745&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git commit -m &quot;first commit&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;6. 브랜치 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/COlaB/btrSbUmXfzi/SMZ2CwMtjKfJvYKkVOICs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/COlaB/btrSbUmXfzi/SMZ2CwMtjKfJvYKkVOICs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/COlaB/btrSbUmXfzi/SMZ2CwMtjKfJvYKkVOICs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCOlaB%2FbtrSbUmXfzi%2FSMZ2CwMtjKfJvYKkVOICs1%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;541&quot; height=&quot;45&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1669557905256&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git branch -M main&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7. remote 추가&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oT7ti/btrSaJ67twU/V4FIvqH2eFLKG9DM4irVk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oT7ti/btrSaJ67twU/V4FIvqH2eFLKG9DM4irVk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oT7ti/btrSaJ67twU/V4FIvqH2eFLKG9DM4irVk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoT7ti%2FbtrSaJ67twU%2FV4FIvqH2eFLKG9DM4irVk1%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;537&quot; height=&quot;48&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1669557922502&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git remote add origin https://github.com/kihyun1998/py-shooting-game.git&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;8. push&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8bmHL/btrSeOsY7IB/oooFh1havxUdxxQbQM8Ugk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8bmHL/btrSeOsY7IB/oooFh1havxUdxxQbQM8Ugk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8bmHL/btrSeOsY7IB/oooFh1havxUdxxQbQM8Ugk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8bmHL%2FbtrSeOsY7IB%2FoooFh1havxUdxxQbQM8Ugk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;47&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;47&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1669557946780&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git push -u origin main&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>앱 개발/pygame</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/193</guid>
      <comments>https://naman-develop.tistory.com/193#entry193comment</comments>
      <pubDate>Sun, 27 Nov 2022 23:05:56 +0900</pubDate>
    </item>
    <item>
      <title>[웹 크롤링 프로젝트] 05. Fast API 도커 배포 - 1 (FastAPI 시작하기 수정)</title>
      <link>https://naman-develop.tistory.com/192</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3rDxr/btrR7SC0BGz/9IWyW6h6dbD7PWkDmiAjQ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3rDxr/btrR7SC0BGz/9IWyW6h6dbD7PWkDmiAjQ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3rDxr/btrR7SC0BGz/9IWyW6h6dbD7PWkDmiAjQ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3rDxr%2FbtrR7SC0BGz%2F9IWyW6h6dbD7PWkDmiAjQ1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;203&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;203&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;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-L8CyiHZdqlV12S82&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8392839309180094&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; &amp;zwj;♂️ 프로젝트 생성&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. VS Code 가상환경 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 VS Code에서 폴더를 선택해주고&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;916&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbHyAf/btrR5zDr1xd/hdJBfg7RTDBuiUPLIFnKZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbHyAf/btrR5zDr1xd/hdJBfg7RTDBuiUPLIFnKZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbHyAf/btrR5zDr1xd/hdJBfg7RTDBuiUPLIFnKZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbHyAf%2FbtrR5zDr1xd%2FhdJBfg7RTDBuiUPLIFnKZK%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;916&quot; height=&quot;845&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;845&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;VS Code의 터미널에서&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1669353402701&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python -m venv {가상환경이름}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드를 통해서 가상환경을 만들어주면 위의 이미지처럼 나오게됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 가상환경 이름을 venvAPI로 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 가상환경 진입&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eP5ieK/btrR3GXFi7a/Skt03Ud58fk7S8KHcICVd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eP5ieK/btrR3GXFi7a/Skt03Ud58fk7S8KHcICVd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eP5ieK/btrR3GXFi7a/Skt03Ud58fk7S8KHcICVd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeP5ieK%2FbtrR3GXFi7a%2FSkt03Ud58fk7S8KHcICVd1%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;561&quot; height=&quot;198&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 만든 가상환경 폴더 안에 있는 Scripts라는 폴더로 이동하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;activate를 실행해주면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfiBEq/btrR3HoJids/XfApkSi0PWcb8VkDM8ElK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfiBEq/btrR3HoJids/XfApkSi0PWcb8VkDM8ElK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfiBEq/btrR3HoJids/XfApkSi0PWcb8VkDM8ElK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfiBEq%2FbtrR3HoJids%2FXfApkSi0PWcb8VkDM8ElK1%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;549&quot; height=&quot;256&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상환경에 진입하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 파이썬 가상환경 인식&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;1049&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqL2Qh/btrR35iCcJ4/HcXH5kNJljyYuW3BgMnPeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqL2Qh/btrR35iCcJ4/HcXH5kNJljyYuW3BgMnPeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqL2Qh/btrR35iCcJ4/HcXH5kNJljyYuW3BgMnPeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqL2Qh%2FbtrR35iCcJ4%2FHcXH5kNJljyYuW3BgMnPeK%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;500&quot; height=&quot;589&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;1049&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 가상환경 인식을 위해 아무 파이썬 파일을 생성하고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cU1KHb/btrR8onaTHI/UPrULoEI4kjqM6QAuyRDEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cU1KHb/btrR8onaTHI/UPrULoEI4kjqM6QAuyRDEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cU1KHb/btrR8onaTHI/UPrULoEI4kjqM6QAuyRDEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcU1KHb%2FbtrR8onaTHI%2FUPrULoEI4kjqM6QAuyRDEK%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;629&quot; height=&quot;220&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우측 하단에 보면 Python 어쩌구 버전이 나오는데 숫자를 클릭해보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvjEET/btrR8pM9Shq/HYh9i0LWvx04Ezdoq5shp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvjEET/btrR8pM9Shq/HYh9i0LWvx04Ezdoq5shp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvjEET/btrR8pM9Shq/HYh9i0LWvx04Ezdoq5shp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvjEET%2FbtrR8pM9Shq%2FHYh9i0LWvx04Ezdoq5shp1%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;602&quot; height=&quot;256&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저기에서 추천하는 venv의 파이썬을 쓰겠다는 부분으로 인터프리터를 바꿔주면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상환경에서 파이썬 인식이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 파일 구조 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkxtwO/btrR4w8gHB4/qXHbFP7qk6RcZjx703hpkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkxtwO/btrR4w8gHB4/qXHbFP7qk6RcZjx703hpkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkxtwO/btrR4w8gHB4/qXHbFP7qk6RcZjx703hpkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkxtwO%2FbtrR4w8gHB4%2FqXHbFP7qk6RcZjx703hpkk%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;234&quot; height=&quot;290&quot; data-origin-width=&quot;234&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app이라는 폴더를 만들어서 API 코드가 담길 파이썬 파일을 넣어주고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커 이미지를 만드는 Dockerfile과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트에 사용하는 샘플인 docker-compose.yaml파일을 생성해줍니다.&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; &amp;zwj;♂️ FastAPI 설정&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. FastAPI를 위한 패키지 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6OYYZ/btrR76gdr11/uV4Lf51WG5QZAM9tw7o420/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6OYYZ/btrR76gdr11/uV4Lf51WG5QZAM9tw7o420/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6OYYZ/btrR76gdr11/uV4Lf51WG5QZAM9tw7o420/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6OYYZ%2FbtrR76gdr11%2FuV4Lf51WG5QZAM9tw7o420%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;761&quot; height=&quot;287&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqpmbq/btrR3HWJ1HH/oRlVODJidNmq34KiZsB641/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqpmbq/btrR3HWJ1HH/oRlVODJidNmq34KiZsB641/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqpmbq/btrR3HWJ1HH/oRlVODJidNmq34KiZsB641/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqpmbq%2FbtrR3HWJ1HH%2FoRlVODJidNmq34KiZsB641%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;764&quot; height=&quot;281&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;281&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;FastAPI 시작을 위해 두 개의 패키지를 설치해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lvbPd/btrR8js4MSf/yAT9MwFsLdpqWe0Qg5Neak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lvbPd/btrR8js4MSf/yAT9MwFsLdpqWe0Qg5Neak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lvbPd/btrR8js4MSf/yAT9MwFsLdpqWe0Qg5Neak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlvbPd%2FbtrR8js4MSf%2FyAT9MwFsLdpqWe0Qg5Neak%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;554&quot; height=&quot;259&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KrVJl/btrR7ThpTxF/opl9QMXFoakneuwuON2u2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KrVJl/btrR7ThpTxF/opl9QMXFoakneuwuON2u2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KrVJl/btrR7ThpTxF/opl9QMXFoakneuwuON2u2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKrVJl%2FbtrR7ThpTxF%2Fopl9QMXFoakneuwuON2u2k%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;560&quot; height=&quot;205&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;205&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. FastAPI를 배포를 위한 패키지 리스트 출력&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1669358912021&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip freeze &amp;gt; requirements.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M2h7j/btrR5yruxiU/JCZy1bg773yh4zrbn7jYKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M2h7j/btrR5yruxiU/JCZy1bg773yh4zrbn7jYKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M2h7j/btrR5yruxiU/JCZy1bg773yh4zrbn7jYKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM2h7j%2FbtrR5yruxiU%2FJCZy1bg773yh4zrbn7jYKk%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;565&quot; height=&quot;57&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어를 통해서 가상환경에 설치된 패키지 리스트를 requirements.txt로 출력하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFBV8w/btrR6FKGdGX/Joqc7XfRmOUPaC4oMlF521/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFBV8w/btrR6FKGdGX/Joqc7XfRmOUPaC4oMlF521/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFBV8w/btrR6FKGdGX/Joqc7XfRmOUPaC4oMlF521/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFBV8w%2FbtrR6FKGdGX%2FJoqc7XfRmOUPaC4oMlF521%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;388&quot; height=&quot;429&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용을 보면 방금 설치한 fastapi와 uvicorn 이외에도 제 컴퓨터에 설치된 다양한 패키지들이 정의되어 있네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;requirements.txt 파일 위치는 app 폴더 밑으로 옮기겠습니다.&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; &amp;zwj;♂️ FastAPI 예시 코드 작성&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbz18a/btrR8ptiups/FEAlKuXbYBRMLEEj7JWwQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbz18a/btrR8ptiups/FEAlKuXbYBRMLEEj7JWwQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbz18a/btrR8ptiups/FEAlKuXbYBRMLEEj7JWwQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcbz18a%2FbtrR8ptiups%2FFEAlKuXbYBRMLEEj7JWwQ0%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;541&quot; height=&quot;396&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1669359352186&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get(&quot;/&quot;)
def read_root():
    return {&quot;Hello&quot;: &quot;World&quot;}


@app.get(&quot;/items/{item_id}&quot;)
def read_item(item_id: int, q: Union[str, None] = None):
    return {&quot;item_id&quot;: item_id, &quot;q&quot;: q}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main.py에 공식문서에서 제공하는 코드를 입력 후&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgclhO/btrR8pz7o5O/7dxLjwjGGbggAA39ldTW5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgclhO/btrR8pz7o5O/7dxLjwjGGbggAA39ldTW5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgclhO/btrR8pz7o5O/7dxLjwjGGbggAA39ldTW5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgclhO%2FbtrR8pz7o5O%2F7dxLjwjGGbggAA39ldTW5K%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;837&quot; height=&quot;193&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1669359332407&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uvicorn main:app --reload&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령어를 터미널에서 해당 main.py가 있는 파일이 있는 폴더로 입력한 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력하면 서버가 얼려서 해당 주소(127,0,0,1:8000)이라고 나오는 저기 주소로 들어가면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;863&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm4eiW/btrR79EjXlY/J0SI6p91Gz2qzpjqQgr0dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm4eiW/btrR79EjXlY/J0SI6p91Gz2qzpjqQgr0dK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm4eiW/btrR79EjXlY/J0SI6p91Gz2qzpjqQgr0dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm4eiW%2FbtrR79EjXlY%2FJ0SI6p91Gz2qzpjqQgr0dK%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;863&quot; height=&quot;863&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;863&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hello World가 출력되는 것을 볼 수 있습니다.&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;이제 도커로 이미지를 따서 배포하는 방법은 2부에서 정리하도록 하겠습니다.&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>api 만들어서 배포</category>
      <category>docker</category>
      <category>Fast API 배포</category>
      <category>FastAPI</category>
      <category>도커</category>
      <category>만든 api 배포</category>
      <category>패스트 에이피아이</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/192</guid>
      <comments>https://naman-develop.tistory.com/192#entry192comment</comments>
      <pubDate>Fri, 25 Nov 2022 16:16:49 +0900</pubDate>
    </item>
    <item>
      <title>[웹 크롤링 프로젝트] 04. AWS EC2 서버 사용하기</title>
      <link>https://naman-develop.tistory.com/191</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N78fs/btrRhkU1uEu/gGbyEp82j2IFaMJ2SkX1h0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N78fs/btrRhkU1uEu/gGbyEp82j2IFaMJ2SkX1h0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N78fs/btrRhkU1uEu/gGbyEp82j2IFaMJ2SkX1h0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN78fs%2FbtrRhkU1uEu%2FgGbyEp82j2IFaMJ2SkX1h0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;203&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;203&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-L8CyiHZdqlV12S82&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8392839309180094&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; &amp;zwj;♂️ 방법&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 사이트 들어가기 및 계정 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/&quot;&gt;https://aws.amazon.com/ko/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1668438325497&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;company&quot; data-og-title=&quot;클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services&quot; data-og-description=&quot;개발자, 데이터 사이언티스트, 솔루션스 아키텍트 또는 AWS에서 구축하는 방법을 배우는 데 관심이 있는 모든 사용자용 무료 온라인 교육 AWS 전문가가 구축한 500개 이상의 무료 디지털 교육 과정&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/&quot; data-og-url=&quot;https://aws.amazon.com/ko/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cUrgaC/hyQBbIsbrd/Y9tWklw1Lm0gLYt16eAG6k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bpgeaj/hyQzfMugHA/jM5CZAaizKw64570xkSXCK/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/buTdXO/hyQzjVDewq/vTgNotwwHCmCZWh7ef3xdK/img.png?width=531&amp;amp;height=301&amp;amp;face=0_0_531_301&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cUrgaC/hyQBbIsbrd/Y9tWklw1Lm0gLYt16eAG6k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bpgeaj/hyQzfMugHA/jM5CZAaizKw64570xkSXCK/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/buTdXO/hyQzjVDewq/vTgNotwwHCmCZWh7ef3xdK/img.png?width=531&amp;amp;height=301&amp;amp;face=0_0_531_301');&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;클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;개발자, 데이터 사이언티스트, 솔루션스 아키텍트 또는 AWS에서 구축하는 방법을 배우는 데 관심이 있는 모든 사용자용 무료 온라인 교육 AWS 전문가가 구축한 500개 이상의 무료 디지털 교육 과정&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 가입 완료 후 콘솔로 들어옴&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHZ1x5/btrReGh5n08/mHkpmLIpzDNScyesViBwHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHZ1x5/btrReGh5n08/mHkpmLIpzDNScyesViBwHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHZ1x5/btrReGh5n08/mHkpmLIpzDNScyesViBwHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHZ1x5%2FbtrReGh5n08%2FmHkpmLIpzDNScyesViBwHk%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;927&quot; height=&quot;680&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Tokyo를 서울로 바꿔줘야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K2VB8/btrQ9bj47uz/5wt8UDKNdLv0D83fpDJXak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K2VB8/btrQ9bj47uz/5wt8UDKNdLv0D83fpDJXak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K2VB8/btrQ9bj47uz/5wt8UDKNdLv0D83fpDJXak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK2VB8%2FbtrQ9bj47uz%2F5wt8UDKNdLv0D83fpDJXak%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;948&quot; height=&quot;375&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;375&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. EC2 생성을 위해&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Services(모든 서비스) &amp;gt; Compute(컴퓨팅) &amp;gt; EC2를 클릭&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOpdNF/btrRfMI6TYn/ujGpoDNVMvGP3z2Zf7etSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOpdNF/btrRfMI6TYn/ujGpoDNVMvGP3z2Zf7etSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOpdNF/btrRfMI6TYn/ujGpoDNVMvGP3z2Zf7etSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOpdNF%2FbtrRfMI6TYn%2FujGpoDNVMvGP3z2Zf7etSK%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;782&quot; height=&quot;633&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;633&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 주황색 버튼인 Launch instance(인스턴스 시작)을 클릭&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBtaFy/btrRdefuK4s/KK5dz2lAGEOkm8RWXa49pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBtaFy/btrRdefuK4s/KK5dz2lAGEOkm8RWXa49pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBtaFy/btrRdefuK4s/KK5dz2lAGEOkm8RWXa49pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBtaFy%2FbtrRdefuK4s%2FKK5dz2lAGEOkm8RWXa49pK%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;639&quot; height=&quot;732&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;732&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. 사용할 OS 선택&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mBAXg/btrRcPAjeAG/GspgkyWc9l3a2qAJKkp8G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mBAXg/btrRcPAjeAG/GspgkyWc9l3a2qAJKkp8G1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mBAXg/btrRcPAjeAG/GspgkyWc9l3a2qAJKkp8G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmBAXg%2FbtrRcPAjeAG%2FGspgkyWc9l3a2qAJKkp8G1%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;774&quot; height=&quot;670&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;670&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 Amazon Linux&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;6. instance 타입은 자동 선택 됨(공짜로)&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBMhZr/btrRb7VNoF4/Ik1FOpXTYtziqjUz0Hxqi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBMhZr/btrRb7VNoF4/Ik1FOpXTYtziqjUz0Hxqi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBMhZr/btrRb7VNoF4/Ik1FOpXTYtziqjUz0Hxqi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBMhZr%2FbtrRb7VNoF4%2FIk1FOpXTYtziqjUz0Hxqi0%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;761&quot; height=&quot;197&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;197&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;7. configure storage 최대 용량으로 30gib&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEOve4/btrRbZQ0tWy/L1XY3KoM0P19GXoCp4Kzsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEOve4/btrRbZQ0tWy/L1XY3KoM0P19GXoCp4Kzsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEOve4/btrRbZQ0tWy/L1XY3KoM0P19GXoCp4Kzsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEOve4%2FbtrRbZQ0tWy%2FL1XY3KoM0P19GXoCp4Kzsk%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;798&quot; height=&quot;314&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;314&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;8. Network settings에서 밑에 쪽에 보안 그룹 추가해서&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;밑에 Security group rule 2 처럼 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2CAOZ/btrRfJS9WS1/P51Nt5jdZn5bIEPAaQhRLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2CAOZ/btrRfJS9WS1/P51Nt5jdZn5bIEPAaQhRLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2CAOZ/btrRfJS9WS1/P51Nt5jdZn5bIEPAaQhRLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2CAOZ%2FbtrRfJS9WS1%2FP51Nt5jdZn5bIEPAaQhRLk%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;791&quot; height=&quot;372&quot; data-origin-width=&quot;791&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;698&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJRn4K/btrRfJFDjoN/kisZkbT8br9i0ozM6LBK81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJRn4K/btrRfJFDjoN/kisZkbT8br9i0ozM6LBK81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJRn4K/btrRfJFDjoN/kisZkbT8br9i0ozM6LBK81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJRn4K%2FbtrRfJFDjoN%2FkisZkbT8br9i0ozM6LBK81%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;795&quot; height=&quot;698&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;698&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;9. 나머지는 디폴트로 하고 밑에 Launch instance 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SDCFB/btrRcNvIqBz/H3cSKWHUhlUZj1ttx7RZeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SDCFB/btrRcNvIqBz/H3cSKWHUhlUZj1ttx7RZeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SDCFB/btrRcNvIqBz/H3cSKWHUhlUZj1ttx7RZeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSDCFB%2FbtrRcNvIqBz%2FH3cSKWHUhlUZj1ttx7RZeK%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;825&quot; height=&quot;484&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;484&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;10. 이때 나오는 키는 무조건 저장하고 저장위치 기억하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;775&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDnONc/btrRc9FhfJw/W0jKLk53QJZmHnp1p4i6CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDnONc/btrRc9FhfJw/W0jKLk53QJZmHnp1p4i6CK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDnONc/btrRc9FhfJw/W0jKLk53QJZmHnp1p4i6CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDnONc%2FbtrRc9FhfJw%2FW0jKLk53QJZmHnp1p4i6CK%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;593&quot; height=&quot;775&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;775&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;11. 인스턴스 만들어진 것을 확인할 수 있음.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6yXxj/btrRdwUxIdp/BCQRTi99b4kg0Ym2uHAzM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6yXxj/btrRdwUxIdp/BCQRTi99b4kg0Ym2uHAzM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6yXxj/btrRdwUxIdp/BCQRTi99b4kg0Ym2uHAzM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6yXxj%2FbtrRdwUxIdp%2FBCQRTi99b4kg0Ym2uHAzM1%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;1909&quot; height=&quot;650&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;650&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;12. 해당 인스턴스 클릭해서 들어가면 Action &amp;gt; connect를 누르면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOJ5sa/btrQ8IoDNYK/9y2qr5jz3HcHrKzjZwZKi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOJ5sa/btrQ8IoDNYK/9y2qr5jz3HcHrKzjZwZKi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOJ5sa/btrQ8IoDNYK/9y2qr5jz3HcHrKzjZwZKi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOJ5sa%2FbtrQ8IoDNYK%2F9y2qr5jz3HcHrKzjZwZKi0%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;1630&quot; height=&quot;384&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwoLFf/btrQ9ak9FBX/CKXvV6hKyovTwR7NxK3p7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwoLFf/btrQ9ak9FBX/CKXvV6hKyovTwR7NxK3p7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwoLFf/btrQ9ak9FBX/CKXvV6hKyovTwR7NxK3p7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwoLFf%2FbtrQ9ak9FBX%2FCKXvV6hKyovTwR7NxK3p7k%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;793&quot; height=&quot;535&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSH 접속 방법이 나와서 이걸로 접속할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4erzI/btrRcQ635Fv/NNSOhqCAeK9KWX7p1Mtyf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4erzI/btrRcQ635Fv/NNSOhqCAeK9KWX7p1Mtyf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4erzI/btrRcQ635Fv/NNSOhqCAeK9KWX7p1Mtyf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4erzI%2FbtrRcQ635Fv%2FNNSOhqCAeK9KWX7p1Mtyf0%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;631&quot; height=&quot;147&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결한 모습입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 모든 패키지 업데이트&lt;/p&gt;
&lt;pre id=&quot;code_1668440543008&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum update -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어로 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Geq63/btrRd9Y8AoJ/UMN1OBtTbCk36nrZ1Gtdw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Geq63/btrRd9Y8AoJ/UMN1OBtTbCk36nrZ1Gtdw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Geq63/btrRd9Y8AoJ/UMN1OBtTbCk36nrZ1Gtdw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGeq63%2FbtrRd9Y8AoJ%2FUMN1OBtTbCk36nrZ1Gtdw1%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;662&quot; height=&quot;235&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하게 된다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS 사용을 위한 초기 세팅은 끝났습니다.&lt;/p&gt;</description>
      <category>웹 개발/프로젝트</category>
      <category>AWS EC2</category>
      <category>AWS EC@</category>
      <category>aws 간단 시작</category>
      <category>aws로 서버사용</category>
      <category>AWS사용</category>
      <category>ec2사용하기</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/191</guid>
      <comments>https://naman-develop.tistory.com/191#entry191comment</comments>
      <pubDate>Tue, 15 Nov 2022 21:44:11 +0900</pubDate>
    </item>
    <item>
      <title>[웹 크롤링 프로젝트] 03. Fast API 시작하기</title>
      <link>https://naman-develop.tistory.com/190</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nTm4U/btrReJuirrG/ecdViJYIxH4kxRvn17GImk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nTm4U/btrReJuirrG/ecdViJYIxH4kxRvn17GImk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nTm4U/btrReJuirrG/ecdViJYIxH4kxRvn17GImk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnTm4U%2FbtrReJuirrG%2FecdViJYIxH4kxRvn17GImk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;203&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;203&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️ FastAPI&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Flast나 Django보다 빠르다고 해서 사용해봅니다.&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;a href=&quot;https://fastapi.tiangolo.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://fastapi.tiangolo.com/ko/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664604238220&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;FastAPI&quot; data-og-description=&quot;FastAPI FastAPI 프레임워크, 고성능, 간편한 학습, 빠른 코드 작성, 준비된 프로덕션 문서: https://fastapi.tiangolo.com 소스 코드: https://github.com/tiangolo/fastapi FastAPI는 현대적이고, 빠르며(고성능), 파이썬 &quot; data-og-host=&quot;fastapi.tiangolo.com&quot; data-og-source-url=&quot;https://fastapi.tiangolo.com/ko/&quot; data-og-url=&quot;https://fastapi.tiangolo.com/ko/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/csQCJw/hyPY9Suuog/kJWYU3a5fRGkZKQ0mMEPlK/img.png?width=1023&amp;amp;height=369&amp;amp;face=0_0_1023_369&quot;&gt;&lt;a href=&quot;https://fastapi.tiangolo.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://fastapi.tiangolo.com/ko/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/csQCJw/hyPY9Suuog/kJWYU3a5fRGkZKQ0mMEPlK/img.png?width=1023&amp;amp;height=369&amp;amp;face=0_0_1023_369');&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;FastAPI&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;FastAPI FastAPI 프레임워크, 고성능, 간편한 학습, 빠른 코드 작성, 준비된 프로덕션 문서: https://fastapi.tiangolo.com 소스 코드: https://github.com/tiangolo/fastapi FastAPI는 현대적이고, 빠르며(고성능), 파이썬&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;fastapi.tiangolo.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;pre id=&quot;code_1664604262337&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install fastapi&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1664604285576&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip instal &quot;uvicorn[standard]&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 두 패키지를 install 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1664604311686&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from fastapi import FastAPI
app = FastAPI()

@app.get(&quot;/&quot;)
async def root():
    return {&quot;msg&quot; : &quot;Hello World&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드를 main.py로 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꼭 main.py로 해야 합니다.(사실 상관없는데 이유는 밑에서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1664604465034&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uvicorn main:app --reload&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 main.py가 있는 곳까지 가서 명령어를 치면 서버가 실행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 API 파일 명을 쳐야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) main.py 라면 위처럼&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test.py라면 밑처럼&lt;/p&gt;
&lt;pre id=&quot;code_1668229742708&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uvicorn test:app --reload&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;uvicorn 은 당연히 uvicorn을 쓰는거고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main은 main.py의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app은 FastAPI()가 담긴 변수를 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--reload는 서버 재시작입니다.&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;만약 main.py가 아닌 test.py로 하고 했다면&lt;/p&gt;
&lt;pre id=&quot;code_1664604549792&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;uvicorn test:app --reload&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 실행할 수 있었겠네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1664605194414&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from fastapi import FastAPI
app = FastAPI()

@app.get(&quot;/&quot;)
async def root():
    return {&quot;msg&quot; : &quot;Hello World&quot;}

@app.get(&quot;/items/{item_id}&quot;)
async def read_item(item_id: int, q: str):
    return {&quot;item_id&quot;:item_id, &quot;q&quot;:q}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 하나를 더 추가하고 서버를 실행해보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://127.0.0.1:8000/items/2?q=12345&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://127.0.0.1:8000/items/2?q=12345&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 경로로 이동하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caggTN/btrNuSoanpF/JlWgKi4EGVSkO5wP3rjMy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caggTN/btrNuSoanpF/JlWgKi4EGVSkO5wP3rjMy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caggTN/btrNuSoanpF/JlWgKi4EGVSkO5wP3rjMy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaggTN%2FbtrNuSoanpF%2FJlWgKi4EGVSkO5wP3rjMy0%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;565&quot; height=&quot;159&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 나오는 모습입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://127.0.0.1:8000/docs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://127.0.0.1:8000/docs&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드로 이동하면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c311eD/btrNzFGUGmv/Qtr6dN4Vg3LI6PQKZyWIF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c311eD/btrNzFGUGmv/Qtr6dN4Vg3LI6PQKZyWIF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c311eD/btrNzFGUGmv/Qtr6dN4Vg3LI6PQKZyWIF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc311eD%2FbtrNzFGUGmv%2FQtr6dN4Vg3LI6PQKZyWIF1%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;936&quot; height=&quot;613&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 정리된 문서까지 볼 수 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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>API 만들기</category>
      <category>FastAPI</category>
      <category>쉽게 API 만들기</category>
      <category>파이썬 API</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/190</guid>
      <comments>https://naman-develop.tistory.com/190#entry190comment</comments>
      <pubDate>Tue, 15 Nov 2022 21:43:57 +0900</pubDate>
    </item>
    <item>
      <title>[pygame] 09. 텍스트 사용</title>
      <link>https://naman-develop.tistory.com/189</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;0_nr8xfIriulC1eIkW.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JEyrD/btrQPkmy9LR/CXHfs2yzswEZIkN3N4s961/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JEyrD/btrQPkmy9LR/CXHfs2yzswEZIkN3N4s961/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JEyrD/btrQPkmy9LR/CXHfs2yzswEZIkN3N4s961/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJEyrD%2FbtrQPkmy9LR%2FCXHfs2yzswEZIkN3N4s961%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;640&quot; height=&quot;253&quot; data-filename=&quot;0_nr8xfIriulC1eIkW.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-L8CyiHZdqlV12S82&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-8392839309180094&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;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 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️ 변수 설정&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;pre id=&quot;code_1667876260290&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;&quot;&quot;
3. 게임 내 필요한 설정
&quot;&quot;&quot;
.
.
.

#적기 격추 = shootDown
shootDown=0

#적기 놓침 = missed
missed=0

#포인트값
#point = (shootDown*100)-(missed-50)
point=0

.
.
.

&quot;&quot;&quot;
4. 메인 이벤트
&quot;&quot;&quot;
.
.
.
    
    &quot;&quot;&quot;
    4-3. 입력과 시간에 따른 변화
    &quot;&quot;&quot;    
    .
    .
    .
    for i in cd_del_enemList:
        del enemList[i]          #적기 제거
        shootDown += 1           #적군 격추 시 증가
        point += 100             #적군 격추 시 포인트 100 증가
        
    for i in del_enemList:
        del enemList[i]
        missed+=1             #적기 놓치면 증가
        point-=50             #적기 놓치면 -50&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️ 텍스트 사용&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트를 띄우기 위해서는 3가지 절차가 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 폰트설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. surface 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. surface 화면에 표시 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1667820767972&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    &quot;&quot;&quot;
    ================
    텍스트 표시 절차
    &quot;&quot;&quot;
    #1. 폰트 설정(폰트 주소, 폰트 크기)
    font = pygame.font.Font(r&quot;font\경기천년제목V_Bold.ttf&quot;,20)
    
    #2. surface 생성(텍스트, 안티앨리어싱, 폰트 색(rgb))
    #shootDown 값과 missed값 표시
    text_val = font.render(f&quot;Shoot Down : {shootDown}   Missed : {missed}&quot;,True, (255,255,255))
    text_point = font.render(f&quot;Point : {point}&quot;,True,(255,255,255))
    
    #3. surface 표시(표시할 이미지, 위치)
    screen.blit(text_val, (10,5))
    screen.blit(text_point, (650,5))
    
    &quot;&quot;&quot;
    ================
    &quot;&quot;&quot;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;975&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b326hI/btrQPfFzIfQ/0Md2zokKElv3ixHJYCbRe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b326hI/btrQPfFzIfQ/0Md2zokKElv3ixHJYCbRe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b326hI/btrQPfFzIfQ/0Md2zokKElv3ixHJYCbRe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb326hI%2FbtrQPfFzIfQ%2F0Md2zokKElv3ixHJYCbRe1%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;789&quot; height=&quot;975&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;975&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;</description>
      <category>앱 개발/pygame</category>
      <category>pygame</category>
      <category>python</category>
      <category>Text</category>
      <category>텍스트 띄우기</category>
      <category>파이게임</category>
      <category>파이썬</category>
      <category>파이썬으로 슈팅게임</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/189</guid>
      <comments>https://naman-develop.tistory.com/189#entry189comment</comments>
      <pubDate>Wed, 9 Nov 2022 23:28:18 +0900</pubDate>
    </item>
    <item>
      <title>[자료구조][파이썬으로 쉽게 풀어쓴 자료구조] 05 큐 문제풀기</title>
      <link>https://naman-develop.tistory.com/188</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5ZFrE/btrPx0KFSg4/2dvC4CdeAsPQeyLgcTLhx0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5ZFrE/btrPx0KFSg4/2dvC4CdeAsPQeyLgcTLhx0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5ZFrE/btrPx0KFSg4/2dvC4CdeAsPQeyLgcTLhx0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5ZFrE%2FbtrPx0KFSg4%2F2dvC4CdeAsPQeyLgcTLhx0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adfit&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;728x90&lt;/div&gt;
    &lt;ins class=&quot;kakao_ad_area&quot; style=&quot;display: none;&quot; data-ad-unit=&quot;DAN-L8CyiHZdqlV12S82&quot; data-ad-width=&quot;728px&quot; data-ad-height=&quot;90px&quot;&gt;&lt;/ins&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;//t1.daumcdn.net/kas/static/ba.min.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;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 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️리스트&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;pre id=&quot;code_1666620447467&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;&quot;&quot;
리스트
&quot;&quot;&quot;

class ArrayList:
    def __init__(self):
        self.items=[]
    def insert(self,pos,elem):
        self.items.insert(pos,elem)
    def delete(self,pos):
        return self.items.pop(pos)
    def isEmpty(self):
        return self.size()==0
    def getEntry(self,pos):
        return self.items[pos]
    def size(self):
        return len(self.items)
    def clear(self):
        self.items=[]
    def find(self,item):
        return self.items.index(item)
    def replace(self,pos,elem):
        self.items[pos]=elem
    def sort(self):
        self.items.sort()
    def merge(self,lst):
        self.items.extend(lst)
    def display(self, msg='ArrayList:'):
        print(msg,&quot;항목수=&quot;,self.size(),self.items)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt; &amp;zwj;♂️리스트 문제&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;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>코딩테스트/알고리즘&amp;amp;자료구조</category>
      <author>내만</author>
      <guid isPermaLink="true">https://naman-develop.tistory.com/188</guid>
      <comments>https://naman-develop.tistory.com/188#entry188comment</comments>
      <pubDate>Tue, 25 Oct 2022 19:55:32 +0900</pubDate>
    </item>
  </channel>
</rss>