<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>CS log</title>
    <link>https://doleebest.tistory.com/</link>
    <description>Make it count</description>
    <language>ko</language>
    <pubDate>Fri, 14 Aug 2026 15:03:58 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sj.cath</managingEditor>
    <item>
      <title>[백준] 9663 N-Queen</title>
      <link>https://doleebest.tistory.com/134</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/9663&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/9663&lt;/a&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1738&quot; data-origin-height=&quot;1110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cClTw3/btsLS5NWnwZ/1XzKyPCa2PKkYC5PhWa161/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cClTw3/btsLS5NWnwZ/1XzKyPCa2PKkYC5PhWa161/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cClTw3/btsLS5NWnwZ/1XzKyPCa2PKkYC5PhWa161/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcClTw3%2FbtsLS5NWnwZ%2F1XzKyPCa2PKkYC5PhWa161%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;1738&quot; height=&quot;1110&quot; data-origin-width=&quot;1738&quot; data-origin-height=&quot;1110&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;1254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvaYG9/btsLSeLXpKD/Yyys2YvTnCkVNSbkDcQYe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvaYG9/btsLSeLXpKD/Yyys2YvTnCkVNSbkDcQYe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvaYG9/btsLSeLXpKD/Yyys2YvTnCkVNSbkDcQYe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvaYG9%2FbtsLSeLXpKD%2FYyys2YvTnCkVNSbkDcQYe0%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;688&quot; height=&quot;1254&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;1254&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;pre id=&quot;code_1737229062180&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

def dfs(n) :
    global ans
    if n==N : # N행까지 진행한 경우 경우의 수 가능 : 성공
        ans+=1
        return
    for j in range(N) :
        if v1[j] == v2[n+j] == v3[n-j] == 0: # 열/대각선 모두 없는 경우
            v1[j] == v2[n+j] == v3[n-j] = 1 # 표시
            dfs(n+1)
            v1[j] == v2[n+j] == v3[n-j] = 0 # 해제

N = int(input())

ans = 0

v1 = [0]*N
v2 = [0]*(2*N)
v3 = [0]*(2*N)
dfs(0)
print(ans)&lt;/code&gt;&lt;/pre&gt;</description>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/134</guid>
      <comments>https://doleebest.tistory.com/134#entry134comment</comments>
      <pubDate>Sun, 19 Jan 2025 04:37:46 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 15663 : N과 M</title>
      <link>https://doleebest.tistory.com/133</link>
      <description>&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://www.acmicpc.net/problem/15663&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/15663&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;1290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcJogw/btsLSBfz9bc/xm8uUCheJbqwXxGpxKpSk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcJogw/btsLSBfz9bc/xm8uUCheJbqwXxGpxKpSk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcJogw/btsLSBfz9bc/xm8uUCheJbqwXxGpxKpSk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcJogw%2FbtsLSBfz9bc%2Fxm8uUCheJbqwXxGpxKpSk0%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;1854&quot; height=&quot;1290&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;1290&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 39.jpeg&quot; data-origin-width=&quot;1041&quot; data-origin-height=&quot;1250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA7huV/btsLTuNv83Z/tXCGMyKlpUljz1XKM1XgHK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA7huV/btsLTuNv83Z/tXCGMyKlpUljz1XKM1XgHK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA7huV/btsLTuNv83Z/tXCGMyKlpUljz1XKM1XgHK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA7huV%2FbtsLTuNv83Z%2FtXCGMyKlpUljz1XKM1XgHK%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;1041&quot; height=&quot;1250&quot; data-filename=&quot;Restore State 39.jpeg&quot; data-origin-width=&quot;1041&quot; data-origin-height=&quot;1250&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;pre id=&quot;code_1737227400213&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys

def dfs(n,tlst) :
    if n==M : # 종료조건
        ans.append(tlst) # tlst : 현재까지 만들어진 순열
        return
    
    prev = 0 # 중복 안하기 위해서 설정한 값
    for j in range(N) : # 주어진 리스트에서 
        if v[j] == 0 and prev != lst[j] : 
            # 숫자가 이미 사용 안했는가? + 중복 확인
            prev = lst[j] # 이전 숫자와 같지 않은 경우만 선택해서 중복 방지
            v[j]=1 # 숫자를 선택했으므로 방문 상태를 1로 설정
            dfs(n+1, tlst+[lst[j]]) # 백트래킹
            v[j] =0 # 다른 순열 탐색 초기화
            
N,M = map(int, input().split())
lst = sorted(list(map(int, input().split())))

ans = []
v = [0]*N
dfs(0,[])

for lst in ans :
    print(*lst)&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;&lt;a href=&quot;https://www.youtube.com/watch?v=2Z7t0Prt2ng&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=2Z7t0Prt2ng&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=2Z7t0Prt2ng&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/dXAj4o/hyX4nBWQeG/JO9kp1pxmIk2FapsVWxIX0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360,https://scrap.kakaocdn.net/dn/53Dlz/hyX0k1bM88/KoCCaAP0G2g1eD60szsnE1/img.jpg?width=480&amp;amp;height=360&amp;amp;face=0_0_480_360&quot; data-video-width=&quot;480&quot; data-video-height=&quot;360&quot; data-video-origin-width=&quot;480&quot; data-video-origin-height=&quot;360&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[백준문제집 백트래킹 #11] 15663. N과 M (9) (백준, 파이썬)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/2Z7t0Prt2ng&quot; width=&quot;480&quot; height=&quot;360&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/133</guid>
      <comments>https://doleebest.tistory.com/133#entry133comment</comments>
      <pubDate>Sun, 19 Jan 2025 04:10:06 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 14225 부분 수열의 합</title>
      <link>https://doleebest.tistory.com/132</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14225&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/14225&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2030&quot; data-origin-height=&quot;1218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dr8Gnq/btsLRkllasc/iktwRMuMmEROhMmfgptq0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dr8Gnq/btsLRkllasc/iktwRMuMmEROhMmfgptq0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dr8Gnq/btsLRkllasc/iktwRMuMmEROhMmfgptq0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr8Gnq%2FbtsLRkllasc%2FiktwRMuMmEROhMmfgptq0K%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;2030&quot; height=&quot;1218&quot; data-origin-width=&quot;2030&quot; data-origin-height=&quot;1218&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1737130273631&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
n = int(input())
init_arr = map(int, input.split())
plus_arr = []
for i in range(len(init_arr)) :
    for j in range() :
        plus_arr.append(init_arr[i] + init_arr[j])
set_data = set(plus_arr)
list_data = list(set_data)
init_arr.extend(list_data)
print(init_arr)&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;내가 처음 접근했던 방식은 일단 굉장히 robust하게.. 수열을 합치는 느낌이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;부분 수열의 합으로 나올 수 &quot;없는&quot; 가장 작은 자연수 를 어떻게 구할 지가 다소 어렵게 느껴졌었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1737130981995&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())
num = list(map(int,input().split()))
visited = [0]*10000000

def dfs(idx,sum) :
    if idx == n : # 종료 조건
       return
    sum += num[idx]
    visited[sum] = 1
    dfs(idx+1, sum) # 현재 숫자를 포함하는 경우
    dfs(idx+1, sum-num[idx]) # 현재 숫자를 포함 안하는 경우

dfs(0,0)
print(visited[1:].index(0)+1)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;caret-color: #555555; background-color: #ffffff;&quot;&gt;그래서 DFS로 풀 수 있는 코드를 공부해보자면 다음과 같다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 38.jpeg&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;1146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMcGhU/btsLQ8rYFdE/TIZSLbTpee8terrpp4Q7V0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMcGhU/btsLQ8rYFdE/TIZSLbTpee8terrpp4Q7V0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMcGhU/btsLQ8rYFdE/TIZSLbTpee8terrpp4Q7V0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMcGhU%2FbtsLQ8rYFdE%2FTIZSLbTpee8terrpp4Q7V0%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;967&quot; height=&quot;1146&quot; data-filename=&quot;Restore State 38.jpeg&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;1146&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&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span style=&quot;caret-color: #555555; background-color: #ffffff;&quot;&gt;&lt;u&gt;&lt;i&gt;* 이 문제를 왜 DFS로 풀어야 하는가?&lt;/i&gt; &lt;/u&gt;가능한 모든 조합을 찾아야 하므로&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/132</guid>
      <comments>https://doleebest.tistory.com/132#entry132comment</comments>
      <pubDate>Sat, 18 Jan 2025 01:40:51 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 1695</title>
      <link>https://doleebest.tistory.com/130</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;996&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nP1h1/btsLKcU10NR/9xuE4yT83o1x49NAvXSvA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nP1h1/btsLKcU10NR/9xuE4yT83o1x49NAvXSvA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nP1h1/btsLKcU10NR/9xuE4yT83o1x49NAvXSvA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnP1h1%2FbtsLKcU10NR%2F9xuE4yT83o1x49NAvXSvA0%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;1468&quot; height=&quot;996&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;996&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1736643283383&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

n = int(input())
arr = list(map(int, input().split()))
dp = [[0] * (n + 1) for _ in range(n + 1)]

for i in range(1, n + 1):
    for j in range(1, n + 1):
        if arr[-i] == arr[j - 1]:
            dp[i][j] = dp[i - 1][j - 1] + 1
        else:
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])

print(n - dp[-1][-1])&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CS/Algorithm</category>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/130</guid>
      <comments>https://doleebest.tistory.com/130#entry130comment</comments>
      <pubDate>Sun, 12 Jan 2025 10:02:06 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 11727번 2xn 타일링 2</title>
      <link>https://doleebest.tistory.com/129</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/11726&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/11726&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1772&quot; data-origin-height=&quot;1234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eseGVC/btsLJmjM4Se/ZkkvRoAzOsWOueEShNaNtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eseGVC/btsLJmjM4Se/ZkkvRoAzOsWOueEShNaNtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eseGVC/btsLJmjM4Se/ZkkvRoAzOsWOueEShNaNtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeseGVC%2FbtsLJmjM4Se%2FZkkvRoAzOsWOueEShNaNtK%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;1772&quot; height=&quot;1234&quot; data-origin-width=&quot;1772&quot; data-origin-height=&quot;1234&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 36.jpeg&quot; data-origin-width=&quot;1072&quot; data-origin-height=&quot;1020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byQ46e/btsLKt3kAz3/eE7KYVn9HKnh9IEocxGYnk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byQ46e/btsLKt3kAz3/eE7KYVn9HKnh9IEocxGYnk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byQ46e/btsLKt3kAz3/eE7KYVn9HKnh9IEocxGYnk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyQ46e%2FbtsLKt3kAz3%2FeE7KYVn9HKnh9IEocxGYnk%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;1072&quot; height=&quot;1020&quot; data-filename=&quot;Restore State 36.jpeg&quot; data-origin-width=&quot;1072&quot; data-origin-height=&quot;1020&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 37.jpeg&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;1090&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkjq93/btsLL9JjCD5/nxuLBkyhKZrwpd9XOoQhZ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkjq93/btsLL9JjCD5/nxuLBkyhKZrwpd9XOoQhZ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkjq93/btsLL9JjCD5/nxuLBkyhKZrwpd9XOoQhZ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkjq93%2FbtsLL9JjCD5%2FnxuLBkyhKZrwpd9XOoQhZ1%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;1592&quot; height=&quot;1090&quot; data-filename=&quot;Restore State 37.jpeg&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;1090&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;u&gt;&lt;b&gt;dp[i] = 2*i 길이 직사각형 만드는 방법 수 = dp[i-1] + dp[i-2]*2&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1736643705061&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;N = int(input())
# dp 배열 초기화
dp = [0]*(N+1)
dp[1], dp[2] = 1,3

for i in range(3,N+1) : 
    dp[i] = dp[i-1] + dp[i-2]*2

ans = dp[N]
print(ans%10007)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CS/Algorithm</category>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/129</guid>
      <comments>https://doleebest.tistory.com/129#entry129comment</comments>
      <pubDate>Sun, 12 Jan 2025 10:01:49 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 14501번</title>
      <link>https://doleebest.tistory.com/128</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/14501&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/14501&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2326&quot; data-origin-height=&quot;1264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xmaIG/btsLLOSOgwE/PgJKPWDdi2EDvWcl3VFAVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xmaIG/btsLLOSOgwE/PgJKPWDdi2EDvWcl3VFAVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xmaIG/btsLLOSOgwE/PgJKPWDdi2EDvWcl3VFAVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxmaIG%2FbtsLLOSOgwE%2FPgJKPWDdi2EDvWcl3VFAVk%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;2326&quot; height=&quot;1264&quot; data-origin-width=&quot;2326&quot; data-origin-height=&quot;1264&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;1698&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dy79Si/btsLKCr3wXQ/P7I6GY7a2kvUFcRlQxctV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dy79Si/btsLKCr3wXQ/P7I6GY7a2kvUFcRlQxctV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dy79Si/btsLKCr3wXQ/P7I6GY7a2kvUFcRlQxctV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdy79Si%2FbtsLKCr3wXQ%2FP7I6GY7a2kvUFcRlQxctV0%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;1698&quot; height=&quot;532&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;처음 접근 방식&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 수기로 작성해보면서 해보니 &quot;가능한 모든 경우를 다 실행해보고 그 중에서 max를 찾으면 될 수도 있겠다&quot; 싶어서 완전탐색(백트래킹)도 생각났고, - &quot;그림처럼 큰 문제를 여러 방식으로 쪼개는 느낌&quot;이라 dp 도 적용가능하겠다. 라는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;➡️ 최대 15일까지로 정해져있기 때문에 연산량이 생각보다 그렇게 크지 않을 것이므로 완전탐색과 dp 모두 가능!&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;상담이 가능한 조건 : 항상 7일 내에 상담이 끝나야 하고, 만약 i일차에 상담을 했다면 T[i]일 동안은 상담이 불가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 식으로 표현하면 n&amp;lt;=T[n]&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;그리고 가장 중요한 수익 ans는 갱신해주면 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;여기까지는 생각했는데 코드로 구현하는 것이 헷갈렸었음&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S7m12/btsLJnC0FUO/je5PZSZUOpiWesK51KPx81/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S7m12/btsLJnC0FUO/je5PZSZUOpiWesK51KPx81/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;1292&quot; data-filename=&quot;Restore State 33.jpeg&quot; data-widthpercent=&quot;46.86&quot; style=&quot;width: 46.313272%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S7m12/btsLJnC0FUO/je5PZSZUOpiWesK51KPx81/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS7m12%2FbtsLJnC0FUO%2Fje5PZSZUOpiWesK51KPx81%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;1070&quot; height=&quot;1292&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;방법 1) 백트래킹&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;복잡도 2^15&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 34.jpeg&quot; data-origin-width=&quot;881&quot; data-origin-height=&quot;938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cg2NTQ/btsLK5OoYf4/HKV5SMStKOncuWYN8dX3l1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg2NTQ/btsLK5OoYf4/HKV5SMStKOncuWYN8dX3l1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg2NTQ/btsLK5OoYf4/HKV5SMStKOncuWYN8dX3l1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg2NTQ%2FbtsLK5OoYf4%2FHKV5SMStKOncuWYN8dX3l1%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;881&quot; height=&quot;938&quot; data-filename=&quot;Restore State 34.jpeg&quot; data-origin-width=&quot;881&quot; data-origin-height=&quot;938&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1736599627039&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def dfs(n,sum) : 
    global ans
    # 종료조건 : 가능한 n을 종료에 관련된 것으로 정의
    if n&amp;gt;=N : 
        ans = max(ans,sum)
        return
    
    # 하부 호출 : 화살표 개수만큼 호출
    if n+T[n] &amp;lt;= N : # 상담하는 경우 (퇴사일 전 상담이 완료 가능)
        dfs(n+T[n], sum+P[n])
    dfs(n+1, sum)# 상담하지 않는 경우 (항상 가능)

N = int(input())
T = [0]*N
P = [0]*N
for i in range(N) : 
    T[i], P[i] = map(int, input().split())
    
ans = 0
dfs(0,0)
print(ans)&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;size18&quot;&gt;참고로 그냥 return이라고 쓰면 그렇게 함수가 끝남. 그래서 print(ans) 라고 써준것.&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;&lt;b&gt;방법 2) &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/h2&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 35.jpeg&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;1108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qZcfl/btsLJj8ttPN/9PCQO9hNGu1IgTADkIOJsk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qZcfl/btsLJj8ttPN/9PCQO9hNGu1IgTADkIOJsk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qZcfl/btsLJj8ttPN/9PCQO9hNGu1IgTADkIOJsk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqZcfl%2FbtsLJj8ttPN%2F9PCQO9hNGu1IgTADkIOJsk%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;897&quot; height=&quot;1108&quot; data-filename=&quot;Restore State 35.jpeg&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;1108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1736613342304&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;N = int(input())
T = [0] * N
P = [0] * N

for i in range(N): 
    T[i], P[i] = map(int, input().split())
    
dp = [0] * (N + 1)  # dp 배열 초기화

for n in range(N - 1, -1, -1):  # 뒤에서 앞으로 계산
    if n + T[n] &amp;lt;= N: 
        dp[n] = max(dp[n + 1], dp[n + T[n]] + P[n])  # 상담 가능
    else: 
        dp[n] = dp[n + 1]  # 상담 불가능

print(dp[0])  # 최대 수익 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS/Algorithm</category>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/128</guid>
      <comments>https://doleebest.tistory.com/128#entry128comment</comments>
      <pubDate>Sun, 12 Jan 2025 01:50:59 +0900</pubDate>
    </item>
    <item>
      <title>Dynamic Programming</title>
      <link>https://doleebest.tistory.com/126</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DP란&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리 공간을 약간 더 사용하면 연산 속도를 더 비약적으로 증가시킬 수 있는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;top down과 bottom up 방식이 있다. + 메모이제이션 기법&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점화식(인접 3항간 점화식)을 이용하여 표현하면, a_n+2 = f(a_n+1 , a_n) = a_n+1 + a_n&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적인 피보나치 수열은&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 32.jpeg&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AXVFP/btsLEh3MPLL/vqacRukA0U47iwmkV8BCe1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AXVFP/btsLEh3MPLL/vqacRukA0U47iwmkV8BCe1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AXVFP/btsLEh3MPLL/vqacRukA0U47iwmkV8BCe1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAXVFP%2FbtsLEh3MPLL%2FvqacRukA0U47iwmkV8BCe1%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;640&quot; height=&quot;233&quot; data-filename=&quot;Restore State 32.jpeg&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;474&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;f(n)을 표현할 때 f(2),f(1)은 항상 1이므로 호출을 정지한다. 이를 코드로 표현하면 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1736220669753&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def fibo(n) : 
	if n==1 or n==2 :
    		return 1
    	else : fibo(n-1) + fibo(n-2)&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;그러나 빅오표기법에 의하면 이 수열은 O(2^n) 시간이 소요된다. 즉, n이 커지면 기하급수적으로 연산량이 늘어나는 것이다.  &lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면...&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;재귀 호출 트리의 구조를 보면, 각 노드에서 두 개의 하위 노드를 생성한다. 이 때문에 호출 트리는 다음과 같이 증가합니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;루트 노드(fibo(n))는 1개,&lt;/li&gt;
&lt;li&gt;깊이가 1인 노드(fibo(n-1)와&lt;span&gt;&amp;nbsp;&lt;/span&gt;fibo(n-2))는 2개,&lt;/li&gt;
&lt;li&gt;깊이가 2인 노드(fibo(n-2)와&lt;span&gt;&amp;nbsp;&lt;/span&gt;fibo(n-3)&lt;span&gt;&amp;nbsp;&lt;/span&gt;...)는 4개,&lt;/li&gt;
&lt;li&gt;깊이가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;k&lt;/span&gt;&lt;/span&gt;인 노드는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2^k&lt;/span&gt;&lt;/span&gt;개.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;트리의 최대 깊이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;/span&gt;, 따라서 총 노드 수는:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;1+2+4+⋯+2n&amp;minus;1&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;2^&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;minus;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;span style=&quot;color: #ef6f53;&quot;&gt;1) 큰 문제를 작은 문제로 나눌 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;2) 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모이제이션은 다이나믹 프로그래밍을 구현하는 방법 중 한 종류. 한번 구한 결과를 메모리 공간에 메모해두고 같은 식을 다시 호출하면 메모한 결과를 그대로 가져오는 기법. = 캐싱&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번 구한 정보를 리스트에 저장하는 것이다. 그리고 한번 저장했던 문제는 답을 저장해놓고, 이 문제는 이미 해결됐던 것이므로 다시 해결할 필요가 없다고 하고 반환하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 퀵 정렬은 정렬을 수행할 때 정렬할 리스트를 분할하며 전체적으로 정렬이 될 수 있도록 한다. 이는 분할 정복 알고리즘으로 분류된다. 다이나믹 프로그래밍과 분할 정복의 차이점은 다이나믹 프로그래밍은 문제들이 서로 영향을 미치고 있다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) 탑다운 방식 (하향식)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큰 문제를 해결하기 위해 작은 문제를 호출&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 33.jpeg&quot; data-origin-width=&quot;1454&quot; data-origin-height=&quot;829&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bElwv5/btsLGZAOKEZ/DIJyEZSfx7lWMx6MoXWNr1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bElwv5/btsLGZAOKEZ/DIJyEZSfx7lWMx6MoXWNr1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bElwv5/btsLGZAOKEZ/DIJyEZSfx7lWMx6MoXWNr1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbElwv5%2FbtsLGZAOKEZ%2FDIJyEZSfx7lWMx6MoXWNr1%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;1454&quot; height=&quot;829&quot; data-filename=&quot;Restore State 33.jpeg&quot; data-origin-width=&quot;1454&quot; data-origin-height=&quot;829&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 시간복잡도는 O(N)이다. 왜냐하면 f(1)을 구한 다음 그 값이 f(2)를 푸는 데 사용되고, f(2)의 값이 f(3)을 푸는 데 사용되는 방식으로 이어지기 때문이다. 한 번 구한 결과는 다시 구해지지 않는다. 따라서 다음과 같이 방문한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 34.jpeg&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AW4Dk/btsLFBgFMQC/KepzNcUG5NpTxdP1X3yki0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AW4Dk/btsLFBgFMQC/KepzNcUG5NpTxdP1X3yki0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AW4Dk/btsLFBgFMQC/KepzNcUG5NpTxdP1X3yki0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAW4Dk%2FbtsLFBgFMQC%2FKepzNcUG5NpTxdP1X3yki0%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;716&quot; height=&quot;489&quot; data-filename=&quot;Restore State 34.jpeg&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;702&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) 보텀업 방식 (상향식) - 다이나믹 프로그래밍&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문을 사용하여 아래에서 위로, 작은 문제부터 차근차근 답을 도출한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Restore State 35.jpeg&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3kTD3/btsLHvzdwr6/IlAQlLyGAyBskqiogL9mjk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3kTD3/btsLHvzdwr6/IlAQlLyGAyBskqiogL9mjk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3kTD3/btsLHvzdwr6/IlAQlLyGAyBskqiogL9mjk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3kTD3%2FbtsLHvzdwr6%2FIlAQlLyGAyBskqiogL9mjk%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;1307&quot; height=&quot;687&quot; data-filename=&quot;Restore State 35.jpeg&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;687&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 d(3) =d(2) + d(1) 부터 구하므로 d(1)부터 위로 올라가는 방식임을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;dp는 코테에서 간단한 형태로 출제되므로 완전 탐색 알고리즘으로 접근했을 때 시간이 매우 오래 걸리면 다이나믹 프로그램을 적용할 수 있는지 해결하고자 하는 부분 문제들의 중복 여부를 확인해보자!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>CS/Algorithm</category>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/126</guid>
      <comments>https://doleebest.tistory.com/126#entry126comment</comments>
      <pubDate>Wed, 8 Jan 2025 01:44:44 +0900</pubDate>
    </item>
    <item>
      <title>클라우드 컴퓨팅 9~10강 ; network</title>
      <link>https://doleebest.tistory.com/117</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;9강&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;networking 구조&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_F002182326E5-1.jpeg&quot; data-origin-width=&quot;1822&quot; data-origin-height=&quot;1108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxe9wG/btsKc0t5itA/vQkg4bIlxhvMZJUxohYgL1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxe9wG/btsKc0t5itA/vQkg4bIlxhvMZJUxohYgL1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxe9wG/btsKc0t5itA/vQkg4bIlxhvMZJUxohYgL1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxe9wG%2FbtsKc0t5itA%2FvQkg4bIlxhvMZJUxohYgL1%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;1822&quot; height=&quot;1108&quot; data-filename=&quot;IMG_F002182326E5-1.jpeg&quot; data-origin-width=&quot;1822&quot; data-origin-height=&quot;1108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;server(sw service 제공),&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;router(network 형성해줌), hub&amp;amp;switch&lt;/span&gt;, ISP, cloud, network nodes(client)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;network lyr가 높아질 수록 user쪽, 낮아질 수록 physical 구성요소&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;network models&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;peer-to-peer : 중앙 서버 없이 서로서로 연결되어있음 ex) 토렌트&lt;/li&gt;
&lt;li&gt;client-server : 서버 - nodes ex) aws ec2-internet-nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;network types&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LANs : router는 한 area만 커버한다는 전제하에 여러개 일수있음 ex) ewha campus&lt;/li&gt;
&lt;li&gt;WANs : 광선 및 인공위성으로 연결 ex) internet&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;IP address&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;- router 안에서 node들이 유니크한 ip 가져야 (ip 가짐)&lt;/li&gt;
&lt;li&gt;- switch : ip 안가짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;- ip addr는 중간에 바꿀 수 없음&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ipv4 vs ipv6&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ipv4 : 32bits,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;VPN이 IPv4를 사용하는 네트워크 트래픽을 처리하고 전달할 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ipv6 : 128 bits, unlimited&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;subnet&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- network 안에 network&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 타 subnet으로 가려면 router을 꼭 거쳐야 함.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- ip 부여가 subnet mask 최대 개수보다 적은건 괜찮음. 대신 overlap 되면 안됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;type&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- public subnet : internet gateway로 라우팅해줌. traffic from everywhere 그래서 website를 유저에게 서비스해주면 이 서브넷을 이용하길&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- private subnet : 다른 곳에서 오는 트래픽 deny&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_453B1AABE259-1.jpeg&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xoLtK/btsKcihMm8u/FwL8j5yhEwhbBp0PTj6Ee0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xoLtK/btsKcihMm8u/FwL8j5yhEwhbBp0PTj6Ee0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xoLtK/btsKcihMm8u/FwL8j5yhEwhbBp0PTj6Ee0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxoLtK%2FbtsKcihMm8u%2FFwL8j5yhEwhbBp0PTj6Ee0%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;1222&quot; height=&quot;411&quot; data-filename=&quot;IMG_453B1AABE259-1.jpeg&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;VPC(virtual private cloud)&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;cloud in cloud. AWS에서 제공하는 가상 사설 네트워크 서비스&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;region specific : region 하나만!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;vpc 안 여러개 availability zones &amp;gt; az안 여러개 subnet&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;aws acc 만들면 자동으로 vpc 생성 &amp;gt; 그 안에 az &amp;gt; 각 az 안에 public subnet 있음&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6466D8D8E46C-1.jpeg&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uZo8B/btsKdeTlpKq/oD8DojWpfd0Ak2ZFQ3lzJk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uZo8B/btsKdeTlpKq/oD8DojWpfd0Ak2ZFQ3lzJk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uZo8B/btsKdeTlpKq/oD8DojWpfd0Ak2ZFQ3lzJk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuZo8B%2FbtsKdeTlpKq%2FoD8DojWpfd0Ak2ZFQ3lzJk%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;1592&quot; height=&quot;758&quot; data-filename=&quot;IMG_6466D8D8E46C-1.jpeg&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- region 하나 당 vpc 5개 제한&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_8A76850C5031-1.jpeg&quot; data-origin-width=&quot;1975&quot; data-origin-height=&quot;1377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cN1FmQ/btsKb9yzDgg/7dspMQN0ckKKXZkb1NPYm1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cN1FmQ/btsKb9yzDgg/7dspMQN0ckKKXZkb1NPYm1/img.jpg&quot; data-alt=&quot;중요! 각 세개는 subnet임&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cN1FmQ/btsKb9yzDgg/7dspMQN0ckKKXZkb1NPYm1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcN1FmQ%2FbtsKb9yzDgg%2F7dspMQN0ckKKXZkb1NPYm1%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;1975&quot; height=&quot;1377&quot; data-filename=&quot;IMG_8A76850C5031-1.jpeg&quot; data-origin-width=&quot;1975&quot; data-origin-height=&quot;1377&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;중요! 각 세개는 subnet임&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;10강&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;CIDR block은 나중에 바꿀 수 없음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;Amazon VPC default components&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(계정 생성 시 자동으로 생성되는 것)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;: route table, network ACL, security group&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;바꿀 수 없는 VPC id&lt;/span&gt;도 자동 부여됨. 근데 너무 어려우니까 tag를 달음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;Subnet&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_B092C32993E2-1.jpeg&quot; data-origin-width=&quot;1922&quot; data-origin-height=&quot;979&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3OcxL/btsKdouMU3D/lnQgUpiWryuprB7UrtuaKk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3OcxL/btsKdouMU3D/lnQgUpiWryuprB7UrtuaKk/img.jpg&quot; data-alt=&quot;계산문제 나올듯&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3OcxL/btsKdouMU3D/lnQgUpiWryuprB7UrtuaKk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3OcxL%2FbtsKdouMU3D%2FlnQgUpiWryuprB7UrtuaKk%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;1922&quot; height=&quot;979&quot; data-filename=&quot;IMG_B092C32993E2-1.jpeg&quot; data-origin-width=&quot;1922&quot; data-origin-height=&quot;979&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;계산문제 나올듯&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;: VPC 내에서 IP 주소 범위, VPC 안 작은 network라고 생각하면 됨&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;AWS에서 5개의 IP를 고정으로 가져감&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;사이즈는 가장 큰걸로 하는게 좋고(더 많은 ip addr 확보하기 위해서)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;i&gt;근데 이후 change 불가&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;subnet id도 부과되며, 기존 vpc에서 attach하고 다른 vpc로 attach하는 것도 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;Network gateway&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;- internet gateway : vpc가 internet gateway가 있어야 internet과 소통 가능&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;- virtual private gateway : site-to-site / on-premise랑 내 vpc 연결&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;Route tables&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #37352f; background-color: #9feec3;&quot;&gt;&lt;span style=&quot;caret-color: #37352f;&quot;&gt;subnet - route tables = many to one&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;NACL vs Security Group (족보 선지 적어가기)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;둘다 vpc를 보호하기 위한 것!&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;ACL - Stateless&lt;/span&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;좀 더 outer&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;subnet level (subnet이랑 연결 안시키면 default acl이랑 됨)&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;특정한 IP, Port, Protocol&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;allow&lt;/u&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;Deny 가능&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;순서에 따라 달라질 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span&gt;&lt;span&gt;Security Group - Stateful&lt;/span&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;instnace level , subnet level(x)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;by default : 모든 들어오는 트래픽 다 막음, 모든 나가는 트래픽 다 나가도 됨&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;특정한 IP, Port, Protocol&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;allow &amp;amp; deny&lt;/u&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #000000;&quot;&gt;&lt;b&gt;Connection Tracking 지원&lt;/b&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_CBD1FE9B7442-1.jpeg&quot; data-origin-width=&quot;1563&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqNXIW/btsKdwlXYmM/NsfSEKJG1KApKndKJq2bMK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqNXIW/btsKdwlXYmM/NsfSEKJG1KApKndKJq2bMK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqNXIW/btsKdwlXYmM/NsfSEKJG1KApKndKJq2bMK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqNXIW%2FbtsKdwlXYmM%2FNsfSEKJG1KApKndKJq2bMK%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;1563&quot; height=&quot;676&quot; data-filename=&quot;IMG_CBD1FE9B7442-1.jpeg&quot; data-origin-width=&quot;1563&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Managing your network&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- VPC 삭제 전 안에 리소스들을 삭제해야함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #9feec3;&quot;&gt;VPC 만들면 그안에 모든 인스턴스는 private ip addr가 자동 부여.&lt;/span&gt; 근데 public ip addr도 받을 수 있게 설정 가능&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Elastic IP addr&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- static public ipv4 addr&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- public ip는 instance를 중지했다가 다시 시작하면 바뀔 수 있다. 근데 elastic ip를 부여하면 고정 아이피가 됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 만약 instance하나가 다운되면 다른 아이피에 elastic ip 부여 ➡️ 그리로 라우팅 가능&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- region lv : any vpc in the region&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- instance부여 안되고 둥둥 떠다니면 과금됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;NAT Gateway&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_E83B9EDCBED8-1.jpeg&quot; data-origin-width=&quot;2008&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qik4H/btsKdgwVliK/EhNhtGcknehktl9kjKYpG0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qik4H/btsKdgwVliK/EhNhtGcknehktl9kjKYpG0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qik4H/btsKdgwVliK/EhNhtGcknehktl9kjKYpG0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQik4H%2FbtsKdgwVliK%2FEhNhtGcknehktl9kjKYpG0%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;2008&quot; height=&quot;812&quot; data-filename=&quot;IMG_E83B9EDCBED8-1.jpeg&quot; data-origin-width=&quot;2008&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;NAT가 머물 public subnet 무조건 있어야 함.&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;NAT 만을 위한 elastic ip address 무조건 있어야 한다.&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;VPN vs&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;direct connection&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_8AC3634B222D-1.jpeg&quot; data-origin-width=&quot;1587&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/evYNxA/btsKbgMcbFv/8x8yQHkHi4GOorl7GIGEPK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/evYNxA/btsKbgMcbFv/8x8yQHkHi4GOorl7GIGEPK/img.jpg&quot; data-alt=&quot;VPN&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/evYNxA/btsKbgMcbFv/8x8yQHkHi4GOorl7GIGEPK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FevYNxA%2FbtsKbgMcbFv%2F8x8yQHkHi4GOorl7GIGEPK%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;1587&quot; height=&quot;820&quot; data-filename=&quot;IMG_8AC3634B222D-1.jpeg&quot; data-origin-width=&quot;1587&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VPN&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_D6D01F751261-1.jpeg&quot; data-origin-width=&quot;1406&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmVZvg/btsKbCIkGz1/gRlMAjzOTabila5Bd3fmeK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmVZvg/btsKbCIkGz1/gRlMAjzOTabila5Bd3fmeK/img.jpg&quot; data-alt=&quot;AWS direct connect로 vpc 더 private하게&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmVZvg/btsKbCIkGz1/gRlMAjzOTabila5Bd3fmeK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmVZvg%2FbtsKbCIkGz1%2FgRlMAjzOTabila5Bd3fmeK%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;1406&quot; height=&quot;651&quot; data-filename=&quot;IMG_D6D01F751261-1.jpeg&quot; data-origin-width=&quot;1406&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AWS direct connect로 vpc 더 private하게&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;VPC endpoints&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_35EF2C0711C6-1.jpeg&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;459&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pc74z/btsKcV0N4yD/Vtxo9WGHjbDjRzcFeGRGIK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pc74z/btsKcV0N4yD/Vtxo9WGHjbDjRzcFeGRGIK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pc74z/btsKcV0N4yD/Vtxo9WGHjbDjRzcFeGRGIK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpc74z%2FbtsKcV0N4yD%2FVtxo9WGHjbDjRzcFeGRGIK%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;1128&quot; height=&quot;459&quot; data-filename=&quot;IMG_35EF2C0711C6-1.jpeg&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;459&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;gateway endpoints는 vpc endpoints 중에서도 amazon s3, amazon dynamodb에 집중&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;VPC peering&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 같은 네트워크에 있는 vpc 끼리 private하게 연결&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;- your own vpcs, vpcs in other acc, vpcs in different regions&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- transitive peering 안됨 (모든 vpc 끼리 연결이 다이렉트로 되어있어야만 가능)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;근데..&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;AWS transit gateway&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;를 쓰면 위의 불편함과 복잡함이 해결됨! 일종의 hub&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- hub that controls how traffic is routed among all the connected networks&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;aws route 53 : 도메인은 따로 사고 ip와 jaysim.com을 바인딩&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS</category>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/117</guid>
      <comments>https://doleebest.tistory.com/117#entry117comment</comments>
      <pubDate>Sat, 19 Oct 2024 23:03:33 +0900</pubDate>
    </item>
    <item>
      <title>클라우드 컴퓨팅 6강~8강</title>
      <link>https://doleebest.tistory.com/116</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;6강&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;EC2 Lifecycle&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;not billed&lt;/span&gt; : pending, shutting down, terminated, &lt;u&gt;stopping(stop하려고 하면)&lt;/u&gt;, stopped, stop-hibernated&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;billed&lt;/span&gt; : running, rebooting, &lt;u&gt;stopping(hibernate 하려고 하면)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;scaling option - 여러 scaling 간 차이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;vertical scaling&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: &lt;i&gt;&lt;u&gt;일단 stop하고 type 바꿀 수 있음&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- parallelize 안된다고 가정 + 너무 헤비한 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;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;horizontal scaling&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: &lt;u&gt;&lt;i&gt;서비스 중에 scale in/out 가능&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- auto scaling 으로 가능(ec2가 health check기능이 있어서 주기적으로 ec2 instance가 서비스 할 수 있는지 체크, elb도 optionally check ➡️ unhealthy 감지 ➡️ terminate하고 computing rsrc는 유지 ➡️ healthy한걸로 대체)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- request가 계속 들어올 때 (인스턴스 멈추면 사용자가 불편하니까) / cpu 개수 증가시키면 알아서 분산됨&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;span style=&quot;background-color: #f3c000;&quot;&gt;auto scaling&lt;/span&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;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;- across availability zones&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- unhealthy 한걸 healthy 한걸로 대체 혹은 추가 / demand가 줄어들면 instance 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- auto scaling group(에서는 min, max number of instances, desired capacity)을 auto scaling 하기 전 먼저 생성해줘야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- lanuch template : ec2 launch할 때 ami, security group, instance type을 template 형태로 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- life cycle&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;scale-in&amp;nbsp;: low demand ➡️ terminate&lt;/li&gt;
&lt;li&gt;terminate&amp;nbsp;: unhealthy or redundant ➡️ terminate ➡️ replace&lt;/li&gt;
&lt;/ul&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;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;scaling policy &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;scheduled scaling : workload 변화 알고 있을 때&lt;/li&gt;
&lt;li&gt;dynamic scaling : workload 변화 몰라도 후조치.&lt;/li&gt;
&lt;li&gt;predictive scaling : ml로 ec2 workload 예측. 선조치 (cpu 사용량에 따른 파라미터 조정 안해도 됨)&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;ELB&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;horizontal scaling 하려면 새로 생성된 instance로 distribute된다는 전제가 있어야 함.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_FCA33822ABE5-1.jpeg&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;1289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tXBPc/btsKb3d3O8i/ouNTMlmoDxz40YZYRo5tj0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tXBPc/btsKb3d3O8i/ouNTMlmoDxz40YZYRo5tj0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tXBPc/btsKb3d3O8i/ouNTMlmoDxz40YZYRo5tj0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtXBPc%2FbtsKb3d3O8i%2FouNTMlmoDxz40YZYRo5tj0%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;2012&quot; height=&quot;1289&quot; data-filename=&quot;IMG_FCA33822ABE5-1.jpeg&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;1289&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;health check : unhealthy 하면 traffic routing 을 멈추고 redirect to healthy instance&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;cross-zone load balancing&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;auto scale하면 elb가 거기에 알아서 분산을 시켜줌&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;span style=&quot;background-color: #f3c000;&quot;&gt;types&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;application load balancer(alb)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;os의 application layer(7)에서 동작&lt;/li&gt;
&lt;li&gt;http/https traffic (traffic 내용을 보고 해당 사이트로 routing)&lt;/li&gt;
&lt;li&gt;microservice, container-based app&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;network load balancer(nlb)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;tcp, udp, tls(layer 4)&lt;/li&gt;
&lt;li&gt;성능 더 좋고 faster&lt;/li&gt;
&lt;li&gt;real-time, 성능좋고 low latency 요하는 app&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;7강&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 말하는 storage : dram아니고 ssd, hd 같은거&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;cloud storage&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- data is saved across multiple servers (해킹 당해도 part만 가져가게 됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #9feec3;&quot;&gt;s3는 global&lt;/span&gt; : different availability zone에 copy되어 있어서 안전&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;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;Type&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- block storage : id 가진 block, 여러 sys에 저장하는 flexibility &amp;amp; fast, os &amp;amp; san에 의해 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- file storage : 계층 구조, metadata, over the network에서 사용 시(공유) protocol(nfs, smb)로 접근&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- object storage : data &amp;amp; metadata&amp;amp; object key, &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;api(http,https)로 object id에 접근&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_CAE082C8A21C-1.jpeg&quot; data-origin-width=&quot;1867&quot; data-origin-height=&quot;1196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jqlwx/btsKb7m7iuy/ORyKA2mtvBMw2pDkvZVpu0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jqlwx/btsKb7m7iuy/ORyKA2mtvBMw2pDkvZVpu0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jqlwx/btsKb7m7iuy/ORyKA2mtvBMw2pDkvZVpu0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJqlwx%2FbtsKb7m7iuy%2FORyKA2mtvBMw2pDkvZVpu0%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;1867&quot; height=&quot;1196&quot; data-filename=&quot;IMG_CAE082C8A21C-1.jpeg&quot; data-origin-width=&quot;1867&quot; data-origin-height=&quot;1196&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;object storage&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;bucket 안에 object가 저장됨 : bucket name, object's key, object's version id&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flat address space : 진짜 폴더 구조는 아니지만 prefix를 앞에 붙임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;physical storage를 붙이는 방식 / replicated across multiple nodes&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;EBS, EFS, instance storage 그리고&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;S3&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- region 고르고 relicated across a minimum of 3 az : durability, availability&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- fully scalable service : 크기 개수 형식 제한 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- data 양에는 제한이 없지만, 각 object는 5tb를 넘으면 안됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- GB per month&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 5GB of S3 1년동안&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;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;S3 Storage classes&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼마나 자주 데이터에 access 하느냐?에 따라 구분&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;active storage
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;you use all the time, 접근은 덜하는데 중요한 데이터&lt;/li&gt;
&lt;li&gt;ex) 웹사이트를 위한 static files, html(항상 access될 수 있어야 함)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;archive storage
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;거의 접근 안하는데 꼭 유지되어야 하는거&lt;/li&gt;
&lt;li&gt;ex) 방송사 테이프&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_1B1AD65BBBBB-1.jpeg&quot; data-origin-width=&quot;1875&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9Kc33/btsKcOAIRL7/SdXeX4jxaGs0wxUKToNzrK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9Kc33/btsKcOAIRL7/SdXeX4jxaGs0wxUKToNzrK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9Kc33/btsKcOAIRL7/SdXeX4jxaGs0wxUKToNzrK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9Kc33%2FbtsKcOAIRL7%2FSdXeX4jxaGs0wxUKToNzrK%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;1875&quot; height=&quot;642&quot; data-filename=&quot;IMG_1B1AD65BBBBB-1.jpeg&quot; data-origin-width=&quot;1875&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_25ACC931E93E-1.jpeg&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;1076&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJwQKd/btsKcajJifn/jOcvk3aAjQgIH0l7KWyVjK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJwQKd/btsKcajJifn/jOcvk3aAjQgIH0l7KWyVjK/img.jpg&quot; data-alt=&quot;storage class of object : 언제든지 바꿀 수 있음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJwQKd/btsKcajJifn/jOcvk3aAjQgIH0l7KWyVjK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJwQKd%2FbtsKcajJifn%2FjOcvk3aAjQgIH0l7KWyVjK%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;1909&quot; height=&quot;1076&quot; data-filename=&quot;IMG_25ACC931E93E-1.jpeg&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;1076&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;storage class of object : 언제든지 바꿀 수 있음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_0952F37AA6AE-1.jpeg&quot; data-origin-width=&quot;997&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t63a7/btsKcNaKQJM/6NXGUmd8Fv4SFM4uES1Ap1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t63a7/btsKcNaKQJM/6NXGUmd8Fv4SFM4uES1Ap1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t63a7/btsKcNaKQJM/6NXGUmd8Fv4SFM4uES1Ap1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft63a7%2FbtsKcNaKQJM%2F6NXGUmd8Fv4SFM4uES1Ap1%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;997&quot; height=&quot;325&quot; data-filename=&quot;IMG_0952F37AA6AE-1.jpeg&quot; data-origin-width=&quot;997&quot; data-origin-height=&quot;325&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;&lt;b&gt;8강&lt;/b&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;bucket&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- globally unique 근데 region을 택하긴 해야 함 (일단은 내가 속한 region으로 됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://photobucket.s3.amazons.com/2021-04-13/myphotos.zip&quot;&gt;- &lt;/a&gt;&lt;a href=&quot;https://photobucket.s3.amazons.com/2021-04-13/myphotos.zip&quot;&gt;https://photobucket.s3.amazons.com/2021-04-13/myphotos.zip&lt;/a&gt; 에서 photobucket은 prefix, &lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://photobucket.s3.amazons.com/2021-04-13/myphotos.zip&quot;&gt;2021-04-13/myphotos.zip&lt;/a&gt; 은 object를 구별할 수 있는 key&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- object ownership (acl) : 누가 어떤 object에 접근할 수 있는지 list. 각 object가 가짐. 설정 안하면 자동으로 꺼짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- block public access : aws acc 밖에 사람들이 object를 어떻게 보고 사용할 수 있는지 / &lt;span style=&quot;background-color: #9feec3;&quot;&gt;디폴트는 다 block public access&lt;/span&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;versioning&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;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;- default : 불가, 한번 versioning 하면 돌아갈 수 없음. 잠깐 중단은 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 가장 최근 거는 key가 url에 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- versioning 하면 유니크 Id 부여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- tag를 달아서 track your storage costs &lt;span style=&quot;background-color: #9feec3;&quot;&gt;(tag는 unique, key는 유니크 아니어도 됨)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;uploading objects&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #9feec3;&quot;&gt;storage 언제든 바꿀 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- multipart upload : fully utilize nw bandwidth 하면 speed를 높일 수 있음 (세개 파트로 나눠서 object는 upload하고 동시에 s3 bucket에 업로드하면 s3가 모아서 obejct 생성해줌)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;working with objects&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 진짜 aws 작업 area에서는 rename, move api가 없고 &lt;i&gt;실제로는 copy하는 거&lt;/i&gt;. 왜냐면 http api 베이스여서.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 복사본 만들기, rename object, move an object, change object metadata&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- url로 download object 혹은 from url, console&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- deleting objects : multi-fator authentication&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;additional features&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;transition actions&lt;/span&gt; : storage class to another&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;expiration actions&lt;/span&gt; : objects expire and are deleted (1년후 자동으로)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;replication rules : automatic copying of objects across s3 buckets / availability, durability를 높임&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;cross-region repliaction &amp;amp; same-region replication&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cross-region repliaction : copy objects across amazon s3 buckets in different aws regions / compliance requirements(재해 생겼을 때 회복하기 위해서), minimize latency 요구될때&lt;/li&gt;
&lt;li&gt;same-region replication : 하나의 버킷, 하나의 지역으로 aggregate logs 를 한다. / production과 test 사이에 같은 데이터를 쓰기 위해 replication 생성.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;bucket security&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: grant access 하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;1. IAM role이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;IAM policy&lt;/b&gt;를 define해서 EC2나 acc에게 부여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐면 amazon &lt;span style=&quot;background-color: #9feec3;&quot;&gt;s3는 private by defaul&lt;/span&gt;t 심지어 스스로도 부여해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;bucket policy&lt;/b&gt; : json 형식, bucket에 붙어있음&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>CS</category>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/116</guid>
      <comments>https://doleebest.tistory.com/116#entry116comment</comments>
      <pubDate>Sat, 19 Oct 2024 17:03:37 +0900</pubDate>
    </item>
    <item>
      <title>클라우드 컴퓨팅 2강~5강</title>
      <link>https://doleebest.tistory.com/115</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2강&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 비교 : on-premise vs 클라우드 (장단점)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) on-premise의 문제점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #f3c000;&quot;&gt;over-provisioning, under-provisioning&lt;/span&gt; / maintenance 못함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;scaling up / scaling down&lt;/span&gt;(capacity를 높이기, 줄이기) 가 어려움&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;2) 클라우드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: computing as utility - 누구에게나 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pay-as-you-go&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;increased scalability&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 것이 at scale하게 갖춰져 있음&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SLA (service level agreement)에 availability, reliability 명시&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;overlapped boundary&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;infrastructure service는 선택권이 적음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;limited portability : migrate하기가 어려움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;multi-regional compliance and legal issues (cloud는 worldwide인데 국가별로 상황이 다름. src code를 바꿔야 할 수도)&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;span style=&quot;background-color: #f3c000;&quot;&gt;2. cloud 구성요소&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SNS ; Servers, Networking equipment, Storage&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) Server&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;장점 : reliability, large number of requests&lt;/li&gt;
&lt;li&gt;blade server : 1u server * 42 = 1 rack&lt;/li&gt;
&lt;li&gt;heterogeneous servers
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이걸 모아주는게 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;cluster : top에 network switch가 서버(=머신=노드)끼리 연결해주고(1u), 그 밑에 노드들(37u), 그 밑에 스토리지(4u)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;hdd vs ssd(nvm flash)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;hdd : mechanical, magnetic, random access, cheaper but slow&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ssd : electrical, speedy, expensive&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) networking&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 3-party providers&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- data 구조 : bus, tree, ring, star&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;3) storage&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- disk trays(hdd) vs ssd &amp;amp; nvm flash&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- computing server는 따로, 얘네들이 storage server를 share해서 쓰기도 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- cluster : 비슷한 machine(internet끼리, 데이터 서버끼리) 묶어서 rack에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 센터 : &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;쿨링 팬이 굉장히 중요(air conditioning)&lt;/span&gt;, rebundant power(비상시 backup power) / underwater datacenter&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- coast에 위치한 이유? 사람이 많아서, 바다를 건널 경우 latency가 적어서, 싸서&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;3강&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;&lt;b&gt;1) cloud platforms&lt;/b&gt; &lt;/span&gt;: 어떤 서비스 형식으로 deliver? 각 서비스별로 뭘 제공하는지&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SaaS : 인터넷 커넥션만 있으면 됨. csp manager가 모든 걸 관리 ex)word, gmail, calendar&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PaaS : 개발 환경 제공, 유저가 cloud app + data 작성해야함 ex) &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Google App Engine&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Faas : &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;FaaS는 특정 작업이나 이벤트에 대해 코드를 실행할 때 효율적인 서버리스 모델인 반면, PaaS는 인프라에 대한 부담을 줄이면서도 전체 애플리케이션을 개발하고 관리하는 데 유리. AWS lambda(파이썬 코드 작성하는 거)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IaaS : 가상화 서버 자체를 빌려줌 원격 접속할 수 있게끔. 단일 서버를 많은 고객들이 공유. &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;aws ec2&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) cloud deployment models&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;public cloud(누구나), community cloud(특정집단. 국가 기관들이 공유), private cloud(only for samsung 직원)&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;3)&amp;nbsp;aws에 접근하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- aws cli(command line interface)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- api가 아니라 sdk로 접근 (앱 만들어서 sdk로 aws에 접근)&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;span style=&quot;background-color: #f3c000;&quot;&gt;EC2&lt;/span&gt;&lt;/b&gt;&lt;/h3&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;- IaaS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- hourly base&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- virtual machine&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;AMI(OS, default software, configuration, virtualization type)&lt;/li&gt;
&lt;li&gt;instance type(vCPU, memory, instance storage, network performance)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ec2 instance type = instance family -&amp;gt; 그냥 써가기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;인스턴스를 launch한 후에 바꿀 수 있다. vertical scaling 가능!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_899F2DA84148-1.jpeg&quot; data-origin-width=&quot;1727&quot; data-origin-height=&quot;1147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tOKxH/btsKcYKdU4V/Vit1mZB7MtONKNVM9b0Iy0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tOKxH/btsKcYKdU4V/Vit1mZB7MtONKNVM9b0Iy0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tOKxH/btsKcYKdU4V/Vit1mZB7MtONKNVM9b0Iy0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtOKxH%2FbtsKcYKdU4V%2FVit1mZB7MtONKNVM9b0Iy0%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;1727&quot; height=&quot;1147&quot; data-filename=&quot;IMG_899F2DA84148-1.jpeg&quot; data-origin-width=&quot;1727&quot; data-origin-height=&quot;1147&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;&lt;b&gt;4강&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;computing? cpu, ram, hd, network&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;network : bandwidth(양- 스트리밍 서비스 넷플릭스), latency(속도 - 빠른 서비스)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;ram vs hard drive&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ram : main memory를 위한 기술. app이 실행 중에만 켜짐. temporary storage&lt;/li&gt;
&lt;li&gt;hard drive : boot files(부팅 로그), files(강의 pdf), Long-term storage&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;ec2 instance가 클라우드에서 이 computing resource임.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;aws ec2&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- full control over ec2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- any size(elastic computing), anywhere&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- security group, elb를 통해 traffic을 제어할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;1448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHpVg4/btsJ8Zjbmjp/nAu0HfHKRRRxgO9ukPkDQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHpVg4/btsJ8Zjbmjp/nAu0HfHKRRRxgO9ukPkDQ1/img.png&quot; data-alt=&quot;subnet,&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHpVg4/btsJ8Zjbmjp/nAu0HfHKRRRxgO9ukPkDQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHpVg4%2FbtsJ8Zjbmjp%2FnAu0HfHKRRRxgO9ukPkDQ1%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;874&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;1448&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;subnet,&lt;/figcaption&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;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;ec2 instance purchasing options -&amp;gt; 각 type별 특징, 언제 쓰이는지 암기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) on-demand instance&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- os 구분없이 초단위 pay&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- no long-term commitments (오랜 시간 use 한다고 해서 discount 안됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- no upfront pay&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- demands 에 따라 pay&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;i&gt;short-term, spiky, unpredictable workloads / app 개발 및 테스트&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) reserved instance&lt;/b&gt; 미리 싸게 구매&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 가장 쌈. pay by year, no upfront / partial upfront / all upfront&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;&lt;i&gt;predictable workload, flexibility가 요구되지 않는 compute power , 1년 이상, upfront 낼 수 있는 부자 유저~&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) saving plans instance &lt;/b&gt;선택권이 많이 필요하거나 speficied하거나&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;compute saving plans : 가장 선택권이 많아서 cost 줄일 수 있음, 자동으로 family, size, az, region, os, tenancy 설정&lt;/li&gt;
&lt;li&gt;ec2 instance saving plans : 특정 instance family, 특정 region 안, 가장 discount 많이!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;- long time workloads / flexibility 요구하는 computing (지역, instance power) / RI를 coordinate할 필요 없음&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) spot instance&lt;/b&gt; 경매&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pay by min&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일종의 경매형식 (가격이 시시각각 변함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- supply가 demand보다 많으면 discount, 아니면 spot instance 꺼질 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;- flexible start &amp;amp; end time, low compute price만 할 수 있는 app, 급하게 computing 해야하는 경우&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EC2를 리조트라고 생각하면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;On-Demand : Walk-In. 그냥 주말에 쉬려고 예약도 안하고 리조트에 가서 방을 잡는 것&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Reserved : 리조트 방 1개를 1년 ~ 3년 회원권을 구매&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Savings Plans : 월 300달러만큼만 리조트에서 지낼거야. 근데 나중에 바꿀수도 있다 (대신 1년 ~ 3년 약정)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Spot Instance : 떨이. 예약 잘 안되는 방 (전망이 안좋다던가..)을 입찰받아서 싸게 내놓는다. But, 나보다 돈 더내겠다 는 사람이 나오면 나가야한다. batch Job, stateless, 안정성 낮음&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Dedicated Hosts : 만수르 옵션. 리조트 걍 통째로 빌린다  &lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Capacity Reservations : 내가 리조트 갈지 안갈진 몰겠는데 일단 예약&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&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;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Tenancy&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) share tenancy&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) dedicated instance : 전용 서버에서 instance 실행, instance 배치는 aws가 담당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) dedicated host : 사용자가 전용 서버 직접 관리&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_604A6A63A18D-1.jpeg&quot; data-origin-width=&quot;1784&quot; data-origin-height=&quot;1324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhQbmw/btsKclyYMMI/AWe9jZAZiYdmVIHejL8eDK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhQbmw/btsKclyYMMI/AWe9jZAZiYdmVIHejL8eDK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhQbmw/btsKclyYMMI/AWe9jZAZiYdmVIHejL8eDK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhQbmw%2FbtsKclyYMMI%2FAWe9jZAZiYdmVIHejL8eDK%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;1784&quot; height=&quot;1324&quot; data-filename=&quot;IMG_604A6A63A18D-1.jpeg&quot; data-origin-width=&quot;1784&quot; data-origin-height=&quot;1324&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;&lt;b&gt;5강&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ec2 설정 시 해줘야 하는 것들&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) instance name and tags&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- default tag - value가 생성됨 : &lt;u&gt;name - {the name you give the instance}&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #9feec3;&quot;&gt;최대 50개&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- aws cost explorer에 연결해서 cost management /&amp;nbsp;automatically scaling / iam로 관리(attribute-based control) 시&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;2) AMI&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 도커 이미지와 비슷. ami 고르기만 하면 특정 setup 그대로 ami 만들어 &lt;i&gt;재현&lt;/i&gt;할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인스턴스를 생성 후, snapshot을 찍어서 ami 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- template for root volume이고, os, app server, app을 포함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 계정이 여러개이면 각 계정에게 ami 쓸 수 있게 할지 말지 결정 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 같은 용도를 가진 Instance들끼리 ami template를 나눠서 쓸 수 있게 (너무 무거운 딥러닝 모델을 위한 여러개 인스턴스가 ami 나눠서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #9feec3;&quot;&gt;인스턴스 생성 후 한번 만들면 바꿀 수 없음.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 장점 : ami를 사서 sw를 ec2에서 동작하면 install 같은거 걱정 안해도 됨. (비행기 컨트롤 타워 boeing)&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;3)&amp;nbsp;&lt;/b&gt;&lt;b&gt;key pairs&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh나 rdp에 접속할 때 사용할 수 있다. &lt;span style=&quot;background-color: #9feec3;&quot;&gt;인스턴스가 launch되고 나서는 add할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4) network settings&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- public ip addr 쓸 건지 말건지 정한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;region &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: physical location of computing resources (ec2 instance가 succeed될)&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;vpc &amp;amp; subnets&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;default vpc, public subnet이 지역의 각 availability zone에 생긴다. 따라서 instance를 vpc 안에 생성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;1 region - 여러 vpc 생성 가능(~5개) - &lt;span style=&quot;background-color: #9feec3; color: #333333; text-align: start;&quot;&gt;vpc 안에 여러 public subnet 생성 가능&lt;/span&gt;&lt;/span&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;span style=&quot;background-color: #f3c000;&quot;&gt;public ip address &lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;: internet에 접근할 수 있음. / private ip는 접근 불가&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;public server : user server가 internet gateway를 거쳐서 ssh protocol로 접근 가능&lt;/li&gt;
&lt;li&gt;private subnet은 public ip addr을 거친 후 ssh로 접근 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;i&gt;public addr는 인스턴스 자동으로 부여되나? 놉!&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;default vpc - default subnet : public ip addr가 인스턴스 생성 시 자동으로 부여됨 (근데 자동 부여 안되게 설정도 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;default vpc - custom public subnet, custom vpc - custom subnet : public ip addr 자동 부여 안됨. (근데 되게 설정도 가능)&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;security group&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 어떤 ssh 접근을 &lt;u&gt;allow할지 결정&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;- 언제든 바꿀 수 있음,&lt;/span&gt; 실시간으로 반영됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;stateful&lt;/b&gt; : ex) inbound rule만 있으면 응답이 오고 받을 수 있긴 함. 근데 outbound call은 못함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인스턴스 레벨 O, subnet 레벨 X, &lt;span style=&quot;background-color: #9feec3;&quot;&gt;한 인스턴스가 여러 개 가질 수 있음&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 트래픽이 통과하기 전에, security group들이 동시에 열리고 모든 security groupd이 한번에 evaluate됨&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;rule component&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;type(허용하려는 특정 서비스, 통신유형), protocol(그 서비스가 data를 전송하는 방식)&lt;/span&gt;, port range, source&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;inbound rules : default로 없음 / 일단 다 block하고 본다는 뜻&lt;/li&gt;
&lt;li&gt;outbound rules : 일단 다 allow하고 봄. allow rule을 제거해나가는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6) configure storage&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;EBS, EFS, Instance storage 비교! 인스턴스 하나에만 붙는거 / 여러개 공유 / 임시로 특정 상황 fast&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;EBS(Elastic block store)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;usb&lt;/b&gt; 같이 ec2에 붙임, 반도체 기반 기술, 빠르고, for any computing requirements / 대신 비싸고 용량 한계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;- default는 자동으로 삭제 안됨. 직접 지워야 됨.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 보안 : aws key management service(aws kms) 근데 너무 다 보안하면 시간이 오래 걸려서 성능 저하&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;volume type 4개&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;ssd(자주 접근하는 data 저장용, 반도체 기반, fast, 비쌈) : general purpose, provisioned IOPS (general purpose보다 빠름)&lt;/li&gt;
&lt;li&gt;hdd (자주 안 접근, root volume 안됨, boot 할 수 없음 = os 쓸 수 없음) : throughput optimized(hdd중에서도 빠르고 자주 사용하는 데이터 넣을 때), cold(lowest cost, less frequently)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_EAD218C5D2C7-1.jpeg&quot; data-origin-width=&quot;1922&quot; data-origin-height=&quot;911&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnF4Gt/btsKddmAl9Z/7FHyI3FrcDdt4IhkqseSFk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnF4Gt/btsKddmAl9Z/7FHyI3FrcDdt4IhkqseSFk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnF4Gt/btsKddmAl9Z/7FHyI3FrcDdt4IhkqseSFk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnF4Gt%2FbtsKddmAl9Z%2F7FHyI3FrcDdt4IhkqseSFk%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;1922&quot; height=&quot;911&quot; data-filename=&quot;IMG_EAD218C5D2C7-1.jpeg&quot; data-origin-width=&quot;1922&quot; data-origin-height=&quot;911&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;size14&quot;&gt;&lt;i&gt;EBS 사이에 네트워크 만들어서 Mount EBS through NFS ... 귀찮음 근데 EFS로 해결가능!&lt;/i&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;AWS EFS(Elastic file system)&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;- throughput and IOPS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;i&gt;여러개의 인스턴스&lt;/i&gt;를 붙였다 뗐다 할 수 있음. 이때 데이터는 loss 없음. 그들이 &lt;i&gt;share&lt;/i&gt;하는 공간.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;- root volume (x), block storage (x), work above block storage layer. ec2 instance가 자기만의 root volume(os) 갖고 그 위에 있는 거임&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- aws cloud service and &lt;u&gt;on-premise(도 가능!)&lt;/u&gt;&amp;nbsp;rsrc&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- durability, availability&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;AWS EC2 Instance store (block storage)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- temporary block lv storage. 임시라서 버퍼, 캐시 같은 것에 적합.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ec2 끄면 data 다 날라감&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- host 컴퓨터에 물리적으로 있는 disk에 존재하는 storage&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #9feec3;&quot;&gt;root volume 될 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 빠르지만, 임시라서 data loss 있을 수도, certain combination of ami &amp;amp; instance type,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;span style=&quot;background-color: #9feec3;&quot;&gt;instance launch 이후에는 add volume할 수 없음&lt;i&gt;(ebs는 launch 후에도 가능)&lt;/i&gt;, detach volume 안됨, instance store volume not configurable&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;EBS와 비교&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ec2 is(서버에 바로 붙어 있음) vs ebs는 network를 통해 붙어있음&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;EBS&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;EC2 IS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;network를 통해 EC2에 붙어있음&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;EC2 서버에 바로 붙어 있음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;instance launch 후 add,detach volume 가능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;불가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&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;7) advanced details&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;IAM Role&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증 및 권한 관리 서비스 ; 어떤 유저가 어떤 aws resource에 어떤 환경에서 엑세스 할 수 있는지 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flexible하다 : add, remove, update 인스턴스 생성 후에도 가능&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Roles: 사용자, 서비스에 대한 액세스 권한 관리, Policy의 집합&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Policy: 사용자, 서비스에 대한 권한 부여&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;Group: 여러 사람에게 동일한 액세스 권한 부여 및 관리&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;User: AWS 계정 하나&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;User data&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 인스턴스를 run하면 스크립트도 run되고, 인스턴스가 시작될 때마다 스크립트도 실행되게 구성 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ami 설정 바꾸기, sw license key install, sw install&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) auto scaling 명령 가능 : 자동으로 ec2 launch하고 싶을 때, web server 세팅하는 cmd를 스크립트로 설정 가능&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;spot instance&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shut down behavior&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;termination protection(console,api,cli에서 함부로 종료 못하게)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_1997E9A5C312-1.jpeg&quot; data-origin-width=&quot;1931&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deGnYY/btsKdcue8Xs/oEcf38VEujXGQCygWL1Yn1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deGnYY/btsKdcue8Xs/oEcf38VEujXGQCygWL1Yn1/img.jpg&quot; data-alt=&quot;헷갈릴 수 있는 부분! 적어가기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deGnYY/btsKdcue8Xs/oEcf38VEujXGQCygWL1Yn1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeGnYY%2FbtsKdcue8Xs%2FoEcf38VEujXGQCygWL1Yn1%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;1931&quot; height=&quot;816&quot; data-filename=&quot;IMG_1997E9A5C312-1.jpeg&quot; data-origin-width=&quot;1931&quot; data-origin-height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;헷갈릴 수 있는 부분! 적어가기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>CS</category>
      <category>ㅣ</category>
      <author>sj.cath</author>
      <guid isPermaLink="true">https://doleebest.tistory.com/115</guid>
      <comments>https://doleebest.tistory.com/115#entry115comment</comments>
      <pubDate>Sat, 19 Oct 2024 02:03:08 +0900</pubDate>
    </item>
  </channel>
</rss>