<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>힐링 휴식 그리고 개발</title>
    <link>https://ookm1020.tistory.com/</link>
    <description>Frontend Developer #react #etc</description>
    <language>ko</language>
    <pubDate>Sun, 9 Aug 2026 15:30:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>하루정도</managingEditor>
    <item>
      <title>고흥, 그리고 힐링</title>
      <link>https://ookm1020.tistory.com/10</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;힐링 휴식 그리고 개발&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&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;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; &lt;/span&gt;정했습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;font: normal normal 400 12px/normal dotum, sans-serif; width: 640px; height: 392px; color: #333; position: relative;&quot;&gt;
&lt;div style=&quot;height: 360px;&quot;&gt;&lt;a href=&quot;https://map.kakao.com/?urlX=604485.0&amp;amp;urlY=268369.0&amp;amp;name=%EC%A0%84%EB%82%A8%20%EA%B3%A0%ED%9D%A5%EA%B5%B0%20%EB%B4%89%EB%9E%98%EB%A9%B4%20%EC%97%84%EB%82%A8%EA%B8%B8%205-6&amp;amp;map_type=TYPE_MAP&amp;amp;from=roughmap&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;img class=&quot;map&quot; style=&quot;border: 1px solid #ccc;&quot; src=&quot;http://t1.daumcdn.net/roughmap/imgmap/c80e0a0fa933c88a9456ba3d7f135a81e59e1d37b9369cccec203d148e64c6b8&quot; width=&quot;638px&quot; height=&quot;358px&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;overflow: hidden; padding: 7px 11px; border: 1px solid rgba(0, 0, 0, 0.1); border-radius: 0px 0px 2px 2px; background-color: #f9f9f9;&quot;&gt;&lt;a style=&quot;float: left;&quot; href=&quot;https://map.kakao.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;img style=&quot;display: block; width: 72px; height: 16px;&quot; src=&quot;//t1.daumcdn.net/localimg/localimages/07/2018/pc/common/logo_kakaomap.png&quot; alt=&quot;카카오맵&quot; width=&quot;72&quot; height=&quot;16&quot; /&gt;&lt;/a&gt;
&lt;div style=&quot;float: right; position: relative; top: 1px; font-size: 11px;&quot;&gt;&lt;a style=&quot;float: left; height: 15px; padding-top: 1px; line-height: 15px; color: #000; text-decoration: none;&quot; href=&quot;https://map.kakao.com/?from=roughmap&amp;amp;eName=%EC%A0%84%EB%82%A8%20%EA%B3%A0%ED%9D%A5%EA%B5%B0%20%EB%B4%89%EB%9E%98%EB%A9%B4%20%EC%97%84%EB%82%A8%EA%B8%B8%205-6&amp;amp;eX=604485.0&amp;amp;eY=268369.0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;길찾기&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저에게 있어 가장 중요한 여행 포인트는 숙소입니다.&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;서울에서 약 450km를 달려 도착한 곳은 고흥군 외나로도에 위치한 봉래면이라는 작은 마을이었습니다.&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;스크린샷 2024-09-19 오후 4.09.39.png&quot; data-origin-width=&quot;3050&quot; data-origin-height=&quot;1356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BWRdw/btsJGaxqdKG/vpmcgsoTR6HKVQLHTQ2dU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BWRdw/btsJGaxqdKG/vpmcgsoTR6HKVQLHTQ2dU1/img.png&quot; data-alt=&quot;외나로도 수협회센터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BWRdw/btsJGaxqdKG/vpmcgsoTR6HKVQLHTQ2dU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBWRdw%2FbtsJGaxqdKG%2FvpmcgsoTR6HKVQLHTQ2dU1%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;3050&quot; height=&quot;1356&quot; data-filename=&quot;스크린샷 2024-09-19 오후 4.09.39.png&quot; data-origin-width=&quot;3050&quot; data-origin-height=&quot;1356&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;외나로도 수협회센터&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-19 오후 4.11.01.png&quot; data-origin-width=&quot;2338&quot; data-origin-height=&quot;1336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmNbl6/btsJGgdc3ZS/LkaOGzw1pWY6mKqnD25Ec0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmNbl6/btsJGgdc3ZS/LkaOGzw1pWY6mKqnD25Ec0/img.png&quot; data-alt=&quot;회센터 앞 순천횟집&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmNbl6/btsJGgdc3ZS/LkaOGzw1pWY6mKqnD25Ec0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmNbl6%2FbtsJGgdc3ZS%2FLkaOGzw1pWY6mKqnD25Ec0%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;2338&quot; height=&quot;1336&quot; data-filename=&quot;스크린샷 2024-09-19 오후 4.11.01.png&quot; data-origin-width=&quot;2338&quot; data-origin-height=&quot;1336&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회센터 앞 순천횟집&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;lt;모듬회 小 구성&amp;gt;&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;병어회&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;농어회&lt;/li&gt;
&lt;li&gt;민어회&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회의 양은 둘이서 먹기에 적당히 많았으며, 기본 구성 반찬도 서울과 달라 신선하게 식사를 할 수 있었습니다. 맛있는 병어회는 말로만 들었지 실제로 비린맛이 하나도 없이 고소한 병어를 처음으로 먹어본 날이기도 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-19 오후 4.48.19.png&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HcQcu/btsJGxeLuLE/Uk3Vo73IZhKFZywt5OB2C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HcQcu/btsJGxeLuLE/Uk3Vo73IZhKFZywt5OB2C1/img.png&quot; data-alt=&quot;숙소가 있는 언덕&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HcQcu/btsJGxeLuLE/Uk3Vo73IZhKFZywt5OB2C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHcQcu%2FbtsJGxeLuLE%2FUk3Vo73IZhKFZywt5OB2C1%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;888&quot; height=&quot;667&quot; data-filename=&quot;스크린샷 2024-09-19 오후 4.48.19.png&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;667&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;숙소가 있는 언덕&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숙소의 전경입니다. 언덕에 보이는 적벽돌이 아닌 우측에 위치한 별채로 예약했습니다. 이날 본채는 다른 가족분들이 예약을 하셨었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언덕에 위치한 곳이었기 때문에 숙소에서 보이는 바다 풍경은 그야말로 최고였습니다. 아마 제가 경험한 오션뷰 중에서는 최고라는 생각이 드네요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;370F5983-EF7E-4C03-966D-91706529FB56_1_105_c.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zkhPa/btsJFqt1vFG/TQQmxiKoy5pyoMmgrO1TK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zkhPa/btsJFqt1vFG/TQQmxiKoy5pyoMmgrO1TK0/img.jpg&quot; data-alt=&quot;숙소 앞 마당에서 본 풍경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zkhPa/btsJFqt1vFG/TQQmxiKoy5pyoMmgrO1TK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzkhPa%2FbtsJFqt1vFG%2FTQQmxiKoy5pyoMmgrO1TK0%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;1024&quot; height=&quot;768&quot; data-filename=&quot;370F5983-EF7E-4C03-966D-91706529FB56_1_105_c.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;숙소 앞 마당에서 본 풍경&lt;/figcaption&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;숙소 내부는 에어비앤비에서 더 자세하게 나와 있으니 참고하시면 될 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 날 낚시도 조금 즐겨봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7F94BF7E-354C-4ADF-AF7F-85A1D2B37E4F_1_105_c.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE84M2/btsJFHbjxdu/cd7AatQUsGtAoad3NrvruK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE84M2/btsJFHbjxdu/cd7AatQUsGtAoad3NrvruK/img.jpg&quot; data-alt=&quot;숙소 앞 도로&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE84M2/btsJFHbjxdu/cd7AatQUsGtAoad3NrvruK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE84M2%2FbtsJFHbjxdu%2Fcd7AatQUsGtAoad3NrvruK%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;1024&quot; height=&quot;768&quot; data-filename=&quot;7F94BF7E-354C-4ADF-AF7F-85A1D2B37E4F_1_105_c.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;숙소 앞 도로&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평일이라 그런지는 모르겠지만, 고흥에서 저를 제외하고는 낚시하시는 분을 못봤네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원투대 하나만 가지고 왔을 뿐더러 초보이기 때문에 일단 던져봤는데 생각보다 활발한 입질에 깜짝 놀랄 정도였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;7D6040A5-390A-487A-A0D8-8FA7F1F2AAE3_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu24UE/btsJDWnewjc/BmBrnS0PwieCkfK9c9Hx4k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu24UE/btsJDWnewjc/BmBrnS0PwieCkfK9c9Hx4k/img.jpg&quot; data-alt=&quot;보리멸&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu24UE/btsJDWnewjc/BmBrnS0PwieCkfK9c9Hx4k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu24UE%2FbtsJDWnewjc%2FBmBrnS0PwieCkfK9c9Hx4k%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;768&quot; height=&quot;1024&quot; data-filename=&quot;7D6040A5-390A-487A-A0D8-8FA7F1F2AAE3_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보리멸&lt;/figcaption&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;이날 잡힌 물고기는 다수의 보리멸과 복어였습니다. 좀 더 다양한 물고기를 보고 싶었지만 아쉬웠습니다. 낚시는 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;정말 낚시대를 던지고 1분 내외로 입질이 계속되었습니다. 그래서 짧은 시간이었지만 생각보다 많은 조과를 올릴 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5424B76C-F204-4768-9C4B-B805F8AFAE3D_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v5nC3/btsJE0vADmv/KZzuPht8sDoHllKfnHg6l1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v5nC3/btsJE0vADmv/KZzuPht8sDoHllKfnHg6l1/img.jpg&quot; data-alt=&quot;보리멸 손질&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v5nC3/btsJE0vADmv/KZzuPht8sDoHllKfnHg6l1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv5nC3%2FbtsJE0vADmv%2FKZzuPht8sDoHllKfnHg6l1%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;768&quot; height=&quot;1024&quot; data-filename=&quot;5424B76C-F204-4768-9C4B-B805F8AFAE3D_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보리멸 손질&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잡은 보리멸은 이렇게 깔끔하게 손질해서 회로 만들어 먹었습니다. 탄탄하지 않은 식감이었지만, 부드러웠고 비린내가 없어서 괜찮았네요. 보리멸은 회도 뭐 괜찮지만 개인적으로 튀김으로 만들어 먹으면 훨씬 맛있을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 밖에도 로컬의 음식집들도 괜찮았고 차로 조금만 이동하면 보이는 또다른 숙소들도 좋아보였고, 사람 손을 타지 않은 낚시 포인트들이 많았기에 아주 만족스러운 여행이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마을에서는 낚시배를 운영하시는 분들도 많았기 때문에 좀 더 전문적으로 낚시를 즐겨보실 분은 배를 타는 것을 추천드리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 소소하게 집앞에서 낚시해서 잡아서 먹는 것을 좋아합니다  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;</description>
      <category>여행관련</category>
      <category>고흥</category>
      <category>고흥 회센터</category>
      <category>나로도</category>
      <category>순천 횟집</category>
      <category>오션뷰</category>
      <category>외나로도</category>
      <category>집앞 낚시</category>
      <category>최고의 오션뷰</category>
      <category>힐링 여행</category>
      <author>하루정도</author>
      <guid isPermaLink="true">https://ookm1020.tistory.com/10</guid>
      <comments>https://ookm1020.tistory.com/10#entry10comment</comments>
      <pubDate>Thu, 19 Sep 2024 17:05:35 +0900</pubDate>
    </item>
    <item>
      <title>ZeroSSL을 통한 인증서 발급 가이드 - 까먹는 개발자</title>
      <link>https://ookm1020.tistory.com/9</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;SSL 발급을 진행하는 사이트는 여러 곳이 존재하지만, 저한테는 사용하기 편하기 때문에 우선적으로 ZeroSSL 사이트를 통해 SSL 인증서 발급을 진행해보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://zerossl.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://zerossl.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1725595323846&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Free SSL Certificates and SSL Tools - ZeroSSL&quot; data-og-description=&quot;&quot; data-og-host=&quot;zerossl.com&quot; data-og-source-url=&quot;https://zerossl.com/&quot; data-og-url=&quot;https://zerossl.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://zerossl.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://zerossl.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Free SSL Certificates and SSL Tools - ZeroSSL&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;zerossl.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;스크린샷 2024-09-06 오후 1.04.22.png&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvb1Ep/btsJsLFz7Bj/OSHk8yyZ1LOxbdm4Fw2Dq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvb1Ep/btsJsLFz7Bj/OSHk8yyZ1LOxbdm4Fw2Dq0/img.png&quot; data-alt=&quot;[그림 1-1]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvb1Ep/btsJsLFz7Bj/OSHk8yyZ1LOxbdm4Fw2Dq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvb1Ep%2FbtsJsLFz7Bj%2FOSHk8yyZ1LOxbdm4Fw2Dq0%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;1187&quot; height=&quot;728&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.04.22.png&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;728&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-1]&lt;/figcaption&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;저는 Basic 플랜을 사용하기에 90일 인증서가 무제한이며, 1년 인증서는 3개 까지 발급이 가능합니다. 또한 무료로 사용하고자 하시는 분들은 Free 플랜을 사용하시면 되며, 3개의 90일 인증서를 사용하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 인증서 발급&lt;/b&gt;&lt;/h2&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;로그인을 하고 들어가시면 그림 [그림 1-2]처럼 Dasboard와 Certificates, Developer 항목을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.07.45.png&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgyNpn/btsJtGpFvE7/jEaKEgtow4GyLfQ0fKlOw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgyNpn/btsJtGpFvE7/jEaKEgtow4GyLfQ0fKlOw1/img.png&quot; data-alt=&quot;[그림 1-2]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgyNpn/btsJtGpFvE7/jEaKEgtow4GyLfQ0fKlOw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgyNpn%2FbtsJtGpFvE7%2FjEaKEgtow4GyLfQ0fKlOw1%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;1222&quot; height=&quot;646&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.07.45.png&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-2]&lt;/figcaption&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;인증서 발급은 좌측 상단에 보이는 New Certificate 버튼을 통해 진행할 수 있으며, 이미 발급된 인증서와 만료 예정인 인증서는 Certificates 메뉴에서 확인할 수 있습니다. 또한 만료 예정인 항목은 Renew 버튼으로 표시되며 새로 발급을 진행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신규 인증서 발급은 아래와 같은 절차로 진행할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.20.38.png&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYn0UT/btsJs81xccG/1ZIThkXM1HeXYYr0K0t4l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYn0UT/btsJs81xccG/1ZIThkXM1HeXYYr0K0t4l0/img.png&quot; data-alt=&quot;[그림 1-3]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYn0UT/btsJs81xccG/1ZIThkXM1HeXYYr0K0t4l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYn0UT%2FbtsJs81xccG%2F1ZIThkXM1HeXYYr0K0t4l0%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;1171&quot; height=&quot;744&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.20.38.png&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;744&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-3]&lt;/figcaption&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;New Certificate버튼을 누르고 나온 화면에서 발급을 원하는 도메인을 입력해줍니다. 저는 테스트용으로 구매해놓은 도메인을 입력했습니다. 입력 후 Next Step을 눌러 다음 화면으로 갑니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.21.58.png&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ztriV/btsJr4r4PUB/iLPpUbd5n61GkQG0k8yGr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ztriV/btsJr4r4PUB/iLPpUbd5n61GkQG0k8yGr1/img.png&quot; data-alt=&quot;[그림 1-4]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ztriV/btsJr4r4PUB/iLPpUbd5n61GkQG0k8yGr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FztriV%2FbtsJr4r4PUB%2FiLPpUbd5n61GkQG0k8yGr1%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;1183&quot; height=&quot;620&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.21.58.png&quot; data-origin-width=&quot;1183&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-4]&lt;/figcaption&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;다음 화면은 90일 또는 1년 인증서의 선택화면입니다. 사용 중인 플랜에 따라 알맞게 선택해주시면 됩니다. 위에서 설명한 것처럼 무료 플랜은 90일 인증서로 선택하시면 됩니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.23.49.png&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GFvsP/btsJr1I2j8K/MTuPxxvOVsezKcmNcdjT8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GFvsP/btsJr1I2j8K/MTuPxxvOVsezKcmNcdjT8k/img.png&quot; data-alt=&quot;[그림 1-5]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GFvsP/btsJr1I2j8K/MTuPxxvOVsezKcmNcdjT8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGFvsP%2FbtsJr1I2j8K%2FMTuPxxvOVsezKcmNcdjT8k%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;1187&quot; height=&quot;598&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.23.49.png&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-5]&lt;/figcaption&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;다음 화면에서는 CSR &amp;amp; Contact 화면인데 그대로 Auto-Generate CSR이 활성화된 상태로 다음 단계로 넘어가도록 하겠습니다. 그 다음 화면은 현재 선택 가능한 플랜을 보여주는 화면이기 때문에 생략하도록 하겠습니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.26.14.png&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddyiUF/btsJt952h4t/whPId61z2MjhIoBM2YDJR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddyiUF/btsJt952h4t/whPId61z2MjhIoBM2YDJR0/img.png&quot; data-alt=&quot;[그림 1-5]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddyiUF/btsJt952h4t/whPId61z2MjhIoBM2YDJR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddyiUF%2FbtsJt952h4t%2FwhPId61z2MjhIoBM2YDJR0%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;1188&quot; height=&quot;753&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.26.14.png&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;753&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-5]&lt;/figcaption&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;이제 인증서에 대한 보유 인증절차가 진행됩니다. 방법은 Email, DNS, HTTP File Upload가 있으며, 해당 인증서로 구글이나 하이웍스같은 이메일을 보유하셨다면 간편하게 이메일 인증을 진행하시면 되지만, 저는 아무것도 없는 도메인이기 때문에 DNS로 진행해보도록 하겠습니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.28.38.png&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;629&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm0ocE/btsJshSphCs/liocPwgA9VKlwwb4Vfh7Z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm0ocE/btsJshSphCs/liocPwgA9VKlwwb4Vfh7Z1/img.png&quot; data-alt=&quot;[그림 1-6]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm0ocE/btsJshSphCs/liocPwgA9VKlwwb4Vfh7Z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm0ocE%2FbtsJshSphCs%2FliocPwgA9VKlwwb4Vfh7Z1%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;949&quot; height=&quot;629&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.28.38.png&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;629&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-6]&lt;/figcaption&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;DNS (CNAME) 라디오 버튼을 누르게 되면 [그림 1-6]과 같은 화면이 보입니다. 도메인을 발급 받은 사이트에서 해당 레코드를 추가하라는 내용입니다. 제가 도메인을 발급받은 사이트는 Godaddy이기 때문에 도메인의 DNS 관리 화면에 아래 [그림 1-7]과 같이 입력을 해보겠습니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.32.25.png&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kF7Ix/btsJtHPHxaZ/MpF4UUsMuGTGuAMHjDQoVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kF7Ix/btsJtHPHxaZ/MpF4UUsMuGTGuAMHjDQoVK/img.png&quot; data-alt=&quot;[그림 1-7]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kF7Ix/btsJtHPHxaZ/MpF4UUsMuGTGuAMHjDQoVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkF7Ix%2FbtsJtHPHxaZ%2FMpF4UUsMuGTGuAMHjDQoVK%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;1326&quot; height=&quot;274&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.32.25.png&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-7]&lt;/figcaption&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;그림[1-6]에서 Name항목에는 &lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;_C59118D5AB312F29AEBB9F8E0AA21E70.forget-developer.com&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt; 을 넣으라고 보여지지만 실제로 레코드 입력 시에는 &lt;b&gt;.forget-developer.com &lt;/b&gt;부분을 제거하고 넣으셔야 등록이 될 것입니다. 값은 그대로 복사해서 넣어주시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;스크린샷 2024-09-06 오후 1.35.06.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nNYG7/btsJtibNCCx/YYtoQC8t6q7wsxJfQxILkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nNYG7/btsJtibNCCx/YYtoQC8t6q7wsxJfQxILkk/img.png&quot; data-alt=&quot;[그림 1-8]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nNYG7/btsJtibNCCx/YYtoQC8t6q7wsxJfQxILkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnNYG7%2FbtsJtibNCCx%2FYYtoQC8t6q7wsxJfQxILkk%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;1184&quot; height=&quot;523&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.35.06.png&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-8]&lt;/figcaption&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;마지막 화면입니다. 정상적으로 레코드를 입력하셨다면 Verify Domain버튼을 클릭하여 인증 결과를 확인하실 수 있습니다. 인증이 정상적으로 되었다면 아래 [그림 1-9]와 같이 인증서 생성중이라는 화면이 뜨게됩니다. 제 경험에 따르면 무료 플랜 사용일 경우 약 10~30분 정도의 시간이 걸렸던 것으로 기억됩니다. 추후 Basic 플랜을 사용했을 경우에는 약 1분 안쪽으로 생성되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.37.35.png&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTASgq/btsJt8Gk9e9/sbOKid5BF02RwFNyQWkOC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTASgq/btsJt8Gk9e9/sbOKid5BF02RwFNyQWkOC1/img.png&quot; data-alt=&quot;[그림 1-9]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTASgq/btsJt8Gk9e9/sbOKid5BF02RwFNyQWkOC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTASgq%2FbtsJt8Gk9e9%2FsbOKid5BF02RwFNyQWkOC1%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;942&quot; height=&quot;495&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.37.35.png&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-9]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.40.05.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k0jJw/btsJucPiIoW/FabkAbyzmrLdeGc7z31e8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k0jJw/btsJucPiIoW/FabkAbyzmrLdeGc7z31e8K/img.png&quot; data-alt=&quot;[그림 1-10]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k0jJw/btsJucPiIoW/FabkAbyzmrLdeGc7z31e8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk0jJw%2FbtsJucPiIoW%2FFabkAbyzmrLdeGc7z31e8K%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;926&quot; height=&quot;598&quot; data-filename=&quot;스크린샷 2024-09-06 오후 1.40.05.png&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-10]&lt;/figcaption&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;발급이 완료되었다면 [그림 1-10]과 같이 인증서를 다운로드 할 수 있습니다. 여러가지 서버 타입에 따른 포맷을 제공하지만 저는 보통 Default 포맷을 사용합니다. Default 포맷의 경우 다운로드 후 ca_bundle.crt, certificate.crt, private.key파일을 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 인증서 검증&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 진행한 &lt;a href=&quot;https://ookm1020.tistory.com/8&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ookm1020.tistory.com/8&lt;/a&gt; 글에서 https를 설정했을 때, 위에서 진행한 인증서가 적용되지 않았던 경우가 있었습니다. 이에 대해 인증서를 검증하는 방법을 공유해드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://whatsmychaincert.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://whatsmychaincert.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1725598053346&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;What's My Chain Cert?&quot; data-og-description=&quot;Choose your software: Apache nginx Lighttpd stunnel titus Dovecot 2 Postfix Prosody Contribute config templates Postfix smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_tls_key_file = /path/to/example.com.key smtpd_tls_cert_file = /path/t&quot; data-og-host=&quot;whatsmychaincert.com&quot; data-og-source-url=&quot;https://whatsmychaincert.com/&quot; data-og-url=&quot;https://whatsmychaincert.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://whatsmychaincert.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://whatsmychaincert.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;What's My Chain Cert?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Choose your software: Apache nginx Lighttpd stunnel titus Dovecot 2 Postfix Prosody Contribute config templates Postfix smtp_tls_security_level = may smtpd_tls_security_level = may smtpd_tls_key_file = /path/to/example.com.key smtpd_tls_cert_file = /path/t&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;whatsmychaincert.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이트에서 발급 받은 도메인을 입력하면 올바른지에 대한 정보와 올바르지 않을 경우 체인 인증서를 다운로드할 수 있게 해줍니다. 다운로드 받은 인증서를 다시 서버에 적용했을 때 SSL이 정상적으로 작동했습니다.&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;div style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;#마치며&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;제 글이 도움이 되었기를 바라며 문제가 있거나 궁금한 점이 있으신 분들은 언제든지 질문해주세요. 읽어주셔서 감사합니다 :)&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;aswift_1_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발관련/SSL</category>
      <category>https</category>
      <category>https 붙이기</category>
      <category>ssl 사용</category>
      <category>ssl 인증서 검증</category>
      <category>SSL 인증서 발급</category>
      <category>zerossl</category>
      <category>쉽게 https</category>
      <author>하루정도</author>
      <guid isPermaLink="true">https://ookm1020.tistory.com/9</guid>
      <comments>https://ookm1020.tistory.com/9#entry9comment</comments>
      <pubDate>Fri, 6 Sep 2024 13:57:15 +0900</pubDate>
    </item>
    <item>
      <title>한개의 EC2 인스턴스와 도메인으로 여러 개의 웹서비스를 하기 위한 프록시 설정 가이드 - 까먹는 개발자</title>
      <link>https://ookm1020.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 인스턴스에서 다수의 웹서비스 및 API 서버를 나누어 운영하고 싶을 때 EC2 인스턴스의 프록시 설정 방법에 대해서 설명합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/&quot;&gt;https://aws.amazon.com/ko/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1725421196739&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;company&quot; data-og-title=&quot;클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services&quot; data-og-description=&quot;필요한 만큼 이용할 수 있는 것은 물론 필요에 따라 몇 분 만에 확장 또는 축소할 수 있습니다.&amp;nbsp;자세히 알아보세요.&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/&quot; data-og-url=&quot;https://aws.amazon.com/ko/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ccVRAz/hyWV0vYqt2/Q4B4ZmdN6ylKzq1bo1kAa0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/WGqqY/hyWV4FaV2y/smkjOcMItbLf0YJK2MYGU1/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ccVRAz/hyWV0vYqt2/Q4B4ZmdN6ylKzq1bo1kAa0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/WGqqY/hyWV4FaV2y/smkjOcMItbLf0YJK2MYGU1/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;필요한 만큼 이용할 수 있는 것은 물론 필요에 따라 몇 분 만에 확장 또는 축소할 수 있습니다.&amp;nbsp;자세히 알아보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;기본적으로 AWS EC2와 Node.js Express 프로젝트가 준비된 상황에서 이 글을 참고해주시면 감사하겠습니다.&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;스크린샷 2024-09-04 오후 3.41.11.png&quot; data-origin-width=&quot;1548&quot; data-origin-height=&quot;1042&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sUS8Z/btsJqCaBEGQ/cIq7xDKomw9lBNKMS8bYpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sUS8Z/btsJqCaBEGQ/cIq7xDKomw9lBNKMS8bYpk/img.png&quot; data-alt=&quot;[그림 1-1]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sUS8Z/btsJqCaBEGQ/cIq7xDKomw9lBNKMS8bYpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsUS8Z%2FbtsJqCaBEGQ%2FcIq7xDKomw9lBNKMS8bYpk%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;1548&quot; height=&quot;1042&quot; data-filename=&quot;스크린샷 2024-09-04 오후 3.41.11.png&quot; data-origin-width=&quot;1548&quot; data-origin-height=&quot;1042&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-1]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-04 오후 5.27.44.png&quot; data-origin-width=&quot;2624&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYH61F/btsJqaTjeHk/HPFhHbsa2e6Icza9FCiKvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYH61F/btsJqaTjeHk/HPFhHbsa2e6Icza9FCiKvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYH61F/btsJqaTjeHk/HPFhHbsa2e6Icza9FCiKvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYH61F%2FbtsJqaTjeHk%2FHPFhHbsa2e6Icza9FCiKvK%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;2624&quot; height=&quot;730&quot; data-filename=&quot;스크린샷 2024-09-04 오후 5.27.44.png&quot; data-origin-width=&quot;2624&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS EC2는 [그림 1-1]대로 생성한 후, 아래의 명령어를 통해 환경을 세팅해줬습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1725432209646&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update

sudo apt-get install nodejs

sudo apt-get install npm&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 프로젝트를 생성합니다(프로젝트의 경로는 임의로 하셔도 무방합니다).&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1725432280795&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo su

npm install express-generator -g

express --view=ejs multi-proxy

express --view=ejs multi-proxy-sub&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 multi-proxy, multi-proxy-sub 프로젝트가 동작하는 지 확인하기 위해 [그림 1-2]와 같이 인바운드를 설정합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-04 오후 3.46.28.png&quot; data-origin-width=&quot;3400&quot; data-origin-height=&quot;1366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rc9DV/btsJqi4obgN/GuL1JPuKARSkKHB0kdpET1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rc9DV/btsJqi4obgN/GuL1JPuKARSkKHB0kdpET1/img.png&quot; data-alt=&quot;[그림 1-2]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rc9DV/btsJqi4obgN/GuL1JPuKARSkKHB0kdpET1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frc9DV%2FbtsJqi4obgN%2FGuL1JPuKARSkKHB0kdpET1%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;3400&quot; height=&quot;1366&quot; data-filename=&quot;스크린샷 2024-09-04 오후 3.46.28.png&quot; data-origin-width=&quot;3400&quot; data-origin-height=&quot;1366&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-2]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스의 아이피와 포트를 브라우저의 주소창에 입력하여 Express 웹서버의 동작 확인.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-04 오후 3.48.38.png&quot; data-origin-width=&quot;1810&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m4Rwv/btsJqgFDuXq/X9ThfGK5LG17c6xHSeeKWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m4Rwv/btsJqgFDuXq/X9ThfGK5LG17c6xHSeeKWK/img.png&quot; data-alt=&quot;[그림 1-3]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m4Rwv/btsJqgFDuXq/X9ThfGK5LG17c6xHSeeKWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm4Rwv%2FbtsJqgFDuXq%2FX9ThfGK5LG17c6xHSeeKWK%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;1810&quot; height=&quot;756&quot; data-filename=&quot;스크린샷 2024-09-04 오후 3.48.38.png&quot; data-origin-width=&quot;1810&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-3]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스 접속 및 기본 설정을 해보지 않은 분은 &lt;a href=&quot;https://ookm1020.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ookm1020.tistory.com/4&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 data-ke-size=&quot;size16&quot;&gt;두 개의 프로젝트를 우선 동작시켜놔야 하기 때문에 PM2를 설치하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1725432847772&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo npm install pm2 -g

pm2 start ./bin/www --watch&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 생성한 각 프로젝트의 폴더로 이동하여 pm2 start 명령어를 통해 실행해줍니다. --watch 옵션은 코드가 변경되었을 때 자동적으로 서버를 재시작 해주는 옵션이니 참고바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또한 Express 프로젝트의 기본 포트는 3000으로 되어 있기 때문에 제가 생성한 multi-proxy-sub의 www파일을 편집기를 통해 수정해야 합니다. 아래의 [그림 1-4]처럼 3001번 포트로 열리도록 코드를 수정해주었습니다.&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;스크린샷 2024-09-04 오후 3.59.02.png&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be9aRk/btsJpKUI7FM/K7h8jshrMmOLuwipNB4mr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be9aRk/btsJpKUI7FM/K7h8jshrMmOLuwipNB4mr0/img.png&quot; data-alt=&quot;[그림 1-4]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be9aRk/btsJpKUI7FM/K7h8jshrMmOLuwipNB4mr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe9aRk%2FbtsJpKUI7FM%2FK7h8jshrMmOLuwipNB4mr0%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;443&quot; height=&quot;294&quot; data-filename=&quot;스크린샷 2024-09-04 오후 3.59.02.png&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-4]&lt;/figcaption&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;수정을 하셨다면 이제 pm2로 두개의 프로젝트를 실행하겠습니다. 각 프로젝트의 폴더로 이동하여 명령어를 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1725433297068&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd multi-proxy

pm2 start ./bin/www --watch

cd multi-proxy-sub

pm2 start ./bin/www --watch&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 명령어를 통해 [그림 1-5]와 같이 정상적으로 동작되고 있는지 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1725433459999&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pm2 list&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-04 오후 4.03.39.png&quot; data-origin-width=&quot;1069&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IQnN1/btsJqEMU8Mn/x8GxhflNOJ2QHwiaS4Dn30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IQnN1/btsJqEMU8Mn/x8GxhflNOJ2QHwiaS4Dn30/img.png&quot; data-alt=&quot;[그림 1-5]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IQnN1/btsJqEMU8Mn/x8GxhflNOJ2QHwiaS4Dn30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIQnN1%2FbtsJqEMU8Mn%2Fx8GxhflNOJ2QHwiaS4Dn30%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;1069&quot; height=&quot;107&quot; data-filename=&quot;스크린샷 2024-09-04 오후 4.03.39.png&quot; data-origin-width=&quot;1069&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-5]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 브라우저의 주소창에 아이피+3000포트와 3001번 포트를 입력했을 때 두 개의 웹서버가 동작되는 것을 확인합니다. Express 옆의 프로젝트 명은 구분하기 쉽게 하기 위해 views/index.ejs에 임의로 텍스트를 추가했습니다.&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/wKl85/btsJrEFkjMO/hdMawTy5pGh2tXL0kLsot1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wKl85/btsJrEFkjMO/hdMawTy5pGh2tXL0kLsot1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1062&quot; data-origin-height=&quot;334&quot; data-filename=&quot;스크린샷 2024-09-04 오후 4.09.07.png&quot; width=&quot;424&quot; style=&quot;width: 55.6874%; margin-right: 10px;&quot; data-widthpercent=&quot;56.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wKl85/btsJrEFkjMO/hdMawTy5pGh2tXL0kLsot1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwKl85%2FbtsJrEFkjMO%2FhdMawTy5pGh2tXL0kLsot1%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;1062&quot; height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biJNFc/btsJrobHrHk/0kmQUVckyMrz31f4ntFNp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biJNFc/btsJrobHrHk/0kmQUVckyMrz31f4ntFNp0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;414&quot; data-filename=&quot;스크린샷 2024-09-04 오후 4.09.20.png&quot; width=&quot;379&quot; height=&quot;154&quot; style=&quot;width: 43.1498%;&quot; data-widthpercent=&quot;43.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biJNFc/btsJrobHrHk/0kmQUVckyMrz31f4ntFNp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiJNFc%2FbtsJrobHrHk%2F0kmQUVckyMrz31f4ntFNp0%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;1020&quot; height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;[그림 1-6]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 도메인에 EC2를 연결합니다. 아래의 [그림 1-7]은 고대디 DNS 설정이며, @는 원래 도메인을 가리키고 sub는 서브도메인으로 지정한 것을 확인할 수 있습니다. 도메인의 정확한 연결에는 일정 시간이 필요할 수도 있으니 바로 안된다고 해도 최대 1일에는 정상적으로 동작하니 참고하여 주시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-04 오후 5.28.59.png&quot; data-origin-width=&quot;2608&quot; data-origin-height=&quot;462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yBFuB/btsJrRLiyRk/TSfkBwFGddgWAbPcFehzsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yBFuB/btsJrRLiyRk/TSfkBwFGddgWAbPcFehzsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yBFuB/btsJrRLiyRk/TSfkBwFGddgWAbPcFehzsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyBFuB%2FbtsJrRLiyRk%2FTSfkBwFGddgWAbPcFehzsK%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;2608&quot; height=&quot;462&quot; data-filename=&quot;스크린샷 2024-09-04 오후 5.28.59.png&quot; data-origin-width=&quot;2608&quot; data-origin-height=&quot;462&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;&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;개인이 사용할 것이라면 도메인+포트 형식으로 입력하면 문제가 없지만, 다수가 사용할 상황이라면 도메인만 입력했을 경우 원하는 서비스가 로드되는 것이 좋기 때문에 도메인 이름에 따라 라우팅되도록 nginx 프록시를 설정하도록 하겠습니다.&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;우선 nginx를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1725439196978&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되었다면 /etc/nginx/sites-enabled/default를 수정해주어야 합니다. 편하신 편집기를 통해 진행하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1725439535142&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;server {
    listen 80;
    server_name forget-developer.com;

    location / {
        proxy_pass http://172.31.5.123:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name sub.forget-developer.com;

    location / {
        proxy_pass http://172.31.5.123:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 내용을 추가하고 nginx를 재시작 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1725439800352&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo service nginx restart&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 브라우저를 통해 확인하시면 해당 도메인 별로 각각의 서비스가 동작하는 것을 확인 할 수 있습니다.&lt;/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;만약 https연결을 하고 싶을 때는 아래의 예제를 통해 진행할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1725440454211&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
    listen 443 ssl;
    server_name forget-developer.com;

    ssl_certificate /etc/ssl-keys/발급받으신 .crt파일;
    ssl_certificate_key /etc/ssl-keys/발급받으신 .key파일;
    ssl_protocols TLSv1.1 TLSv1.2;

    location / {
        proxy_pass http://172.31.5.123:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 443 ssl;
    server_name sub.forget-developer.com;

    ssl_certificate /etc/ssl-keys/발급받으신 .crt파일;
    ssl_certificate_key /etc/ssl-keys/발급받으신 .key파일;
    ssl_protocols TLSv1.1 TLSv1.2;

    location / {
        proxy_pass http://172.31.5.123:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen 80;
    server_name forget-developer.com sub.forget-developer.com;

    location / {
        return 301 https://$host$request_uri;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#마치며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;제 글이 도움이 되었기를 바라며 문제가 있거나 궁금한 점이 있으신 분들은 언제든지 질문해주세요. 읽어주셔서 감사합니다 :)&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발관련/AWS</category>
      <category>AWS</category>
      <category>AWS EC2</category>
      <category>aws ec2 서브도메인 설정</category>
      <category>EC2</category>
      <category>nginx 서브도메인</category>
      <category>nginx 설정방법</category>
      <category>까먹는 개발자</category>
      <category>서브도메인</category>
      <category>서브도메인 설정</category>
      <category>포트별 서비스</category>
      <author>하루정도</author>
      <guid isPermaLink="true">https://ookm1020.tistory.com/8</guid>
      <comments>https://ookm1020.tistory.com/8#entry8comment</comments>
      <pubDate>Wed, 4 Sep 2024 18:04:30 +0900</pubDate>
    </item>
    <item>
      <title>GitHub과 Node.js Express를 이용한 자동배포 환경 만들기(feat. AWS-EC2, AWS CodeDeploy, AWS CodePipeline) 3편 - 까먹는 개발자</title>
      <link>https://ookm1020.tistory.com/7</link>
      <description>&lt;p&gt;마지막 3편에서는 PM2와 CodePipeline을 활용하여 GitHub 저장소에 이벤트가 발생하면 자동으로 배포가 되는 과정에 대해서 설명하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ko/codepipeline/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://aws.amazon.com/ko/codepipeline/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1618367318574&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;company&quot; data-og-title=&quot;AWS CodePipeline | 지속적 통합 및 지속적 전달&quot; data-og-description=&quot;AWS CodePipeline은 특정한 요구에 맞게 손쉽게 확장할 수 있습니다. 사전 구축된 플러그인 또는 자체 사용자 지정 플러그인을 릴리스 프로세스 중 원하는 단계에 사용할 수 있습니다. 예를 들면 GitHu&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/codepipeline/&quot; data-og-url=&quot;https://aws.amazon.com/ko/codepipeline/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btF5Eq/hyJSmYYjRj/D3olBOYyWPCw00hWVk6DCk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bSIooL/hyJTtWut3w/ELGVYZkGlDJ6HhF0KwpzQK/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/Br9Nx/hyJSihYMzj/vz6ZjCYUs8dFDVx3dLUFpK/img.png?width=3378&amp;amp;height=600&amp;amp;face=0_0_3378_600&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/codepipeline/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/codepipeline/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btF5Eq/hyJSmYYjRj/D3olBOYyWPCw00hWVk6DCk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bSIooL/hyJTtWut3w/ELGVYZkGlDJ6HhF0KwpzQK/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/Br9Nx/hyJSihYMzj/vz6ZjCYUs8dFDVx3dLUFpK/img.png?width=3378&amp;amp;height=600&amp;amp;face=0_0_3378_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;AWS CodePipeline | 지속적 통합 및 지속적 전달&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;AWS CodePipeline은 특정한 요구에 맞게 손쉽게 확장할 수 있습니다. 사전 구축된 플러그인 또는 자체 사용자 지정 플러그인을 릴리스 프로세스 중 원하는 단계에 사용할 수 있습니다. 예를 들면 GitHu&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. CodePipeline 시작하기&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;AWS 서비스에서 CodePipeline 시작하기 페이지에서 &amp;lt;파이프라인 생성&amp;gt; 버튼을 클릭합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1054&quot; data-filename=&quot;123.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d9bRpO/btq2y3glIca/LglCHSfGvWN1tEf2ETyFwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d9bRpO/btq2y3glIca/LglCHSfGvWN1tEf2ETyFwk/img.png&quot; data-alt=&quot;[ 그림 1-1 ] CodePipeline - 시작하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d9bRpO/btq2y3glIca/LglCHSfGvWN1tEf2ETyFwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9bRpO%2Fbtq2y3glIca%2FLglCHSfGvWN1tEf2ETyFwk%2Fimg.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1054&quot; data-filename=&quot;123.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-1 ] CodePipeline - 시작하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이프라인 설정 선택에서는 이름을 입력하고 서비스 역할은 새 서비스 역할을 선택해주면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.29.31.png&quot; data-origin-width=&quot;2202&quot; data-origin-height=&quot;1366&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNDTIo/btq2CD2C2P2/ufJbvECTGK9ktLYqrNfXAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNDTIo/btq2CD2C2P2/ufJbvECTGK9ktLYqrNfXAk/img.png&quot; data-alt=&quot;[ 그림 1-2 ] CodePipeline - 파이프라인 설정 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNDTIo/btq2CD2C2P2/ufJbvECTGK9ktLYqrNfXAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNDTIo%2Fbtq2CD2C2P2%2FufJbvECTGK9ktLYqrNfXAk%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.29.31.png&quot; data-origin-width=&quot;2202&quot; data-origin-height=&quot;1366&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-2 ] CodePipeline - 파이프라인 설정 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;소스 스테이지 추가에서는 OAuth를 통해 GitHib과 연결할 수 있도록 버전 1을 선택했고, 인증 절차를 통해 연결을 해주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.31.30.png&quot; data-origin-width=&quot;3400&quot; data-origin-height=&quot;1448&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0U4IL/btq2C5qYAaV/y1L8m49yxx5DJ7JxQeGE21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0U4IL/btq2C5qYAaV/y1L8m49yxx5DJ7JxQeGE21/img.png&quot; data-alt=&quot;[ 그림 1-3 ] CodePipeline - 소스 스테이지 추가 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0U4IL/btq2C5qYAaV/y1L8m49yxx5DJ7JxQeGE21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0U4IL%2Fbtq2C5qYAaV%2Fy1L8m49yxx5DJ7JxQeGE21%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.31.30.png&quot; data-origin-width=&quot;3400&quot; data-origin-height=&quot;1448&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-3 ] CodePipeline - 소스 스테이지 추가 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;연결을 했다면 아래 그림 처럼 본인의 저장소와 브랜치를 설정해주고, GitHub 웹후크를 선택한 후 &amp;lt;다음&amp;gt; 버튼을 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.31.55.png&quot; data-origin-width=&quot;2182&quot; data-origin-height=&quot;1750&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7tIHb/btq2C37LIMo/PndXqtBTkE3A2w1NMTKDRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7tIHb/btq2C37LIMo/PndXqtBTkE3A2w1NMTKDRK/img.png&quot; data-alt=&quot;[ 그림 1-4 ] CodePipeline - 소스 스테이지 추가 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7tIHb/btq2C37LIMo/PndXqtBTkE3A2w1NMTKDRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7tIHb%2Fbtq2C37LIMo%2FPndXqtBTkE3A2w1NMTKDRK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.31.55.png&quot; data-origin-width=&quot;2182&quot; data-origin-height=&quot;1750&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-4 ] CodePipeline - 소스 스테이지 추가 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 Node Express기반 프로젝트를 사용하기 때문에 따로 빌드 스테이지는 추가하지 않았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.34.32.png&quot; data-origin-width=&quot;1678&quot; data-origin-height=&quot;620&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be6j37/btq2z0RAObT/Ge94nd0i1nT874T5gwCPvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be6j37/btq2z0RAObT/Ge94nd0i1nT874T5gwCPvk/img.png&quot; data-alt=&quot;[ 그림 1-5 ] CodePipeline - 빌드 스테이지 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be6j37/btq2z0RAObT/Ge94nd0i1nT874T5gwCPvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe6j37%2Fbtq2z0RAObT%2FGe94nd0i1nT874T5gwCPvk%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.34.32.png&quot; data-origin-width=&quot;1678&quot; data-origin-height=&quot;620&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-5 ] CodePipeline - 빌드 스테이지 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배포 스테이지에서는 CodeDeploy를 선택했고, 2편에서 설정한 배포 애플리케이션 및 배포그룹을 선택했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.36.40.png&quot; data-origin-width=&quot;2168&quot; data-origin-height=&quot;1428&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t66t5/btq2ybzAdA8/wVadAJxnH6ra8GgHIJ4K90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t66t5/btq2ybzAdA8/wVadAJxnH6ra8GgHIJ4K90/img.png&quot; data-alt=&quot;[ 그림 1-6 ] CodePipeline - 배포 스테이지 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t66t5/btq2ybzAdA8/wVadAJxnH6ra8GgHIJ4K90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft66t5%2Fbtq2ybzAdA8%2FwVadAJxnH6ra8GgHIJ4K90%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.36.40.png&quot; data-origin-width=&quot;2168&quot; data-origin-height=&quot;1428&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-6 ] CodePipeline - 배포 스테이지 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막 검토 화면에서는 설정한 내용들을 마지막으로 확인 후 &amp;lt;파이프 라인 생성&amp;gt; 버튼을 눌러 완료하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CodeDeploy와 CodePipeline이 정상적으로 작동하면 다음과 같이 배포 성공이라는 문구를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.39.09.png&quot; data-origin-width=&quot;3492&quot; data-origin-height=&quot;1876&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s92E8/btq2CWVcZje/LMbIAlW5vYArAgN7DpqT3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s92E8/btq2CWVcZje/LMbIAlW5vYArAgN7DpqT3K/img.png&quot; data-alt=&quot;[ 그림 1-7 ] CodePipeline - 배포 성공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s92E8/btq2CWVcZje/LMbIAlW5vYArAgN7DpqT3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs92E8%2Fbtq2CWVcZje%2FLMbIAlW5vYArAgN7DpqT3K%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.39.09.png&quot; data-origin-width=&quot;3492&quot; data-origin-height=&quot;1876&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-7 ] CodePipeline - 배포 성공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 배포 확인 및 PM2 설치&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 연결된 GitHub 저장소에 push를 합니다. push를 하면 파이프라인 화면에서 정상적으로 배포 과정이 진행되고 있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.43.37.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;91&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj13Bi/btq2uag7NtA/CPVMGdSv6MsWDdjlnm49ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj13Bi/btq2uag7NtA/CPVMGdSv6MsWDdjlnm49ok/img.png&quot; data-alt=&quot;[ 그림 2-1 ] 터미널&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj13Bi/btq2uag7NtA/CPVMGdSv6MsWDdjlnm49ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj13Bi%2Fbtq2uag7NtA%2FCPVMGdSv6MsWDdjlnm49ok%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-14 오후 2.43.37.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;91&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-1 ] 터미널&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;push를 하게 되면 [ 그림 2-2 ] 처럼 커밋 메세지 및 진행과정을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123333.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1114&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buLdrE/btq2yvxQzl6/BKEv6xanZnh5pCggLgdWAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buLdrE/btq2yvxQzl6/BKEv6xanZnh5pCggLgdWAk/img.png&quot; data-alt=&quot;[ 그림 2-2 ] CodePipeline&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buLdrE/btq2yvxQzl6/BKEv6xanZnh5pCggLgdWAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuLdrE%2Fbtq2yvxQzl6%2FBKEv6xanZnh5pCggLgdWAk%2Fimg.png&quot; data-filename=&quot;123333.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1114&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-2 ] CodePipeline&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를 들어 html파일만 수정했다면 서버를 재시작하지 않아도 브라우저를 새로고침만 하면 반영이 되겠지만, 서버 코드를 수정했다면 재시작을 해주어야 반영이 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따라서 EC2에 PM2를 설치하여 코드가 수정이 되면 자동으로 서버를 재시작하게 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;설치&lt;/p&gt;
&lt;pre id=&quot;code_1618379903885&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo npm install pm2 -g&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;시작&lt;/p&gt;
&lt;pre id=&quot;code_1618380077876&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pm2 start ./bin/www --watch&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;확인&lt;/p&gt;
&lt;pre id=&quot;code_1618380098324&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pm2 list&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;--watch 옵션으로 서버를 실행했으니 코드가 수정되면 자동으로 서버 재시작을 해줄겁니다. 다시 저장소에 push를 해서 확인해보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버 코드 수정 후 정상적으로 반영이 되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#마치며&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;제 글이 도움이 되었기를 바라며 문제가 있거나 궁금한 점이 있으신 분들은 언제든지 질문해주세요. 읽어주셔서 감사합니다 :)&lt;/p&gt;</description>
      <category>개발관련/AWS</category>
      <author>하루정도</author>
      <guid isPermaLink="true">https://ookm1020.tistory.com/7</guid>
      <comments>https://ookm1020.tistory.com/7#entry7comment</comments>
      <pubDate>Wed, 14 Apr 2021 15:06:43 +0900</pubDate>
    </item>
    <item>
      <title>G메일 명함 설정</title>
      <link>https://ookm1020.tistory.com/6</link>
      <description>&lt;p&gt;1. 회사 G메일에 접속하여 아래 그림과 같이 상단의 &amp;lt;설정&amp;gt; 버튼 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;62&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NA98E/btq2xbZPoCg/hnfkXiJNaFHdhK2yYRgbX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NA98E/btq2xbZPoCg/hnfkXiJNaFHdhK2yYRgbX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NA98E/btq2xbZPoCg/hnfkXiJNaFHdhK2yYRgbX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNA98E%2Fbtq2xbZPoCg%2FhnfkXiJNaFHdhK2yYRgbX1%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;62&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 클릭하면 나오는 메뉴에서 &amp;lt;모든 설정 보기&amp;gt; 버튼 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;22.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;404&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1SLdJ/btq2sZsyr13/0tlfAzMO6UU9kcNLpVoXZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1SLdJ/btq2sZsyr13/0tlfAzMO6UU9kcNLpVoXZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1SLdJ/btq2sZsyr13/0tlfAzMO6UU9kcNLpVoXZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1SLdJ%2Fbtq2sZsyr13%2F0tlfAzMO6UU9kcNLpVoXZK%2Fimg.png&quot; data-filename=&quot;22.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;404&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 서명 부분에서 이미지 버튼을 클릭하여 명함 이미지 업로드&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123333333.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;787&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/plCaQ/btq2uVC0Eeq/t4V5nMoRI4lJ8lfReOkdek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/plCaQ/btq2uVC0Eeq/t4V5nMoRI4lJ8lfReOkdek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/plCaQ/btq2uVC0Eeq/t4V5nMoRI4lJ8lfReOkdek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FplCaQ%2Fbtq2uVC0Eeq%2Ft4V5nMoRI4lJ8lfReOkdek%2Fimg.png&quot; data-filename=&quot;123333333.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;787&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;555.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;1008&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A13YV/btq2t99kckL/ONfBSLPSFghX3CKZHzSDZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A13YV/btq2t99kckL/ONfBSLPSFghX3CKZHzSDZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A13YV/btq2t99kckL/ONfBSLPSFghX3CKZHzSDZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA13YV%2Fbtq2t99kckL%2FONfBSLPSFghX3CKZHzSDZ0%2Fimg.png&quot; data-filename=&quot;555.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;1008&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 업로드 후 서명 기본값 &amp;lt;명함&amp;gt;으로 선택 후 맨 하단의 &amp;lt;변경 사항 저장&amp;gt; 버튼 클릭하여 완료&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>회사관련</category>
      <category>Gamil 명함 설정</category>
      <category>Gmail business card</category>
      <category>Gmail 설정</category>
      <author>하루정도</author>
      <guid isPermaLink="true">https://ookm1020.tistory.com/6</guid>
      <comments>https://ookm1020.tistory.com/6#entry6comment</comments>
      <pubDate>Tue, 13 Apr 2021 17:20:50 +0900</pubDate>
    </item>
    <item>
      <title>GitHub과 Node.js Express를 이용한 자동배포 환경 만들기(feat. AWS-EC2, AWS CodeDeploy, AWS CodePipeline) 2편 - 까먹는 개발자</title>
      <link>https://ookm1020.tistory.com/5</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2편에서는 AWS EC2에 CodeDeploy를 이용하여 배포하는 방법에 대해 알아보겠습니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://aws.amazon.com/ko/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1618196395787&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;company&quot; data-og-title=&quot;클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services&quot; data-og-description=&quot;제조 AWS를 활용한 Siemens의 에너지, 의료 서비스, 제조 분야 혁신 Siemens가 AWS를 사용하여 어떻게 문화를 바꾸고 혁신을 장려하며 비즈니스 성과를 창출했는지 알아보세요. 자세히 알아보기&amp;nbsp; 업종&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/&quot; data-og-url=&quot;https://aws.amazon.com/ko/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CFQLn/hyJQIVl0Uh/wKn1PpEyo698v39SiTfFy1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/SRlGN/hyJSjGpndd/LfLXJJQCtGPpPK4SwkPlY0/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/TjLg0/hyJQPfSKA6/1maLLCtEf6dDX7hFOkktr1/img.png?width=530&amp;amp;height=300&amp;amp;face=0_0_530_300&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CFQLn/hyJQIVl0Uh/wKn1PpEyo698v39SiTfFy1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/SRlGN/hyJSjGpndd/LfLXJJQCtGPpPK4SwkPlY0/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/TjLg0/hyJQPfSKA6/1maLLCtEf6dDX7hFOkktr1/img.png?width=530&amp;amp;height=300&amp;amp;face=0_0_530_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;제조 AWS를 활용한 Siemens의 에너지, 의료 서비스, 제조 분야 혁신 Siemens가 AWS를 사용하여 어떻게 문화를 바꾸고 혁신을 장려하며 비즈니스 성과를 창출했는지 알아보세요. 자세히 알아보기&amp;nbsp; 업종&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. EC2 - IAM 역할 생성 및 적용&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저 EC2에서 사용할 IAM 역할을 생성해야합니다. AWS IAM서비스로 이동하여 왼쪽 메뉴트리에 있는 역할 메뉴를 클릭합니다. 그리고 아래 [ 그림 1-1 ]에서 표시되어 있는 &amp;lt;역할 만들기&amp;gt;를 클릭합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1004&quot; data-filename=&quot;123.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rMs0K/btq2iq4WEbs/rQl8zLWUJUt6eY1O7CTY11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rMs0K/btq2iq4WEbs/rQl8zLWUJUt6eY1O7CTY11/img.png&quot; data-alt=&quot;[ 그림 1-1 ] IAM -&amp;amp;amp;gt; 역할&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rMs0K/btq2iq4WEbs/rQl8zLWUJUt6eY1O7CTY11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrMs0K%2Fbtq2iq4WEbs%2FrQl8zLWUJUt6eY1O7CTY11%2Fimg.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1004&quot; data-filename=&quot;123.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-1 ] IAM -&amp;gt; 역할&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;역할만들기의 1페이지에서는 신뢰할 수 있는 유형의 개체 선택에서 default로 선택되어 있는 AWS 서비스가 클릭되어 있는 지 확인하고, 일반 사용 사례에서 EC2 항목을 선택한 후 다음 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1004&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQ2nGC/btq2h2XN3Ez/tK7vG9ylkSbgXwr4NKWyn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQ2nGC/btq2h2XN3Ez/tK7vG9ylkSbgXwr4NKWyn1/img.png&quot; data-alt=&quot;[ 그림 1-2 ] IAM - 역할 만들기 1페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQ2nGC/btq2h2XN3Ez/tK7vG9ylkSbgXwr4NKWyn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQ2nGC%2Fbtq2h2XN3Ez%2FtK7vG9ylkSbgXwr4NKWyn1%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1004&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-2 ] IAM - 역할 만들기 1페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;역할만들기의 2페이지에서는 권한 정책을 검색하여 연결해주어야 합니다. 아래 3가지 항목을 검색해서 체크한 후 다음 버튼을 눌러주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;bull;AWSCodeDeployFullAccess&lt;/p&gt;
&lt;p&gt;&amp;bull;&lt;span style=&quot;color: #000000;&quot;&gt;AmazonS3FullAccess&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;bull;AWSCodeDeployRole&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;bull;CloudWatchLogsFullAccess&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.41.17.png&quot; data-origin-width=&quot;1950&quot; data-origin-height=&quot;290&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBQUv1/btq2ieDuAJL/uKCKtbbRSwcVpKfU7HgGEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBQUv1/btq2ieDuAJL/uKCKtbbRSwcVpKfU7HgGEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBQUv1/btq2ieDuAJL/uKCKtbbRSwcVpKfU7HgGEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBQUv1%2Fbtq2ieDuAJL%2FuKCKtbbRSwcVpKfU7HgGEk%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.41.17.png&quot; data-origin-width=&quot;1950&quot; data-origin-height=&quot;290&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.41.43.png&quot; data-origin-width=&quot;1940&quot; data-origin-height=&quot;618&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6ip4W/btq2nh7hVNL/fJwNHKAI3wpRTkyxUY5zQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6ip4W/btq2nh7hVNL/fJwNHKAI3wpRTkyxUY5zQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6ip4W/btq2nh7hVNL/fJwNHKAI3wpRTkyxUY5zQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6ip4W%2Fbtq2nh7hVNL%2FfJwNHKAI3wpRTkyxUY5zQK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.41.43.png&quot; data-origin-width=&quot;1940&quot; data-origin-height=&quot;618&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.42.03.png&quot; data-origin-width=&quot;1942&quot; data-origin-height=&quot;286&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LGZAP/btq2kqDsytF/0WxtU0WdYUYkP8vkV6gzZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LGZAP/btq2kqDsytF/0WxtU0WdYUYkP8vkV6gzZ0/img.png&quot; data-alt=&quot;[ 그림 1-3 ] IAM - 역할 만들기 2페이지 정책 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LGZAP/btq2kqDsytF/0WxtU0WdYUYkP8vkV6gzZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLGZAP%2Fbtq2kqDsytF%2F0WxtU0WdYUYkP8vkV6gzZ0%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.42.03.png&quot; data-origin-width=&quot;1942&quot; data-origin-height=&quot;286&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-3 ] IAM - 역할 만들기 2페이지 정책 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;역할만들기의 3페이지에서는 사용할 임의의 키와 값을 입력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.49.13.png&quot; data-origin-width=&quot;1980&quot; data-origin-height=&quot;672&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mu6iU/btq2nirz5d0/ce5lEOT6HW5p60fkpdYO00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mu6iU/btq2nirz5d0/ce5lEOT6HW5p60fkpdYO00/img.png&quot; data-alt=&quot;[그림 1-4 ] IAM - 역할 만들기 3페이지 - 키, 값 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mu6iU/btq2nirz5d0/ce5lEOT6HW5p60fkpdYO00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmu6iU%2Fbtq2nirz5d0%2Fce5lEOT6HW5p60fkpdYO00%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.49.13.png&quot; data-origin-width=&quot;1980&quot; data-origin-height=&quot;672&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-4 ] IAM - 역할 만들기 3페이지 - 키, 값 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막 역할만들기의 4페이지에서는 역할 이름, 역할 설명 및 2페이지에서 선택한 정책들이 나와있는 지 확인하고 &amp;lt;역할 만들기&amp;gt; 버튼을 눌러 완료하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.49.40.png&quot; data-origin-width=&quot;2016&quot; data-origin-height=&quot;1684&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k6TSX/btq2r89Ar0w/h9U8KcdWlLoKW7tbbxGTt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k6TSX/btq2r89Ar0w/h9U8KcdWlLoKW7tbbxGTt0/img.png&quot; data-alt=&quot;[ 그림 1-5 ] IAM - 역할 만들기 4페이지 - 역할 이름 및 설명 정책확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k6TSX/btq2r89Ar0w/h9U8KcdWlLoKW7tbbxGTt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk6TSX%2Fbtq2r89Ar0w%2Fh9U8KcdWlLoKW7tbbxGTt0%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 1.49.40.png&quot; data-origin-width=&quot;2016&quot; data-origin-height=&quot;1684&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-5 ] IAM - 역할 만들기 4페이지 - 역할 이름 및 설명 정책확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 만들어 둔 EC2에서 사용할 IAM 역할 만들기가 완료되었습니다. 이 역할을 적용하기 위해 EC2 대시보드로 이동합니다.&lt;/p&gt;
&lt;p&gt;EC2 리스트가 보이면 해당 인스턴스에서 마우스 우클릭을 하면 다음과 같은 메뉴가 보입니다. &amp;lt;보안 -&amp;gt; IAM 역할 수정&amp;gt; 을 클릭합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;999&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crXaJO/btq2ksnN1Q6/vg2crZz0kAT7wySzfZXLR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crXaJO/btq2ksnN1Q6/vg2crZz0kAT7wySzfZXLR0/img.png&quot; data-alt=&quot;[ 그림 1-6 ] EC2 대시보드 - IAM 역할 수정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crXaJO/btq2ksnN1Q6/vg2crZz0kAT7wySzfZXLR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrXaJO%2Fbtq2ksnN1Q6%2Fvg2crZz0kAT7wySzfZXLR0%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;999&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-6 ] EC2 대시보드 - IAM 역할 수정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;IAM 역할 수정 페이지에서 IAM 역할 선택 드롭다운을 누르면 아까 전에 만든 &amp;lt;node-deploy-pipe-ec2-role&amp;gt;이 보입니다. 이것을 선택하고 저장 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1762&quot; data-origin-height=&quot;1025&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lfdVN/btq2oSfbUtR/YUaFivdo6GwKe3ZeCnWABk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lfdVN/btq2oSfbUtR/YUaFivdo6GwKe3ZeCnWABk/img.png&quot; data-alt=&quot;[ 그림 1-7 ] EC2 IAM 역할 수정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lfdVN/btq2oSfbUtR/YUaFivdo6GwKe3ZeCnWABk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlfdVN%2Fbtq2oSfbUtR%2FYUaFivdo6GwKe3ZeCnWABk%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1762&quot; data-origin-height=&quot;1025&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-7 ] EC2 IAM 역할 수정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다시 EC2 대시보드 리스트로 돌아와서&amp;nbsp; 해당 인스턴스를 선택하고 아래 보안 탭을 누르면 방금 전 수정한 역할이 반영되어 있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.08.19.png&quot; data-origin-width=&quot;3058&quot; data-origin-height=&quot;708&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8RQWN/btq2iEoxlJ1/A8nKSabG8FAoYzOwpKefKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8RQWN/btq2iEoxlJ1/A8nKSabG8FAoYzOwpKefKK/img.png&quot; data-alt=&quot;[ 그림 1-8 ] EC2 대시보드 - 보안 탭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8RQWN/btq2iEoxlJ1/A8nKSabG8FAoYzOwpKefKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8RQWN%2Fbtq2iEoxlJ1%2FA8nKSabG8FAoYzOwpKefKK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.08.19.png&quot; data-origin-width=&quot;3058&quot; data-origin-height=&quot;708&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-8 ] EC2 대시보드 - 보안 탭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;EC2 역할 지정에 관해서는 최초에 EC2를 생성할 때 지정할 수도 있습니다. 다만 이미 EC2를 먼저 생성한 경우가 대부분이라 생각하기 때문에 이번에는 이미 만들어진 인스턴스의 역할을 수정하는 방식으로 진행했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. CodeDeploy 역할 및 애플리케이션 생성&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;EC2의 역할은 이미 적용했으니 CodeDeploy에 적용할 역할도 만들어야 합니다. 다시 IAM 서비스 페이지로 이동해서 역할 만들기 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1004&quot; data-filename=&quot;123.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rMs0K/btq2iq4WEbs/rQl8zLWUJUt6eY1O7CTY11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rMs0K/btq2iq4WEbs/rQl8zLWUJUt6eY1O7CTY11/img.png&quot; data-alt=&quot;[ 그림 2-1 ] IAM -&amp;amp;amp;gt; 역할&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rMs0K/btq2iq4WEbs/rQl8zLWUJUt6eY1O7CTY11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrMs0K%2Fbtq2iq4WEbs%2FrQl8zLWUJUt6eY1O7CTY11%2Fimg.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1004&quot; data-filename=&quot;123.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-1 ] IAM -&amp;gt; 역할&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;역할 만들기 1페이지에서 AWS 서비스, 일반 사용 사례에서 CodeDeploy, 아래 쪽 사용 사례 선택에서 CodeDeploy를 선택하고 다음 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123333.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;1400&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u5snP/btq2nh0D9Uh/HJPEbigX22v4fNKX3uWuVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u5snP/btq2nh0D9Uh/HJPEbigX22v4fNKX3uWuVk/img.png&quot; data-alt=&quot;[ 그림 2-2 ] IAM - 역할 만들기 1페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u5snP/btq2nh0D9Uh/HJPEbigX22v4fNKX3uWuVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu5snP%2Fbtq2nh0D9Uh%2FHJPEbigX22v4fNKX3uWuVk%2Fimg.png&quot; data-filename=&quot;123333.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;1400&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-2 ] IAM - 역할 만들기 1페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;역할 만들기 2페이지에서는 따로 검색하지 않고 default로 선택되어 있는 AWSCodeDeployRole을 확인할 수 있습니다. 다음 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.33.32.png&quot; data-origin-width=&quot;2020&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KaxIL/btq2pko5YrR/h0MushILBkQZ1pM3kFewBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KaxIL/btq2pko5YrR/h0MushILBkQZ1pM3kFewBK/img.png&quot; data-alt=&quot;[ 그림 2-3 ] IAM - 역할 만들기 2페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KaxIL/btq2pko5YrR/h0MushILBkQZ1pM3kFewBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKaxIL%2Fbtq2pko5YrR%2Fh0MushILBkQZ1pM3kFewBK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.33.32.png&quot; data-origin-width=&quot;2020&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-3 ] IAM - 역할 만들기 2페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;역할 만들기 3페이지에서는 사용할 임의의 키와 갑을 입력하고 다음 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.35.23.png&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;716&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehwjxh/btq2plVRq3H/J6pFBALIB5v2k30P8DF73K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehwjxh/btq2plVRq3H/J6pFBALIB5v2k30P8DF73K/img.png&quot; data-alt=&quot;[ 그림 2-4 ] IAM - 역할 만들기 3페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehwjxh/btq2plVRq3H/J6pFBALIB5v2k30P8DF73K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fehwjxh%2Fbtq2plVRq3H%2FJ6pFBALIB5v2k30P8DF73K%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.35.23.png&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;716&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-4 ] IAM - 역할 만들기 3페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;역할 만들기 4페이지에서는 역할 이름, 역할 설명 및 정책에 &amp;lt;AWSCodeDeployRole&amp;gt;이 선택되어 있는 지 확인 후 완료 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;1308&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.35.40.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTHOx4/btq2npEeM1i/2SgukOZ9QKGmgWXKFW5syK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTHOx4/btq2npEeM1i/2SgukOZ9QKGmgWXKFW5syK/img.png&quot; data-alt=&quot;[ 그림 2-5 ] IAM - 역할 만들기 4페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTHOx4/btq2npEeM1i/2SgukOZ9QKGmgWXKFW5syK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTHOx4%2Fbtq2npEeM1i%2F2SgukOZ9QKGmgWXKFW5syK%2Fimg.png&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;1308&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.35.40.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-5 ] IAM - 역할 만들기 4페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 CodeDeploy 배포 생성 시 사용할 역할 만드는 것을 완료했습니다. 이제 AWS 서비스의 CodeDeploy로 들어갑니다.&lt;/p&gt;
&lt;p&gt;왼쪽 메뉴 트리에 있는 배포 &amp;gt; 시작하기 &amp;gt; 애플리케이션 생성 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.40.07.png&quot; data-origin-width=&quot;3582&quot; data-origin-height=&quot;1786&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yLOan/btq2pl9nBOl/C5yIkwZoxRoMdFM5qB0OOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yLOan/btq2pl9nBOl/C5yIkwZoxRoMdFM5qB0OOk/img.png&quot; data-alt=&quot;[ 그림 2-6 ] CodeDeploy - 배포 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yLOan/btq2pl9nBOl/C5yIkwZoxRoMdFM5qB0OOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyLOan%2Fbtq2pl9nBOl%2FC5yIkwZoxRoMdFM5qB0OOk%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.40.07.png&quot; data-origin-width=&quot;3582&quot; data-origin-height=&quot;1786&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-6 ] CodeDeploy - 배포 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용할 애플리케이션 이름 입력 및 컴퓨팅 플랫폼 - EC2/온프레미스를 선택한 후 &amp;lt;애플리케이션 생성&amp;gt; 버튼을 눌러 완료합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.43.22.png&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;954&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ec0itv/btq2ttr1TzE/8xdrp1noxwk33S0xYCKXPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ec0itv/btq2ttr1TzE/8xdrp1noxwk33S0xYCKXPK/img.png&quot; data-alt=&quot;[ 그림 2-7 ] CodeDeploy - 애플리케이션 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ec0itv/btq2ttr1TzE/8xdrp1noxwk33S0xYCKXPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fec0itv%2Fbtq2ttr1TzE%2F8xdrp1noxwk33S0xYCKXPK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.43.22.png&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;954&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-7 ] CodeDeploy - 애플리케이션 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;애플리케이션이 생성되면 다음과 같은 페이지로 이동합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.44.05.png&quot; data-origin-width=&quot;3582&quot; data-origin-height=&quot;1786&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddtGWW/btq2kCjZ1Y4/i438vGLh4pJ9sFqQQnYZq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddtGWW/btq2kCjZ1Y4/i438vGLh4pJ9sFqQQnYZq0/img.png&quot; data-alt=&quot;[ 그림 2-8 ] CodeDeploy - 배포 &amp;amp;amp;gt; 애플리케이션 세부정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddtGWW/btq2kCjZ1Y4/i438vGLh4pJ9sFqQQnYZq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddtGWW%2Fbtq2kCjZ1Y4%2Fi438vGLh4pJ9sFqQQnYZq0%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 2.44.05.png&quot; data-origin-width=&quot;3582&quot; data-origin-height=&quot;1786&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-8 ] CodeDeploy - 배포 &amp;gt; 애플리케이션 세부정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CodeDeploy 애플리케이션 생성이 완료되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. CodeDeploy Agent 사용자 추가 및 설치&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1, 2번 항목에서는 EC2와 CodeDeploy 각각의 항목에 대해서만 설정 및 생성을 했습니다. 이번에는 CodeDeploy에서 발생한 이벤트를 EC2가 수신할 수 있도록 CodeDeploy Agent를 설치합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 사용자 추가를 위해 IAM 서비스의 그룹 페이지로 이동해서 &amp;lt;새로운 그룹 생성&amp;gt; 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;333.png&quot; data-origin-width=&quot;1627&quot; data-origin-height=&quot;812&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wmaFu/btq2s0cCDOD/YF4ACiMxbCbLwMeYoS3bK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wmaFu/btq2s0cCDOD/YF4ACiMxbCbLwMeYoS3bK1/img.png&quot; data-alt=&quot;[ 그림 3-1 ] IAM - 그룹&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wmaFu/btq2s0cCDOD/YF4ACiMxbCbLwMeYoS3bK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwmaFu%2Fbtq2s0cCDOD%2FYF4ACiMxbCbLwMeYoS3bK1%2Fimg.png&quot; data-filename=&quot;333.png&quot; data-origin-width=&quot;1627&quot; data-origin-height=&quot;812&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-1 ] IAM - 그룹&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;그룹 이름을 입력하고 다음 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;376&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.30.21.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cG6JAD/btq2iVjO54q/KAhK1FvHP7EYFK8aRm6B21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cG6JAD/btq2iVjO54q/KAhK1FvHP7EYFK8aRm6B21/img.png&quot; data-alt=&quot;[그림 3-2 ] IAM - 그룹 생성 단계 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cG6JAD/btq2iVjO54q/KAhK1FvHP7EYFK8aRm6B21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcG6JAD%2Fbtq2iVjO54q%2FKAhK1FvHP7EYFK8aRm6B21%2Fimg.png&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;376&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.30.21.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 3-2 ] IAM - 그룹 생성 단계 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정책 연결에서는 아무것도 선택하지 않습니다. 추가로 인라인 정책을 입력하여 진행하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.31.12.png&quot; data-origin-width=&quot;3544&quot; data-origin-height=&quot;742&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1vbZY/btq2npEjk1g/yGICD1GRHXbPV77qFaEb0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1vbZY/btq2npEjk1g/yGICD1GRHXbPV77qFaEb0K/img.png&quot; data-alt=&quot;[ 그림 3-3 ] IAM - 그룹 생성 단계 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1vbZY/btq2npEjk1g/yGICD1GRHXbPV77qFaEb0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1vbZY%2Fbtq2npEjk1g%2FyGICD1GRHXbPV77qFaEb0K%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.31.12.png&quot; data-origin-width=&quot;3544&quot; data-origin-height=&quot;742&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-3 ] IAM - 그룹 생성 단계 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막 검토 화면에서 입력한 정보들을 확인 후 그룹 생성 버튼을 눌러 완료합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.31.36.png&quot; data-origin-width=&quot;2414&quot; data-origin-height=&quot;420&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfk3cl/btq2iWJNBD4/WKWpWeh4Q6Lk0BQ2yVKhak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfk3cl/btq2iWJNBD4/WKWpWeh4Q6Lk0BQ2yVKhak/img.png&quot; data-alt=&quot;[ 그림 3-4 ] IAM - 그룹 생성 단계 3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfk3cl/btq2iWJNBD4/WKWpWeh4Q6Lk0BQ2yVKhak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfk3cl%2Fbtq2iWJNBD4%2FWKWpWeh4Q6Lk0BQ2yVKhak%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.31.36.png&quot; data-origin-width=&quot;2414&quot; data-origin-height=&quot;420&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-4 ] IAM - 그룹 생성 단계 3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;단계 2 - 정책 연결을 생략했기 때문에 생성한 그룹을 클릭하여 권한 - 인라인 정책 생성을 클릭합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;812&quot; data-filename=&quot;123.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rO3Pm/btq2lpR67we/n4LXHykGucT3Dzk1UiE1X0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rO3Pm/btq2lpR67we/n4LXHykGucT3Dzk1UiE1X0/img.png&quot; data-alt=&quot;[ 그림 3-5 ] IAM - 선택 그룹 세부정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rO3Pm/btq2lpR67we/n4LXHykGucT3Dzk1UiE1X0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrO3Pm%2Fbtq2lpR67we%2Fn4LXHykGucT3Dzk1UiE1X0%2Fimg.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;812&quot; data-filename=&quot;123.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-5 ] IAM - 선택 그룹 세부정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그룹 권한 설정에서 사용자 지정 정책 라디오 버튼을 선택하고 우측에 &amp;lt;선택&amp;gt; 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;111.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;237&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRKFgk/btq2norThmt/BEHB9EscNbIMazEQkL5jX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRKFgk/btq2norThmt/BEHB9EscNbIMazEQkL5jX1/img.png&quot; data-alt=&quot;[ 그림 3-6 ] IAM - 그룹 권한 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRKFgk/btq2norThmt/BEHB9EscNbIMazEQkL5jX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRKFgk%2Fbtq2norThmt%2FBEHB9EscNbIMazEQkL5jX1%2Fimg.png&quot; data-filename=&quot;111.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;237&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-6 ] IAM - 그룹 권한 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;선택&amp;gt; 버튼을 누르면 정책 검토 편집기가 나옵니다. 여기서 사용할 임의의 정책 이름을 입력하고, 정책 문서에 다음 코드를 복사하여 붙여넣은 후 &amp;lt;정책 적용&amp;gt; 버튼을 눌러 완료합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1618209835379&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;Version&quot;: &quot;2012-10-17&quot;,
    &quot;Statement&quot;: [
        {
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: [
                &quot;autoscaling:*&quot;,
                &quot;codedeploy:*&quot;,
                &quot;ec2:*&quot;,
                &quot;lambda:*&quot;,
                &quot;elasticloadbalancing:*&quot;,
                &quot;s3:*&quot;,
                &quot;cloudwatch:*&quot;,
                &quot;logs:*&quot;,
                &quot;sns:*&quot;
            ],
            &quot;Resource&quot;: &quot;*&quot;
        }
    ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.40.24.png&quot; data-origin-width=&quot;3558&quot; data-origin-height=&quot;1684&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2MIEG/btq2ieDKaao/6duvRk8dH1O03Xb4DyqHJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2MIEG/btq2ieDKaao/6duvRk8dH1O03Xb4DyqHJ0/img.png&quot; data-alt=&quot;[ 그림 3-7 ] IAM - 정책 검토&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2MIEG/btq2ieDKaao/6duvRk8dH1O03Xb4DyqHJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2MIEG%2Fbtq2ieDKaao%2F6duvRk8dH1O03Xb4DyqHJ0%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.40.24.png&quot; data-origin-width=&quot;3558&quot; data-origin-height=&quot;1684&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-7 ] IAM - 정책 검토&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정상적으로 정책이 적용되었다면 아래와 같이 권한 탭에 방금 생성한 정책 이름이 추가된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;3580&quot; data-origin-height=&quot;1790&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.45.10.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiGlAL/btq2njjZ5RF/Fg8iWP8XcsxGnJ6K1Jhla0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiGlAL/btq2njjZ5RF/Fg8iWP8XcsxGnJ6K1Jhla0/img.png&quot; data-alt=&quot;[ 그림 3-8 ] IAM - 그룹 세부정보 &amp;amp;amp;gt; 권한 탭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiGlAL/btq2njjZ5RF/Fg8iWP8XcsxGnJ6K1Jhla0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiGlAL%2Fbtq2njjZ5RF%2FFg8iWP8XcsxGnJ6K1Jhla0%2Fimg.png&quot; data-origin-width=&quot;3580&quot; data-origin-height=&quot;1790&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.45.10.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-8 ] IAM - 그룹 세부정보 &amp;gt; 권한 탭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 단계로 방금 생성한 &amp;lt;node-deploy-pipe-group&amp;gt; 그룹에 사용자를 추가해야 합니다. 아직 사용자를 만들지 않았기 때문에 먼저 왼쪽 메뉴트리의 사용자를 클릭하고 &amp;lt;사용자 추가&amp;gt; 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;222.png&quot; data-origin-width=&quot;1627&quot; data-origin-height=&quot;812&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkNKVs/btq2sZkx7ug/vk6EXcTQTYglhtnWmIe56K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkNKVs/btq2sZkx7ug/vk6EXcTQTYglhtnWmIe56K/img.png&quot; data-alt=&quot;[ 그림 3-9 ] IAM - 사용자 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkNKVs/btq2sZkx7ug/vk6EXcTQTYglhtnWmIe56K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkNKVs%2Fbtq2sZkx7ug%2Fvk6EXcTQTYglhtnWmIe56K%2Fimg.png&quot; data-filename=&quot;222.png&quot; data-origin-width=&quot;1627&quot; data-origin-height=&quot;812&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-9 ] IAM - 사용자 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용자 추가 단계 1에서는 사용자 이름과 AWS 액세스 유형을 선택합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;775&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIUfw7/btq2oTrNKL7/En0CMzaOHwLIi3NEfGKpH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIUfw7/btq2oTrNKL7/En0CMzaOHwLIi3NEfGKpH1/img.png&quot; data-alt=&quot;[ 그림 3-10 ] IAM - 사용자 추가 단계 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIUfw7/btq2oTrNKL7/En0CMzaOHwLIi3NEfGKpH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIUfw7%2Fbtq2oTrNKL7%2FEn0CMzaOHwLIi3NEfGKpH1%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;775&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-10 ] IAM - 사용자 추가 단계 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용자 추가 단계 2에서는 그룹에 사용자 추가를 클릭하고 위에서 생성한 &amp;lt;node-deploy-pipe-group&amp;gt;를 선택합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;537&quot; data-filename=&quot;2.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfg2Av/btq2qynp6qb/LkPa6J8Jvke5KccaNDzrOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfg2Av/btq2qynp6qb/LkPa6J8Jvke5KccaNDzrOk/img.png&quot; data-alt=&quot;[ 그림 3-10 ] IAM - 사용자 추가 단계 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfg2Av/btq2qynp6qb/LkPa6J8Jvke5KccaNDzrOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfg2Av%2Fbtq2qynp6qb%2FLkPa6J8Jvke5KccaNDzrOk%2Fimg.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;537&quot; data-filename=&quot;2.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-10 ] IAM - 사용자 추가 단계 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용자 추가 단계 3에서는 사용할 임의의 키와 값을 입력합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2042&quot; data-origin-height=&quot;712&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.56.36.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6uPjN/btq2s4sAngf/jQTU69luxxtMX11agEKiA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6uPjN/btq2s4sAngf/jQTU69luxxtMX11agEKiA1/img.png&quot; data-alt=&quot;[ 그림 3-11 ] IAM - 사용자 추가 단계 3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6uPjN/btq2s4sAngf/jQTU69luxxtMX11agEKiA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6uPjN%2Fbtq2s4sAngf%2FjQTU69luxxtMX11agEKiA1%2Fimg.png&quot; data-origin-width=&quot;2042&quot; data-origin-height=&quot;712&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.56.36.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-11 ] IAM - 사용자 추가 단계 3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용자 추가 단계 4에서 앞서 입력한 정보들이 제대로 되었는 지 확인 후 생성 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.56.47.png&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;1278&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSKE99/btq2iqRV4ax/sJeYf4nkSqRmZXdsAJ4GyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSKE99/btq2iqRV4ax/sJeYf4nkSqRmZXdsAJ4GyK/img.png&quot; data-alt=&quot;[ 그림 3-12 ] IAM 사용자 추가 단계 4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSKE99/btq2iqRV4ax/sJeYf4nkSqRmZXdsAJ4GyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSKE99%2Fbtq2iqRV4ax%2FsJeYf4nkSqRmZXdsAJ4GyK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 3.56.47.png&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;1278&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-12 ] IAM 사용자 추가 단계 4&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;생성이 완료되면 액세스 키 ID 및 비밀 액세스 키가 표시되고, 이 정보들을 .csv파일로 다운로드 받을 수 있는 화면이 나옵니다. 이 화면은 다시 나오지 않기 때문에 반드시 .csv을 다운로드 받아두시길 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;658&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lJXUS/btq2rzfj42q/qfSuSfNwripjQmwIkEzmz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lJXUS/btq2rzfj42q/qfSuSfNwripjQmwIkEzmz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lJXUS/btq2rzfj42q/qfSuSfNwripjQmwIkEzmz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlJXUS%2Fbtq2rzfj42q%2FqfSuSfNwripjQmwIkEzmz0%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;658&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 정상적으로 CodeDeploy에서 사용할 사용자 생성이 완료되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 EC2에 원격 접속하여 CodeDeploy Agent를 설치해보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;bull;awscli 설치&lt;/p&gt;
&lt;pre id=&quot;code_1618211371783&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install awscli&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;bull;aws configure 설정&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1618211667872&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo aws configure

AWS Access Key ID [None]: 다운로드 받은 .csv파일에서 Access key ID 항목 입력

AWS Secret Access Key [None]: 다운로드 받은 .csv파일에서 Secret access key 항목 입력

Default region name [None]: ap-northeast-2

Default output foramt [None]: json&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;bull;agent 설치파일 다운로드&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1618211746492&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;bull;agent 설치파일 권한 추가&lt;/p&gt;
&lt;pre id=&quot;code_1618211804926&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod +x ./install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;bull;ruby 설치 ( agent 설치에는 ruby가 필요합니다)&lt;/p&gt;
&lt;pre id=&quot;code_1618211910856&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install ruby&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;bull;agent 설치&lt;/p&gt;
&lt;pre id=&quot;code_1618212058929&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ./install auto&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;bull; agent 설치확인&lt;/p&gt;
&lt;pre id=&quot;code_1618212116943&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo service codedeploy-agent status&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 4.22.32.png&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;190&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nAcWt/btq2iWpBNrZ/KEQFBYcwyOkUkfDgEBW931/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nAcWt/btq2iWpBNrZ/KEQFBYcwyOkUkfDgEBW931/img.png&quot; data-alt=&quot;[ 그림 3-13 ] codedeploy-agent 실행중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nAcWt/btq2iWpBNrZ/KEQFBYcwyOkUkfDgEBW931/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnAcWt%2Fbtq2iWpBNrZ%2FKEQFBYcwyOkUkfDgEBW931%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 4.22.32.png&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;190&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-13 ] codedeploy-agent 실행중&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;bull;인스턴스 부팅 시 codedeploy-agent 자동시작&lt;/p&gt;
&lt;pre id=&quot;code_1618212493500&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/init.d/codedeploy-startup.sh&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1618212356739&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin
sudo service codedeploy-agent restart&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;bull;스트립트 파일 실행권한 추가&lt;/p&gt;
&lt;pre id=&quot;code_1618212519315&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo chmod +x /etc/init.d/codedeploy-startup.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 CodeDeploy Agent 사용자ㅑ 추가 및 설치 작업이 완료되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 프로젝트 설정&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우리는 1편(&lt;a href=&quot;https://ookm1020.tistory.com/4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ookm1020.tistory.com/4&lt;/a&gt;)에서 이미 프로젝트를 배포한 바 있습니다. 따라서 프로젝트의 설치 과정은 생략합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로젝트의 root 경로에 아래 내용을 포함한 파일을 하나 생성합니다. 저는 이미 1편에서 git pull을 받아 프로젝트를 구성했기 때문에 로컬에서 작업 -&amp;gt; GitHub push -&amp;gt; EC2 pull 형식으로 반영했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;bull;appspec.yml 파일추가&lt;/p&gt;
&lt;pre id=&quot;code_1618212822405&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;version: 0.0
os: linux
files:
  - source:  /
    destination: /home/ubuntu/build/&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CodeDeploy가 배포하게 될 위치를 build폴더로 잡아두었기 때문에 해당 경로에 build 폴더를 생성합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;bull;build 폴더 생성&lt;/p&gt;
&lt;pre id=&quot;code_1618213068303&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir /home/ubuntu/build&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것으로 프로젝트 설정은 완료되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. CodeDeploy 배포 생성&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;EC2 생성 및 설정, CodeDeploy 애플리케이션 생성 및 IAM 설정까지 모든 준비가 완료되었습니다. 남은 작업은 EC2와 CodeDeploy를 연결해주는 일만 남았습니다. 조금만 더 힘내시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배포 생성에 앞서 기존에 생성한 EC2의 태그를 설정합니다. 이를 설정하는 이유는 배포 생성 시 CodeDeploy가 인스턴스를 식별할 때 이 태그를 이용하기 때문입니다. 물론 인스턴스 생성 시 설정할 수도 있지만, 우리가 진행하는 과정에서는 설정하지 않고 넘어갔기 때문에 지금 설정하는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;AWS 서비스의 EC2 대시보드로 이동해 해당 인스턴스를 클릭하면 하단에 세부정보가 나오는데 그 중 태그 탭을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;816&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byQrQk/btq2udpaBL4/RKlm7in15Kce10JqmuCZV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byQrQk/btq2udpaBL4/RKlm7in15Kce10JqmuCZV1/img.png&quot; data-alt=&quot;[ 그림 5-1 ] EC2 - 대시보드 - 인스턴스 상세정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byQrQk/btq2udpaBL4/RKlm7in15Kce10JqmuCZV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyQrQk%2Fbtq2udpaBL4%2FRKlm7in15Kce10JqmuCZV1%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;816&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-1 ] EC2 - 대시보드 - 인스턴스 상세정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;태그 관리 버튼을 클릭하여 들어가면 태그를 입력할 수 있는 창이 나오고 사용할 임의의 키와 값을 입력한 후 저장하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.06.55.png&quot; data-origin-width=&quot;1804&quot; data-origin-height=&quot;730&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzfDL6/btq2kDwFw2B/fKC6PGvm7Oy8Gj0o3IXzk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzfDL6/btq2kDwFw2B/fKC6PGvm7Oy8Gj0o3IXzk0/img.png&quot; data-alt=&quot;[ 그림 5-2 ] EC2 - 인스턴스 태그 관리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzfDL6/btq2kDwFw2B/fKC6PGvm7Oy8Gj0o3IXzk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzfDL6%2Fbtq2kDwFw2B%2FfKC6PGvm7Oy8Gj0o3IXzk0%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.06.55.png&quot; data-origin-width=&quot;1804&quot; data-origin-height=&quot;730&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-2 ] EC2 - 인스턴스 태그 관리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;태그 설정이 끝났다면 다시 AWS 서비스의 CodeDeploy 페이지로 이동합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CodeDeploy 애플리케이션은 이미 생성해두었습니다. 리스트에서 클릭합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1627&quot; data-origin-height=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kwge8/btq2qygLiL6/VFn0fMa2G9X5iC911sbdzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kwge8/btq2qygLiL6/VFn0fMa2G9X5iC911sbdzk/img.png&quot; data-alt=&quot;[ 그림 5-3 ] CodeDeploy - 애플리케이션 목록&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kwge8/btq2qygLiL6/VFn0fMa2G9X5iC911sbdzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKwge8%2Fbtq2qygLiL6%2FVFn0fMa2G9X5iC911sbdzk%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1627&quot; data-origin-height=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-3 ] CodeDeploy - 애플리케이션 목록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;애플리케이션의 상세화면에서 배포 그룹 생성을 클릭합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;333.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;670&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFuR6B/btq2iWpHtLB/y6RqL1xpNG3teoHE8iM3oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFuR6B/btq2iWpHtLB/y6RqL1xpNG3teoHE8iM3oK/img.png&quot; data-alt=&quot;[ 그림 5-4 ] CodeDeploy - 애플리케이션 상세정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFuR6B/btq2iWpHtLB/y6RqL1xpNG3teoHE8iM3oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFuR6B%2Fbtq2iWpHtLB%2Fy6RqL1xpNG3teoHE8iM3oK%2Fimg.png&quot; data-filename=&quot;333.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;670&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-4 ] CodeDeploy - 애플리케이션 상세정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배포 생성화면에는 다양한 설정들이 있습니다. 우리는 기초적으로 필수적인 부분만 변경하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배포 그룹 이름과, 서비스 역할을 선택합니다. 서비스 역할은 앞서 IAM 서비스에서 CodeDeploy용으로 만들었는데 해당 태그 값이 리스트를 클릭하면 노출됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.23.32.png&quot; data-origin-width=&quot;1660&quot; data-origin-height=&quot;756&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBZDxe/btq2niyKugp/TXGCGPE86uaB1GEH5hkU70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBZDxe/btq2niyKugp/TXGCGPE86uaB1GEH5hkU70/img.png&quot; data-alt=&quot;[ 그림 5-5 ] CodeDeploy - 배포 그룹 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBZDxe/btq2niyKugp/TXGCGPE86uaB1GEH5hkU70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBZDxe%2Fbtq2niyKugp%2FTXGCGPE86uaB1GEH5hkU70%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.23.32.png&quot; data-origin-width=&quot;1660&quot; data-origin-height=&quot;756&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-5 ] CodeDeploy - 배포 그룹 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배포유형은 Default 그대로 현재 위치를 선택합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.23.45.png&quot; data-origin-width=&quot;1640&quot; data-origin-height=&quot;486&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JDjmD/btq2kBZT4Yh/OFMlCuhr9fAxaXoiaBSXHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JDjmD/btq2kBZT4Yh/OFMlCuhr9fAxaXoiaBSXHk/img.png&quot; data-alt=&quot;[ 그림 5-6 ] CodeDeploy - 배포 그룹 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JDjmD/btq2kBZT4Yh/OFMlCuhr9fAxaXoiaBSXHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJDjmD%2Fbtq2kBZT4Yh%2FOFMlCuhr9fAxaXoiaBSXHk%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.23.45.png&quot; data-origin-width=&quot;1640&quot; data-origin-height=&quot;486&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-6 ] CodeDeploy - 배포 그룹 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;환경 구성은 Amazon EC2 인스턴스를 체크하고, 위에서 EC2 인스턴스의 태그 값을 입력해놓았기 때문에 입력창을 클릭하면 리스트로 해당 인스턴스의 태그 값이 노출됩니다. 만약 리스트에 보이지 않는다면 다시 한 번 EC2 인스턴스의 태그 값을 확인하시길 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.24.06.png&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;954&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K5xlu/btq2tlVlfde/D00zLm3l2RuIqbv3J8kblk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K5xlu/btq2tlVlfde/D00zLm3l2RuIqbv3J8kblk/img.png&quot; data-alt=&quot;[ 그림 5-7 ] CodeDeploy - 배포 그룹 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K5xlu/btq2tlVlfde/D00zLm3l2RuIqbv3J8kblk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK5xlu%2Fbtq2tlVlfde%2FD00zLm3l2RuIqbv3J8kblk%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.24.06.png&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;954&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-7 ] CodeDeploy - 배포 그룹 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;로드 밸런서는 필수 값은 아니지만, 저는 일부러 비활성화를 해둔 상태입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.24.28.png&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wk3eD/btq2rzfsGY1/LwUfrOrJAhCKkNYIki82w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wk3eD/btq2rzfsGY1/LwUfrOrJAhCKkNYIki82w1/img.png&quot; data-alt=&quot;[ 그림 5-8 ] CodeDeploy - 배포 그룹 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wk3eD/btq2rzfsGY1/LwUfrOrJAhCKkNYIki82w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWk3eD%2Fbtq2rzfsGY1%2FLwUfrOrJAhCKkNYIki82w1%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 5.24.28.png&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-8 ] CodeDeploy - 배포 그룹 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배포 그룹 설정을 다 했다면 생성 버튼을 눌러 완료합니다.&lt;/p&gt;
&lt;p&gt;완료했다면 다음과 같은 화면이 나올텐데 여기서 배포 생성 버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;591&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZCf4B/btq2oRVcVkl/OEZKKxagmCyPxtLJ6W4kX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZCf4B/btq2oRVcVkl/OEZKKxagmCyPxtLJ6W4kX1/img.png&quot; data-alt=&quot;[ 그림 5-9 ] CodeDeploy - 애플리케이션 상세정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZCf4B/btq2oRVcVkl/OEZKKxagmCyPxtLJ6W4kX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZCf4B%2Fbtq2oRVcVkl%2FOEZKKxagmCyPxtLJ6W4kX1%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;1624&quot; data-origin-height=&quot;591&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-9 ] CodeDeploy - 애플리케이션 상세정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배포 설정에서는 &amp;lt;애플리케이션을 GitHub에 저장&amp;gt; 항목을 선택합니다.&lt;/p&gt;
&lt;p&gt;선택 후에는 GItHub과 계정을 연결해야 하는데, 미리 연결해둔 GitHub의 계정이 리스트에 노출됩니다.&lt;/p&gt;
&lt;p&gt;처음 하시는 거라면 &amp;lt;GitHub 토큰 이름&amp;gt; 항목 아래에 있는 설명처럼 계정을 입력하면 &amp;lt;GitHub에 연결&amp;gt; 버튼이 활성화 되는데 이를 눌러 OAuth2 인증 절차를 거치면 연동이 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 다음 연동할 저장소의 이름을 입력하고 배포를 하고 싶은 커밋 ID를 입력하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 6.03.40.png&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;1494&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blXbL9/btq2noMlz7R/9zUMUxXfj07CT4uGtMKjbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blXbL9/btq2noMlz7R/9zUMUxXfj07CT4uGtMKjbK/img.png&quot; data-alt=&quot;[ 그림 5-10 ] CodeDeploy - 배포 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blXbL9/btq2noMlz7R/9zUMUxXfj07CT4uGtMKjbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblXbL9%2Fbtq2noMlz7R%2F9zUMUxXfj07CT4uGtMKjbK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 6.03.40.png&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;1494&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-10 ] CodeDeploy - 배포 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추가 배포 동작 설정에서는 배포 실패를 선택한 후 배포만들기를 눌러 완료하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 6.03.55.png&quot; data-origin-width=&quot;1640&quot; data-origin-height=&quot;1164&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPxaTm/btq2kqRtgAK/vLxLkdLSIUClrYMkzrCHEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPxaTm/btq2kqRtgAK/vLxLkdLSIUClrYMkzrCHEK/img.png&quot; data-alt=&quot;[ 그림 5-11 ] CodeDeploy - 배포 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPxaTm/btq2kqRtgAK/vLxLkdLSIUClrYMkzrCHEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPxaTm%2Fbtq2kqRtgAK%2FvLxLkdLSIUClrYMkzrCHEK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 6.03.55.png&quot; data-origin-width=&quot;1640&quot; data-origin-height=&quot;1164&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-11 ] CodeDeploy - 배포 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;배포가 정상적으로 이루어지면 다음과 같이 화면에서 배포 성공이라는 문구를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;3574&quot; data-origin-height=&quot;1780&quot; data-filename=&quot;스크린샷 2021-04-12 오후 6.10.14.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmmrS3/btq2lrP7kIP/B03SHSRiVk7FuQnCvktix1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmmrS3/btq2lrP7kIP/B03SHSRiVk7FuQnCvktix1/img.png&quot; data-alt=&quot;[ 그림 5-12 ] CodeDeploy - 배포 성공&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmmrS3/btq2lrP7kIP/B03SHSRiVk7FuQnCvktix1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmmrS3%2Fbtq2lrP7kIP%2FB03SHSRiVk7FuQnCvktix1%2Fimg.png&quot; data-origin-width=&quot;3574&quot; data-origin-height=&quot;1780&quot; data-filename=&quot;스크린샷 2021-04-12 오후 6.10.14.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 5-12 ] CodeDeploy - 배포 성공&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;원격 접속을 하면 appspec.yml에서 지정한 경로에 성공적으로 배포가 되었음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-12 오후 6.12.45.png&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;37&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqaa17/btq2kDp0eX7/FFpHKqz3TE9FZ1yyAG2diK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqaa17/btq2kDp0eX7/FFpHKqz3TE9FZ1yyAG2diK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqaa17/btq2kDp0eX7/FFpHKqz3TE9FZ1yyAG2diK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdqaa17%2Fbtq2kDp0eX7%2FFFpHKqz3TE9FZ1yyAG2diK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-12 오후 6.12.45.png&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;37&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;build 폴더로 이동해서 프로젝트를 실행하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1618219214176&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd build

npm install

npm start&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;브라우저를 통해 인스턴스의 IP 및 DNS로 접속을 하면 성공적으로 프로젝트가 실행됐음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;고생하셨습니다.  &lt;span style=&quot;color: #333333;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 여기까지 한 것만으로는 저장소가 업데이트 되었을 때, 자동적으로 CodeDeploy가 EC2에 코드를 업데이트 해주지 않습니다. 이것을 하기 위해서는 CodePipeline을 이용해서 해결이 가능합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CodePipeline은 3편에서 이어서 설명하도록 하겠습니다. 긴글 읽어주셔서 정말 감사합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 글은 &lt;a href=&quot;https://jojoldu.tistory.com/281?category=777282&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jojoldu.tistory.com/281?category=777282&lt;/a&gt; 을 참고하여 작성되었습니다 :)&lt;/p&gt;
&lt;figure id=&quot;og_1618219434000&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;1) AWS로 배포하기 시리즈 - 1. Code Deploy 사용하기&quot; data-og-description=&quot;AWS로 전체 시스템 구축해야 할 일이 생겨 AWS 배포 환경 시리즈를 시작합니다. 시리즈 과정은 CodeDeploy -&amp;gt; Code Pipeline -&amp;gt; ELB &amp;amp; Auto Scaling Group -&amp;gt; Beanstalk 으로 진행될 예정입니다. 저는 아래와 같은..&quot; data-og-host=&quot;jojoldu.tistory.com&quot; data-og-source-url=&quot;https://jojoldu.tistory.com/281?category=777282&quot; data-og-url=&quot;https://jojoldu.tistory.com/281&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/6rDRx/hyJSkyJDJB/mIIIEBJo2wHKZQnpP0Q7V1/img.png?width=800&amp;amp;height=636&amp;amp;face=0_0_800_636,https://scrap.kakaocdn.net/dn/bGFTqB/hyJQKsg6Ic/gtB9sbUyTtgCOsUGR2Oab0/img.png?width=800&amp;amp;height=636&amp;amp;face=0_0_800_636,https://scrap.kakaocdn.net/dn/bfcxT5/hyJSeFhWU3/yRDvi8lvCRTxjOtbO31VG1/img.png?width=3286&amp;amp;height=1428&amp;amp;face=0_0_3286_1428&quot;&gt;&lt;a href=&quot;https://jojoldu.tistory.com/281?category=777282&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jojoldu.tistory.com/281?category=777282&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/6rDRx/hyJSkyJDJB/mIIIEBJo2wHKZQnpP0Q7V1/img.png?width=800&amp;amp;height=636&amp;amp;face=0_0_800_636,https://scrap.kakaocdn.net/dn/bGFTqB/hyJQKsg6Ic/gtB9sbUyTtgCOsUGR2Oab0/img.png?width=800&amp;amp;height=636&amp;amp;face=0_0_800_636,https://scrap.kakaocdn.net/dn/bfcxT5/hyJSeFhWU3/yRDvi8lvCRTxjOtbO31VG1/img.png?width=3286&amp;amp;height=1428&amp;amp;face=0_0_3286_1428');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;1) AWS로 배포하기 시리즈 - 1. Code Deploy 사용하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;AWS로 전체 시스템 구축해야 할 일이 생겨 AWS 배포 환경 시리즈를 시작합니다. 시리즈 과정은 CodeDeploy -&amp;gt; Code Pipeline -&amp;gt; ELB &amp;amp; Auto Scaling Group -&amp;gt; Beanstalk 으로 진행될 예정입니다. 저는 아래와 같은..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;jojoldu.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>개발관련/AWS</category>
      <category>CodeDeploy</category>
      <category>CodeDeploy 연동하기</category>
      <category>CodeDeploy 적용</category>
      <category>Ec2 GitHub CodeDeploy</category>
      <category>ec2 배포환경 구축</category>
      <category>ec2 자동배포</category>
      <category>GitHub CodeDeploy</category>
      <category>자동배포</category>
      <author>하루정도</author>
      <guid isPermaLink="true">https://ookm1020.tistory.com/5</guid>
      <comments>https://ookm1020.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 12 Apr 2021 18:26:47 +0900</pubDate>
    </item>
    <item>
      <title>GitHub과 Node.js Express를 이용한 자동배포 환경 만들기(feat. AWS-EC2, AWS CodeDeploy, AWS CodePipeline) 1편 - 까먹는 개발자</title>
      <link>https://ookm1020.tistory.com/4</link>
      <description>&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1편에서는 AWS EC2에 Node.js Express 프로젝트를 배포하는 과정에 대해서 설명합니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://aws.amazon.com/ko/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617878897711&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;company&quot; data-og-title=&quot;클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services&quot; data-og-description=&quot;제조 AWS를 활용한 Siemens의 에너지, 의료 서비스, 제조 분야 혁신 Siemens가 AWS를 사용하여 어떻게 문화를 바꾸고 혁신을 장려하며 비즈니스 성과를 창출했는지 알아보세요. 자세히 알아보기&amp;nbsp; 업종&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/&quot; data-og-url=&quot;https://aws.amazon.com/ko/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qOvYm/hyJPlLsbGe/jRpc1kGv2L34Kam5aFTNz0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bBhNL9/hyJNTpvdBC/aypQurmqiUrbUUPrz7mGf0/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/ogCxv/hyJPo9f0vW/ea4A9rFk1jzA7nKwjEA46K/img.png?width=530&amp;amp;height=300&amp;amp;face=0_0_530_300&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qOvYm/hyJPlLsbGe/jRpc1kGv2L34Kam5aFTNz0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bBhNL9/hyJNTpvdBC/aypQurmqiUrbUUPrz7mGf0/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/ogCxv/hyJPo9f0vW/ea4A9rFk1jzA7nKwjEA46K/img.png?width=530&amp;amp;height=300&amp;amp;face=0_0_530_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;제조 AWS를 활용한 Siemens의 에너지, 의료 서비스, 제조 분야 혁신 Siemens가 AWS를 사용하여 어떻게 문화를 바꾸고 혁신을 장려하며 비즈니스 성과를 창출했는지 알아보세요. 자세히 알아보기&amp;nbsp; 업종&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://github.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://github.com&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617878727005&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub: Where the world builds software&quot; data-og-description=&quot;GitHub is where over 56 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;http://github.com&quot; data-og-url=&quot;https://github.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oskGM/hyJNXepo4y/PuMPD5dP6nBMteGbpLKbU1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Zftai/hyJPvUQGik/mZbVhDQkY0Rt19X1oiY25K/img.png?width=2496&amp;amp;height=1480&amp;amp;face=0_0_2496_1480,https://scrap.kakaocdn.net/dn/cvDzTt/hyJPv1B1Xx/8LDs7fShkKRrqiCVrA1kj1/img.jpg?width=1238&amp;amp;height=1404&amp;amp;face=0_0_1238_1404&quot;&gt;&lt;a href=&quot;http://github.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://github.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oskGM/hyJNXepo4y/PuMPD5dP6nBMteGbpLKbU1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/Zftai/hyJPvUQGik/mZbVhDQkY0Rt19X1oiY25K/img.png?width=2496&amp;amp;height=1480&amp;amp;face=0_0_2496_1480,https://scrap.kakaocdn.net/dn/cvDzTt/hyJPv1B1Xx/8LDs7fShkKRrqiCVrA1kj1/img.jpg?width=1238&amp;amp;height=1404&amp;amp;face=0_0_1238_1404');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;GitHub: Where the world builds software&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;GitHub is where over 56 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://expressjs.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://expressjs.com/ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1617878715381&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Express - Node.js 웹 애플리케이션 프레임워크&quot; data-og-description=&quot;Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크 $ npm install express --save&quot; data-og-host=&quot;expressjs.com&quot; data-og-source-url=&quot;https://expressjs.com/ko/&quot; data-og-url=&quot;https://expressjs.com/ko/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/csU5oJ/hyJN0CaAm6/wLQg5vcCE0H8otdAdSJfH1/img.png?width=435&amp;amp;height=157&amp;amp;face=0_0_435_157&quot;&gt;&lt;a href=&quot;https://expressjs.com/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://expressjs.com/ko/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/csU5oJ/hyJN0CaAm6/wLQg5vcCE0H8otdAdSJfH1/img.png?width=435&amp;amp;height=157&amp;amp;face=0_0_435_157');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Express - Node.js 웹 애플리케이션 프레임워크&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크 $ npm install express --save&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;expressjs.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기본적으로 AWS, GitHub Repository(저장소)와 Node.js Express 프로젝트를 생성한 상태에서 이 글을 참고하여 주시면 감사하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;1. AWS EC2 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;: 상단의 서비스를 클릭하여 컴퓨팅 하위 목록의 &amp;lt; EC2 &amp;gt;를 클릭하여 아래와 같은 화면이 나왔다면 &amp;lt; 인스턴스 시작 &amp;gt;을 눌러 EC2의 생성을 시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1095&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A3zvb/btq2aNrYoiT/bxTRxYWamp6CiroGXZiUx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A3zvb/btq2aNrYoiT/bxTRxYWamp6CiroGXZiUx1/img.png&quot; data-alt=&quot;[그림 1-1 ] AWS &amp;amp;amp;gt; 서비스 &amp;amp;amp;gt; EC2 &amp;amp;amp;gt; EC2 대시보드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A3zvb/btq2aNrYoiT/bxTRxYWamp6CiroGXZiUx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA3zvb%2Fbtq2aNrYoiT%2FbxTRxYWamp6CiroGXZiUx1%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1095&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-1 ] AWS &amp;gt; 서비스 &amp;gt; EC2 &amp;gt; EC2 대시보드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt; 인스턴스 시작 &amp;gt;을 누르면 다음과 같은 화면이 나옵니다. Amazon Linux, Ubuntu, SUSE, Red Hat 등이 있지만, 이번 글에서는 Ubuntu로 진행하겠습니다. Ubuntu는 20.04 버전과 18.04 버전이 있는데 이 중에서 18.04 버전을 선택합니다. 그 이유는 추후에 설치 하게 될 code Deploy agent에 관련해서 20.04 버전은 지원하지 않기 때문에 그렇습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;866&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmfFfO/btq2eMeq7FM/JYCtGG8cNfi6kVQK6UaiY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmfFfO/btq2eMeq7FM/JYCtGG8cNfi6kVQK6UaiY0/img.png&quot; data-alt=&quot;[ 그림 1-2 ] EC2 대시보드 &amp;amp;amp;gt; 인스턴스 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmfFfO/btq2eMeq7FM/JYCtGG8cNfi6kVQK6UaiY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmfFfO%2Fbtq2eMeq7FM%2FJYCtGG8cNfi6kVQK6UaiY0%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;866&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-2 ] EC2 대시보드 &amp;gt; 인스턴스 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여러가지의 인스턴스들이 있습니다. 상황에 맞게 알맞는 인스턴스를 선택하여 진행하시면 됩니다. 저는 프리 티어를 이용하기 위해 t2.micro를 선택했습니다. 인스턴스 세부구성이 있지만 글을 진행함에 따라 하나씩 설정하기 위해 바로 &amp;lt; 검토 및 시작 &amp;gt;버튼을 눌러 진행하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;222.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;927&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/exximD/btq2dJCcHTV/WWK7lqwgt3RDhakVhjlkK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/exximD/btq2dJCcHTV/WWK7lqwgt3RDhakVhjlkK1/img.png&quot; data-alt=&quot;[ 그림 1-3 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/exximD/btq2dJCcHTV/WWK7lqwgt3RDhakVhjlkK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FexximD%2Fbtq2dJCcHTV%2FWWK7lqwgt3RDhakVhjlkK1%2Fimg.png&quot; data-filename=&quot;222.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;927&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-3 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;선택한 인스턴스 및 OS 버전을 확인하고 &amp;lt; 시작하기 &amp;gt;버튼을 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;333.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;929&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6RTjm/btq18EWKM95/smTyTCfh1BwfkVgBrkjxzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6RTjm/btq18EWKM95/smTyTCfh1BwfkVgBrkjxzK/img.png&quot; data-alt=&quot;[ 그림 1-4 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6RTjm/btq18EWKM95/smTyTCfh1BwfkVgBrkjxzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6RTjm%2Fbtq18EWKM95%2FsmTyTCfh1BwfkVgBrkjxzK%2Fimg.png&quot; data-filename=&quot;333.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;929&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-4 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;EC2에 원격 접속하기 위해 필요한 PEM키를 다운로드 받은 후 &amp;lt; 인스턴스 시작 &amp;gt;버튼을 눌러 인스턴스 생성을 완료합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-09 오후 12.04.21.png&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;494&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buFPAV/btq2cnGCdXr/a2y305uZ8a5eiIWc9Cv9Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buFPAV/btq2cnGCdXr/a2y305uZ8a5eiIWc9Cv9Ak/img.png&quot; data-alt=&quot;[ 그림 1-5 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buFPAV/btq2cnGCdXr/a2y305uZ8a5eiIWc9Cv9Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuFPAV%2Fbtq2cnGCdXr%2Fa2y305uZ8a5eiIWc9Cv9Ak%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-09 오후 12.04.21.png&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;494&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-5 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정상적으로 생성이 완료되었다면 인스턴스 리스트에 실행중인 인스턴스가 보이게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;870&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5xnIK/btq2bJi6wsY/YbWKOFiGyrFNLY6TWjsD3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5xnIK/btq2bJi6wsY/YbWKOFiGyrFNLY6TWjsD3k/img.png&quot; data-alt=&quot;[그림 1-6 ] EC2 인스턴스 &amp;amp;amp;gt; 인스턴스 메뉴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5xnIK/btq2bJi6wsY/YbWKOFiGyrFNLY6TWjsD3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5xnIK%2Fbtq2bJi6wsY%2FYbWKOFiGyrFNLY6TWjsD3k%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;870&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[그림 1-6 ] EC2 인스턴스 &amp;gt; 인스턴스 메뉴&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;만약 인스턴스를 삭제하고 싶으면 리스트에서 마우스 우측버튼을 클릭 후, 나타나는 메뉴에서 &amp;lt; 인스턴스 종료 &amp;gt;버튼을 누릅니다. 성공적으로 종료되었다고 나오면 일정 시간이 지난 후에 리스트에서도 사라지게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;827&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JZa4e/btq2aNs0ryO/7UEkyIYmiwtMnzkIC4vPwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JZa4e/btq2aNs0ryO/7UEkyIYmiwtMnzkIC4vPwK/img.png&quot; data-alt=&quot;[ 그림 1-7 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JZa4e/btq2aNs0ryO/7UEkyIYmiwtMnzkIC4vPwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJZa4e%2Fbtq2aNs0ryO%2F7UEkyIYmiwtMnzkIC4vPwK%2Fimg.png&quot; data-filename=&quot;123.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;827&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 1-7 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. EC2 원격 접속하기&lt;/h2&gt;
&lt;p&gt;자 정상적으로 EC2도 생성이 되었고, SSH(Secure Shell Protocol)를 이용하여 원격 접속을 해보겠습니다(환경: Mac).&lt;/p&gt;
&lt;p&gt;다운로드 받은 PEM 키는 Document/PEM키 안에 옮겨두었고, 터미널에서 해당 경로로 이동한 상태입니다. PEM 키가 위치한 곳에서 SSH를 이용하여 원격 접속을 시도합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위에서는 ec2-deploy-pipe라고 PEM 키를 만들었지만, 삭제를 한 터라 다시 만들어서 현재는 node-deploy-pipe라는 .pem파일을 사용한 것이기 때문에 신경쓰지 말고 인스턴스를 생성할 때 작성하신 .pem 파일 이름으로 진행하시면 되겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;연결하기에 앞서 해당 .pem 파일에 권한을 주어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617946973483&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 400 node-deploy-pipe.pem

ssh -i &quot;node-deploy-pipe.pem&quot; ubuntu@13.125.27.127&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;명령어를 입력하면 아래와 같은 경고가 나올 수도 있는데, 무시하고 yes를 입력하여 진행합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 화면과 같이 나왔다면 성공입니다. 축하합니다 :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-09 오후 2.50.22.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;536&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J4R6X/btq2gDhC7UH/8dpildsJjR1H4mCk9KkCak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J4R6X/btq2gDhC7UH/8dpildsJjR1H4mCk9KkCak/img.png&quot; data-alt=&quot;[ 그림 2-1 ] EC2에 SSH를 이용하여 원격 접속한 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J4R6X/btq2gDhC7UH/8dpildsJjR1H4mCk9KkCak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ4R6X%2Fbtq2gDhC7UH%2F8dpildsJjR1H4mCk9KkCak%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-09 오후 2.50.22.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;536&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-1 ] EC2에 SSH를 이용하여 원격 접속한 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;※ chmod 400 이란?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;: chmod(change mod)는 파일의 권한을 변경할 수 있는 명령어입니다.&lt;/p&gt;
&lt;p&gt;chmod [사용자] [그룹] [전체] [파일명] -&amp;gt; chmod [4] [0] [0] 라는 형식으로 작성되며, 400은 나만 읽기 권한이 있도록 설정한 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위에서는 아이피 주소를 이용해서 원격 접속을 했지만, DNS를 입력해도 무방합니다. 인스턴스의 IP 주소 및 DNS는 인스턴스 ID를 클릭하면 나오는 요약 정보에서 확인하실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;111.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;577&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lEEHI/btq2gWHZVQ8/tgITsSoD8MBu2LEKLLJgE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lEEHI/btq2gWHZVQ8/tgITsSoD8MBu2LEKLLJgE0/img.png&quot; data-alt=&quot;[ 그림 2-2 ] 인스턴스 요약 정보&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lEEHI/btq2gWHZVQ8/tgITsSoD8MBu2LEKLLJgE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlEEHI%2Fbtq2gWHZVQ8%2FtgITsSoD8MBu2LEKLLJgE0%2Fimg.png&quot; data-filename=&quot;111.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;577&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 2-2 ] 인스턴스 요약 정보&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. EC2 웹서버 배포&lt;/h2&gt;
&lt;p&gt;접속을 하고 보니 서버는 정말 깔끔한 상태로 있습니다. 이제 express 프로젝트로 웹서버 구동에 필요한 것들을 설치해주도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;apt-get update부터 시작합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. apt-get update&lt;/p&gt;
&lt;pre id=&quot;code_1617949130536&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. nodejs&lt;/p&gt;
&lt;pre id=&quot;code_1617949259726&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install nodejs

node --version&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. npm&lt;/p&gt;
&lt;pre id=&quot;code_1617949575320&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install npm

npm --version&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. git&lt;/p&gt;
&lt;pre id=&quot;code_1617949681895&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install git

git --version&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4가지 항목을 다 설치했다면 우선 기본적인 Express 프로젝트 실행에 필요한 요소들은 다 갖추었습니다. Express Generator를 설치하여 인스턴스 자체적으로 프로젝트를 생성하는 방법도 있고, Git 저장소에서 클론을 받는 방법도 있습니다. 저는 Git 저장소에 기본적인 Express 코드를 만들어놓았기 때문에 클론을 받아오도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617950181242&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git clone https://github.com/ookm1020/cli-test.git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;매번 pull / push 등을 하기 위해서는 Git에 접근하기 위한 로그인 정보를 입력해야 합니다. 한 번이라면 괜찮지만 여러 번 반복되면 상당히 귀찮은 과정이기 때문에 클론 받은 폴더에서 Git Credential에 정보를 입력하고 store에 저장하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617951135568&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd cli-test

git config --global credential.helper store&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위의 명령어를 치고 pull 동작을 한 번 하게 되면 로그인 정보를 입력하게 되는데 이때 한 번 입력된 로그인 정보는 디스크에 남아 다음부터는 따로 묻지 않게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 클론 받은 프로젝트를 실행하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1617951652349&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install

npm start&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정상적으로 서버가 실행되었다면 이제 브라우저로 접속을 해봐야합니다. [ 그림 1-9 ]의 IP 주소와 DNS주소를 브라우저의 주소창에 입하면 됩니다. 하지만 인스턴스 생성 당시에 포트에 관한 설정을 전혀 건드리지 않았기 때문에 수정이 필요합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아래의 보안그룹을 누릅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1033&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OQOVk/btq2b4VGLUU/KGQ2uZh6tyzqhO7XKoog6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OQOVk/btq2b4VGLUU/KGQ2uZh6tyzqhO7XKoog6k/img.png&quot; data-alt=&quot;[ 그림 3-1 ] 인스턴스 요약 &amp;amp;amp;gt; 보안 탭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OQOVk/btq2b4VGLUU/KGQ2uZh6tyzqhO7XKoog6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOQOVk%2Fbtq2b4VGLUU%2FKGQ2uZh6tyzqhO7XKoog6k%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1033&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-1 ] 인스턴스 요약 &amp;gt; 보안 탭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;접속이 안되는 이유는 아래 [ 그림 2-4 ]와 같이 인바운드 규칙이 22번 포트만 있기 때문입니다. 22번 포트는 이미 SSH 원격 접속 시 사용했던 포트입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;758&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ez9kPd/btq2hsNAFab/Qd1QWV6Q5Klv8RRBEioNG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ez9kPd/btq2hsNAFab/Qd1QWV6Q5Klv8RRBEioNG0/img.png&quot; data-alt=&quot;[ 그림 3-2 ] 보안그룹&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ez9kPd/btq2hsNAFab/Qd1QWV6Q5Klv8RRBEioNG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fez9kPd%2Fbtq2hsNAFab%2FQd1QWV6Q5Klv8RRBEioNG0%2Fimg.png&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;758&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-2 ] 보안그룹&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;웹서버는 일반적으로 http = 80, https = 443을 사용하고 있습니다. 따라서 이 두 가지는 기본적으로 추가해주고 또한 제가 실행중인 프로젝트는 3001번 포트를 사용하고 있기 때문에 3001번 포트까지 개방하도록 하겠습니다. 따로 Express 프로젝트 포트 설정을 수정하시지 않았다면 여러분은 3000번 포트를 개방하시면 되겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;44.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1025&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDqBgZ/btq2hrHZiRf/Jgf3EovBwrtEb3K64YSMnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDqBgZ/btq2hrHZiRf/Jgf3EovBwrtEb3K64YSMnk/img.png&quot; data-alt=&quot;[ 그림 3-3 ] 인바운드 규칙 편집&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDqBgZ/btq2hrHZiRf/Jgf3EovBwrtEb3K64YSMnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDqBgZ%2Fbtq2hrHZiRf%2FJgf3EovBwrtEb3K64YSMnk%2Fimg.png&quot; data-filename=&quot;44.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1025&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-3 ] 인바운드 규칙 편집&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[ 그림 2-5 ]와 같이 인바운드 규칙을 추가하였다면 이제 다시 접속을 시도해봅니다. 인스턴스의 아이피 또는 DNS뒤에 포트 번호를 붙여야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt; ex &amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1617953829129&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;http://13.125.27.127:3001

http://ec2-13-125-27-127.ap-northeast-2.compute.amazonaws.com:3001&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 브라우저에 다음과 같은 화면이 출력이 되었다면 성공하신겁니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;3584&quot; data-origin-height=&quot;712&quot; data-filename=&quot;스크린샷 2021-04-09 오후 4.35.06.png&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nXFTr/btq2ggnayDx/meDSMyOyqglb1o0pOs9GHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nXFTr/btq2ggnayDx/meDSMyOyqglb1o0pOs9GHk/img.png&quot; data-alt=&quot;[ 그림 3-4 ] Express 기본 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nXFTr/btq2ggnayDx/meDSMyOyqglb1o0pOs9GHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnXFTr%2Fbtq2ggnayDx%2FmeDSMyOyqglb1o0pOs9GHk%2Fimg.png&quot; data-origin-width=&quot;3584&quot; data-origin-height=&quot;712&quot; data-filename=&quot;스크린샷 2021-04-09 오후 4.35.06.png&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 3-4 ] Express 기본 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 포트 Redirect&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[ 그림 2-5 ] 에서 우리는 80, 443, 3001번 포트의 인바운드 설정을 했습니다. 기본적으로 포트를 따로 지정하지 않고 URL만 치고 들어왔을 때 default로 80포트로 접속이 됩니다. 따라서 사용자가 80포트로 접속을 했을 때 우리의 웹서버인 3001번 포트로 바라보게 한다면 URL에 위에서 처럼 포트를 명시해주지 않아도 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인스턴스에서 아래 명령어를 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618104353583&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3001&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 URL에 3001번 포트를 명시하지 않아도 접속이 잘 되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;redirect 포트의 리스트는 다음 명령어로 확인이 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618104562983&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -t nat -L --line-numbers&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;스크린샷 2021-04-11 오전 10.31.39.png&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;370&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JPkoH/btq2h3BxHMf/dB3MiEUkqk6ZssNBn9GgI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JPkoH/btq2h3BxHMf/dB3MiEUkqk6ZssNBn9GgI0/img.png&quot; data-alt=&quot;[ 그림 4-1 ] iptables 리스트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JPkoH/btq2h3BxHMf/dB3MiEUkqk6ZssNBn9GgI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJPkoH%2Fbtq2h3BxHMf%2FdB3MiEUkqk6ZssNBn9GgI0%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-04-11 오전 10.31.39.png&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;370&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 그림 4-1 ] iptables 리스트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;만약 해당 redirect 포트를 삭제하고 싶다면 다음 명령어를 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1618105121358&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo iptables -t nat -D PREROUTING [number]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[ 그림 4-1 ] 에서 num이라는 항목이 있습니다. 이 항목을 위의 코드 [number]에 입력하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;삭제를 하고 리스트 명령어를 치면 지워진 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 AWS의 EC2 인스턴스 생성, 원격접속, 서버 세팅, 인바운드 편집 등 1차적으로 서버 배포에 대한 모든 항목들이 완료되었습니다.&lt;/p&gt;
&lt;p&gt;다음 편에서는 AWS의 CodeDeploy를 활용한 배포에 대해서 진행해보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;감사합니다 :)  &lt;span style=&quot;color: #333333;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발관련/AWS</category>
      <category>AWS EC2</category>
      <category>ec2 express</category>
      <category>ec2 redirect</category>
      <category>ec2 ssh</category>
      <category>EC2 원격접속</category>
      <category>ec2 인바운드 편집</category>
      <category>ec2 인스턴스 배포</category>
      <category>EC2 인스턴스 생성</category>
      <category>Express</category>
      <category>express 배포</category>
      <author>하루정도</author>
      <guid isPermaLink="true">https://ookm1020.tistory.com/4</guid>
      <comments>https://ookm1020.tistory.com/4#entry4comment</comments>
      <pubDate>Sun, 11 Apr 2021 10:53:38 +0900</pubDate>
    </item>
    <item>
      <title>트레이딩 뷰 차트 소켓데이터 적용하기 - 까먹는 개발자</title>
      <link>https://ookm1020.tistory.com/3</link>
      <description>&lt;h2&gt;트레이딩 뷰 차트 - Technical Analysis Charts for Reactjs (2 / 2)&lt;/h2&gt;
&lt;hr /&gt;
&lt;h3&gt;TradingView Chart를 연동 create-react-app에 연동 시킨 후, 데이터 베이스와 소켓 데이터를 바인딩 시키기 위한 예제입니다.&lt;/h3&gt;
&lt;h4&gt;준비사항&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ookm1020/basic-tradingview.git&quot;&gt;https://github.com/ookm1020/basic-tradingview.git&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h6&gt;지난 1편에서 소켓 모듈을 설치했기 때문에 따로 업급은 하지 않겠습니다. 각 함수들에 것은 &lt;a href=&quot;https://github.com/ookm1020/basic-tradingview.git&quot;&gt;Jon Church님의 글&lt;/a&gt;에 자세하게 설명이 되어 있으니 참고하시면 됩니다.&lt;/h6&gt;
&lt;h5&gt;시작하기 전에-&lt;/h5&gt;
&lt;h6&gt;소켓 데이터 연결을 하기에 앞서, 업비트의 오픈API를 통해서 현재 체결되는 데이터를 소켓을 통해 받아오는 서버를 켜놓고 이 예제를 진행했습니다.&lt;/h6&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.upbit.com/docs/upbit-quotation-websocket&quot;&gt;WebSocket을 이용한 업비트 시세 수신&lt;/a&gt;을 이용하여 가상 소켓 서버를 만드신 후, 진행하시면 원활하게 테스트가 가능합니다.&lt;/p&gt;
&lt;h5&gt;데이터 포맷&lt;/h5&gt;
&lt;h6&gt;업비트에서 수신되는 실시간 매칭 데이터는 다음과 같습니다.&lt;/h6&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;data: {
  acc_ask_volume: 614.8915618
  acc_bid_volume: 419.11867853
  acc_trade_price: 18943312506.64586
  acc_trade_price_24h: 83406758933.7941
  acc_trade_volume: 1034.01024033
  acc_trade_volume_24h: 4599.40064738
  ask_bid: &quot;ASK&quot;
  change: &quot;FALL&quot;
  change_price: 3000
  change_rate: 0.0001641587
  code: &quot;KRW-BTC&quot;
  delisting_date: null
  high_price: 18420000
  highest_52_week_date: &quot;2020-11-16&quot;
  highest_52_week_price: 18450000
  is_trading_suspended: false
  low_price: 18207000
  lowest_52_week_date: &quot;2020-03-13&quot;
  lowest_52_week_price: 5489000
  market_state: &quot;ACTIVE&quot;
  market_state_for_ios: null
  market_warning: &quot;NONE&quot;
  opening_price: 18275000
  prev_closing_price: 18275000
  signed_change_price: -3000
  signed_change_rate: -0.0001641587
  stream_type: &quot;REALTIME&quot;
  timestamp: 1605590707860
  trade_date: &quot;20201117&quot;
  trade_price: 18272000
  trade_status: null
  trade_time: &quot;052507&quot;
  trade_timestamp: 1605590707000
  trade_volume: 0.000132
  type: &quot;ticker&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;트레이딩 뷰 차트에 데이터 연결&lt;/h5&gt;
&lt;h6&gt;실시간 소켓 데이터는 stream.js에서 관리합니다.&lt;/h6&gt;
&lt;h6&gt;폴더 구조는 다음과 같습니다.&lt;/h6&gt;
&lt;p&gt;![스크린샷 2020-11-17 오후 2.30.49](/Users/lys/Documents/MD 문서/스크린샷 2020-11-17 오후 2.30.49.png)&lt;/p&gt;
&lt;p&gt;실질적으로 stream.js에 작성되어 있는 updateBar 함수가 차트의 캔들을 업데이트를 해주는데 해당 함수를 따로 건드리지 않고 필요한 정보만 주입하는 방식으로 진행합니다. 수정 부분 - updateBar func, socket module&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;기존 require방식이 마음에 들지 않아 import방식으로 변경한 부분입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;// api/stream.js
import historyProvider from './historyProvider.js'
// we use Socket.io client to connect to cryptocompare's socket.io stream

// 업비트에서 수신할 가상의 소켓서버와의 연결을 위해 주석처리합니다.
//var io = require('socket.io-client')
//var socket_url = 'wss://streamer.cryptocompare.com'
//var socket = io(socket_url)

import socketClient from &quot;socket.io-client&quot;;

// 로컬에 3001로 켜져 있는 가상의 소켓서버로 소켓을 연결합니다. 예제에서는 BTC코인의 시세만 반영하기 때문에 data=KRW-BTC로 지정했습니다.
const socket = socketClient(`http://localhost:3001?data=KRW-BTC`);

.
.
.&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;socket.on의 코드를 가상의 소켓서버와 채널을 맞추고 data를 업비트의 데이터 포맷에 맞게 변경합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;typescript&quot;&gt;&lt;code&gt;// 기존 코드
socket.on('m', (e) =&amp;gt; {
 // here we get all events the CryptoCompare connection has subscribed to
 // we need to send this new data to our subscribed charts
 const _data= e.split('~')
 if (_data[0] === &quot;3&quot;) {
  // console.log('Websocket Snapshot load event complete')
  return
 }
 const data = {
  sub_type: parseInt(_data[0],10),
  exchange: _data[1],
  to_sym: _data[2],
  from_sym: _data[3],
  trade_id: _data[5],
  ts: parseInt(_data[6],10),
  volume: parseFloat(_data[7]),
  price: parseFloat(_data[8])
 };

 // 변경 코드
 socket.on('/ticker', (e) =&amp;gt; {
   console.log(&quot;match data: &quot;, e);

      const data = {
     sub_type: parseInt(0, 10),
     exchange: &quot;BITHUMB&quot;,
     to_sym: e.code.split(&quot;-&quot;)[1], // &quot;BTC&quot;
     from_sym: e.code.split(&quot;-&quot;)[0], // &quot;KRW&quot;
     // trade_id: _data[5],
     trade_id: &quot;&quot;,
     ts: e.timestamp / 1000, // timestamp
     volume: e.trade_volume, // 거래량
     price: e.trade_price // 가격
   };&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;차트에서 원하는 형식에 맞게 소켓으로 수신된 데이터로 바꿔줍니다. (간단 구현을 위해 close와 volume만 바꿨습니다.)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;function updateBar(data, sub) {
 var lastBar = sub.lastBar
 let resolution = sub.resolution
 if (resolution.includes('D')) {
  // 1 day in minutes === 1440
  resolution = 1440
 } else if (resolution.includes('W')) {
  // 1 week in minutes === 10080
  resolution = 10080
 }
var coeff = resolution * 60
 // console.log({coeff})
 var rounded = Math.floor(data.ts / coeff) * coeff
 var lastBarSec = lastBar.time / 1000
 var _lastBar

if (rounded &amp;gt; lastBarSec) {
  // create a new candle, use last close as open **PERSONAL CHOICE**

  // 기존 코드
  _lastBar = {
   time: rounded * 1000,
   open: lastBar.close,
   high: lastBar.close,
   low: lastBar.close,
   close: data.price,
   volume: data.volume
  }

  // 변경 코드
  _lastBar = {
   time: rounded * 1000,
   open: lastBar.close,
   high: lastBar.close,
   low: lastBar.close,
   close: data.price,
   volume: data.volume
  }

 } else {
  // update lastBar candle!
  if (data.price &amp;lt; lastBar.low) {
   lastBar.low = data.price
  } else if (data.price &amp;gt; lastBar.high) {
   lastBar.high = data.price
  }

  lastBar.volume += data.volume
  lastBar.close = data.price
  _lastBar = lastBar
 }
 return _lastBar
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;/ticker 채널에서 받아오는 데이터는 위에서 언급한 데이터 포맷입니다. 또한 거래소 이름을 BITUMB로 한 이유는 현재 트레이딩 뷰 측에서 승인이 되지 않은 거래소를 사용할 수 없기 때문에 임시로 지정했습니다.&lt;/p&gt;
&lt;p&gt;따라서 다음과 같이 index.jsx의 symbol도 변경합니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import * as React from &quot;react&quot;;
import &quot;./index.css&quot;;
import Datafeed from &quot;./api/&quot;;

function getLanguageFromURL() {
  const regex = new RegExp(&quot;[\\?&amp;amp;]lang=([^&amp;amp;#]*)&quot;);
  const results = regex.exec(window.location.search);
  return results === null ? null : decodeURIComponent(results[1].replace(/\+/g, &quot; &quot;));
}

export class TVChartContainer extends React.PureComponent {
  static defaultProps = {
    symbol: &quot;BITHUMB:BTC/KRW&quot;,
    interval: &quot;1&quot;,
    containerId: &quot;tv_chart_container&quot;,
    libraryPath: &quot;/charting_library/&quot;,
    chartsStorageUrl: &quot;https://saveload.tradingview.com&quot;,
    chartsStorageApiVersion: &quot;1.1&quot;,
    clientId: &quot;tradingview.com&quot;,
    userId: &quot;public_user_id&quot;,
    fullscreen: false,
    autosize: true,
    studiesOverrides: {},
  };

  componentDidMount() {
    const widgetOptions = {
      debug: false,
      symbol: this.props.symbol,
      datafeed: Datafeed,
      interval: this.props.interval,
      container_id: this.props.containerId,
      library_path: this.props.libraryPath,
      locale: getLanguageFromURL() || &quot;en&quot;,
      disabled_features: [&quot;use_localstorage_for_settings&quot;],
      enabled_features: [&quot;study_templates&quot;],
      charts_storage_url: this.props.chartsStorageUrl,
      charts_storage_api_version: this.props.chartsStorageApiVersion,
      client_id: this.props.clientId,
      user_id: this.props.userId,
      fullscreen: this.props.fullscreen,
      autosize: this.props.autosize,
      studies_overrides: this.props.studiesOverrides,
      overrides: {
        &quot;mainSeriesProperties.showCountdown&quot;: true,
        &quot;paneProperties.background&quot;: &quot;#fff&quot;,
        &quot;paneProperties.vertGridProperties.color&quot;: &quot;#E6EFF4&quot;,
        &quot;paneProperties.horzGridProperties.color&quot;: &quot;#E6EFF4&quot;,
        &quot;symbolWatermarkProperties.transparency&quot;: 90,
        &quot;scalesProperties.textColor&quot;: &quot;#AAA&quot;,
        &quot;mainSeriesProperties.candleStyle.wickUpColor&quot;: &quot;#336854&quot;,
        &quot;mainSeriesProperties.candleStyle.wickDownColor&quot;: &quot;#7f323f&quot;
      }
    };

    Datafeed.onReady(() =&amp;gt; {
      const widget = (window.tvWidget = new window.TradingView.widget(widgetOptions));

      widget.onChartReady(() =&amp;gt; {
        console.log(&quot;Chart has loaded!&quot;);
      });
    });
  }

  render() {
    return &amp;lt;div id={this.props.containerId} className={&quot;TVChartContainer&quot;} /&amp;gt;;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;※ 2 편은 업비트의 시세 수신 API를 이용해서 간단하게 최신시세를 반영하는 예제입니다. 승인 관련 문제때문에 BITUMB의 거래소 이름으로 진행했으며, 정상적으로 트레이딩뷰 측의 신청서를 통해서 인증을 받으신 분들은 자체 거래소 이름을 작성하시면 됩니다.&lt;/h3&gt;
&lt;h3&gt;※ 요즘 정신이 없네요. 많은 분들이 2편을 요청하셔서 간략하게 나마 작성해봤습니다. 너무 간략하기는 하지만, 질문 사항 있으신 분들은 댓글 또는 방명록에 작성해주시면 최대한 답변해드리겠습니다 :)&lt;/h3&gt;
&lt;p&gt;예정 사항으로는 차트의 색상 변경 및 업비트 시세 수신 가상 소켓 서버 구현 등을 생각하고 있습니다. 여유가 생기는 대로 작성해보도록 하겠습니다.. &amp;zwj;♂️&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;
&lt;p&gt;이 글을 작성하기 위해 &lt;a href=&quot;https://medium.com/@jonchurch/tradingview-charting-library-js-api-setup-for-crypto-part-1-57e37f5b3d5a&quot;&gt;Jon Church님의 글&lt;/a&gt; 을 참고하였습니다.&lt;/p&gt;</description>
      <category>개발관련/차트</category>
      <category>chart socket</category>
      <category>exchange chart</category>
      <category>tradingview</category>
      <category>tradingview socket</category>
      <category>tradingviewChart</category>
      <category>리액트</category>
      <category>리액트 차트</category>
      <category>리액트 차트 소켓</category>
      <category>트레이딩뷰</category>
      <category>트레이딩뷰 소켓</category>
      <author>하루정도</author>
      <guid isPermaLink="true">https://ookm1020.tistory.com/3</guid>
      <comments>https://ookm1020.tistory.com/3#entry3comment</comments>
      <pubDate>Tue, 17 Nov 2020 15:08:05 +0900</pubDate>
    </item>
    <item>
      <title>트레이딩 뷰 차트 적용하기 - 까먹는 개발자</title>
      <link>https://ookm1020.tistory.com/2</link>
      <description>&lt;h2&gt;트레이딩 뷰 차트 - Technical Analysis Charts for Reactjs (1 / 2)&lt;/h2&gt;
&lt;hr /&gt;
&lt;h3&gt;TradingView Chart를 create-react-app에 적용시키기 위한 예제입니다.&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;github :&amp;nbsp;&lt;a href=&quot;https://github.com/ookm1020/basic-tradingview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/ookm1020/basic-tradingview&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;준비사항&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;트레이딩 뷰 차트 라이브러리&lt;/li&gt;
&lt;li&gt;create-react-app&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;트레이딩 뷰 차트 라이브러리 신청하기&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://kr.tradingview.com/HTML5-stock-forex-bitcoin-charting-library/&quot;&gt;TradingView Technical Analysis Chart 신청&lt;/a&gt;에서 라이브러리 신청서를 작성합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FWXIV/btqwDtrkEwh/gAk9kE4r1KZjaWMYQbT2gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FWXIV/btqwDtrkEwh/gAk9kE4r1KZjaWMYQbT2gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FWXIV/btqwDtrkEwh/gAk9kE4r1KZjaWMYQbT2gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFWXIV%2FbtqwDtrkEwh%2FgAk9kE4r1KZjaWMYQbT2gK%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;라이센스 계약서를 출력하여 마지막 장의 정보를 기입한 뒤 스캔하여 첨부합니다. (※ 정보 기입 시, WEB이란 항목에는 트레이딩 뷰 차트를 사용하려고 하는 도메인을 입력해야 합니다.)&lt;/li&gt;
&lt;li&gt;위 신청서 폼에 있는 &quot;귀하의 웹사이트 URL. 무료 라이브러리는 오로지 퍼블릭 용도만 허용됨&quot; 칸에는 신청서에 작성한 도메인과 일치해야 합니다.&lt;/li&gt;
&lt;li&gt;&quot;귀하의 개인 (회사말고) GitHub 프로화일 링크목록&quot;이란 칸에 자신의 GitHub 주소를 넣는 이유는 트레이딩 뷰의 저장소를 접근 가능하게 해주기 때문입니다.&lt;/li&gt;
&lt;li&gt;신청 후, 약 1~2일 안에 기입한 메일로 답장이 옵니다. 절차는 까다롭지 않으며 신경써야 할 부분은 트레이딩 뷰를 사용하려고 하는 웹 어플리케이션의 URL이 퍼블릭 한 용도여야만 한다는 점입니다. (※ 트레이딩 뷰는 개인적인 사용, 취미, 연구 또는 테스트용으로는 라이브러리를 제공하지 않습니다. 다만, 개인 용도로 라이브러리가 필요하다면 유료 라이센스가 필요하며 비용은 연간 2년마다 15,000 달러가 청구된다고 합니다. )&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;프로젝트 구조&lt;/h4&gt;
&lt;p&gt;create-react-app의 구조에 charting_library폴더를 넣습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt51f7/btqwGjnjbAM/dKNZiNMy6H87Nvs7Caotm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt51f7/btqwGjnjbAM/dKNZiNMy6H87Nvs7Caotm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt51f7/btqwGjnjbAM/dKNZiNMy6H87Nvs7Caotm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt51f7%2FbtqwGjnjbAM%2FdKNZiNMy6H87Nvs7Caotm0%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;TradingView에서 제공해주는 라이브러리를 다운로드 받으면 다음과 같은 폴더의 구조는 위와 같습니다. (charting_library)&lt;/p&gt;
&lt;h4&gt;차트 적용하기&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;public/index.html에 다음과 같이 라이브러리를 임포트합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
    &amp;lt;title&amp;gt;create-react-app&amp;lt;/title&amp;gt;
    &amp;lt;script src=&quot;./charting_library/charting_library.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;

  &amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;root&quot;&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;src/App.js&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React from &quot;react&quot;;

// TradingView 컴포넌트 임포트
import { TVChartContainer } from &quot;./components/TVChartContainer/index&quot;;

import &quot;./App.css&quot;;
import &quot;./error.css&quot;;

function App() {
  return (
    &amp;lt;div className=&quot;App&quot;&amp;gt;
      &amp;lt;TVChartContainer /&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}

export default App;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;src/components/TVChartContainer&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;TVChartContainer 폴더 구조&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTLner/btqwCQG5OPp/sEVxunzoglfXnVzjDlU4zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTLner/btqwCQG5OPp/sEVxunzoglfXnVzjDlU4zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTLner/btqwCQG5OPp/sEVxunzoglfXnVzjDlU4zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTLner%2FbtqwCQG5OPp%2FsEVxunzoglfXnVzjDlU4zk%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;src/components/TVChartContainer/index.jsx&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import * as React from 'react';
import './index.css';
import Datafeed from './api/'


function getLanguageFromURL() {
    const regex = new RegExp('[\\?&amp;amp;]lang=([^&amp;amp;#]*)');
    const results = regex.exec(window.location.search);
    return results === null ? null : decodeURIComponent(results[1].replace(/\+/g, ' '));
}

export class TVChartContainer extends React.PureComponent {

    static defaultProps = {
        symbol: 'Coinbase:BTC/USD',
        interval: '15',
        containerId: 'tv_chart_container',
        libraryPath: '/charting_library/',
        chartsStorageUrl: 'https://saveload.tradingview.com',
        chartsStorageApiVersion: '1.1',
        clientId: 'tradingview.com',
        userId: 'public_user_id',
        fullscreen: false,
        autosize: true,
        studiesOverrides: {},
    };

    componentDidMount() {
        const widgetOptions = {
            debug: false,
            symbol: this.props.symbol,
            datafeed: Datafeed,
            interval: this.props.interval,
            container_id: this.props.containerId,
            library_path: this.props.libraryPath,
            locale: getLanguageFromURL() || 'en',
            disabled_features: ['use_localstorage_for_settings'],
            enabled_features: ['study_templates'],
            charts_storage_url: this.props.chartsStorageUrl,
            charts_storage_api_version: this.props.chartsStorageApiVersion,
            client_id: this.props.clientId,
            user_id: this.props.userId,
            fullscreen: this.props.fullscreen,
            autosize: this.props.autosize,
            studies_overrides: this.props.studiesOverrides,
            overrides: {
                &quot;mainSeriesProperties.showCountdown&quot;: true,
                &quot;paneProperties.background&quot;: &quot;#131722&quot;,
                &quot;paneProperties.vertGridProperties.color&quot;: &quot;#363c4e&quot;,
                &quot;paneProperties.horzGridProperties.color&quot;: &quot;#363c4e&quot;,
                &quot;symbolWatermarkProperties.transparency&quot;: 90,
                &quot;scalesProperties.textColor&quot; : &quot;#AAA&quot;,
                &quot;mainSeriesProperties.candleStyle.wickUpColor&quot;: '#336854',
                &quot;mainSeriesProperties.candleStyle.wickDownColor&quot;: '#7f323f',
            }
        };

        Datafeed.onReady(() =&amp;gt; {
            const widget = (window.tvWidget = new window.TradingView.widget(widgetOptions));

            widget.onChartReady(() =&amp;gt; {
                console.log('Chart has loaded!')
            });
        });
    }

    render() {
        return (
            &amp;lt;div
                id={ this.props.containerId }
                className={ 'TVChartContainer' }
            /&amp;gt;
        );
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;src/components/TVChartContainer/api/historyProvider.js&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;※ request-promise 모듈을 설치합니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;npm install request-promise --save&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;var rp = require('request-promise').defaults({json: true})

const api_root = 'https://min-api.cryptocompare.com'
const history = {}

export default {
    history: history,

    getBars: function(symbolInfo, resolution, from, to, first, limit) {
        var split_symbol = symbolInfo.name.split(/[:/]/)
            const url = resolution === 'D' ? '/data/histoday' : resolution &amp;gt;= 60 ? '/data/histohour' : '/data/histominute'
            const qs = {
                    e: split_symbol[0],
                    fsym: split_symbol[1],
                    tsym: split_symbol[2],
                    toTs:  to ? to : '',
                    limit: limit ? limit : 2000, 
                    // aggregate: 1//resolution 
                }
            // console.log({qs})

        return rp({
                url: `${api_root}${url}`,
                qs,
            })
            .then(data =&amp;gt; {
                console.log({data})
                if (data.Response &amp;amp;&amp;amp; data.Response === 'Error') {
                    console.log('CryptoCompare API error:',data.Message)
                    return []
                }
                if (data.Data.length) {
                    console.log(`Actually returned: ${new Date(data.TimeFrom * 1000).toISOString()} - ${new Date(data.TimeTo * 1000).toISOString()}`)
                    var bars = data.Data.map(el =&amp;gt; {
                        return {
                            time: el.time * 1000, //TradingView requires bar time in ms
                            low: el.low,
                            high: el.high,
                            open: el.open,
                            close: el.close,
                            volume: el.volumefrom 
                        }
                    })
                        if (first) {
                            var lastBar = bars[bars.length - 1]
                            history[symbolInfo.name] = {lastBar: lastBar}
                        }
                    return bars
                } else {
                    return []
                }
            })
}
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;
&lt;p&gt;src/components/TVChartContainer/api/stream.js&lt;/p&gt;
&lt;p&gt;※ socket.io-client 모듈을 설치합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;npm install socket.io-client --save&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;typescript&quot;&gt;&lt;code&gt;// api/stream.js
import historyProvider from './historyProvider.js'
// we use Socket.io client to connect to cryptocompare's socket.io stream
var io = require('socket.io-client')
var socket_url = 'wss://streamer.cryptocompare.com'
var socket = io(socket_url)
// keep track of subscriptions
var _subs = []

export default {
 subscribeBars: function(symbolInfo, resolution, updateCb, uid, resetCache) {
  const channelString = createChannelString(symbolInfo)
  socket.emit('SubAdd', {subs: [channelString]})

  var newSub = {
   channelString,
   uid,
   resolution,
   symbolInfo,
   lastBar: historyProvider.history[symbolInfo.name].lastBar,
   listener: updateCb,
  }
_subs.push(newSub)
 },
 unsubscribeBars: function(uid) {
  var subIndex = _subs.findIndex(e =&amp;gt; e.uid === uid)
  if (subIndex === -1) {
   //console.log(&quot;No subscription found for &quot;,uid)
   return
  }
  var sub = _subs[subIndex]
  socket.emit('SubRemove', {subs: [sub.channelString]})
  _subs.splice(subIndex, 1)
 }
}

socket.on('connect', () =&amp;gt; {
 console.log('===Socket connected')
})
socket.on('disconnect', (e) =&amp;gt; {
 console.log('===Socket disconnected:', e)
})
socket.on('error', err =&amp;gt; {
 console.log('====socket error', err)
})
socket.on('m', (e) =&amp;gt; {
 // here we get all events the CryptoCompare connection has subscribed to
 // we need to send this new data to our subscribed charts
 const _data= e.split('~')
 if (_data[0] === &quot;3&quot;) {
  // console.log('Websocket Snapshot load event complete')
  return
 }
 const data = {
  sub_type: parseInt(_data[0],10),
  exchange: _data[1],
  to_sym: _data[2],
  from_sym: _data[3],
  trade_id: _data[5],
  ts: parseInt(_data[6],10),
  volume: parseFloat(_data[7]),
  price: parseFloat(_data[8])
 }

 const channelString = `${data.sub_type}~${data.exchange}~${data.to_sym}~${data.from_sym}`

 const sub = _subs.find(e =&amp;gt; e.channelString === channelString)

 if (sub) {
  // disregard the initial catchup snapshot of trades for already closed candles
  if (data.ts &amp;lt; sub.lastBar.time / 1000) {
    return
   }

var _lastBar = updateBar(data, sub)

// send the most recent bar back to TV's realtimeUpdate callback
  sub.listener(_lastBar)
  // update our own record of lastBar
  sub.lastBar = _lastBar
 }
})

// Take a single trade, and subscription record, return updated bar
function updateBar(data, sub) {
 var lastBar = sub.lastBar
 let resolution = sub.resolution
 if (resolution.includes('D')) {
  // 1 day in minutes === 1440
  resolution = 1440
 } else if (resolution.includes('W')) {
  // 1 week in minutes === 10080
  resolution = 10080
 }
var coeff = resolution * 60
 // console.log({coeff})
 var rounded = Math.floor(data.ts / coeff) * coeff
 var lastBarSec = lastBar.time / 1000
 var _lastBar

if (rounded &amp;gt; lastBarSec) {
  // create a new candle, use last close as open **PERSONAL CHOICE**
  _lastBar = {
   time: rounded * 1000,
   open: lastBar.close,
   high: lastBar.close,
   low: lastBar.close,
   close: data.price,
   volume: data.volume
  }

 } else {
  // update lastBar candle!
  if (data.price &amp;lt; lastBar.low) {
   lastBar.low = data.price
  } else if (data.price &amp;gt; lastBar.high) {
   lastBar.high = data.price
  }

  lastBar.volume += data.volume
  lastBar.close = data.price
  _lastBar = lastBar
 }
 return _lastBar
}

// takes symbolInfo object as input and creates the subscription string to send to CryptoCompare
function createChannelString(symbolInfo) {
  var channel = symbolInfo.name.split(/[:/]/)
  const exchange = channel[0] === 'GDAX' ? 'Coinbase' : channel[0]
  const to = channel[2]
  const from = channel[1]
 // subscribe to the CryptoCompare trade channel for the pair and exchange
  return `0~${exchange}~${from}~${to}`
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;src/components/TVChartContainer/api/index.js&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import historyProvider from './historyProvider'
import stream from './stream'

const supportedResolutions = [&quot;1&quot;, &quot;3&quot;, &quot;5&quot;, &quot;15&quot;, &quot;30&quot;, &quot;60&quot;, &quot;120&quot;, &quot;240&quot;, &quot;D&quot;]

const config = {
    supported_resolutions: supportedResolutions
}; 

export default {
    onReady: cb =&amp;gt; {
    console.log('=====onReady running')    
        setTimeout(() =&amp;gt; cb(config), 0)

    },
    searchSymbols: (userInput, exchange, symbolType, onResultReadyCallback) =&amp;gt; {
        console.log('====Search Symbols running')
    },
    resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) =&amp;gt; {
        // expects a symbolInfo object in response
        console.log('======resolveSymbol running')
        // console.log('resolveSymbol:',{symbolName})
        var split_data = symbolName.split(/[:/]/)
        // console.log({split_data})
        var symbol_stub = {
            name: symbolName,
            description: '',
            type: 'crypto',
            session: '24x7',
            timezone: 'Etc/UTC',
            ticker: symbolName,
            exchange: split_data[0],
            minmov: 1,
            pricescale: 100000000,
            has_intraday: true,
            intraday_multipliers: ['1', '60'],
            supported_resolution:  supportedResolutions,
            volume_precision: 8,
            data_status: 'streaming',
        }

        if (split_data[2].match(/USD|EUR|JPY|AUD|GBP|KRW|CNY/)) {
            symbol_stub.pricescale = 100
        }
        setTimeout(function() {
            onSymbolResolvedCallback(symbol_stub)
            console.log('Resolving that symbol....', symbol_stub)
        }, 0)


        // onResolveErrorCallback('Not feeling it today')

    },
    getBars: function(symbolInfo, resolution, from, to, onHistoryCallback, onErrorCallback, firstDataRequest) {
        console.log('=====getBars running')
        // console.log('function args',arguments)
        // console.log(`Requesting bars between ${new Date(from * 1000).toISOString()} and ${new Date(to * 1000).toISOString()}`)
        historyProvider.getBars(symbolInfo, resolution, from, to, firstDataRequest)
        .then(bars =&amp;gt; {
            if (bars.length) {
                onHistoryCallback(bars, {noData: false})
            } else {
                onHistoryCallback(bars, {noData: true})
            }
        }).catch(err =&amp;gt; {
            console.log({err})
            onErrorCallback(err)
        })

    },
    subscribeBars: (symbolInfo, resolution, onRealtimeCallback, subscribeUID, onResetCacheNeededCallback) =&amp;gt; {
        console.log('=====subscribeBars runnning')
        stream.subscribeBars(symbolInfo, resolution, onRealtimeCallback, subscribeUID, onResetCacheNeededCallback)
    },
    unsubscribeBars: subscriberUID =&amp;gt; {
        console.log('=====unsubscribeBars running')

        stream.unsubscribeBars(subscriberUID)
    },
    calculateHistoryDepth: (resolution, resolutionBack, intervalBack) =&amp;gt; {
        //optional
        console.log('=====calculateHistoryDepth running')
        // while optional, this makes sure we request 24 hours of minute data at a time
        // CryptoCompare's minute data endpoint will throw an error if we request data beyond 7 days in the past, and return no data
        return resolution &amp;lt; 60 ? {resolutionBack: 'D', intervalBack: '1'} : undefined
    },
    getMarks: (symbolInfo, startDate, endDate, onDataCallback, resolution) =&amp;gt; {
        //optional
        console.log('=====getMarks running')
    },
    getTimeScaleMarks: (symbolInfo, startDate, endDate, onDataCallback, resolution) =&amp;gt; {
        //optional
        console.log('=====getTimeScaleMarks running')
    },
    getServerTime: cb =&amp;gt; {
        console.log('=====getServerTime running')
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;실행하기&lt;/h4&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;npm start&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;데이터는 src/components/TVChartContainer/api/historyProvider.js의&lt;/p&gt;
&lt;pre class=&quot;rust&quot;&gt;&lt;code&gt;const api_root = 'https://min-api.cryptocompare.com'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;에서 과거 데이터를 불러오는 구조입니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;최신 데이터는 src/components/TVChartContainer/api/stream.js&lt;/p&gt;
&lt;pre class=&quot;scala&quot;&gt;&lt;code&gt;var socket_url = 'wss://streamer.cryptocompare.com'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;에서 소켓으로 받아 적용하는 구조입니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[예제 결과]&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baOCFk/btqwD3Tirdd/cGhDAgrs1vT3b6kyWn3pp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baOCFk/btqwD3Tirdd/cGhDAgrs1vT3b6kyWn3pp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baOCFk/btqwD3Tirdd/cGhDAgrs1vT3b6kyWn3pp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaOCFk%2FbtqwD3Tirdd%2FcGhDAgrs1vT3b6kyWn3pp1%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;※ 1 편은 트레이딩 뷰 차트 라이브러리 신청과 라이브러리를 이용한 샘플 예제를 실행시키는 것에 초점을 맞췄습니다. 이 예제를 통해 응용이 원활하신 분들은 과거 데이터 및 소켓 데이터를 커스텀하여 사용이 가능할 것으로 생각됩니다.&lt;/h3&gt;
&lt;h3&gt;※ 2 편에서는 심볼변경과 과거 데이터 및 소켓데이터 연동을 올리도록 하겠습니다.&lt;/h3&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;
&lt;p&gt;이 글을 작성하기 위해 &lt;a href=&quot;https://medium.com/@jonchurch/tradingview-charting-library-js-api-setup-for-crypto-part-1-57e37f5b3d5a&quot;&gt;Jon Church님의 글&lt;/a&gt; 을 참고하였습니다.&lt;/p&gt;</description>
      <category>개발관련/차트</category>
      <category>exchangeChart</category>
      <category>javascript</category>
      <category>js</category>
      <category>React</category>
      <category>reactChart</category>
      <category>tradingview</category>
      <category>리액트트레이딩뷰</category>
      <category>트레이딩뷰</category>
      <category>트레이딩뷰 예제</category>
      <category>트레이딩뷰신청</category>
      <author>하루정도</author>
      <guid isPermaLink="true">https://ookm1020.tistory.com/2</guid>
      <comments>https://ookm1020.tistory.com/2#entry2comment</comments>
      <pubDate>Wed, 10 Jul 2019 12:05:02 +0900</pubDate>
    </item>
  </channel>
</rss>