<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Let there be Light</title>
    <link>https://670811.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 02:41:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>S_N_Y</managingEditor>
    <image>
      <title>Let there be Light</title>
      <url>https://tistory1.daumcdn.net/tistory/6796241/attach/a2b90fa94e5f4dc3b47939330328cb05</url>
      <link>https://670811.tistory.com</link>
    </image>
    <item>
      <title>[reciping 3차] 서비스에 맞춰 배포 전략을 직접 비교해봐요! - 장/단점 정리</title>
      <link>https://670811.tistory.com/122</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/2690661ce62880c9ae52cd0a90c13cdd&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.notion.so/2690661ce62880c9ae52cd0a90c13cdd&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762278636973&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;서비스에 맞춰 배포 전략을 직접 비교해봐요! - 장/단점 정리 | Notion&quot; data-og-description=&quot;1. 각 배포 전략별 특징  &quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/2690661ce62880c9ae52cd0a90c13cdd&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/2690661ce62880c9ae52cd0a90c13cdd&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cliKgf/hyZMB6Q4K7/pBgCgbDDWaWOY7IMdqOAi1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/GULdR/hyZMAND6MF/AG48zwHMSBvGOKJZxUgap0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.notion.so/2690661ce62880c9ae52cd0a90c13cdd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/2690661ce62880c9ae52cd0a90c13cdd&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cliKgf/hyZMB6Q4K7/pBgCgbDDWaWOY7IMdqOAi1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/GULdR/hyZMAND6MF/AG48zwHMSBvGOKJZxUgap0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;서비스에 맞춰 배포 전략을 직접 비교해봐요! - 장/단점 정리 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 각 배포 전략별 특징  &lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;MSA로 분리된 서버들의 각 특징에 맞게 배포 전략을 수립하는 겸, reciping의 User-service를 기준으로 배포 전략(카나리, 블루그린, 롤링)을 각각 모니터링툴(prometheus-grafana) K6를 이용하여 직접 비교하며 장단점을 비교해보겠습니다.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.&amp;nbsp; 각 배포 전략별 특징 &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 240px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;카나리(Argo Rollouts)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;블루-그린(Argo Rollouts)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;롤링 업데이트(K8s Deployment)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;리스크/블라스트 반경&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;매우 낮음(점진)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;낮음(즉시 전환)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;중간(점진이지만 전체&amp;nbsp;대상)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;롤백 속도&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;빠름(스텝 롤백/중단)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;매우&amp;nbsp;빠름(트래픽 스위치)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;느린 편(이전 ReplicaSet 재기동)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;지연/끊김&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;거의 없음(가중치 전환)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;거의 없음(스위치 순간만 주의)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;거의 없음(준비성 검증 필요)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;전체 소요 시간&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;가장 김(스텝+검증)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;짧음(빌드&amp;nbsp;2셋+스위치)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;중간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;모니터링/자동화&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;높음(분석 템플릿 권장)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;중간(스위치&amp;nbsp;전 검증)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;낮음(기본 헬스체크)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;인프라 비용&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;중간(일시&amp;nbsp;120~150%)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;높음(항상 200%)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;낮음(110~130%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;구현 복잡도&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;중간~높음&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;중간&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;데이터&amp;nbsp;마이그레이션&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;확장-수축에 최적&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;호환 전환에 유리&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;주의&amp;nbsp;필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;캐시/세션 영향&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;단계적 검증 용이&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;교체 시 캐시 워밍 필요&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;점진 교체로 비교적 안전&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;트래픽 제어&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;정밀(가중치/헤더/쿠키)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;on/off 스위치&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;없음(컨트롤 불가)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;관측&amp;nbsp;성숙도 요구&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;중간&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. 사전 시나리오 및 사용할 표 템플릿  ️&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-1) 사전 시나리오 -요약본&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기준선 10~15분 수집 : RPS, 오류율, p95, CPU/메모리, 재시작&lt;/li&gt;
&lt;li&gt;부하 : k6&lt;/li&gt;
&lt;li&gt;대시보드 :&amp;nbsp;그라파나 유저팀 전용 대시보드인 user-service-overview&amp;nbsp;활용&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;[ 롤링 업데이트]&lt;/b&gt;&lt;/span&gt; : (리소스 2배 기준) 롤백은&amp;nbsp;이전&amp;nbsp;ReplicaSet&amp;nbsp;재기동으로&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;[ 블루 그린 ]&lt;/b&gt;&lt;/span&gt; : (리소스 2배 기준) 프리뷰 예열/스모크 후 스위치&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;[ 카나리 ]&lt;/b&gt;&lt;/span&gt; : 유의  &amp;rarr; SLO 기준이라 표 상으로는 시간이 가장 길 수 있음. &amp;rarr; 현재는 Pod 비율 기반 분할&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-1) 사전 시나리오 - 상세본&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;0️⃣ [ 실험 설계 ]&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;카나리&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 스텝을 실험형으로&amp;nbsp;조정:&amp;nbsp;30%&amp;rarr;60%&amp;rarr;100%, 각 단계&amp;nbsp;3~5분&amp;nbsp;관찰.&lt;/li&gt;
&lt;li&gt;실패&amp;nbsp;유도&amp;nbsp;한&amp;nbsp;번&amp;nbsp;포함(의도적&amp;nbsp;readiness 실패/느린 응답 등)&amp;nbsp;&amp;rarr; Abort&amp;nbsp;후&amp;nbsp;복구시간 실측.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;승격 및 중단 커멘트 명령어들은 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762278900942&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl&amp;nbsp;argo&amp;nbsp;rollouts&amp;nbsp;get&amp;nbsp;rollout&amp;nbsp;reciping-user-service&amp;nbsp;-n&amp;nbsp;reciping&amp;nbsp;|&amp;nbsp;cat
kubectl&amp;nbsp;argo&amp;nbsp;rollouts&amp;nbsp;promote&amp;nbsp;reciping-user-service&amp;nbsp;-n&amp;nbsp;reciping
kubectl&amp;nbsp;argo&amp;nbsp;rollouts&amp;nbsp;abort&amp;nbsp;reciping-user-service&amp;nbsp;-n&amp;nbsp;reciping&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;롤백 시간 계측 하는 법 : Abort 시각(t0)과 오류율/지연이 기준선으로 회복된 시각(t1)을 기록&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) &lt;span style=&quot;background-color: #99cefa;&quot;&gt;블루그린&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;rollout.yaml의&amp;nbsp;strategy: blueGreen&amp;nbsp;블록 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시) activeService,&amp;nbsp;previewService,&amp;nbsp;autoPromotionEnabled/Seconds,&amp;nbsp;scaleDownDelaySeconds.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실험&amp;nbsp;절차: 그린(프리뷰) 레플리카&amp;nbsp;예열&amp;nbsp;&amp;rarr; 내부&amp;nbsp;스모크(소량&amp;nbsp;부하)&amp;nbsp;&amp;rarr; 스위치&amp;nbsp;&amp;rarr; ALB/연결&amp;nbsp;드롭/5xx 유무&amp;nbsp;확인.&lt;/li&gt;
&lt;li&gt;롤백 시간&amp;nbsp;계측 하는 법 : 스위치&amp;nbsp;되돌리기(수&amp;nbsp;초~수십&amp;nbsp;초). t0(스위치)~t1(오류율&amp;nbsp;0% 근접&amp;middot;HealthyHostCount 안정) 기록&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;롤링업데이트&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블루그린과 마찬가지로rollout.yaml에&amp;nbsp;strategy.rollingUpdate 블록 선택&lt;/li&gt;
&lt;li&gt;실험 포인트: 레디니스 실패율,&amp;nbsp;unavailableReplicas, 배포 총소요,&amp;nbsp;rollout undo&amp;nbsp;롤백 시간.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1️⃣ [ 계측 쿼리 ]&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기존에 PromQL을 적용한 커스텀 대시보드와&amp;nbsp;동일 라벨로&amp;nbsp;정리할 것이고, 적용한 쿼리는 아래와 같습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762278962557&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/manifests/monitoring/dashboards/user-service-overview.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Gb5u6/hyZM2XhyZg/phBU2V4tmpmSD37bmhEXw1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/jzKtJ/hyZMtAYkvI/1Sovwv04QRWF5YAw9mkqmk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Gb5u6/hyZM2XhyZg/phBU2V4tmpmSD37bmhEXw1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/jzKtJ/hyZMtAYkvI/1Sovwv04QRWF5YAw9mkqmk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/manifests/monitoring/dashboards/user-service-overview.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;(PromQL 기준)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오류율(%) :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762278984862&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;100 * ( ( sum by (reciping_service) (rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,status=~\&quot;5..\&quot;,uri!~\&quot;/actuator/.*\&quot;,uri=~\&quot;$endpoint\&quot;}[5m])) or on (reciping_service) (0 * sum by (reciping_service) (rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri!~\&quot;/actuator/.*\&quot;,uri=~\&quot;$endpoint\&quot;}[5m])) ) ) / clamp_min( sum by (reciping_service) (rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri!~\&quot;/actuator/.*\&quot;,uri=~\&quot;$endpoint\&quot;}[5m])), 1) )&quot;, &quot;legendFormat&quot;: &quot;{{reciping_service}}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;p95 :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762279042873&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;histogram_quantile(0.95, sum by (le) ( rate(http_server_requests_seconds_bucket{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri!~\&quot;/actuator/.*\&quot;,uri=~\&quot;$endpoint\&quot;}[5m]) ))&quot;, &quot;legendFormat&quot;: &quot;P95&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RPS :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762279056854&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;sum by (reciping_service) (rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri!~\&quot;/actuator/.*\&quot;,uri=~\&quot;$endpoint\&quot;}[5m]))&quot;, &quot;legendFormat&quot;: &quot;{{reciping_service}}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너&amp;nbsp;재시작(5m) :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762279070371&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;sum by (pod) (increase(kube_pod_container_status_restarts_total{namespace=\&quot;reciping\&quot;}[5m]))&quot;, &quot;legendFormat&quot;: &quot;{{pod}}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2️⃣ [ 실행&amp;middot;기록&amp;nbsp;체크리스트 ]&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[ ] 베이스라인 : 배포 10~15분&amp;nbsp;전 기준 RPS/p95/p99/오류율/CPU/메모리 캡쳐&lt;/li&gt;
&lt;li&gt;[ ] 배포 이벤트&amp;nbsp;타임스탬프 : 시작, 단계 승격/스위치, 종료, 롤백&amp;nbsp;시작/종료&amp;nbsp;각각&amp;nbsp;기록&lt;/li&gt;
&lt;li&gt;[ ] 스파이크&amp;nbsp;캡처 : 각 이벤트&amp;plusmn;2분&amp;nbsp;윈도우의&amp;nbsp;p95 피크, 오류율 피크&amp;nbsp;수치&amp;nbsp;기록&lt;/li&gt;
&lt;li&gt;[ ] 비용/자원 : 동시&amp;nbsp;가동&amp;nbsp;Pod-분(레플리카&amp;times;시간) 추정치 기록&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3️⃣ [ 사용할 최종 표 템플릿 ]&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트래픽 차단&amp;nbsp;기준(traffic cutoff) / SLO 회복&amp;nbsp;기준(오류율/지연이 베이스라인으로 돌아올 때)으로 분리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고) Prometheus 5m rate/quantile 윈도우와 컨트롤러 상태(Progressing&amp;rarr;Healthy)를 기준으로 SLO 측정&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;전략&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;배포&amp;nbsp;총소요&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;롤백 소요(트래픽 차단/SLO 회복)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;RPS 피크&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;RPS&amp;nbsp;평균&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;p95 피크(s)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;p95 평균(s)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;오류율 피크(%)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;오류율 평균(%)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;카나리&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;블루그린&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;롤링업데이트&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 부하(k6) 세팅하기  &lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;부하를 주기 위해서 k6를 세팅해보겠습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 reciping-k8s-resource/test/k6-user-service.js 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/test/k6-user-service.js&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/test/k6-user-service.js&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762279184684&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/test/k6-user-service.js at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/test/k6-user-service.js&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/test/k6-user-service.js&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bDIz8X/hyZMN1I8vb/NkxDYT4kggNXFE1n7ChKq0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/XHHyu/hyZMPebluE/FZcJY2BPUV8BThnYyfdGQ0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/test/k6-user-service.js&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/test/k6-user-service.js&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bDIz8X/hyZMN1I8vb/NkxDYT4kggNXFE1n7ChKq0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/XHHyu/hyZMPebluE/FZcJY2BPUV8BThnYyfdGQ0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/test/k6-user-service.js at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1762279194767&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  scenarios: {
    steady: {
      executor: 'constant-arrival-rate',
      rate: __ENV.RATE ? parseInt(__ENV.RATE) : 300, // req/s
      timeUnit: '1s',
      duration: __ENV.DURATION || '15m',
      preAllocatedVUs: __ENV.VUS ? parseInt(__ENV.VUS) : 100,
      maxVUs: __ENV.MAX_VUS ? parseInt(__ENV.MAX_VUS) : 200,
    },
  },
  thresholds: {
    http_req_failed: ['rate&amp;lt;0.01'],
    http_req_duration: ['p(95)&amp;lt;300'], // p95 &amp;lt; 300ms 기본 SLO
  },
};

const BASE = __ENV.BASE || 'http://reciping-user-service.reciping:8080';
const paths = [
  '/api/v1/users/signup',
  '/api/v1/users/123/created-at',
  '/api/v1/users/me',
  '/api/v1/mypage',
  '/api/v1/mypage/bookmarks',
  '/api/v1/auth/refresh',
  '/login',
];

export default function () {
  const p = paths[Math.floor(Math.random() * paths.length)];
  const res = http.get(`${BASE}${p}`, { tags: { endpoint: p } });
  check(res, { 'status&amp;lt;400': (r) =&amp;gt; r.status &amp;lt; 400 });
  sleep(0.05);
}&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;k6 설치하기 (윈도우 bash 기준)&lt;/p&gt;
&lt;pre id=&quot;code_1762279210995&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;choco install k6 -y

# choco 설치되어 있어야 합니다.(관리자 권한으로 실행)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762279221065&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 스크립트 적용/갱신
kubectl -n reciping create configmap k6-user-script --from-file=test/k6-user-service.js --dry-run=client -o yaml | kubectl apply -f -

# 기존 잡 제거 후 실행
kubectl -n reciping delete job k6-user-baseline --ignore-not-found
cat &amp;lt;&amp;lt;'YAML' | kubectl apply -f -
apiVersion: batch/v1
kind: Job
metadata:
  name: k6-user-baseline
  namespace: reciping
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: k6
          image: grafana/k6:0.46.0
          env:
            - name: RATE
              value: &quot;200&quot;        # 안정 확인 후 300으로 재실행
            - name: DURATION
              value: &quot;15m&quot;
            - name: VUS
              value: &quot;100&quot;
            - name: MAX_VUS
              value: &quot;200&quot;
          args: [ &quot;run&quot;, &quot;-e&quot;, &quot;BASE=http://reciping-user-service.reciping:8080&quot;, &quot;/scripts/k6-user-service.js&quot; ]
          volumeMounts: [ { name: script, mountPath: /scripts } ]
      volumes:
        - name: script
          configMap:
            name: k6-user-script
            items: [ { key: k6-user-service.js, path: k6-user-service.js } ]
YAML

kubectl -n reciping logs -f job/k6-user-baseline&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762279229646&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;home@DESKTOP-0L33BAC MINGW64 ~/Desktop/groom/dev_sini/reciping-k8s-resources (dev)
$ kubectl -n reciping get job k6-user-baseline -o jsonpath='{.status.startTime}{&quot;\n&quot;}'
2025-08-21T17:10:01Z

# 이렇게 시간을 확인하고, 그라파나 대시보드에서 t0-1m, To: t1+1m로 설정 후 Apply&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 대시보드에서 나온 데이터 값 쉽게 확인하는 방법  &lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (20).png&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;958&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/veyKA/dJMcae64bPU/KA1uVUbF2XKL7FtTA9JDj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/veyKA/dJMcae64bPU/KA1uVUbF2XKL7FtTA9JDj1/img.png&quot; data-alt=&quot;t0-1m, To: t1+1m로 설정 후 Apply time range 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/veyKA/dJMcae64bPU/KA1uVUbF2XKL7FtTA9JDj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FveyKA%2FdJMcae64bPU%2FKA1uVUbF2XKL7FtTA9JDj1%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;1915&quot; height=&quot;958&quot; data-filename=&quot;image (20).png&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;958&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;t0-1m, To: t1+1m로 설정 후 Apply time range 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (21).png&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L8EQi/dJMcad79Ttx/mk3sM4ByAKlLvWOglsEpg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L8EQi/dJMcad79Ttx/mk3sM4ByAKlLvWOglsEpg0/img.png&quot; data-alt=&quot;각 표의 &amp;amp;hellip; 클릭 후 Edit 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L8EQi/dJMcad79Ttx/mk3sM4ByAKlLvWOglsEpg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL8EQi%2FdJMcad79Ttx%2Fmk3sM4ByAKlLvWOglsEpg0%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;1912&quot; height=&quot;853&quot; data-filename=&quot;image (21).png&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;각 표의 &amp;hellip; 클릭 후 Edit 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (22).png&quot; data-origin-width=&quot;1617&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcTiPR/dJMcaboX555/H420B1p7gbW6kilkuqjPK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcTiPR/dJMcaboX555/H420B1p7gbW6kilkuqjPK1/img.png&quot; data-alt=&quot;우측에서 Legend - Values에서 이런 식으로 세팅 (실제로는 Max와 Mean으로만 측정)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcTiPR/dJMcaboX555/H420B1p7gbW6kilkuqjPK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcTiPR%2FdJMcaboX555%2FH420B1p7gbW6kilkuqjPK1%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;1617&quot; height=&quot;697&quot; data-filename=&quot;image (22).png&quot; data-origin-width=&quot;1617&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;우측에서 Legend - Values에서 이런 식으로 세팅 (실제로는 Max와 Mean으로만 측정)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (23).png&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JD4Vz/dJMcac2tXSp/7i5823gvz6M6C39mDeCJc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JD4Vz/dJMcac2tXSp/7i5823gvz6M6C39mDeCJc0/img.png&quot; data-alt=&quot;아래와 같이 세팅되는 것을 확인할 수 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JD4Vz/dJMcac2tXSp/7i5823gvz6M6C39mDeCJc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJD4Vz%2FdJMcac2tXSp%2F7i5823gvz6M6C39mDeCJc0%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;1520&quot; height=&quot;760&quot; data-filename=&quot;image (23).png&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;760&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;h2 data-ke-size=&quot;size26&quot;&gt;  배포 전략 별 비교 원본 데이터 캡쳐본&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;[ 카나리 ]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기존 배포 전략이 카나리로 시작했기 때문에 그대로 실행&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (24).png&quot; data-origin-width=&quot;1523&quot; data-origin-height=&quot;755&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCmcIH/dJMcaiBC2E1/QVGeNEkkhJu3qhlKctiQCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCmcIH/dJMcaiBC2E1/QVGeNEkkhJu3qhlKctiQCk/img.png&quot; data-alt=&quot;1. 드레인 테스트 - 카나리 60%에서 실행한 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCmcIH/dJMcaiBC2E1/QVGeNEkkhJu3qhlKctiQCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCmcIH%2FdJMcaiBC2E1%2FQVGeNEkkhJu3qhlKctiQCk%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;1523&quot; height=&quot;755&quot; data-filename=&quot;image (24).png&quot; data-origin-width=&quot;1523&quot; data-origin-height=&quot;755&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1. 드레인 테스트 - 카나리 60%에서 실행한 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (25).png&quot; data-origin-width=&quot;1511&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvJq2M/dJMcadAjULE/wzoXLsPUVCiEcQYx4e6tnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvJq2M/dJMcadAjULE/wzoXLsPUVCiEcQYx4e6tnk/img.png&quot; data-alt=&quot;2. 크래시 테스트 - 카나리 60%에서 실행한 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvJq2M/dJMcadAjULE/wzoXLsPUVCiEcQYx4e6tnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvJq2M%2FdJMcadAjULE%2FwzoXLsPUVCiEcQYx4e6tnk%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;1511&quot; height=&quot;752&quot; data-filename=&quot;image (25).png&quot; data-origin-width=&quot;1511&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2. 크래시 테스트 - 카나리 60%에서 실행한 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (26).png&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpyn4x/dJMcacBpCvL/tFPBP5dsVCcUykJkx4i8jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpyn4x/dJMcacBpCvL/tFPBP5dsVCcUykJkx4i8jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpyn4x/dJMcacBpCvL/tFPBP5dsVCcUykJkx4i8jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcpyn4x%2FdJMcacBpCvL%2FtFPBP5dsVCcUykJkx4i8jK%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;747&quot; height=&quot;294&quot; data-filename=&quot;image (26).png&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (27).png&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;966&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nye0O/dJMcac2tXVI/ZPQju4Br1wyBcplYSbKzm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nye0O/dJMcac2tXVI/ZPQju4Br1wyBcplYSbKzm0/img.png&quot; data-alt=&quot;3. 롤백&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nye0O/dJMcac2tXVI/ZPQju4Br1wyBcplYSbKzm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnye0O%2FdJMcac2tXVI%2FZPQju4Br1wyBcplYSbKzm0%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;1918&quot; height=&quot;966&quot; data-filename=&quot;image (27).png&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;966&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3. 롤백&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762279408990&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;home@DESKTOP-0L33BAC MINGW64 ~/Desktop/groom/dev_sini/reciping-k8s-resources (dev)
$ TS=$(date -u +%Y-%m-%dT%H:%M:%SZ); echo patch_restartedAt=$TS; kubectl -n reciping patch rollout user-service-app-reciping-user-service --type=merge -p '{&quot;spec&quot;:{&quot;template&quot;:{&quot;metadata&quot;:{&quot;annotations&quot;:{&quot;kubectl.kubernetes.io/restartedAt&quot;:&quot;'$TS'&quot;}}}}}' | cat; echo &quot;waiting for Healthy...&quot;; for i in {1..120}; do PHASE=$(kubectl -n reciping get rollout user-service-app-reciping-user-service -o jsonpath='{.status.phase}' 2&amp;gt;/dev/null); echo phase=${PHASE:-}; if [ &quot;$PHASE&quot; = &quot;Healthy&quot; ]; then echo t_abort1_KST=$(TZ=Asia/Seoul date '+%Y-%m-%d %H:%M:%S KST'); break; fi; sleep 2; done; kubectl -n reciping get rollout user-service-app-reciping-user-service -o jsonpath='{.status.stableRS} {&quot;\n&quot;}'
patch_restartedAt=2025-08-21T18:49:02Z
rollout.argoproj.io/user-service-app-reciping-user-service patched
waiting for Healthy...
phase=Progressing
phase=Progressing
phase=Progressing
phase=Progressing
phase=Progressing
phase=Progressing
phase=Progressing
phase=Progressing
phase=Progressing
.
.
.
phase=Progressing
phase=Progressing
phase=Progressing
phase=Paused
phase=Paused
phase=Paused
7d4d84ff5c 

home@DESKTOP-0L33BAC MINGW64 ~/Desktop/groom/dev_sini/reciping-k8s-resources (dev)
$ kubectl -n reciping get rollout user-service-app-reciping-user-service \
  -o jsonpath='{.status.abortedAt}{&quot;\n&quot;}{.status.conditions[?(@.type==&quot;Available&quot;)].lastTransitionTime}{&quot;\n&quot;}'

2025-08-21T18:47:23Z&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;image (28).png&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kPo9S/dJMcafET6Uu/L6t6U6KkeoPgooTq9stOh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kPo9S/dJMcafET6Uu/L6t6U6KkeoPgooTq9stOh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kPo9S/dJMcafET6Uu/L6t6U6KkeoPgooTq9stOh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkPo9S%2FdJMcafET6Uu%2FL6t6U6KkeoPgooTq9stOh1%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;511&quot; height=&quot;76&quot; data-filename=&quot;image (28).png&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;[ 블루그린 ]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 블루그린으로 스위치&lt;/p&gt;
&lt;pre id=&quot;code_1762279447729&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#&amp;nbsp;차트에&amp;nbsp;반영된&amp;nbsp;값:&amp;nbsp;strategy.type=blueGreen&amp;nbsp;로&amp;nbsp;바꾸고&amp;nbsp;배포
yq&amp;nbsp;-i&amp;nbsp;'.strategy.type&amp;nbsp;=&amp;nbsp;&quot;blueGreen&quot;'&amp;nbsp;charts/reciping-user-service/values.yaml
#&amp;nbsp;변경&amp;nbsp;확인 - 굳이 안 해도 됨
git&amp;nbsp;diff&amp;nbsp;--&amp;nbsp;charts/reciping-user-service/values.yaml&amp;nbsp;|&amp;nbsp;cat&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) ArgoCD&amp;nbsp;동기화&lt;/p&gt;
&lt;pre id=&quot;code_1762279468053&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;argocd&amp;nbsp;app&amp;nbsp;sync&amp;nbsp;user-service-app&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 프리뷰 예열 확인&lt;/p&gt;
&lt;pre id=&quot;code_1762279484321&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl&amp;nbsp;-n&amp;nbsp;reciping&amp;nbsp;get&amp;nbsp;svc&amp;nbsp;reciping-user-service&amp;nbsp;reciping-user-service-preview
kubectl&amp;nbsp;-n&amp;nbsp;reciping&amp;nbsp;get&amp;nbsp;rs,po&amp;nbsp;-l&amp;nbsp;app=reciping-user-service&amp;nbsp;-o&amp;nbsp;wide&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 스위치와 롤백 측정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스위치 시작 시각(t_sw0 KST) 기록 후, 프리뷰&amp;rarr;액티브&amp;nbsp;승격&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762279510113&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;TZ=Asia/Seoul&amp;nbsp;date&amp;nbsp;'+t_sw0(KST)=%Y-%m-%d&amp;nbsp;%H:%M:%S&amp;nbsp;KST'&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762279519937&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#&amp;nbsp;블루그린&amp;nbsp;승격(자동승격&amp;nbsp;false라&amp;nbsp;수동&amp;nbsp;필요)
#&amp;nbsp;플러그인&amp;nbsp;없으면&amp;nbsp;서비스&amp;nbsp;셀렉터&amp;nbsp;전환으로도&amp;nbsp;가능하지만,&amp;nbsp;여기서는&amp;nbsp;Argo&amp;nbsp;Rollouts&amp;nbsp;승격
# argo&amp;nbsp;rollouts 플로그인 설치되어있을 경우, 아래와 같이 쉽게 승격 가능
kubectl&amp;nbsp;argo&amp;nbsp;rollouts&amp;nbsp;promote&amp;nbsp;user-service-app-reciping-user-service&amp;nbsp;-n&amp;nbsp;reciping&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스위치 완료 :&amp;nbsp;svc/reciping-user-service의 Grafana에서 오류율/지연 회복 확인&lt;/li&gt;
&lt;li&gt;롤백 테스트(t_bg_rb0): 바로 반대로 되돌림&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762279533292&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl&amp;nbsp;argo&amp;nbsp;rollouts&amp;nbsp;promote&amp;nbsp;--to-revision&amp;nbsp;&amp;lt;stable-revision&amp;gt;&amp;nbsp;user-service-app-reciping-user-service&amp;nbsp;-n&amp;nbsp;reciping&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;image (29).png&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf9m7i/dJMcahpbzYf/BF2kM4CC9Dz2e74brA0fz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf9m7i/dJMcahpbzYf/BF2kM4CC9Dz2e74brA0fz1/img.png&quot; data-alt=&quot;블루그린 롤백 캡쳐 데이터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf9m7i/dJMcahpbzYf/BF2kM4CC9Dz2e74brA0fz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf9m7i%2FdJMcahpbzYf%2FBF2kM4CC9Dz2e74brA0fz1%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;1512&quot; height=&quot;758&quot; data-filename=&quot;image (29).png&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;758&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;이런 식으로 롤링 업데이트까지 완료&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;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;전략&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;배포&amp;nbsp;총소요&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;롤백 소요(트래픽/SLO 회복)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;RPS 피크&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;RPS&amp;nbsp;평균&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;p95 피크(s)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;p95 평균(s)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;오류율 피크(%)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;오류율 평균(%)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;비고&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;카나리&lt;/td&gt;
&lt;td&gt;10&amp;ndash;20m&lt;/td&gt;
&lt;td&gt;00:05 / 14:30&lt;/td&gt;
&lt;td&gt;198&lt;/td&gt;
&lt;td&gt;195&lt;/td&gt;
&lt;td&gt;0.0364&lt;/td&gt;
&lt;td&gt;0.00943&lt;/td&gt;
&lt;td&gt;17.2&lt;/td&gt;
&lt;td&gt;15.2&lt;/td&gt;
&lt;td&gt;60% 단계 Abort,&amp;nbsp;5m&amp;nbsp;윈도우&amp;middot;컨트롤러&amp;nbsp;상태&amp;nbsp;반영&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;블루그린&lt;/td&gt;
&lt;td&gt;3&amp;ndash;5s(스위치)&amp;nbsp;/ 예열&amp;nbsp;포함&amp;nbsp;1&amp;ndash;3m&lt;/td&gt;
&lt;td&gt;00:03 / 00:45&lt;/td&gt;
&lt;td&gt;195&lt;/td&gt;
&lt;td&gt;190&lt;/td&gt;
&lt;td&gt;0.006&lt;/td&gt;
&lt;td&gt;0.003&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;프리뷰&amp;nbsp;2 예열, 드레인&amp;nbsp;OK 가정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;롤링업데이트&lt;/td&gt;
&lt;td&gt;1&amp;ndash;3m&lt;/td&gt;
&lt;td&gt;해당 없음&amp;nbsp;/ 02:00&lt;/td&gt;
&lt;td&gt;183&lt;/td&gt;
&lt;td&gt;171&lt;/td&gt;
&lt;td&gt;0.030&lt;/td&gt;
&lt;td&gt;0.020&lt;/td&gt;
&lt;td&gt;0.8&lt;/td&gt;
&lt;td&gt;0.5&lt;/td&gt;
&lt;td&gt;maxSurge=0, 이미지&amp;nbsp;캐시&amp;nbsp;가정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;☑️ &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;카나리&lt;/b&gt;&lt;/span&gt; : SLO 회복&amp;nbsp;기준(5m 윈도우, 유도 장애,&amp;nbsp;60% 단계)이라 길게 보이긴 하지만, 트래픽&amp;nbsp;cutoff 기준이면&amp;nbsp;수&amp;nbsp;초만 걸림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;☑️ &lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;블루그린&lt;/b&gt;&lt;/span&gt; : 프리뷰&amp;nbsp;2 예열(동일 비용) 가정일 때지만, 잘못&amp;nbsp;스위치하면 전체&amp;nbsp;영향(폭발 반경 100%)이라는&amp;nbsp;위험&amp;nbsp;존재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;☑️ &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;롤링&lt;/b&gt;&lt;/span&gt; : replicas=2, maxSurge=0 가정에서&amp;nbsp;1~3분이나 규모 커지면 더&amp;nbsp;늘어남(소규모(2개)면 1~3m도 가능, 대규모일수록 분&amp;middot;십여 분)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 최종 결론 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;고위험/불확실 변경(런타임, 주요&amp;nbsp;로직, 성능 민감)&amp;nbsp;+ 위험&amp;nbsp;최소화일 경우&lt;/b&gt; : &amp;rarr; &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;카나리&lt;/b&gt;&lt;/span&gt; 기본. 폭발 반경&amp;nbsp;제한, 메트릭&amp;nbsp;게이팅, 단계적 승격/중단.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비호환&amp;nbsp;스키마/런타임 교체/즉시&amp;nbsp;롤백이&amp;nbsp;최우선일 경우&lt;/b&gt; : &amp;rarr; &lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;블루그린&lt;/b&gt;&lt;/span&gt;(예열 확보+스위치, 캐시 워밍/연결 드레인만 주의)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저위험/작은 변경(Stateless, 빠른&amp;nbsp;교체)일 경우&lt;/b&gt; : &amp;rarr; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;롤링업데이트&lt;/b&gt;&lt;/span&gt;(maxUnavailable/surge로 속도&amp;middot;안정성&amp;nbsp;트레이드 오프해야 함)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ reciping-user-service 자체에 대한 배포 전략 결론 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; reciping-user-service는&amp;nbsp;유저 서비스인 만큼 사용자&amp;nbsp;체감&amp;nbsp;지연과&amp;nbsp;실패율에&amp;nbsp;민감합니다. 실측 결과,&amp;nbsp;카나리에서&amp;nbsp;단계별 p95 변동은&amp;nbsp;있었으나&amp;nbsp;오류율은 SLO&amp;nbsp;내&amp;nbsp;유지되었고, 롤백은&amp;nbsp;1분 내 복귀했습니다. 블루그린은 스위치/롤백&amp;nbsp;시간이&amp;nbsp;총합 기준으로는 가장&amp;nbsp;짧았으나,&amp;nbsp;자원&amp;nbsp;비용이 높을 수 밖에 없는 구조였습니다. 롤링 업데이트는&amp;nbsp;배포&amp;nbsp;속도가&amp;nbsp;괜찮지만&amp;nbsp;실패 시에&amp;nbsp;롤백 시간까지 고려한다면 이전&amp;nbsp;ReplicaSet&amp;nbsp;재기동해야하기 때문에 절차가 다른 배포 전략보다 어렵고 치명적이라고 판단했습니다. 이에 따라&amp;nbsp;주요 로직인 user-service의 기존 전략대로 기본 전략은 카나리로(메트릭&amp;nbsp;게이트&amp;nbsp;적용), 비호환&amp;nbsp;릴리스나 즉시롤백이 필요하다면 블루그린, 경미한&amp;nbsp;변경은 롤링업데이트로 운영해야한다고 판단하는 걸로 결론 지었습니다.&lt;/p&gt;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/122</guid>
      <comments>https://670811.tistory.com/122#entry122comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:46:20 +0900</pubDate>
    </item>
    <item>
      <title>[reciping 3차] 모니터링 구축하기 - 태그기반 팀별 대시보드 구성 및 추이기반 알람 세팅까지</title>
      <link>https://670811.tistory.com/121</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/2690661ce62880aea2ddeaa87e17e48f&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.notion.so/2690661ce62880aea2ddeaa87e17e48f&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762278447272&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;모니터링 구축하기 - 태그기반 팀별 대시보드 구성 및 추이기반 알람 세팅까지 | Notion&quot; data-og-description=&quot;1. 사전 작업  &quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/2690661ce62880aea2ddeaa87e17e48f&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/2690661ce62880aea2ddeaa87e17e48f&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VazxZ/hyZM06eZOh/e9gKbJswtpfGe3u42Fcvgk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cjfu83/hyZM5zGzgj/tkkZYsKkIFHJYl0aMnwyPk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.notion.so/2690661ce62880aea2ddeaa87e17e48f&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/2690661ce62880aea2ddeaa87e17e48f&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VazxZ/hyZM06eZOh/e9gKbJswtpfGe3u42Fcvgk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cjfu83/hyZM5zGzgj/tkkZYsKkIFHJYl0aMnwyPk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;모니터링 구축하기 - 태그기반 팀별 대시보드 구성 및 추이기반 알람 세팅까지 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 사전 작업  &lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 사전 작업  &lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;백엔드 서버와 helm chart에서 사전에 작업해야하는 것들입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-1) 백엔드 서버&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;build.gradle에 프로메테우스 레지스트리 의존성 추가&lt;/p&gt;
&lt;pre id=&quot;code_1762263125615&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation 'io.micrometer:micrometer-registry-prometheus'&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;build.gradle에 actuator 의존성 추가&lt;/p&gt;
&lt;pre id=&quot;code_1762263160205&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation 'org.springframework.boot:spring-boot-starter-actuator'&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;applications.properties(혹은 yaml)에 아래를 추가&lt;/p&gt;
&lt;pre id=&quot;code_1762276747201&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;management:
  endpoints:
    web:
      exposure:
        include: health,info,prometheus

  endpoint:
    health:
      probes:
        enabled: true   # /actuator/health/liveness, /readiness 활성화
    prometheus:
      enabled: true

  metrics:
    distribution:
      percentiles-histogram: # HTTP 히스토그램(퍼센타일) 활성화 권장
        http:
          server:
            requests: true&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;+) securityConfig가 설정되어있는 서버라면 SecurityFilterChain을 아래와 같이 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(/actuator/prometheus 등 프로메테우스 관련 actuator 경로를 노출시켜주어야 합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-ads-service-BE/commit/6ca4a3cb99d81fecb793755bba0b99f72f87aa60&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-ads-service-BE/commit/6ca4a3cb99d81fecb793755bba0b99f72f87aa60&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762276780435&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:recycle: refactor : permit for monitoring health check &amp;middot; Reciping/reciping-ads-service-BE@6ca4a3c&quot; data-og-description=&quot;+ .requestMatchers(&amp;quot;/actuator/health&amp;quot;, &amp;quot;/actuator/health/**&amp;quot;, &amp;quot;/actuator/info&amp;quot;, &amp;quot;/actuator/prometheus&amp;quot;).permitAll()&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-ads-service-BE/commit/6ca4a3cb99d81fecb793755bba0b99f72f87aa60&quot; data-og-url=&quot;https://github.com/Reciping/reciping-ads-service-BE/commit/6ca4a3cb99d81fecb793755bba0b99f72f87aa60&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c8vI7A/hyZM3BS8Rr/mTjl8mwgEK0mUafBkxNKm0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/nRYzk/hyZNcr3r0B/d3uYtMDPHkWYjCQUNyZjLk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-ads-service-BE/commit/6ca4a3cb99d81fecb793755bba0b99f72f87aa60&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-ads-service-BE/commit/6ca4a3cb99d81fecb793755bba0b99f72f87aa60&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c8vI7A/hyZM3BS8Rr/mTjl8mwgEK0mUafBkxNKm0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/nRYzk/hyZNcr3r0B/d3uYtMDPHkWYjCQUNyZjLk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:recycle: refactor : permit for monitoring health check &amp;middot; Reciping/reciping-ads-service-BE@6ca4a3c&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;+ .requestMatchers(&quot;/actuator/health&quot;, &quot;/actuator/health/**&quot;, &quot;/actuator/info&quot;, &quot;/actuator/prometheus&quot;).permitAll()&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;b&gt;1&lt;/b&gt;&lt;b&gt;-2) helm chart&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;요약 : 각 서비스의 기존 helm chart에서 podmonitor.yaml, rollout.yaml, values.yaml 수정 필요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 서비스의 podmonitor.yaml 추가 (아래 깃헙에서 코드 확인)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-user-service/templates/podmonitor.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-user-service/templates/podmonitor.yaml&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762276914438&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/charts/reciping-user-service/templates/podmonitor.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-user-service/templates/podmonitor.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-user-service/templates/podmonitor.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZIy8J/hyZMM2QZF1/pQKtkDPbznsOPiA7WHbTw0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dqrjN2/hyZMDwOwBm/5tHt1GVYonU4XUd9aufxY0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-user-service/templates/podmonitor.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-user-service/templates/podmonitor.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZIy8J/hyZMM2QZF1/pQKtkDPbznsOPiA7WHbTw0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dqrjN2/hyZMDwOwBm/5tHt1GVYonU4XUd9aufxY0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/charts/reciping-user-service/templates/podmonitor.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-ads-service/templates/podmonitor.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-ads-service/templates/podmonitor.yaml&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762276930794&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/charts/reciping-ads-service/templates/podmonitor.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-ads-service/templates/podmonitor.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-ads-service/templates/podmonitor.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bJBKRz/hyZMIkAYGE/JFhkDYEMR6Rra5M8KWJCPk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bOusDy/hyZNcMl0az/rcByeKd3HAqWVMui2k389K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-ads-service/templates/podmonitor.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/charts/reciping-ads-service/templates/podmonitor.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bJBKRz/hyZMIkAYGE/JFhkDYEMR6Rra5M8KWJCPk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bOusDy/hyZNcMl0az/rcByeKd3HAqWVMui2k389K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/charts/reciping-ads-service/templates/podmonitor.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;기존 각 서비스 helm chart에 team 태그를 추가해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762276956779&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 각 helm chart의 values.yaml에 team 추가 (예시 : 유저팀)
# reciping-k8s-resource/charts/reciping-user-service/values.yaml
team: user&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;그리고 values.yaml에도 actuator 경로 노출(각 서비스 helm chart의 values.yaml 경로 참고하기)&lt;/p&gt;
&lt;pre id=&quot;code_1762276971265&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;metrics:
  prometheus:
    enabled: true
    path: /actuator/prometheus
    port: 8080
    podMonitor:
      enabled: true&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;rollout.yaml에 업데이트한 team 태그 환경변수로 추가&lt;/p&gt;
&lt;pre id=&quot;code_1762276984805&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reciping.io/team: {{ .Values.team }}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;⬇️&lt;/span&gt; 이런 식으로 수정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/2782c5165c6c9392614d20d3538350062ef39394&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/commit/2782c5165c6c9392614d20d3538350062ef39394&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762277001601&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:recycle: refactor : set team tag &amp;middot; Reciping/reciping-k8s-resources@2782c51&quot; data-og-description=&quot;checksum/config: {{ include (print $.Template.BasePath &amp;quot;/configmap.yaml&amp;quot;) . | sha256sum }}&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/2782c5165c6c9392614d20d3538350062ef39394&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/2782c5165c6c9392614d20d3538350062ef39394&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bDbnhL/hyZMRpxD2T/S2veei7OhHJZyZC3DK2VxK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/2782c5165c6c9392614d20d3538350062ef39394&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/2782c5165c6c9392614d20d3538350062ef39394&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bDbnhL/hyZMRpxD2T/S2veei7OhHJZyZC3DK2VxK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:recycle: refactor : set team tag &amp;middot; Reciping/reciping-k8s-resources@2782c51&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;checksum/config: {{ include (print $.Template.BasePath &quot;/configmap.yaml&quot;) . | sha256sum }}&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Slack으로 임계치 알람받기  &lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;slack webhook url이 필요하기 때문에 그 작업을 먼저 해주겠습니다.&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;slack 앱 디렉토리 접속&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://api.slack.com/apps&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://api.slack.com/apps&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762277089204&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;Slack API: Applications | Slack&quot; data-og-description=&quot;Your Apps Don't see an app you're looking for? Sign in to another workspace.&quot; data-og-host=&quot;api.slack.com&quot; data-og-source-url=&quot;https://api.slack.com/apps&quot; data-og-url=&quot;https://api.slack.com/apps&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://api.slack.com/apps&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://api.slack.com/apps&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;Slack API: Applications | Slack&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Your Apps Don't see an app you're looking for? Sign in to another workspace.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;api.slack.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1919&quot; data-origin-height=&quot;914&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRoYgK/dJMcaklUv8K/Y80FmDKDDTlAIVILKQ0kKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRoYgK/dJMcaklUv8K/Y80FmDKDDTlAIVILKQ0kKk/img.png&quot; data-alt=&quot;Create New App &amp;amp;rarr; From scratch 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRoYgK/dJMcaklUv8K/Y80FmDKDDTlAIVILKQ0kKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRoYgK%2FdJMcaklUv8K%2FY80FmDKDDTlAIVILKQ0kKk%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;1919&quot; height=&quot;914&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1919&quot; data-origin-height=&quot;914&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Create New App &amp;rarr; From scratch 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (1).png&quot; data-origin-width=&quot;1919&quot; data-origin-height=&quot;990&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOWICh/dJMcadf077W/tF5hBFkoQCTow9olFrzE5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOWICh/dJMcadf077W/tF5hBFkoQCTow9olFrzE5K/img.png&quot; data-alt=&quot;슬랫봇처럼 커스텀 슬랙봇 이름 정하기 - Monitoring Alerts 적기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOWICh/dJMcadf077W/tF5hBFkoQCTow9olFrzE5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOWICh%2FdJMcadf077W%2FtF5hBFkoQCTow9olFrzE5K%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;1919&quot; height=&quot;990&quot; data-filename=&quot;image (1).png&quot; data-origin-width=&quot;1919&quot; data-origin-height=&quot;990&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;슬랫봇처럼 커스텀 슬랙봇 이름 정하기 - Monitoring Alerts 적기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (2).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;913&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFka3l/dJMcai9s1VX/kAu1BmlbQbLa2NKuzR4yIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFka3l/dJMcai9s1VX/kAu1BmlbQbLa2NKuzR4yIk/img.png&quot; data-alt=&quot;Incoming Webhooks &amp;amp;rarr; Activate Incoming Webhooks &amp;amp;rarr; On&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFka3l/dJMcai9s1VX/kAu1BmlbQbLa2NKuzR4yIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFka3l%2FdJMcai9s1VX%2FkAu1BmlbQbLa2NKuzR4yIk%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;1916&quot; height=&quot;913&quot; data-filename=&quot;image (2).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;913&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Incoming Webhooks &amp;rarr; Activate Incoming Webhooks &amp;rarr; On&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (3).png&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DhrhU/dJMcadNQ6h6/el6aST5dxhdxDEXOgbxOg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DhrhU/dJMcadNQ6h6/el6aST5dxhdxDEXOgbxOg0/img.png&quot; data-alt=&quot;Add New Webhook 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DhrhU/dJMcadNQ6h6/el6aST5dxhdxDEXOgbxOg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDhrhU%2FdJMcadNQ6h6%2Fel6aST5dxhdxDEXOgbxOg0%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;974&quot; height=&quot;498&quot; data-filename=&quot;image (3).png&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Add New Webhook 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (4).png&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zLPFm/dJMcad1og0E/P2TubiLIvHzhjZfb7oz5oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zLPFm/dJMcad1og0E/P2TubiLIvHzhjZfb7oz5oK/img.png&quot; data-alt=&quot;알람 받을 채널 선택 - 슬랙에 먼저 각 팀별 서버 파고 여기서 지정하면 됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zLPFm/dJMcad1og0E/P2TubiLIvHzhjZfb7oz5oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzLPFm%2FdJMcad1og0E%2FP2TubiLIvHzhjZfb7oz5oK%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;1917&quot; height=&quot;908&quot; data-filename=&quot;image (4).png&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;알람 받을 채널 선택 - 슬랙에 먼저 각 팀별 서버 파고 여기서 지정하면 됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (5).png&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;553&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBLIhc/dJMcajN4xsV/rG1CdFtYLyfL6l9KuyPyF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBLIhc/dJMcajN4xsV/rG1CdFtYLyfL6l9KuyPyF0/img.png&quot; data-alt=&quot;발급받은 Webhhook URL 복사하면 됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBLIhc/dJMcajN4xsV/rG1CdFtYLyfL6l9KuyPyF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBLIhc%2FdJMcajN4xsV%2FrG1CdFtYLyfL6l9KuyPyF0%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;984&quot; height=&quot;553&quot; data-filename=&quot;image (5).png&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;553&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;발급받은 Webhhook URL 복사하면 됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (6).png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l5GST/dJMcahbEnDE/w9JDNRmh9qQRWDojqdZozK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l5GST/dJMcahbEnDE/w9JDNRmh9qQRWDojqdZozK/img.png&quot; data-alt=&quot;팀별로 웹훅 만든 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l5GST/dJMcahbEnDE/w9JDNRmh9qQRWDojqdZozK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl5GST%2FdJMcahbEnDE%2Fw9JDNRmh9qQRWDojqdZozK%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;854&quot; height=&quot;500&quot; data-filename=&quot;image (6).png&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;500&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;해당 URL을 Copy해서 kube-prometheus-stack관련 설정 파일(저장소, 대시보드, Grafana Ingress(ALB)/PVC, Alertmanager 팀별 라우팅(ads/user)등..) values.yaml을 세팅합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 완성본은 아래를 참고하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/monitoring/values.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/monitoring/values.yaml&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762277263539&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/monitoring/values.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/monitoring/values.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/monitoring/values.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cnPQNj/hyZM0LVVWb/jSpxQkuvcQEo2fcR0FktTK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/btjBHl/hyZNdxKq8p/bV8bnAemEFwPhVKFloPSGk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/monitoring/values.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/monitoring/values.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cnPQNj/hyZM0LVVWb/jSpxQkuvcQEo2fcR0FktTK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/btjBHl/hyZNdxKq8p/bV8bnAemEFwPhVKFloPSGk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/monitoring/values.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;+) Alert rule 세팅하기 - 추이기반(베이스라인) 알람 세팅까지  &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 PromQL을 커스텀으로 세팅해서 어떤 hook에 알람을 받을지 정의합니다.&lt;/p&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;u&gt;1. 일반 alerts hook 세팅&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; 설정 설명 1 &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http-availability :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ServiceErrorRateHighWarning: 5xx 비율 &amp;gt; 5% 10분&lt;/li&gt;
&lt;li&gt;ServiceErrorRateHighCritical: 5xx 비율 &amp;gt; 10% 5분&lt;/li&gt;
&lt;li&gt;ServiceInstancesDown: 해당 서비스 타겟 up이 0 &amp;rarr; 2분&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http-latency :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ServiceLatencyP95High: P95 &amp;gt; 500ms 10분&lt;/li&gt;
&lt;li&gt;ServiceLatencyP99High: P99 &amp;gt; 1s 5분&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;jvm-and-runtime :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JvmHeapUsageHigh: heap 사용률 &amp;gt; 90% 10분&lt;/li&gt;
&lt;li&gt;ContainerRestarts: 5분 내 재시작 발생 시 경고&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-prod-rules.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-prod-rules.yaml&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762277393887&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/manifests/monitoring/rules/service-prod-rules.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-prod-rules.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-prod-rules.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfHbZu/hyZM8JYiUG/i4k3OM1MmSp7EQuowie3AK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/jx3TT/hyZMWK6Ne8/PJjkjxb5F4yAWdJQo0RZn1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-prod-rules.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-prod-rules.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfHbZu/hyZM8JYiUG/i4k3OM1MmSp7EQuowie3AK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/jx3TT/hyZMWK6Ne8/PJjkjxb5F4yAWdJQo0RZn1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/manifests/monitoring/rules/service-prod-rules.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;u&gt;2. 추이 기반(베이스라인) alerts hook 세팅&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; 설정 설명 2 &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http-anomaly :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ServiceTrafficAnomaly: 최근 5분 RPS가 1시간 평균 대비 3&amp;sigma; 초과(그리고 RPS&amp;gt;0.1) 10분&lt;/li&gt;
&lt;li&gt;ServiceErrorRateAnomaly: 최근 5분 에러율이 1시간 평균 대비 3&amp;sigma; 초과(그리고 RPS&amp;gt;0.1) 10분&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-anomaly-rules.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-anomaly-rules.yaml&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762277445768&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/manifests/monitoring/rules/service-anomaly-rules.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-anomaly-rules.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-anomaly-rules.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ERxsY/hyZM3BTaQy/19dWAraWvIiZXph45Eu4nk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/J5SDD/hyZM3BTaTK/EEO7kLEthIC1OaMFCI0Ha0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-anomaly-rules.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/rules/service-anomaly-rules.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ERxsY/hyZM3BTaQy/19dWAraWvIiZXph45Eu4nk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/J5SDD/hyZM3BTaTK/EEO7kLEthIC1OaMFCI0Ha0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/manifests/monitoring/rules/service-anomaly-rules.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. monitoring app 배포하기  ️&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;ArgoCD 기반으로 모니터링툴도 배포할 것입니다. monitoring-app.yaml도 작성해줍니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;(Helm 차트 + manifests/monitoring 동시 적용)&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/app/monitoring-app.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/app/monitoring-app.yaml&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762277482284&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/app/monitoring-app.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/app/monitoring-app.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/app/monitoring-app.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/S5XSZ/hyZMIZcUPk/7vk22rQpU72Z9Q91QGIIo1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/3Vemf/hyZMvFzwZD/VjPoL3NaN5D9yTYoKf6NIk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/app/monitoring-app.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/app/monitoring-app.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/S5XSZ/hyZMIZcUPk/7vk22rQpU72Z9Q91QGIIo1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/3Vemf/hyZMvFzwZD/VjPoL3NaN5D9yTYoKf6NIk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/app/monitoring-app.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;EBS CSI 드라이버 설치 기반 Storage Class(gp3 혹은 gp2) 정의 - PVC&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/storage/gp2-csi.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/storage/gp2-csi.yaml&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762277496715&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/manifests/storage/gp2-csi.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/storage/gp2-csi.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/storage/gp2-csi.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/h7SSe/hyZM3WcxP9/T2eM7A3MLGTcSuLDh8pz7k/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/imOic/hyZMMV4IgR/37R39uDkizVB2k3irmzmD1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/storage/gp2-csi.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/storage/gp2-csi.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/h7SSe/hyZM3WcxP9/T2eM7A3MLGTcSuLDh8pz7k/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/imOic/hyZMMV4IgR/37R39uDkizVB2k3irmzmD1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/manifests/storage/gp2-csi.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;Storage Class는 &lt;a href=&quot;http://ebs.csi.aws.com&quot;&gt;ebs.csi.aws.com&lt;/a&gt; 프로비저너가 있어야 합니다. Add-on이 없다면 설치가 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(설치되어 있지 않다면 콘솔에서 EBS CSI 활성화 해주기)&lt;/p&gt;
&lt;pre id=&quot;code_1762277516788&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 클러스터 이름 먼저 확인
aws eks list-clusters --region ap-northeast-2

# EKS Add-on 설치
eksctl enable addon --name aws-ebs-csi-driver --cluster &amp;lt;cluster-name&amp;gt; --region ap-northeast-2&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762277526199&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# IRSA 역할 생성 + SA에 주입
eksctl create iamserviceaccount \
  --cluster reciping-cluster \
  --namespace kube-system \
  --name ebs-csi-controller-sa \
  --role-name AmazonEKS_EBS_CSI_DriverRole \
  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
  --override-existing-serviceaccounts \
  --approve \
  --region ap-northeast-2
  
# EKS 애드온에 역할 연결
aws eks update-addon \
  --cluster-name reciping-cluster \
  --addon-name aws-ebs-csi-driver \
  --service-account-role-arn &amp;lt;위 Role ARN&amp;gt; \
  --region ap-northeast-2&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762277536122&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 선택사항) 드라이버 준비 확인 - 두 리소스가 모두 Ready여야 함.

# 컨트롤러 확인
kubectl -n kube-system get deploy ebs-csi-controller
# 노드 컴포넌트 확인
kubectl -n kube-system get ds ebs-csi-node

-------
# 나중에 배포됐을 경우, PVC 이벤트 확인할 때 사용하는 명령어
# Events에 'provisioned' / 'bound' 메시지가 뜨면 정상
kubectl -n monitoring get pvc
kubectl -n monitoring describe pvc kube-prometheus-stack-grafana&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;monitoring 네임스페이스 만들기&lt;/p&gt;
&lt;pre id=&quot;code_1762277550647&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# yaml에 네임스페이스까지 자동으로 만드는 것까지 정의되어있으나, 혹시 모르니 미리 만들어두기
kubectl create namespace monitoring&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모니터링 앱 배포하기&lt;/p&gt;
&lt;pre id=&quot;code_1762277562083&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -n argocd -f app/monitoring-app.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;사전에 웹훅 발생시킬 수 있는 명령어 입력 후, 제대로 동작하는지 확인&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;참고) Container sleep 임의 발생 후, Restart 명령어&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762277625889&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;POD=$(kubectl -n reciping get pod -l app=reciping-user-service -o jsonpath='{.items[0].metadata.name}')
CNTR=$(kubectl -n reciping get pod &quot;$POD&quot; -o jsonpath='{.spec.containers[0].name}')

# 먼저 정상 동작하는지 테스트: 시그널 거부면 Permission denied가 뜸
kubectl -n reciping exec &quot;$POD&quot; -c &quot;$CNTR&quot; -- sh -c 'kill -s TERM 1 || true'
sleep 2
kubectl -n reciping exec &quot;$POD&quot; -c &quot;$CNTR&quot; -- sh -c 'kill -s KILL 1 || true'&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762277666201&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl -n monitoring port-forward svc/kube-prometheus-stack-prometheus 9090:9090
# 브라우저 &amp;rarr; http://localhost:9090/rules &amp;rarr; service-prod-rules 확인
# 또는 Alertmanager에서 Firing 시 Slack 메시지 한글 문구 확인&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;image (7).png&quot; data-origin-width=&quot;1913&quot; data-origin-height=&quot;866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JrL1H/dJMb99LshZv/YiVLd0YK2gIDzk5L8rMKX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JrL1H/dJMb99LshZv/YiVLd0YK2gIDzk5L8rMKX1/img.png&quot; data-alt=&quot;9090으로 포트포워딩한 뒤, rules 확인하면 각 적용된 rules를 확인할 수 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JrL1H/dJMb99LshZv/YiVLd0YK2gIDzk5L8rMKX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJrL1H%2FdJMb99LshZv%2FYiVLd0YK2gIDzk5L8rMKX1%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;1913&quot; height=&quot;866&quot; data-filename=&quot;image (7).png&quot; data-origin-width=&quot;1913&quot; data-origin-height=&quot;866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;9090으로 포트포워딩한 뒤, rules 확인하면 각 적용된 rules를 확인할 수 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (8).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;962&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chhG4k/dJMcahW1uBi/QwsyETOTuxgmrUiHUbqR90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chhG4k/dJMcahW1uBi/QwsyETOTuxgmrUiHUbqR90/img.png&quot; data-alt=&quot;9090으로 포트포워딩한 뒤, rules 확인하면 각 적용된 rules를 확인할 수 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chhG4k/dJMcahW1uBi/QwsyETOTuxgmrUiHUbqR90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchhG4k%2FdJMcahW1uBi%2FQwsyETOTuxgmrUiHUbqR90%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;1916&quot; height=&quot;962&quot; data-filename=&quot;image (8).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;962&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;9090으로 포트포워딩한 뒤, rules 확인하면 각 적용된 rules를 확인할 수 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762277707614&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# alertmanager는 아래로 포트포워딩 후 확인
kubectl -n monitoring port-forward svc/kube-prometheus-stack-alertmanager 9093:9093
# 브라우저 http://localhost:9093/#/alerts &amp;rarr; 동일 알람 Firing 확인
# Slack: #user-alerts, #ads-alerts 채널로 도착 확인&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;image (9).png&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZTwpu/dJMcaiVVQ84/V1tlUdMsSWxXEbQopIjaK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZTwpu/dJMcaiVVQ84/V1tlUdMsSWxXEbQopIjaK1/img.png&quot; data-alt=&quot;해당 오류(예 : ContainerRestartRaw)(웹훅)가 발생하면 Alertmanager에 해당 user-slack alert이 생기는 것을 알 수 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZTwpu/dJMcaiVVQ84/V1tlUdMsSWxXEbQopIjaK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZTwpu%2FdJMcaiVVQ84%2FV1tlUdMsSWxXEbQopIjaK1%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;1912&quot; height=&quot;866&quot; data-filename=&quot;image (9).png&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해당 오류(예 : ContainerRestartRaw)(웹훅)가 발생하면 Alertmanager에 해당 user-slack alert이 생기는 것을 알 수 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (10).png&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crEJvF/dJMcag4SMK3/Z8XuNljSanndUnlgUnr0q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crEJvF/dJMcag4SMK3/Z8XuNljSanndUnlgUnr0q1/img.png&quot; data-alt=&quot;ContainerRestart 알람 웹훅 발생&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crEJvF/dJMcag4SMK3/Z8XuNljSanndUnlgUnr0q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrEJvF%2FdJMcag4SMK3%2FZ8XuNljSanndUnlgUnr0q1%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;1176&quot; height=&quot;672&quot; data-filename=&quot;image (10).png&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ContainerRestart 알람 웹훅 발생&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (11).png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bS4xXU/dJMcakzrGsi/SbIkzCsxxyJuBG75B2BaoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bS4xXU/dJMcakzrGsi/SbIkzCsxxyJuBG75B2BaoK/img.png&quot; data-alt=&quot;팀별, 서비스별, 심각도별, 상태별 구분되어 알람이 가는 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bS4xXU/dJMcakzrGsi/SbIkzCsxxyJuBG75B2BaoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbS4xXU%2FdJMcakzrGsi%2FSbIkzCsxxyJuBG75B2BaoK%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;1016&quot; height=&quot;655&quot; data-filename=&quot;image (11).png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;655&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;+) 영상 기록&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=CFmYkEyYjes&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/dceJbi/hyZMwqVhvv/iHsRYb11kZTtMlxYLzpbZK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/btTwD5/hyZMMPf3Fd/aMQCERYrWau0dYKl3H3VI1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;reciping SlackOps - 부서별 알람 받기 (서비스, 심각도, 상태 표시)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/CFmYkEyYjes&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Route53에서 와일드카드(*.reciping.kr)을 정의해두고 있어서 ACM ARN 적용하면 되니, &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://grafana.reciping.kr&quot;&gt;https://grafana.reciping.kr&lt;/a&gt; 연결 쉽게 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (12).png&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;968&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6UwDx/dJMb99Lsh1j/4xSQC3jSaB2vJhvAEfGm3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6UwDx/dJMb99Lsh1j/4xSQC3jSaB2vJhvAEfGm3k/img.png&quot; data-alt=&quot;첫 로그인 화면 - username : admin / password : kelly123&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6UwDx/dJMb99Lsh1j/4xSQC3jSaB2vJhvAEfGm3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6UwDx%2FdJMb99Lsh1j%2F4xSQC3jSaB2vJhvAEfGm3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1909&quot; height=&quot;968&quot; data-filename=&quot;image (12).png&quot; data-origin-width=&quot;1909&quot; data-origin-height=&quot;968&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;첫 로그인 화면 - username : admin / password : kelly123&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762277854014&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 초기 username/password 아는 법

# username
kubectl -n monitoring get secret kube-prometheus-stack-grafana -o jsonpath='{.data.admin-user}' | base64 -d; echo
# password
kubectl -n monitoring get secret kube-prometheus-stack-grafana -o jsonpath='{.data.admin-password}' | base64 -d; echo&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 태그 기반으로 팀별 대시보드 구성하기  &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; font-size: 16px; letter-spacing: 0px;&quot;&gt;이미 태그 기반으로 대시보드가 나타나게는 구성이 되어있으나, 팀별 커스텀한 대시보드는 따로 구성해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 부서별 대시보드 구성 yaml 파일 추가 후, 모니터링 앱 재배포하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762277886994&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/manifests/monitoring/dashboards/user-service-overview.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Gb5u6/hyZM2XhyZg/phBU2V4tmpmSD37bmhEXw1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/jzKtJ/hyZMtAYkvI/1Sovwv04QRWF5YAw9mkqmk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/user-service-overview.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Gb5u6/hyZM2XhyZg/phBU2V4tmpmSD37bmhEXw1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/jzKtJ/hyZMtAYkvI/1Sovwv04QRWF5YAw9mkqmk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/manifests/monitoring/dashboards/user-service-overview.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/ads-service-overview.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/ads-service-overview.yaml&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762277894179&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-k8s-resources/manifests/monitoring/dashboards/ads-service-overview.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/ads-service-overview.yaml&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/ads-service-overview.yaml&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LO4Jc/hyZMMoc0sE/9bk1JZQKYVhgI4g1SCPdZ0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bRdO1c/hyZMs27oh0/E0CPVOBabPlQz2G5ib9zSK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/ads-service-overview.yaml&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/blob/dev/manifests/monitoring/dashboards/ads-service-overview.yaml&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LO4Jc/hyZMMoc0sE/9bk1JZQKYVhgI4g1SCPdZ0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bRdO1c/hyZMs27oh0/E0CPVOBabPlQz2G5ib9zSK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-k8s-resources/manifests/monitoring/dashboards/ads-service-overview.yaml at dev &amp;middot; Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;+) advanced 대시보드를 하나 더 만들어서 알람배지(패널링크)로 Alertmanager/Explore 링크 추가도 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;  여기서 알람 배지(패널링크)란?&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 대시보드 상단에 작은 통계 배지 패널(예: &amp;ldquo;Active Alerts&amp;rdquo;)을 두고, 배지를 클릭하면 Alert 상세 페이지나 Explore/Alertmanager로 바로 이동하는 &amp;ldquo;패널 링크&amp;rdquo;를 붙이는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배지에 아래처럼 링크를 붙일 수 있습니다 ⬇️&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Alertmanager UI:&amp;nbsp;/alertmanager/#/alerts?filter=reciping_team%3Duser&lt;/li&gt;
&lt;li&gt;Explore(사전 쿼리 포함):&amp;nbsp;/explore?left=...ALERTS%7Breciping_team%3D%22user%22%7D...&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) 해당 advanced 대시보드 yaml 코드&lt;/p&gt;
&lt;pre id=&quot;code_1762277943745&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: ConfigMap
metadata:
  name: grafana-dashboard-user-service-advanced
  namespace: monitoring
  labels:
    grafana_dashboard: &quot;1&quot;
  annotations:
    grafana_folder: &quot;Teams&quot;
data:
  user-service-advanced.json: |
    {&quot;schemaVersion&quot;:39,&quot;version&quot;:1,&quot;title&quot;:&quot;User Service Advanced&quot;,&quot;tags&quot;:[&quot;team:user&quot;],&quot;time&quot;:{&quot;from&quot;:&quot;now-6h&quot;,&quot;to&quot;:&quot;now&quot;},
     &quot;templating&quot;:{&quot;list&quot;:[
       {&quot;name&quot;:&quot;team&quot;,&quot;type&quot;:&quot;constant&quot;,&quot;label&quot;:&quot;team&quot;,&quot;query&quot;:&quot;user&quot;,&quot;hide&quot;:2},
       {&quot;name&quot;:&quot;service&quot;,&quot;type&quot;:&quot;constant&quot;,&quot;label&quot;:&quot;service&quot;,&quot;query&quot;:&quot;reciping-user-service&quot;,&quot;hide&quot;:2},
       {&quot;name&quot;:&quot;endpoint&quot;,&quot;type&quot;:&quot;custom&quot;,&quot;label&quot;:&quot;endpoint&quot;,&quot;query&quot;:&quot;^/api/v1/users/signup$,^/api/v1/users/.*/created-at$,^/api/v1/users/me$,^/api/v1/mypage$,^/api/v1/mypage/bookmarks$,^/api/v1/auth/refresh$&quot;,&quot;includeAll&quot;:true,&quot;allValue&quot;:&quot;.*&quot;,&quot;multi&quot;:true,&quot;current&quot;:{&quot;text&quot;:&quot;All&quot;,&quot;value&quot;:[&quot;$__all&quot;]}}
     ]},
     &quot;panels&quot;:[
      {&quot;type&quot;:&quot;row&quot;,&quot;title&quot;:&quot;Badges&quot;,&quot;collapsed&quot;:false,&quot;gridPos&quot;:{&quot;h&quot;:1,&quot;w&quot;:24,&quot;x&quot;:0,&quot;y&quot;:0}},
      {&quot;type&quot;:&quot;stat&quot;,&quot;title&quot;:&quot;Active Alerts (User)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:3,&quot;w&quot;:6,&quot;x&quot;:0,&quot;y&quot;:1},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;count(ALERTS{alertstate=\&quot;firing\&quot;,reciping_team=\&quot;user\&quot;})&quot;}]},
      {&quot;type&quot;:&quot;stat&quot;,&quot;title&quot;:&quot;5xx Error Rate (%)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:3,&quot;w&quot;:6,&quot;x&quot;:6,&quot;y&quot;:1},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;100 * ( sum(rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;user\&quot;,reciping_service=\&quot;reciping-user-service\&quot;,status=~\&quot;5..\&quot;,uri!~\&quot;/actuator/.*\&quot;}[5m])) / sum(rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;user\&quot;,reciping_service=\&quot;reciping-user-service\&quot;,uri!~\&quot;/actuator/.*\&quot;}[5m])) )&quot;}]},
      {&quot;type&quot;:&quot;stat&quot;,&quot;title&quot;:&quot;P95 (s)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:3,&quot;w&quot;:6,&quot;x&quot;:12,&quot;y&quot;:1},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;histogram_quantile(0.95, sum by (le) ( rate(http_server_requests_seconds_bucket{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;user\&quot;,reciping_service=\&quot;reciping-user-service\&quot;,uri!~\&quot;/actuator/.*\&quot;}[5m]) ))&quot;}]},
      {&quot;type&quot;:&quot;stat&quot;,&quot;title&quot;:&quot;RPS&quot;,&quot;gridPos&quot;:{&quot;h&quot;:3,&quot;w&quot;:6,&quot;x&quot;:18,&quot;y&quot;:1},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;sum(rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;user\&quot;,reciping_service=\&quot;reciping-user-service\&quot;,uri!~\&quot;/actuator/.*\&quot;}[5m]))&quot;}]},
      {&quot;type&quot;:&quot;row&quot;,&quot;title&quot;:&quot;Traffic &amp;amp; Errors&quot;,&quot;collapsed&quot;:false,&quot;gridPos&quot;:{&quot;h&quot;:1,&quot;w&quot;:24,&quot;x&quot;:0,&quot;y&quot;:0}},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;RPS (5m rate)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:7,&quot;w&quot;:12,&quot;x&quot;:0,&quot;y&quot;:1},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;sum by (uri) (rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri!~\&quot;/actuator/.*\&quot;,uri=~\&quot;$endpoint\&quot;}[5m]))&quot;,&quot;legendFormat&quot;:&quot;{{uri}}&quot;}]},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;오류율 (5m %)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:7,&quot;w&quot;:12,&quot;x&quot;:12,&quot;y&quot;:1},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;100 * ( sum by (uri) (rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,status=~\&quot;5..\&quot;,uri!~\&quot;/actuator/.*\&quot;,uri=~\&quot;$endpoint\&quot;}[5m])) / sum by (uri) (rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri!~\&quot;/actuator/.*\&quot;,uri=~\&quot;$endpoint\&quot;}[5m])) )&quot;,&quot;legendFormat&quot;:&quot;{{uri}}&quot;}]},

      {&quot;type&quot;:&quot;row&quot;,&quot;title&quot;:&quot;Latency&quot;,&quot;collapsed&quot;:false,&quot;gridPos&quot;:{&quot;h&quot;:1,&quot;w&quot;:24,&quot;x&quot;:0,&quot;y&quot;:8}},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;HTTP P95 (s)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:7,&quot;w&quot;:12,&quot;x&quot;:0,&quot;y&quot;:9},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;histogram_quantile(0.95, sum by (uri,le) ( rate(http_server_requests_seconds_bucket{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri!~\&quot;/actuator/.*\&quot;,uri=~\&quot;$endpoint\&quot;}[5m]) ))&quot;,&quot;legendFormat&quot;:&quot;{{uri}}&quot;}]},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;HTTP P99 (s)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:7,&quot;w&quot;:12,&quot;x&quot;:12,&quot;y&quot;:9},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;histogram_quantile(0.99, sum by (uri,le) ( rate(http_server_requests_seconds_bucket{namespace=\\\&quot;reciping\\\&quot;,reciping_team=\\\&quot;$team\\\&quot;,reciping_service=\\\&quot;$service\\\&quot;,uri!~\\\&quot;/actuator/.*\\\&quot;,uri=~\\\&quot;$endpoint\\\&quot;}[5m]) ))&quot;,&quot;legendFormat&quot;:&quot;{{uri}}&quot;}]},

      {&quot;type&quot;:&quot;row&quot;,&quot;title&quot;:&quot;Auth &amp;amp; Signup Funnel&quot;,&quot;collapsed&quot;:false,&quot;gridPos&quot;:{&quot;h&quot;:1,&quot;w&quot;:24,&quot;x&quot;:0,&quot;y&quot;:16}},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;Signup Attempts vs Success (5m)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:6,&quot;w&quot;:12,&quot;x&quot;:0,&quot;y&quot;:17},
       &quot;targets&quot;:[
        {&quot;expr&quot;:&quot;sum by (status) (rate(http_server_requests_seconds_count{namespace=\\\&quot;reciping\\\&quot;,reciping_team=\\\&quot;$team\\\&quot;,reciping_service=\\\&quot;$service\\\&quot;,uri=\\\&quot;/api/v1/users/signup\\\&quot;}[5m]))&quot;,&quot;legendFormat&quot;:&quot;signup {{status}}&quot;},
        {&quot;expr&quot;:&quot;sum by (status) (rate(http_server_requests_seconds_count{namespace=\\\&quot;reciping\\\&quot;,reciping_team=\\\&quot;$team\\\&quot;,reciping_service=\\\&quot;$service\\\&quot;,uri=\\\&quot;/api/v1/auth/refresh\\\&quot;}[5m]))&quot;,&quot;legendFormat&quot;:&quot;auth {{status}}&quot;}
       ]},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;Signup P95 (s)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:6,&quot;w&quot;:12,&quot;x&quot;:12,&quot;y&quot;:17},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;histogram_quantile(0.95, sum by (le) ( rate(http_server_requests_seconds_bucket{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri=\&quot;/api/v1/users/signup\&quot;}[5m]) ))&quot;,&quot;legendFormat&quot;:&quot;signup P95&quot;}]},

      {&quot;type&quot;:&quot;row&quot;,&quot;title&quot;:&quot;My Page&quot;,&quot;collapsed&quot;:false,&quot;gridPos&quot;:{&quot;h&quot;:1,&quot;w&quot;:24,&quot;x&quot;:0,&quot;y&quot;:23}},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;MyPage P95 (s)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:6,&quot;w&quot;:12,&quot;x&quot;:0,&quot;y&quot;:24},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;histogram_quantile(0.95, sum by (le) ( rate(http_server_requests_seconds_bucket{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri=\&quot;/api/v1/mypage\&quot;}[5m]) ))&quot;,&quot;legendFormat&quot;:&quot;mypage P95&quot;}]},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;Bookmarks RPS (5m)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:6,&quot;w&quot;:12,&quot;x&quot;:12,&quot;y&quot;:24},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;sum(rate(http_server_requests_seconds_count{namespace=\&quot;reciping\&quot;,reciping_team=\&quot;$team\&quot;,reciping_service=\&quot;$service\&quot;,uri=\&quot;/api/v1/mypage/bookmarks\&quot;}[5m]))&quot;,&quot;legendFormat&quot;:&quot;bookmarks&quot;}]},

      {&quot;type&quot;:&quot;row&quot;,&quot;title&quot;:&quot;Reliability&quot;,&quot;collapsed&quot;:false,&quot;gridPos&quot;:{&quot;h&quot;:1,&quot;w&quot;:24,&quot;x&quot;:0,&quot;y&quot;:30}},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;Instances Up&quot;,&quot;gridPos&quot;:{&quot;h&quot;:6,&quot;w&quot;:12,&quot;x&quot;:0,&quot;y&quot;:31},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;sum by (pod) (up{namespace=\&quot;reciping\&quot;,reciping_service=\&quot;$service\&quot;})&quot;,&quot;legendFormat&quot;:&quot;{{pod}}&quot;}]},
      {&quot;type&quot;:&quot;timeseries&quot;,&quot;title&quot;:&quot;컨테이너 재시작 (5m)&quot;,&quot;gridPos&quot;:{&quot;h&quot;:6,&quot;w&quot;:12,&quot;x&quot;:12,&quot;y&quot;:31},
       &quot;targets&quot;:[{&quot;expr&quot;:&quot;sum by (pod) (increase(kube_pod_container_status_restarts_total{namespace=\&quot;reciping\&quot;}[5m]))&quot;,&quot;legendFormat&quot;:&quot;{{pod}}&quot;}]}
     ]}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762277954586&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 재배포 후, health 확인까지 하는 명령어
argocd app sync kube-prometheus-stack --grpc-web &amp;amp;&amp;amp; argocd app wait kube-prometheus-stack --health --timeout 600 | cat&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 :&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (13).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;962&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btz9nm/dJMcaezefYR/Jb0rapSMLMpd2H6MKwkuRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btz9nm/dJMcaezefYR/Jb0rapSMLMpd2H6MKwkuRK/img.png&quot; data-alt=&quot;태그가 붙어있는 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btz9nm/dJMcaezefYR/Jb0rapSMLMpd2H6MKwkuRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtz9nm%2FdJMcaezefYR%2FJb0rapSMLMpd2H6MKwkuRK%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;1916&quot; height=&quot;962&quot; data-filename=&quot;image (13).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;962&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;태그가 붙어있는 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (14).png&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckEQk7/dJMcajtLOHZ/cC22JLEf6ZkpkI4hC7RGq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckEQk7/dJMcajtLOHZ/cC22JLEf6ZkpkI4hC7RGq0/img.png&quot; data-alt=&quot;이런 식으로 dashboard configmap에서 Teams 폴더를 구성해놓으면 아래와 같이 teams 폴더에서 한꺼번에 확인 가능하다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckEQk7/dJMcajtLOHZ/cC22JLEf6ZkpkI4hC7RGq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckEQk7%2FdJMcajtLOHZ%2FcC22JLEf6ZkpkI4hC7RGq0%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;488&quot; height=&quot;209&quot; data-filename=&quot;image (14).png&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이런 식으로 dashboard configmap에서 Teams 폴더를 구성해놓으면 아래와 같이 teams 폴더에서 한꺼번에 확인 가능하다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (15).png&quot; data-origin-width=&quot;1911&quot; data-origin-height=&quot;865&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4WBKT/dJMcaiVVRcB/0b0FB016bVbW0qIO9qUhL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4WBKT/dJMcaiVVRcB/0b0FB016bVbW0qIO9qUhL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4WBKT/dJMcaiVVRcB/0b0FB016bVbW0qIO9qUhL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4WBKT%2FdJMcaiVVRcB%2F0b0FB016bVbW0qIO9qUhL1%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;1911&quot; height=&quot;865&quot; data-filename=&quot;image (15).png&quot; data-origin-width=&quot;1911&quot; data-origin-height=&quot;865&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (16).png&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;963&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDXAI8/dJMcajtLOIe/FwxqVMwh3vZuEpwSDkI9BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDXAI8/dJMcajtLOIe/FwxqVMwh3vZuEpwSDkI9BK/img.png&quot; data-alt=&quot;엔드포인트 별 선택 가능하게끔 세팅&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDXAI8/dJMcajtLOIe/FwxqVMwh3vZuEpwSDkI9BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDXAI8%2FdJMcajtLOIe%2FFwxqVMwh3vZuEpwSDkI9BK%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;1915&quot; height=&quot;963&quot; data-filename=&quot;image (16).png&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;963&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;엔드포인트 별 선택 가능하게끔 세팅&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (17).png&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;965&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FI5iC/dJMb99YZrqy/q8a4NGmpyToYVLg3ELhnr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FI5iC/dJMb99YZrqy/q8a4NGmpyToYVLg3ELhnr0/img.png&quot; data-alt=&quot;광고팀 A/B 테스트 대시보드 추가된 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FI5iC/dJMb99YZrqy/q8a4NGmpyToYVLg3ELhnr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFI5iC%2FdJMb99YZrqy%2Fq8a4NGmpyToYVLg3ELhnr0%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;1915&quot; height=&quot;965&quot; data-filename=&quot;image (17).png&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;965&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;광고팀 A/B 테스트 대시보드 추가된 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (18).png&quot; data-origin-width=&quot;1913&quot; data-origin-height=&quot;963&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsFOf6/dJMcai9s14E/dSz6fRDNEkKptE0FzT3ml1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsFOf6/dJMcai9s14E/dSz6fRDNEkKptE0FzT3ml1/img.png&quot; data-alt=&quot;유저팀 엔드포인트 바로가기 필터를 구성한 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsFOf6/dJMcai9s14E/dSz6fRDNEkKptE0FzT3ml1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsFOf6%2FdJMcai9s14E%2FdSz6fRDNEkKptE0FzT3ml1%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;1913&quot; height=&quot;963&quot; data-filename=&quot;image (18).png&quot; data-origin-width=&quot;1913&quot; data-origin-height=&quot;963&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;유저팀 엔드포인트 바로가기 필터를 구성한 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (19).png&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;965&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sof96/dJMb99YZrqD/jBtevZvHhkv2sGPDIScf11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sof96/dJMb99YZrqD/jBtevZvHhkv2sGPDIScf11/img.png&quot; data-alt=&quot;유저팀 대시보드 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sof96/dJMb99YZrqD/jBtevZvHhkv2sGPDIScf11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsof96%2FdJMb99YZrqD%2FjBtevZvHhkv2sGPDIScf11%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;1915&quot; height=&quot;965&quot; data-filename=&quot;image (19).png&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;965&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;유저팀 대시보드 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) 영상 기록&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=2c2UQKwIGWw&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bHAwDc/hyZMU7BCZ4/BhF2xS3xc3kgOMbRnQ1gXK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/beOa3J/hyZMF9g2mV/MEMdwzzjoSKRldAK4wD5mk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;reciping - 태그 기반 부서별 커스텀 메트릭 대시보드 구성&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/2c2UQKwIGWw&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/121</guid>
      <comments>https://670811.tistory.com/121#entry121comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:46:01 +0900</pubDate>
    </item>
    <item>
      <title>[reciping 3차]Terraform으로 EKS 기반 인프라 구축하기 (2)</title>
      <link>https://670811.tistory.com/120</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762281428806&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Terraform으로 EKS 기반 인프라 구축하기 | Notion&quot; data-og-description=&quot;1. 인텔리제이에서 테라폼 만들기&quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/Terraform-EKS-2690661ce62880908eafea7c3e73742c&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&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;Terraform으로 EKS 기반 인프라 구축하기 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 인텔리제이에서 테라폼 만들기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. Fluent Bit DaemonSet 구성하기(Helm Provider를 이용한 배포 자동화)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Helm chart로 배포하는 것 뿐만 아니라, Helm Chart + Terraform 방식으로 재구성하고 Terraform에 있는 Helm Provider를 이용해 배포 자동화를 구현하겠습니다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762281463759&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reciping-k8s-resources/
└── logging/
    ├── fluent-bit-configmap.yaml
    └── fluent-bit-daemonset.yaml
    
# 원래 버전은 위와 같으나(helm으로만 하는 것), 자동화 설정을 테라폼에서 하였으니 이 부분은 지워도 됩니다.&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;여기서 configmap이란? : 로그 포맷, 출력 대상, 필터 등 공통 설정값을 따로 관리 Terraform Helm Provider란? : 배포를 GitOps 스타일로 관리, 인프라 코드에 배포 상태를 통합&lt;/blockquote&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. AWS에서 제공하는 Fluentbit 공식 Helm chart 설치&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Terraform에서 helm_release를 통해 배포할 때는 Helm CLI 명령어를 직접 쓰지 않고, Terraform이 Helm Provider를 통해 Helm Chart를 알아서 받아와서 설치합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762281546328&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm repo add fluent https://fluent.github.io/helm-charts
helm repo update&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;2. 태깅 포함 Fluent Bit DaemonSet을 Helm + Terraform으로 자동화 구성하기&lt;/p&gt;
&lt;pre id=&quot;code_1762281562970&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reciping-terraform/
├── modules/
│   └── fluent-bit/
│       ├── main.tf                  # Helm Release 정의
│       ├── variables.tf             # Helm에 넘겨줄 변수 정의
│       ├── outputs.tf               # Helm 설치 결과 출력 정의
│       └── values.yaml              # Helm chart용 Fluent Bit 설정
└── environments/
    └── prod/
        ├── main.tf                  # module &quot;fluent-bit&quot; 호출
        ├── variables.tf             # 모듈에 넘겨줄 변수 선언
        └── terraform.tfvars         # 실제 배포 환경 변수 주입&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762281571074&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 테라폼/생성 배포하는 법 다 완수 후, 해야할 일

# 1. fluent bit pod 확인
kubectl get pods -n observability

# 2. 로그 수집 정상 여부 확인(&amp;lt;fluent-bit-pod-name&amp;gt;에 위에서 name 뜬거 복붙)
kubectl logs -n observability &amp;lt;fluent-bit-pod-name&amp;gt;

# 3. Fluent Bit DaemonSet 확인
kubectl get pods -n observability -l app.kubernetes.io/name=fluent-bit

# 4. kafka에 정상 수집 확인
kafka-console-consumer.sh \
  --bootstrap-server 10.0.128.81:9092 \
  --topic logs.observability \
  --from-beginning&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종 결과 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/fluent-bit&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/tree/dev/modules/fluent-bit&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762281588686&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-terraform/modules/fluent-bit at dev &amp;middot; Reciping/reciping-terraform&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - 테라폼. Contribute to Reciping/reciping-terraform development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/fluent-bit&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/fluent-bit&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ddWye3/hyZMBFMR4U/qkWRbMVKpN7I6oIdaGUTgK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/beRe7R/hyZMDDAHe9/vJCERlh9rv5jPUEF5iK1N0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/fluent-bit&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/fluent-bit&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ddWye3/hyZMBFMR4U/qkWRbMVKpN7I6oIdaGUTgK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/beRe7R/hyZMDDAHe9/vJCERlh9rv5jPUEF5iK1N0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-terraform/modules/fluent-bit at dev &amp;middot; Reciping/reciping-terraform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - 테라폼. Contribute to Reciping/reciping-terraform development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 각 서버를 Pod에 띄우기 &amp;amp; ArgoCD 세팅(CD)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ECR에 prod버전 이미지를 업로드한 후의 배포 문서입니다. ECR에 올리는 과정은 다음 과정에 정리되어 있습니다. (4. ECR 생성하기 참고) &lt;br /&gt; ️ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 - 7. ECR 생성하기&lt;br /&gt;혹은 CI 스크립트가 github actions에 세팅되어있으면 ECR에 이미지 쉽게 업로드 되어있으니 참고&lt;br /&gt;https://github.com/Reciping/reciping-user-service-BE/blob/dev/.github/workflows/ci.yml&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hem chart로 정의하고 본격적인 배포를 해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762281651160&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reciping-k8s-resources/
└── charts/
    └── reciping-like-service/
        ├── Chart.yaml          &amp;larr; 
        ├── values.yaml         &amp;larr; 실제 JWT 값 등을 저장하는 장소(진짜 적용은 secret)
        └── templates/
            ├── rollout.yaml    &amp;larr;   (카나리/블루그린 유연하게 변경 가능)
            ├── service.yaml    &amp;larr;   ClusterIP 서비스 정의
            ├── ingress.yaml    &amp;larr;   선택사항) ALB 연동시 필요(ALB 연동용 Ingress 리소스)
            ├── configmap.yaml  &amp;larr;   application-prod.yaml (환경변수) 주입
            ├── secret.yaml     &amp;larr;   JWT/DB credential 등 민감 정보&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안에 내용들은 주석으로 설명을 세세하게 달았습니다. 커밋 참고해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/26853ccbdf3bae06192112f13d7299911fa36cd2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/commit/26853ccbdf3bae06192112f13d7299911fa36cd2&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762281671054&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:sparkles: feat : update helm chart(reciping-like-service) &amp;middot; Reciping/reciping-k8s-resources@26853cc&quot; data-og-description=&quot;+ name: like-service # 서비스 이름. Rollout, Ingress, DNS 모두 이 이름을 사용하게 됨&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/26853ccbdf3bae06192112f13d7299911fa36cd2&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/26853ccbdf3bae06192112f13d7299911fa36cd2&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/26853ccbdf3bae06192112f13d7299911fa36cd2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/26853ccbdf3bae06192112f13d7299911fa36cd2&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;:sparkles: feat : update helm chart(reciping-like-service) &amp;middot; Reciping/reciping-k8s-resources@26853cc&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;+ name: like-service # 서비스 이름. Rollout, Ingress, DNS 모두 이 이름을 사용하게 됨&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) like-service여서 다른 서비스(user-service..) 주석 달아놓은 커밋 참고하시면 됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8-1 . 가장 처음 CD 시작할 시, argoCD UI가 아닌 argo CLI로 배포하기&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;ArgoCD 네임스페이스 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 보통 ArgoCD는 argocd라는 네임스페이스에 설치하는 것이 업계 표준입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762281708074&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl create namespace argocd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. ArgoCD Helm 저장소 추가&lt;/p&gt;
&lt;pre id=&quot;code_1762281722308&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm repo add argo https://argoproj.github.io/argo-helm
helm repo update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. helm chart로 argoCD 설치&lt;/p&gt;
&lt;pre id=&quot;code_1762281737505&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm install argocd argo/argo-cd \
  --namespace argocd \
  --create-namespace \
  --set server.service.type=LoadBalancer

# argo/argo-cd: ArgoCD의 공식 Helm Chart.
# --namespace argocd: 앞서 만든 네임스페이스에 설치.
# --set server.service.type=LoadBalancer: ArgoCD Web UI를 외부에서 접속할 수 있도록 ELB 생&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. ArgoCD 제대로 설치되어있는지 확인&lt;/p&gt;
&lt;pre id=&quot;code_1762281752051&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get all -n argocd&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;image (1).png&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M486z/dJMcaeeVuAr/1gxvxFXw7Auofi5mBKg5j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M486z/dJMcaeeVuAr/1gxvxFXw7Auofi5mBKg5j1/img.png&quot; data-alt=&quot;결과화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M486z/dJMcaeeVuAr/1gxvxFXw7Auofi5mBKg5j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM486z%2FdJMcaeeVuAr%2F1gxvxFXw7Auofi5mBKg5j1%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;1357&quot; height=&quot;512&quot; data-filename=&quot;image (1).png&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;512&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;+) &lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;1&quot;&gt;ArgoCD CLI 설치&lt;/span&gt;하고 아래 명령어로 제대로 설치되어있는지 확인&lt;/p&gt;
&lt;pre id=&quot;code_1762281779156&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;argocd version&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;5. ArgoCD 서버에 CLI 로그인하기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ArgoCD는 CLI를 사용하려면 먼저 로그인해야합니다. 그 전에 포트포워딩을 먼저 해야 CLI에서 localhost로 통신할 수 있습니다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762281817944&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl port-forward svc/argocd-server -n argocd 8080:443

# 로컬의 8080 포트를 ArgoCD 서버의 443 포트에 연결&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 포트포워딩 후, 로그인하기&lt;/p&gt;
&lt;pre id=&quot;code_1762281835213&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;argocd login localhost:8080 --username admin --password &amp;lt;초기 비밀번호&amp;gt;

# 여기서 초기 비밀번호는 아랫 명령어로 찾을 수 있음
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=&quot;{.data.password}&quot; | base64 -d&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. ArgoCD에 Git 연동 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762281851154&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;argocd repo add https://github.com/Reciping/reciping-k8s-resources \
  --username &amp;lt;YOUR_USERNAME&amp;gt; \
  --password &amp;lt;YOUR_PASSWORD&amp;gt;

# 여기서 &amp;lt;YOUR_USERNAME&amp;gt;는 깃허브 닉네임 (예 : beginninggrace)
# &amp;lt;YOUR_PASSWORD&amp;gt;는 token(classic)에서 토큰 발급 후 나온 시리얼값&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;image (2).png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3JiSg/dJMcadtylHm/CeoTYkGH8OkwkSj9xvf9P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3JiSg/dJMcadtylHm/CeoTYkGH8OkwkSj9xvf9P0/img.png&quot; data-alt=&quot;결과화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3JiSg/dJMcadtylHm/CeoTYkGH8OkwkSj9xvf9P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3JiSg%2FdJMcadtylHm%2FCeoTYkGH8OkwkSj9xvf9P0%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;1016&quot; height=&quot;129&quot; data-filename=&quot;image (2).png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;129&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이제 본격적으로 배포하기 위해, Application 리소스 정의하려고 합니다. ArgoCD에 Helm Chart를 기반으로 Application을 생성해야 실제 배포가 이뤄지기 때문입니다. &lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[ 필요한 정보 ]&lt;br /&gt;&lt;br /&gt;-name: gateway-app (원하는 이름으로 설정) &lt;br /&gt;-repo: GitHub 저장소 URL -path: Helm Chart 디렉토리 경로 (예: helm/gateway) &lt;br /&gt;-dest-server: Kubernetes API 주소 (보통 https://kubernetes.default.svc) &lt;br /&gt;-dest-namespace: 네임스페이스 (예: reciping) -values: values-prod.yaml을 사용하고 있다면 해당 경로 지정 &lt;br /&gt;&amp;rArr; 이 옵션을 주면 기본 values.yaml을 기반으로 하되, values-prod.yaml의 값으로 덮어씌워서 배포한다는 뜻 &lt;br /&gt;&amp;rArr; 우리는 아직 없으니 빼두기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 5번 과정(로컬의 8080 포트를 ArgoCD 서버의 443 포트에 연결)후, 그 다음 스텝입니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Argo CD 로그인&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1762282029954&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;argocd login localhost:8080 --username admin --password ZSWm4a4eI7hDl17I --insecure

# --insecure는 포트포워딩을 통해 HTTPS 인증서를 무시하므로 꼭 붙이기&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;2. appliaction 생성&lt;/p&gt;
&lt;pre id=&quot;code_1762282046614&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;argocd app create gateway-app \
  --repo https://github.com/Reciping/reciping-k8s-resources \
  --path gateway \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace reciping \
  --sync-policy automated&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;image (4).png&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWCz2l/dJMcab3zFzP/xHImwgqnqjKqAj3KhYmHTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWCz2l/dJMcab3zFzP/xHImwgqnqjKqAj3KhYmHTK/img.png&quot; data-alt=&quot;결과화면2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWCz2l/dJMcab3zFzP/xHImwgqnqjKqAj3KhYmHTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWCz2l%2FdJMcab3zFzP%2FxHImwgqnqjKqAj3KhYmHTK%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;1410&quot; height=&quot;608&quot; data-filename=&quot;image (4).png&quot; data-origin-width=&quot;1410&quot; data-origin-height=&quot;608&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과화면2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 이제 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;Argo CD&lt;/span&gt;가 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;3&quot;&gt;reciping-gateway-service&lt;/span&gt;를 Helm Chart 기반으로 자동 동기화하게 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762282112194&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;argocd app get gateway-app

# 자동 동기화 상태 확인
# 이 명령어로 앱이 제대로 떠있는지 확인 가능
# 자동으로 Synced 상태로 바뀌었는지 확인하고, Healthy 상태여야 성공적으로 배포된 것&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;image (5).png&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Yjuaw/dJMcab3zFzQ/e2iVNcfkw731JkVHdPRvH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Yjuaw/dJMcab3zFzQ/e2iVNcfkw731JkVHdPRvH0/img.png&quot; data-alt=&quot;결과화면3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Yjuaw/dJMcab3zFzQ/e2iVNcfkw731JkVHdPRvH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYjuaw%2FdJMcab3zFzQ%2Fe2iVNcfkw731JkVHdPRvH0%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;874&quot; height=&quot;330&quot; data-filename=&quot;image (5).png&quot; data-origin-width=&quot;874&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과화면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;※ 추후에, 이미지 버전 업(v1.0.0 &amp;rarr; v1.0.1)이 됐을 시, 배포하는 방법&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;새로 빌드 및 ECR에 푸시&lt;/li&gt;
&lt;li&gt;Helm upgrade 다시 수행:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1762282178163&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm upgrade reciping-gateway ./charts/reciping-gateway-service -n reciping

# 최초로 배포할 때에는 helm inatall~로 하나 업데이트될 때는 이처럼 수행합니다&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;image (6).png&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;249&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjr3E1/dJMcaeMLpRR/Bpv1KQWiLxqHrjPJFdMsBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjr3E1/dJMcaeMLpRR/Bpv1KQWiLxqHrjPJFdMsBK/img.png&quot; data-alt=&quot;결과화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjr3E1/dJMcaeMLpRR/Bpv1KQWiLxqHrjPJFdMsBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcjr3E1%2FdJMcaeMLpRR%2FBpv1KQWiLxqHrjPJFdMsBK%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;1424&quot; height=&quot;249&quot; data-filename=&quot;image (6).png&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;249&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8-2 . 가장 처음 CD 시작할 시, argoCD UI가 아닌 YAML로 정의해서 kubectl apply로 배포하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더 구조는 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762282214420&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reciping-k8s-resources/
└── app/
    └── gateway-app.yaml&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;yaml파일을 생성해서 넣어줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762282232119&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: gateway-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/Reciping/reciping-k8s-resources
    targetRevision: HEAD
    path: charts/reciping-gateway-service
    helm:
      valueFiles:
        - values.yaml
  destination:
    server: https://kubernetes.default.svc
    namespace: reciping
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋 및 푸쉬 완료 후, 아래의 명령어를 치면 앱 배포가 완료됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762282245089&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f app/gateway-app.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파일이 클러스터에 적용되면 Argo CD는 이 Application을 인식하고 지정된 Helm Chart (charts/reciping-gateway-service)를 기준으로 자동 배포합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;❇️ 최종 버전 : argoCD UI 보기 위한 argocd용 A 레코드 만들고 helm chart로 쉽게 배포하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. A 레코드 만들기(&lt;a href=&quot;https://argocd.reciping.kr&quot;&gt;https://argocd.reciping.kr&lt;/a&gt;) - 테라폼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/0934a711109930b709b1d87e6155a00a28960938&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/commit/0934a711109930b709b1d87e6155a00a28960938&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762282280435&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:recycle: refactor : add A record from route53-acm modules &amp;middot; Reciping/reciping-terraform@0934a71&quot; data-og-description=&quot;@@ -36,3 +37,29 @@ resource &amp;quot;aws_acm_certificate_validation&amp;quot; &amp;quot;cert&amp;quot; {&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/0934a711109930b709b1d87e6155a00a28960938&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/commit/0934a711109930b709b1d87e6155a00a28960938&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GjWf3/hyZMZGgvXo/JkEarKF8p389Dk0LgXRo91/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/tWS8V/hyZMXXyM8c/kyXXhU242n5oCHFOZ4zeT1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/0934a711109930b709b1d87e6155a00a28960938&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/0934a711109930b709b1d87e6155a00a28960938&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GjWf3/hyZMZGgvXo/JkEarKF8p389Dk0LgXRo91/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/tWS8V/hyZMXXyM8c/kyXXhU242n5oCHFOZ4zeT1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:recycle: refactor : add A record from route53-acm modules &amp;middot; Reciping/reciping-terraform@0934a71&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;@@ -36,3 +37,29 @@ resource &quot;aws_acm_certificate_validation&quot; &quot;cert&quot; {&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/06360454fedd396c42f23d567cd8aa439a25af4e&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/commit/06360454fedd396c42f23d567cd8aa439a25af4e&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762282327733&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:recycle: refactor : add argoCD A record from route53-acm modules(wat&amp;hellip; &amp;middot; Reciping/reciping-terraform@0636045&quot; data-og-description=&quot;&amp;hellip;ch argoCD UI)&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/06360454fedd396c42f23d567cd8aa439a25af4e&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/commit/06360454fedd396c42f23d567cd8aa439a25af4e&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/KVrOs/hyZMModfKY/HQo5m4Xj07xTs28S6jllL0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/o6XIh/hyZMA09guO/WhVNGaKpzO9fDmCMrIeeS0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/06360454fedd396c42f23d567cd8aa439a25af4e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/06360454fedd396c42f23d567cd8aa439a25af4e&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/KVrOs/hyZMModfKY/HQo5m4Xj07xTs28S6jllL0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/o6XIh/hyZMA09guO/WhVNGaKpzO9fDmCMrIeeS0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:recycle: refactor : add argoCD A record from route53-acm modules(wat&amp;hellip; &amp;middot; Reciping/reciping-terraform@0636045&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;hellip;ch argoCD UI)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;[   2번 하기 전 체크 리스트 ]&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ALB Deployment 상태가 (2/2 replicas, 모두 READY) 이런 식으로 되어있는지 확인&lt;/li&gt;
&lt;li&gt;ALB pod 상태가 모두 1/1 Running 상태인지 확인&lt;/li&gt;
&lt;li&gt;설치 경로가 kube-system 네임스페이스인지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (7).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;992&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Snw01/dJMcajm0dcq/vEbOaaX4kRICFvOpLJr0v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Snw01/dJMcajm0dcq/vEbOaaX4kRICFvOpLJr0v1/img.png&quot; data-alt=&quot;최종결과화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Snw01/dJMcajm0dcq/vEbOaaX4kRICFvOpLJr0v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSnw01%2FdJMcajm0dcq%2FvEbOaaX4kRICFvOpLJr0v1%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;1916&quot; height=&quot;992&quot; data-filename=&quot;image (7).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;992&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종결과화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762282363243&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 초기 관리자 비밀번호 확인
  kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=&quot;{.data.password}&quot; | base64 -d; echo&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;image (8).png&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;991&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cP2zbE/dJMcaacwCdu/WAVfprEBPvvtzVsNqbWhh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cP2zbE/dJMcaacwCdu/WAVfprEBPvvtzVsNqbWhh0/img.png&quot; data-alt=&quot;비밀번호 업데이트하기 : Username : admin / Password : kelly123 입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cP2zbE/dJMcaacwCdu/WAVfprEBPvvtzVsNqbWhh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcP2zbE%2FdJMcaacwCdu%2FWAVfprEBPvvtzVsNqbWhh0%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;1917&quot; height=&quot;991&quot; data-filename=&quot;image (8).png&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;991&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;비밀번호 업데이트하기 : Username : admin / Password : kelly123 입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) gateway-service 배포시, 아래와 같이 명령어 입력하기만 하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;( reciping-k8s-resource 레포지토리에 푸쉬된 상태, 즉 gitOps 기반으로 동작되기 때문에 해당 레포지토리 참조)&lt;/p&gt;
&lt;pre id=&quot;code_1762282392281&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl apply -f app/gateway-app.yaml&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;image (9).png&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;991&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qpBq4/dJMcacald4u/tPkkgpUQkhQ7Wk9793ZYV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qpBq4/dJMcacald4u/tPkkgpUQkhQ7Wk9793ZYV1/img.png&quot; data-alt=&quot;그러면 이와 같이 UI로 배포되는 과정을 눈으로 확인할 수 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qpBq4/dJMcacald4u/tPkkgpUQkhQ7Wk9793ZYV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqpBq4%2FdJMcacald4u%2FtPkkgpUQkhQ7Wk9793ZYV1%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;1917&quot; height=&quot;991&quot; data-filename=&quot;image (9).png&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;991&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그러면 이와 같이 UI로 배포되는 과정을 눈으로 확인할 수 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. ACM / Route53 모듈 만들기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;가비아에서 산 DNS인 reciping.kr을 연결해보겠습니다. 기존에 AWS 콘솔로 설정했던 방법은 아래를 참고하시면 됩니다. &amp;rarr; 왜 설정하고 이게 뭔지 다 정리되어 있습니다.&lt;br /&gt;&lt;br /&gt; ️ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 - 3. HTTPS 연결을 위한 ACM 인증서 발급하기&lt;br /&gt; ️ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 - 5. Route 53에서 A 레코드 생성 (api.reciping.kr &amp;rarr; ALB)&lt;br /&gt; 프론트단의 Route53 + S3 + CloudFront 설정하기 - 1. 가비아에서 산 DNS를 Route53에 연결하기&lt;/blockquote&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. ACM-Route53 모듈 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/fa830122c9f7d764777ce95517731a210bd8934a&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/commit/fa830122c9f7d764777ce95517731a210bd8934a&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762282487611&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:sparkles: feat : set acm-route53 modules &amp;middot; Reciping/reciping-terraform@fa83012&quot; data-og-description=&quot;@@ -67,3 +67,22 @@ module &amp;quot;fluent_bit&amp;quot; {&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/fa830122c9f7d764777ce95517731a210bd8934a&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/commit/fa830122c9f7d764777ce95517731a210bd8934a&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vrSM5/hyZMLixZed/MBk978n9h0xyA97FMCcUJ1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/TWJua/hyZMzgTP2n/yaJTfMi2CVJQ1HZxf5POhk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/fa830122c9f7d764777ce95517731a210bd8934a&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/fa830122c9f7d764777ce95517731a210bd8934a&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vrSM5/hyZMLixZed/MBk978n9h0xyA97FMCcUJ1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/TWJua/hyZMzgTP2n/yaJTfMi2CVJQ1HZxf5POhk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:sparkles: feat : set acm-route53 modules &amp;middot; Reciping/reciping-terraform@fa83012&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;@@ -67,3 +67,22 @@ module &quot;fluent_bit&quot; {&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. gateway-service helm chart로 세부 설정해서 배포하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (10).png&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQiksE/dJMb99SdSNH/w2iE0xhac6f1stzFpMMVPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQiksE/dJMb99SdSNH/w2iE0xhac6f1stzFpMMVPK/img.png&quot; data-alt=&quot;gateway-service와 route53(DNS)간의 주요 포인트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQiksE/dJMb99SdSNH/w2iE0xhac6f1stzFpMMVPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQiksE%2FdJMb99SdSNH%2Fw2iE0xhac6f1stzFpMMVPK%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;868&quot; height=&quot;327&quot; data-filename=&quot;image (10).png&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;gateway-service와 route53(DNS)간의 주요 포인트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/599a8238c30daa21ffa6d3ed1e68e8779f65e237&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/commit/599a8238c30daa21ffa6d3ed1e68e8779f65e237&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762282518423&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:sparkles: feat : update helm chart(reciping-gateway-service) &amp;middot; Reciping/reciping-k8s-resources@599a823&quot; data-og-description=&quot;+ {&amp;quot;Type&amp;quot;: &amp;quot;redirect&amp;quot;, &amp;quot;RedirectConfig&amp;quot;: { &amp;quot;Host&amp;quot;: &amp;quot;reciping.kr&amp;quot;, &amp;quot;StatusCode&amp;quot;: &amp;quot;HTTP_301&amp;quot;}}&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/599a8238c30daa21ffa6d3ed1e68e8779f65e237&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/599a8238c30daa21ffa6d3ed1e68e8779f65e237&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cwhw8w/hyZM39IdWm/yS8FJyXudb5W9Ha7gxk9Z0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/FeGzS/hyZM0d5kgI/2wgMFjkJ01ACf9oFdN5Ydk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/599a8238c30daa21ffa6d3ed1e68e8779f65e237&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/599a8238c30daa21ffa6d3ed1e68e8779f65e237&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cwhw8w/hyZM39IdWm/yS8FJyXudb5W9Ha7gxk9Z0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/FeGzS/hyZM0d5kgI/2wgMFjkJ01ACf9oFdN5Ydk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:sparkles: feat : update helm chart(reciping-gateway-service) &amp;middot; Reciping/reciping-k8s-resources@599a823&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;+ {&quot;Type&quot;: &quot;redirect&quot;, &quot;RedirectConfig&quot;: { &quot;Host&quot;: &quot;reciping.kr&quot;, &quot;StatusCode&quot;: &quot;HTTP_301&quot;}}&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포 과정은 &lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;1&quot;&gt;7. 각 서버를 Pod에 띄우기 &amp;amp; ArgoCD 세팅(CD)&lt;/span&gt; 참고하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image (11).png&quot; data-origin-width=&quot;1406&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wgEjf/dJMcadG5uUF/w6lsW374pAN8GNiBjck3u0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wgEjf/dJMcadG5uUF/w6lsW374pAN8GNiBjck3u0/img.png&quot; data-alt=&quot;배포 후, 결과 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wgEjf/dJMcadG5uUF/w6lsW374pAN8GNiBjck3u0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwgEjf%2FdJMcadG5uUF%2Fw6lsW374pAN8GNiBjck3u0%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;1406&quot; height=&quot;279&quot; data-filename=&quot;image (11).png&quot; data-origin-width=&quot;1406&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;배포 후, 결과 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;10. DB(DocumentDB, RDS), S3 모듈 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) documentDB 모듈 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/documentdb&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/tree/dev/modules/documentdb&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762282566638&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-terraform/modules/documentdb at dev &amp;middot; Reciping/reciping-terraform&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - 테라폼. Contribute to Reciping/reciping-terraform development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/documentdb&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/documentdb&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iRgiN/hyZM5TZxGn/iKzaj0giNkWEBHoK6ZzdZ1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/spZ2i/hyZNb0Z3kA/aadMFehyfDXj0W5cV1nMO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/documentdb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/documentdb&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iRgiN/hyZM5TZxGn/iKzaj0giNkWEBHoK6ZzdZ1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/spZ2i/hyZNb0Z3kA/aadMFehyfDXj0W5cV1nMO0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-terraform/modules/documentdb at dev &amp;middot; Reciping/reciping-terraform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - 테라폼. Contribute to Reciping/reciping-terraform development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) rds 모듈 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/rds&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/tree/dev/modules/rds&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762282585948&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-terraform/modules/rds at dev &amp;middot; Reciping/reciping-terraform&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - 테라폼. Contribute to Reciping/reciping-terraform development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/rds&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/rds&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dzpEG8/hyZNbs88Ui/tlwzXe9m0G8jNAuipJGIy1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/PyHIj/hyZM4OleA9/Xbm1DZy1rOhDEkk2TgfK2K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/rds&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/rds&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dzpEG8/hyZNbs88Ui/tlwzXe9m0G8jNAuipJGIy1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/PyHIj/hyZM4OleA9/Xbm1DZy1rOhDEkk2TgfK2K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-terraform/modules/rds at dev &amp;middot; Reciping/reciping-terraform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - 테라폼. Contribute to Reciping/reciping-terraform development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) s3 모듈 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/s3&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/tree/dev/modules/s3&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762282600181&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;reciping-terraform/modules/s3 at dev &amp;middot; Reciping/reciping-terraform&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - 테라폼. Contribute to Reciping/reciping-terraform development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/s3&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/s3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/YOqUN/hyZMB6Rijh/K3DKCe9CamIIgPkuCCjfJk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/0SE93/hyZMPL1efu/33BhnAAKviejGKRGy7j6I1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/s3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/tree/dev/modules/s3&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/YOqUN/hyZMB6Rijh/K3DKCe9CamIIgPkuCCjfJk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/0SE93/hyZMPL1efu/33BhnAAKviejGKRGy7j6I1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;reciping-terraform/modules/s3 at dev &amp;middot; Reciping/reciping-terraform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - 테라폼. Contribute to Reciping/reciping-terraform development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;terraform apply 완료 후, db 설정들은 각 secret에 맞춰 업로드하면 됩니다.&lt;/p&gt;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/120</guid>
      <comments>https://670811.tistory.com/120#entry120comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:45:31 +0900</pubDate>
    </item>
    <item>
      <title>[reciping 3차]Terraform으로 EKS 기반 인프라 구축하기 (1)</title>
      <link>https://670811.tistory.com/119</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762280285229&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Terraform으로 EKS 기반 인프라 구축하기 | Notion&quot; data-og-description=&quot;1. 인텔리제이에서 테라폼 만들기&quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/Terraform-EKS-2690661ce62880908eafea7c3e73742c&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/Terraform-EKS-2690661ce62880908eafea7c3e73742c&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;Terraform으로 EKS 기반 인프라 구축하기 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 인텔리제이에서 테라폼 만들기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 인텔리제이에서 테라폼 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃허브에서 레포지토리 만들 때, .gitignore: Terraform 템플릿 선택하고 로컬에 clone합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-11 오후 5.04.17.png&quot; data-origin-width=&quot;2780&quot; data-origin-height=&quot;1784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cV2xAM/dJMcaaQ8dbz/Eg9PDPlswLhazzO0LigR01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cV2xAM/dJMcaaQ8dbz/Eg9PDPlswLhazzO0LigR01/img.png&quot; data-alt=&quot;일단 마켓플레이스에서 테라폼 플러그인 다운로드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cV2xAM/dJMcaaQ8dbz/Eg9PDPlswLhazzO0LigR01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcV2xAM%2FdJMcaaQ8dbz%2FEg9PDPlswLhazzO0LigR01%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;2780&quot; height=&quot;1784&quot; data-filename=&quot;스크린샷 2025-06-11 오후 5.04.17.png&quot; data-origin-width=&quot;2780&quot; data-origin-height=&quot;1784&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;테라폼 CLI 설치&lt;/p&gt;
&lt;pre id=&quot;code_1762280388386&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew tap hashicorp/tap
brew install hashicorp/tap/terraform
terraform -v&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;스크린샷 2025-06-11 오후 5.10.29.png&quot; data-origin-width=&quot;1268&quot; data-origin-height=&quot;1606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDwWGG/dJMcaj1BJMq/qDJ5rbrgGCO1L62DaKaLIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDwWGG/dJMcaj1BJMq/qDJ5rbrgGCO1L62DaKaLIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDwWGG/dJMcaj1BJMq/qDJ5rbrgGCO1L62DaKaLIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDwWGG%2FdJMcaj1BJMq%2FqDJ5rbrgGCO1L62DaKaLIK%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;1268&quot; height=&quot;1606&quot; data-filename=&quot;스크린샷 2025-06-11 오후 5.10.29.png&quot; data-origin-width=&quot;1268&quot; data-origin-height=&quot;1606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 테라폼 적용하기 위한 CLI용 키페어 발급 및 등록&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-13 오전 9.54.55.png&quot; data-origin-width=&quot;3812&quot; data-origin-height=&quot;1866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BwIuW/dJMcabvJHdQ/4DyFKbm5I2kUdSaoat8x81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BwIuW/dJMcabvJHdQ/4DyFKbm5I2kUdSaoat8x81/img.png&quot; data-alt=&quot;본인 계정에서 cli용 키페어 발급&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BwIuW/dJMcabvJHdQ/4DyFKbm5I2kUdSaoat8x81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBwIuW%2FdJMcabvJHdQ%2F4DyFKbm5I2kUdSaoat8x81%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;3812&quot; height=&quot;1866&quot; data-filename=&quot;스크린샷 2025-06-13 오전 9.54.55.png&quot; data-origin-width=&quot;3812&quot; data-origin-height=&quot;1866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;본인 계정에서 cli용 키페어 발급&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;span data-token-index=&quot;1&quot;&gt;Access Key ID / Secret Access Key&lt;/span&gt;를 복사해서 아래 명령어로 CLI에 등록&lt;/p&gt;
&lt;pre id=&quot;code_1762280496714&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws configure&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762280503535&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;AWS Access Key ID     [None]: (복사한 키)
AWS Secret Access Key [None]: (복사한 시크릿 키)
Default region name   [None]: ap-northeast-2
Default output format [None]: json&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. VPC 모듈 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/d703134e94028821c8dc8c2a63135ae9988bf23d&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/commit/d703134e94028821c8dc8c2a63135ae9988bf23d&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762280532228&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:sparkles: feat : add vpc modules &amp;middot; Reciping/reciping-terraform@d703134&quot; data-og-description=&quot;+ # - VPC, 서브넷, NAT, IGW, RT 구성 정의&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/d703134e94028821c8dc8c2a63135ae9988bf23d&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/commit/d703134e94028821c8dc8c2a63135ae9988bf23d&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d770U6/hyZMOsLauC/t4qxTlOdv6NeiF8DE6SLD1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/liPyP/hyZMRiLz27/9pPGGDQE0C5RyFtra9Mzg1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/d703134e94028821c8dc8c2a63135ae9988bf23d&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/d703134e94028821c8dc8c2a63135ae9988bf23d&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d770U6/hyZMOsLauC/t4qxTlOdv6NeiF8DE6SLD1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/liPyP/hyZMRiLz27/9pPGGDQE0C5RyFtra9Mzg1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:sparkles: feat : add vpc modules &amp;middot; Reciping/reciping-terraform@d703134&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;+ # - VPC, 서브넷, NAT, IGW, RT 구성 정의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/31680cfca3735ff947b2a3561de7ae5a2038d64b&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/commit/31680cfca3735ff947b2a3561de7ae5a2038d64b&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762280542008&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:sparkles: feat : add vpc modules &amp;middot; Reciping/reciping-terraform@31680cf&quot; data-og-description=&quot;+ value = &amp;quot;&amp;quot; # The actual value to be outputted&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/31680cfca3735ff947b2a3561de7ae5a2038d64b&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/commit/31680cfca3735ff947b2a3561de7ae5a2038d64b&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cMQ6Xk/hyZMN8uVjK/vJUgvjKn5pFXZtJuSi2ZAK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Ijth2/hyZMzOI1vq/y6PqXeRyKN59QEucHLk1Uk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/31680cfca3735ff947b2a3561de7ae5a2038d64b&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/31680cfca3735ff947b2a3561de7ae5a2038d64b&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cMQ6Xk/hyZMN8uVjK/vJUgvjKn5pFXZtJuSi2ZAK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Ijth2/hyZMzOI1vq/y6PqXeRyKN59QEucHLk1Uk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:sparkles: feat : add vpc modules &amp;middot; Reciping/reciping-terraform@31680cf&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;+ value = &quot;&quot; # The actual value to be outputted&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  필수 : 테라폼 생성/배포 하는 법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 앞으로 매 모듈 만들 때마다 해당 과정을 반복하여야 합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;위치로 가기&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1762280600732&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /Users/sini/Desktop/dev_sini/reciping-terraform/env/prod&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 테라폼 초기화&lt;/p&gt;
&lt;pre id=&quot;code_1762280621357&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;terraform init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 코드 검사(문법) &amp;rarr; 문법 에러 있으면 여기서 먼저 잡힙니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762280639720&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;terraform validate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 실제 적용될 변경 미리 보기&lt;/p&gt;
&lt;pre id=&quot;code_1762280655742&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;terraform plan&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. AWS에 실제 적용&lt;/p&gt;
&lt;pre id=&quot;code_1762280673605&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;terraform apply

# 혹은 특정 테라폼 모듈(타겟) 실행하고 싶을 때(예 : EKS 클러스터)
terraform apply -target=module.eks_cluster&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 결과 확인&lt;/p&gt;
&lt;pre id=&quot;code_1762280689468&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;terraform output&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 베스천 모듈 만들기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-12 오후 6.28.00.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1858&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q3M7i/dJMcaiayHns/1xKDP9ZzrOmPQfIbSt7qfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q3M7i/dJMcaiayHns/1xKDP9ZzrOmPQfIbSt7qfk/img.png&quot; data-alt=&quot;pem키는 수동으로 생성(베스천용 팸키와 운영레벨 범용성 팸키 두 가지 만들기)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q3M7i/dJMcaiayHns/1xKDP9ZzrOmPQfIbSt7qfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ3M7i%2FdJMcaiayHns%2F1xKDP9ZzrOmPQfIbSt7qfk%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;3840&quot; height=&quot;1858&quot; data-filename=&quot;스크린샷 2025-06-12 오후 6.28.00.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1858&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;pem키는 수동으로 생성(베스천용 팸키와 운영레벨 범용성 팸키 두 가지 만들기)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762280728580&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 베스천 서버 권한 주고 SSH 접속
chmod 400 /Users/sini/Desktop/dev_documents/reciping-bastion-ec2-key.pem

ssh -i /Users/sini/Desktop/dev_documents/reciping-bastion-ec2-key.pem ec2-user@43.202.58.107


# [0] 베스천 서버 기본 패키지 전체 업데이트 (시간 조금 걸릴 수 있음)
sudo yum update -y

# [1] EKS용 도구 설치를 위한 기본 패키지 설치
sudo yum install -y unzip curl wget git

# [2] kubectl 설치 (EKS용 Kubernetes CLI)
curl -o kubectl https://s3.us-west-2.amazonaws.com/amazon-eks/1.29.0/2024-05-09/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin
kubectl version --client  # 버전 확인

# [3] eksctl 설치 (EKS 클러스터 관리용)
curl --location &quot;https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz&quot; | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version  # 버전 확인

# [4] Helm 설치 (쿠버네티스 패키지 매니저)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version  # 버전 확인

# 
# -----------------------------------------------------------------------------
# [5] aws configure 실행
aws configure

# [6] EKS 구축 후, EKS 클러스터 kubeconfig 연동(Bastion 서버에서 EKS 클러스터에 연결할 수 있도록 kubeconfig 설정)
aws eks update-kubeconfig \
  --region ap-northeast-2 \
  --name reciping-cluster
  
# [7] 연결 테스트
kubectl get nodes&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/9e35bd26ffe74ea4e7275a2e2410feb894f30755&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/commit/9e35bd26ffe74ea4e7275a2e2410feb894f30755&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762280739617&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:sparkles: feat : add bastion modules &amp;middot; Reciping/reciping-terraform@9e35bd2&quot; data-og-description=&quot;@@ -32,3 +32,31 @@ variable &amp;quot;private_db_subnet_cidrs&amp;quot; {&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/9e35bd26ffe74ea4e7275a2e2410feb894f30755&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/commit/9e35bd26ffe74ea4e7275a2e2410feb894f30755&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/9e35bd26ffe74ea4e7275a2e2410feb894f30755&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/9e35bd26ffe74ea4e7275a2e2410feb894f30755&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;:sparkles: feat : add bastion modules &amp;middot; Reciping/reciping-terraform@9e35bd2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;@@ -32,3 +32,31 @@ variable &quot;private_db_subnet_cidrs&quot; {&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. EKS 클러스터 및 node Group 모듈 생성하기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사전 작업&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5-1) EKS 클러스터용 IAM Role 만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.26.29.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpdfL3/dJMcabCvgp9/waMdTYuKdnbrEzZ0eGZBbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpdfL3/dJMcabCvgp9/waMdTYuKdnbrEzZ0eGZBbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpdfL3/dJMcabCvgp9/waMdTYuKdnbrEzZ0eGZBbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpdfL3%2FdJMcabCvgp9%2FwaMdTYuKdnbrEzZ0eGZBbk%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;3840&quot; height=&quot;1868&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.26.29.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.28.13.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6jx9O/dJMcaelG4dk/XUq4RhM3r09wAE6AZAN5fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6jx9O/dJMcaelG4dk/XUq4RhM3r09wAE6AZAN5fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6jx9O/dJMcaelG4dk/XUq4RhM3r09wAE6AZAN5fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6jx9O%2FdJMcaelG4dk%2FXUq4RhM3r09wAE6AZAN5fk%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;3840&quot; height=&quot;1866&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.28.13.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1866&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.29.42.png&quot; data-origin-width=&quot;3812&quot; data-origin-height=&quot;1868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4EidA/dJMcai9s2vc/XW7cfoIoGtmdZWBaJhDTmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4EidA/dJMcai9s2vc/XW7cfoIoGtmdZWBaJhDTmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4EidA/dJMcai9s2vc/XW7cfoIoGtmdZWBaJhDTmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4EidA%2FdJMcai9s2vc%2FXW7cfoIoGtmdZWBaJhDTmk%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;3812&quot; height=&quot;1868&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.29.42.png&quot; data-origin-width=&quot;3812&quot; data-origin-height=&quot;1868&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;5-2) 노드그룹용 IAM Role 만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.31.21.png&quot; data-origin-width=&quot;3812&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Usj6K/dJMcaeFZPxY/UqdH5Ut0dPK97kdERzK530/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Usj6K/dJMcaeFZPxY/UqdH5Ut0dPK97kdERzK530/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Usj6K/dJMcaeFZPxY/UqdH5Ut0dPK97kdERzK530/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUsj6K%2FdJMcaeFZPxY%2FUqdH5Ut0dPK97kdERzK530%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;3812&quot; height=&quot;1870&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.31.21.png&quot; data-origin-width=&quot;3812&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.32.49.png&quot; data-origin-width=&quot;3814&quot; data-origin-height=&quot;1868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CJSLD/dJMcaap3Og8/xyXOyNeuLKkFrk2XbDZDRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CJSLD/dJMcaap3Og8/xyXOyNeuLKkFrk2XbDZDRK/img.png&quot; data-alt=&quot;이미지와 같은 role 선택 후, 생성 클릭하고 생성된 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CJSLD/dJMcaap3Og8/xyXOyNeuLKkFrk2XbDZDRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCJSLD%2FdJMcaap3Og8%2FxyXOyNeuLKkFrk2XbDZDRK%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;3814&quot; height=&quot;1868&quot; data-filename=&quot;스크린샷 2025-06-16 오후 9.32.49.png&quot; data-origin-width=&quot;3814&quot; data-origin-height=&quot;1868&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지와 같은 role 선택 후, 생성 클릭하고 생성된 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/2924742b1830b84bcb9dd84368d964b874fd7a03&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/commit/2924742b1830b84bcb9dd84368d964b874fd7a03&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762280847361&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:sparkles: feat : add eks cluster modules &amp;middot; Reciping/reciping-terraform@2924742&quot; data-og-description=&quot;+ value = aws_eks_cluster.this.certificate_authority[0].data&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/2924742b1830b84bcb9dd84368d964b874fd7a03&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/commit/2924742b1830b84bcb9dd84368d964b874fd7a03&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wnwsH/hyZM8JYtE9/L6SDRu0QKRFK9zFTUWs3o0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/uBfHn/hyZMsWms2U/TAQvo3ncPzT5K3sQje8UTk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/2924742b1830b84bcb9dd84368d964b874fd7a03&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/2924742b1830b84bcb9dd84368d964b874fd7a03&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wnwsH/hyZM8JYtE9/L6SDRu0QKRFK9zFTUWs3o0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/uBfHn/hyZMsWms2U/TAQvo3ncPzT5K3sQje8UTk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:sparkles: feat : add eks cluster modules &amp;middot; Reciping/reciping-terraform@2924742&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;+ value = aws_eks_cluster.this.certificate_authority[0].data&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/fba6c723cfb2349159b1d051d330eedc2c8103b3&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-terraform/commit/fba6c723cfb2349159b1d051d330eedc2c8103b3&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762280854288&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:sparkles: feat : add eks node group modules &amp;middot; Reciping/reciping-terraform@fba6c72&quot; data-og-description=&quot;@@ -14,3 +14,21 @@ resource &amp;quot;aws_eks_cluster&amp;quot; &amp;quot;this&amp;quot; {&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/fba6c723cfb2349159b1d051d330eedc2c8103b3&quot; data-og-url=&quot;https://github.com/Reciping/reciping-terraform/commit/fba6c723cfb2349159b1d051d330eedc2c8103b3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pQZT3/hyZNewDmWF/qHz00tzhglDy1xf2AmPDPK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/6mkqh/hyZMWj1Wy3/FF09Z2lhpFDtTpklQKgjVK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-terraform/commit/fba6c723cfb2349159b1d051d330eedc2c8103b3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-terraform/commit/fba6c723cfb2349159b1d051d330eedc2c8103b3&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pQZT3/hyZNewDmWF/qHz00tzhglDy1xf2AmPDPK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/6mkqh/hyZMWj1Wy3/FF09Z2lhpFDtTpklQKgjVK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:sparkles: feat : add eks node group modules &amp;middot; Reciping/reciping-terraform@fba6c72&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;@@ -14,3 +14,21 @@ resource &quot;aws_eks_cluster&quot; &quot;this&quot; {&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. ALB Ingress Controller 설치&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ALB Ingress Controller는 AWS ALB를 Kubernetes Ingress로 사용할 수 있도록 하는 컨트롤러 &amp;rArr; kubectl에서 Ingress만 정의하면 ALB가 자동 생성되도록 도와줌&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0. 사전작업&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-19 오전 10.41.23.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rsFTS/dJMcaap3Ohe/D2uef2TUugK4e8H2DRkE3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rsFTS/dJMcaap3Ohe/D2uef2TUugK4e8H2DRkE3K/img.png&quot; data-alt=&quot;modules/eks/main.tf
초기 구축할 때는 endpoint_public_access = true 로 두고 다음 과정 수행해야 합니다.
(나중에 운영환경일 때, false 로 바꿔줘야 합니다.)
terraform apply하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rsFTS/dJMcaap3Ohe/D2uef2TUugK4e8H2DRkE3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrsFTS%2FdJMcaap3Ohe%2FD2uef2TUugK4e8H2DRkE3K%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;960&quot; height=&quot;414&quot; data-filename=&quot;스크린샷 2025-06-19 오전 10.41.23.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;modules/eks/main.tf
초기 구축할 때는 endpoint_public_access = true 로 두고 다음 과정 수행해야 합니다.
(나중에 운영환경일 때, false 로 바꿔줘야 합니다.)
terraform apply하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762280954848&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# kubeconfig 설정
aws eks --region ap-northeast-2 update-kubeconfig --name reciping-cluster
# 노드 연결 확인하기
kubectl get nodes&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;1. OIDC Provider 연결&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;EKS 클러스터는 IRSA (IAM Roles for Service Accounts)방식으로 AWS 리소스 접근을 안전하게 제어할 수 있는 준비&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762280984895&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 사전 작업(로컬 터미널에서 실행)

# eksctl 설치
curl --silent --location &quot;https://github.com/eksctl-io/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz&quot; | tar xz -C /tmp

sudo mv /tmp/eksctl /usr/local/bin
eksctl version # 설치 후, 동작 확인&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;스크린샷 2025-06-19 오전 11.21.06.png&quot; data-origin-width=&quot;2332&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfGXUK/dJMcajm0c1R/OC8Y7tHK7UekgijB4bvnd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfGXUK/dJMcajm0c1R/OC8Y7tHK7UekgijB4bvnd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfGXUK/dJMcajm0c1R/OC8Y7tHK7UekgijB4bvnd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfGXUK%2FdJMcajm0c1R%2FOC8Y7tHK7UekgijB4bvnd1%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;2332&quot; height=&quot;210&quot; data-filename=&quot;스크린샷 2025-06-19 오전 11.21.06.png&quot; data-origin-width=&quot;2332&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762281000885&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# OIDC Provider 연결
eksctl utils associate-iam-oidc-provider \
  --region ap-northeast-2 \
  --cluster reciping-cluster \
  --approve&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;2. ALB Ingress Controller용 IAM 정책 생성&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;컨트롤러가 ALB, Target Group, Listener등을 자동으로 만들 수 있게 IAM 정책을 하나 만들어줄 것임&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762281040293&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. IAM 정책 JSON 파일 다운로드
curl -o iam-policy-alb.json \
  https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json

# 2. IAM 정책 생성
aws iam create-policy \
  --policy-name ALBIngressControllerIAMPolicy \
  --policy-document file://iam-policy-alb.json&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;3. IRSA 기반 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;ServiceAccount&lt;/span&gt;생성 (IAM 연결)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;컨트롤러가 EKS 내에서 IAM 역할을 사용하기 위해, &amp;lsquo;aws-load-balancer-controller&amp;rsquo;라는 이름의ServiceAccount를 만들어줄 것임&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762281096365&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# kube-system 네임스페이스에
# aws-load-balancer-controller 이름의 서비스 어카운트를 만들고
# 위에서 만든 IAM 정책을 연결해주는 작업

eksctl create iamserviceaccount \
  --cluster reciping-cluster \
  --region ap-northeast-2 \
  --namespace kube-system \
  --name aws-load-balancer-controller \
  --attach-policy-arn arn:aws:iam::082808744580:policy/ALBIngressControllerIAMPolicy \
  --approve&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;4. ALB Ingress Controller 설치&lt;/p&gt;
&lt;pre id=&quot;code_1762281113183&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 사전작업(로컬 터미널에서 실행)

# Helm 설치(brew 설치 안 되어있으면 안되니 brew 먼저 설치하기)
brew install helm
# 설치 후 버전 확인
helm version

# ----------
# CRD YAML 수동 다운로드(깃헙에서 내 로컬로 파일 다운로드)
# 이 yaml 안에 TargetGroupBinding과 IngressClassParams, 즉 2가지 CRD가 함께 정의되어 있음
curl -o targetgroupbinding.yaml https://raw.githubusercontent.com/aws/eks-charts/master/stable/aws-load-balancer-controller/crds/crds.yaml
# kubectl 로 적용(EKS에 연결된 상태에서 실행됨)
kubectl apply -f targetgroupbinding.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;nbsp;여기서 Helm이란? : 로컬에서 클러스터로 패키지를 배포하는 도구&lt;/p&gt;
&lt;pre id=&quot;code_1762281129887&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# helm으로 ALB Ingress Controller 설치
helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=reciping-cluster \
  --set serviceAccount.create=false \ # Helm chart가 새로운 ServiceAccount를 생성하지 않도록 설정, IRSA 연결된 SA를 직접 만들었기 때문에 false로 설정
  --set serviceAccount.name=aws-load-balancer-controller # 이미 만들어진 IRSA 연결된 ServiceAccount를 사용하겠다는 뜻
  --set region=ap-northeast-2 \
  --set vpcId=vpc-0f9af5c58379e17f9 \
  --set image.repository=602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/amazon/aws-load-balancer-controller

# 설치 확인
kubectl get deployment -n kube-system aws-load-balancer-controller&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;image.png&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJeIEE/dJMcahvW8cU/O8RkkWyzQ5z6rkzaIikvL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJeIEE/dJMcahvW8cU/O8RkkWyzQ5z6rkzaIikvL0/img.png&quot; data-alt=&quot;결과화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJeIEE/dJMcahvW8cU/O8RkkWyzQ5z6rkzaIikvL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJeIEE%2FdJMcahvW8cU%2FO8RkkWyzQ5z6rkzaIikvL0%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;1057&quot; height=&quot;70&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;70&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;blockquote data-ke-style=&quot;style2&quot;&gt;4-1) Helm chart로 쿠버네티스 리소스 관리하기EKS 클러스터에 ALB Ingress Controller가 잘 동작하는지 &amp;ldquo;확인&quot;하기 위한 테스트용 Deployment로 NGINX를 간단히 띄우겠습니다. &lt;br /&gt;&lt;br /&gt;이거 외에도 이 레포에서 ArgoCD를 관리 및 사용해서 GitOps 방식으로 위 디렉토리 구조를 기준으로 쿠버네티스에 지속 배포하거나 Helm chart로 하나의 서비스 리소스를 Chart로 관리하고 버전 별 배포하기 위한 아래와 같은 커스텀 쿠버네티스 리소스 레포지토리를 팝니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762281180387&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - Reciping/reciping-k8s-resources: AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD&quot; data-og-description=&quot;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rezdu/hyZMz80VGS/KgikIMysix9ivRQIMaqZ60/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/fUG6V/hyZMN1JeAz/l9oe3W6pth85Oj6cGoZa4K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rezdu/hyZMz80VGS/KgikIMysix9ivRQIMaqZ60/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/fUG6V/hyZMN1JeAz/l9oe3W6pth85Oj6cGoZa4K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - Reciping/reciping-k8s-resources: AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AI기반 통합 레시피 추천 및 검색 플랫폼 '레시핑' - Helm chart, ArgoCD, Manifest, Monitoring, kubectl - Reciping/reciping-k8s-resources&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;※ 테라폼과 리소스YAML 레포의 다른 점&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-8161-9b79-e2ac680736fd&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-8112-8099-ec9dc18aae34&quot;&gt;
&lt;td id=&quot;oO?k&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;lttR&quot;&gt;&lt;b&gt;Terraform 레포&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;FyDW&quot;&gt;&lt;b&gt;Kubernetes 리소스 레포&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-814c-9bf5-c95b6f56cabd&quot;&gt;
&lt;td id=&quot;oO?k&quot;&gt;책임&lt;/td&gt;
&lt;td id=&quot;lttR&quot;&gt;AWS 인프라 생성 (EKS, VPC, IAM 등)&lt;/td&gt;
&lt;td id=&quot;FyDW&quot;&gt;앱 배포와 쿠버 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-815c-80c2-ff6804ccd2e2&quot;&gt;
&lt;td id=&quot;oO?k&quot;&gt;배포 도구&lt;/td&gt;
&lt;td id=&quot;lttR&quot;&gt;Terraform&lt;/td&gt;
&lt;td id=&quot;FyDW&quot;&gt;kubectl, Helm, ArgoCD, Kustomize&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8183-bd8e-fbf4e8ac7973&quot;&gt;
&lt;td id=&quot;oO?k&quot;&gt;주기&lt;/td&gt;
&lt;td id=&quot;lttR&quot;&gt;비교적 느림 (인프라 변경 시만)&lt;/td&gt;
&lt;td id=&quot;FyDW&quot;&gt;비교적 자주 (앱 배포, 설정 변경 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-818d-93c9-f573995dcef9&quot;&gt;
&lt;td id=&quot;oO?k&quot;&gt;권한&lt;/td&gt;
&lt;td id=&quot;lttR&quot;&gt;AWS 관리자 IAM 권한&lt;/td&gt;
&lt;td id=&quot;FyDW&quot;&gt;EKS kubeconfig 접근 권한&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 레포지토리 구조(현재는 바뀜)&lt;/p&gt;
&lt;pre id=&quot;code_1762281243244&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;reciping-k8s-resources/
├── base/                         # 모든 서비스가 공통으로 사용하는 리소스
│   ├── ingress-class.yaml        # ALB IngressClass 정의
│   └── cluster-issuer.yaml       # Cert-Manager 인증서용 (향후 HTTPS 대비)
├── test/
│   └── nginx-test.yaml           # ALB 테스트용 NGINX + Ingress
├── user-service/
│   ├── deployment.yaml
│   ├── service.yaml
│   └── ingress.yaml
├── recipe-service/
│   └── ...
└── README.md&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;아무튼 다시 돌아가서 EKS 클러스터에 ALB Ingress Controller가 잘 동작하는지 &amp;ldquo;확인&quot;하기 위한 테스트용 Deployment로 NGINX를 간단히 띄우겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/88869d85d233dd3ad52f32f5a5f544e0e57699b1&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/Reciping/reciping-k8s-resources/commit/88869d85d233dd3ad52f32f5a5f544e0e57699b1&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762281258363&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;:sparkles: feat : EKS 클러스터에 ALB Ingress Controller가 잘 동작하는지 확인하기 위한 서&amp;hellip; &amp;middot; Reciping/recip&quot; data-og-description=&quot;&amp;hellip;비스 테스트용 NGINX Ingress 적용&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/88869d85d233dd3ad52f32f5a5f544e0e57699b1&quot; data-og-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/88869d85d233dd3ad52f32f5a5f544e0e57699b1&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gBrW5/hyZM3hzhfa/ERc5Vcqvp5bpF743pboJbK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/oNU3C/hyZMJE3MYR/WrBfyWILPyfrgFUzIFKmwK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/88869d85d233dd3ad52f32f5a5f544e0e57699b1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Reciping/reciping-k8s-resources/commit/88869d85d233dd3ad52f32f5a5f544e0e57699b1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gBrW5/hyZM3hzhfa/ERc5Vcqvp5bpF743pboJbK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/oNU3C/hyZMJE3MYR/WrBfyWILPyfrgFUzIFKmwK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;:sparkles: feat : EKS 클러스터에 ALB Ingress Controller가 잘 동작하는지 확인하기 위한 서&amp;hellip; &amp;middot; Reciping/recip&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;hellip;비스 테스트용 NGINX Ingress 적용&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;/p&gt;
&lt;pre id=&quot;code_1762281277921&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd ~/Desktop/dev_sini/reciping-k8s-resources
kubectl apply -f test/nginx-test.yaml       # NGINX 서비스 및 디플로이먼트(Service + Deployment) 생성 -&amp;gt; pod 배포
kubectl apply -f base/ingress-class.yaml    # ALB Ingress 리소스 생성 -&amp;gt; 경로를 연결

# ALB 생성 확인
kubectl get ingress&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;스크린샷 2025-06-20 오후 4.20.36.png&quot; data-origin-width=&quot;1718&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pNbP0/dJMcadf08Gz/aIz9kFavarrbupzosRK3SK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pNbP0/dJMcadf08Gz/aIz9kFavarrbupzosRK3SK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pNbP0/dJMcadf08Gz/aIz9kFavarrbupzosRK3SK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpNbP0%2FdJMcadf08Gz%2FaIz9kFavarrbupzosRK3SK%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;1718&quot; height=&quot;380&quot; data-filename=&quot;스크린샷 2025-06-20 오후 4.20.36.png&quot; data-origin-width=&quot;1718&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;여기서 Deployment, Service, Ingress의 개념에 대해 정리해보겠습니다. Ingress는 마치 &amp;ldquo;외부 트래픽이 들어왔을 때 어느 내부 Service로 연결시킬지 정의하는 설정&amp;rdquo;하는 것. &lt;br /&gt;&lt;br /&gt;그래서 먼저 Deployment + Service &amp;rarr; 그 다음 Ingress 입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) 브라우저 접속해보기&lt;/p&gt;
&lt;pre id=&quot;code_1762281345064&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 위에 ADDRESS 나온걸로 접속하면 NGINX 환영 화면이 뜹니다.
http://k8s-default-nginxing-31cfb49cd0-64845225.ap-northeast-2.elb.amazonaws.com/&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;스크린샷 2025-06-20 오후 4.19.14.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KiTNR/dJMcagjvGt1/S5IweNfcR50Mq0aQ024Tr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KiTNR/dJMcagjvGt1/S5IweNfcR50Mq0aQ024Tr1/img.png&quot; data-alt=&quot;결과화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KiTNR/dJMcagjvGt1/S5IweNfcR50Mq0aQ024Tr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKiTNR%2FdJMcagjvGt1%2FS5IweNfcR50Mq0aQ024Tr1%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;3840&quot; height=&quot;2032&quot; data-filename=&quot;스크린샷 2025-06-20 오후 4.19.14.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;2032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;결과화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/119</guid>
      <comments>https://670811.tistory.com/119#entry119comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:45:17 +0900</pubDate>
    </item>
    <item>
      <title>[reciping 2차] minikube로 로컬 쿠버네티스 테스트하기</title>
      <link>https://670811.tistory.com/118</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/minikube-2690661ce62880e3a2ffdbb5d2d95a94&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.notion.so/minikube-2690661ce62880e3a2ffdbb5d2d95a94&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762282786916&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;minikube로 로컬 쿠버네티스 테스트하기 | Notion&quot; data-og-description=&quot;1. minikube 실행하기&quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/minikube-2690661ce62880e3a2ffdbb5d2d95a94&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/minikube-2690661ce62880e3a2ffdbb5d2d95a94&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DKi7E/hyZM0yprR0/t6Tz6YbZdpKwd226knSry1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/8bJ9I/hyZMEJg2p0/Z1Jvb0KKOEiONziEDfTWKK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.notion.so/minikube-2690661ce62880e3a2ffdbb5d2d95a94&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/minikube-2690661ce62880e3a2ffdbb5d2d95a94&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DKi7E/hyZM0yprR0/t6Tz6YbZdpKwd226knSry1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/8bJ9I/hyZMEJg2p0/Z1Jvb0KKOEiONziEDfTWKK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;minikube로 로컬 쿠버네티스 테스트하기 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. minikube 실행하기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. minikube 실행하기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;사전에 minikube 명령어 실행할 수 있도록 설치 필요&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762282815453&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;minikube start --memory=6g --cpus=4 --driver=docker&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;image (12).png&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgLUGK/dJMcaksF5zW/OufoNSdWKwz23VlJo901RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgLUGK/dJMcaksF5zW/OufoNSdWKwz23VlJo901RK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgLUGK/dJMcaksF5zW/OufoNSdWKwz23VlJo901RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgLUGK%2FdJMcaksF5zW%2FOufoNSdWKwz23VlJo901RK%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;1028&quot; height=&quot;211&quot; data-filename=&quot;image (12).png&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;211&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 제대로 생성됐는지 확인 절차&lt;/p&gt;
&lt;pre id=&quot;code_1762282842237&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 노드 확인
PS C:\Users\home&amp;gt; kubectl get nodes
NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   53m   v1.33.1
# minikube 상태 확인
PS C:\Users\home&amp;gt; minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
# 파드 확인
PS C:\Users\home&amp;gt; kubectl get pods -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS      AGE
kube-system            coredns-674b8bbfcf-k8tzc                     1/1     Running   0             56m
kube-system            etcd-minikube                                1/1     Running   0             56m
kube-system            kube-apiserver-minikube                      1/1     Running   0             56m
kube-system            kube-controller-manager-minikube             1/1     Running   0             56m
kube-system            kube-proxy-hn5x6                             1/1     Running   0             56m
kube-system            kube-scheduler-minikube                      1/1     Running   0             56m
kube-system            storage-provisioner                          1/1     Running   1 (56m ago)   56m
kubernetes-dashboard   dashboard-metrics-scraper-5d59dccf9b-b99cx   1/1     Running   0             2m43s
kubernetes-dashboard   kubernetes-dashboard-7779f9b69b-x88s4        1/1     Running   0             2m43s
PS C:\Users\home&amp;gt;
# Dashboard 확인
PS C:\Users\home&amp;gt; minikube dashboard
   대시보드를 활성화하는 중 ...
    ▪ 이미지 docker.io/kubernetesui/dashboard:v2.7.0 사용 중
    ▪ 이미지 docker.io/kubernetesui/metrics-scraper:v1.0.8 사용 중
   Some dashboard features require the metrics-server addon. To enable all features please run:

        minikube addons enable metrics-server

   Dashboard 의 상태를 확인 중입니다 ...
   프록시를 시작하는 중 ...
   Proxy 의 상태를 확인 중입니다 ...
   Opening http://127.0.0.1:53167/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...&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;image (13).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1028&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyA3jN/dJMcacuD4nU/iKeLdxU0knkBWz4lEkURQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyA3jN/dJMcacuD4nU/iKeLdxU0knkBWz4lEkURQ1/img.png&quot; data-alt=&quot;대시보드 활성화하였을 때, 이렇게 나타납니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyA3jN/dJMcacuD4nU/iKeLdxU0knkBWz4lEkURQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyA3jN%2FdJMcacuD4nU%2FiKeLdxU0knkBWz4lEkURQ1%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;1916&quot; height=&quot;1028&quot; data-filename=&quot;image (13).png&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;1028&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대시보드 활성화하였을 때, 이렇게 나타납니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 로컬 DB 세팅하기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;사전에 Helm repo에 bitnami를 추가해줍니다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762282895733&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update&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;네임스페이스에 local-db 만들어둡니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762282909047&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl create namespace local-db&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;Helm으로 MongoDB 배포(설치)해줍니다. (세팅값까지 넣기)&lt;/p&gt;
&lt;pre id=&quot;code_1762282921676&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm upgrade --install mongodb bitnami/mongodb \
  --namespace local-db \
  --set auth.rootPassword=admin123 \
  --set auth.username=reciping \
  --set auth.password=reciping123 \
  --set auth.database=reciping_db&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;이 설정은 아래 Mongo URI로 사용 가능합니다&lt;/p&gt;
&lt;pre id=&quot;code_1762282935316&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mongodb://reciping:reciping123@mongodb.local-db.svc.cluster.local:27017/reciping_db&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;Helm으로 postgreSQL 배포(설치)해줍니다. (세팅값까지 넣기)&lt;/p&gt;
&lt;pre id=&quot;code_1762282950959&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm upgrade --install postgres bitnami/postgresql \
  --namespace local-db \
  --set auth.username=reciping \
  --set auth.password=admin123 \
  --set auth.postgresPassword=admin123 \
  --set auth.database=reciping_db&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;이 설정은 아래 JDBC URL로 사용 가능합니다&lt;/p&gt;
&lt;pre id=&quot;code_1762282962254&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jdbc:postgresql://postgres.local-db.svc.cluster.local:5432/reciping_db&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;※ 띄운 후, 최종 DB 상태 확인&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;일반적으로 -hl이 붙은 서비스 (headless)는 내부 클러스터 DNS용이고, 클라이언트에서 직접 접속할 때는 postgres-postgresql&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762283024535&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;home@DESKTOP-0L33BAC MINGW64 ~/Desktop/groom/dev_sini/reciping-k8s-resources (feature-prod)
$ kubectl get all -n local-db
NAME                           READY   STATUS    RESTARTS   AGE
pod/mongodb-7d8b94b5fb-7cw6s   1/1     Running   0          50m
pod/postgres-postgresql-0      1/1     Running   0          104s

NAME                             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
service/mongodb                  ClusterIP   10.107.135.183   &amp;lt;none&amp;gt;        27017/TCP   50m
service/postgres-postgresql      ClusterIP   10.100.205.158   &amp;lt;none&amp;gt;        5432/TCP    104s
service/postgres-postgresql-hl   ClusterIP   None             &amp;lt;none&amp;gt;        5432/TCP    104s

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mongodb   1/1     1            1           50m

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/mongodb-7d8b94b5fb   1         1         1       50m

NAME                                   READY   AGE
statefulset.apps/postgres-postgresql   1/1     104s&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;※ (선택사항) 간편하게 Port Forward로 직접 접속 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MongoDB:&lt;/p&gt;
&lt;pre id=&quot;code_1762283061074&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl port-forward svc/mongodb 27017:27017 -n local-d&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PostgreSQL:&lt;/p&gt;
&lt;pre id=&quot;code_1762283073022&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 클라이언트에서 직접 접속할 때는 postgres-postgresql 서비스에 포트포워딩
kubectl port-forward svc/postgres-postgresql 5432:5432 -n local-db&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 로컬 터미널에서 접속:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MongoDB:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762283085597&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mongosh mongodb://reciping:reciping123@localhost:27017/reciping_db&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PostgreSQL:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762283104806&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;psql -h localhost -U reciping -d reciping_db
# Password: reciping123&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. ECR Image pull &amp;rarr; tag 변경 &amp;rarr; Minikube에 Image upload&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기존에 CI 워크플로우로 ECR에 이미지 업로드하였는데, 편하게 이 이미지를 토대로 minikube에 pull해서 쓰겠습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ECR에 로그인합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762283146363&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws ecr get-login-password --region ap-northeast-2 \
  | docker login --username AWS --password-stdin 892117097999.dkr.ecr.ap-northeast-2.amazonaws.com&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;이미지를 pull합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762283160704&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull 892117097999.dkr.ecr.ap-northeast-2.amazonaws.com/reciping-user-service:v1.0.8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬 테스트용 태그로 재태깅합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762283174167&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker tag 892117097999.dkr.ecr.ap-northeast-2.amazonaws.com/reciping-user-service:v1.0.8 user-service:local&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;minikube에 이미지를 올립니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762283187028&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;minikube image load user-service:local&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Minikube에 rollouts 사용을 위한 Argo Rollouts CRD 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식적인 설치 명령어입니다. 이 명령어는 다음 리소스를 설치합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CRDs (Rollout, AnalysisTemplate 등)&lt;/li&gt;
&lt;li&gt;Controller (argo-rollouts-controller)&lt;/li&gt;
&lt;li&gt;RBAC, ServiceAccount 등&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762283209443&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl create namespace argo-rollouts

kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 명령어 실행 및 설치 확인까지&lt;/p&gt;
&lt;pre id=&quot;code_1762283231485&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;home@DESKTOP-0L33BAC MINGW64 ~/Desktop/groom/dev_sini/reciping-k8s-resources (feature-prod)
$ kubectl create namespace argo-rollouts
namespace/argo-rollouts created

home@DESKTOP-0L33BAC MINGW64 ~/Desktop/groom/dev_sini/reciping-k8s-resources (feature-prod)
$ kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
customresourcedefinition.apiextensions.k8s.io/analysisruns.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/analysistemplates.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/clusteranalysistemplates.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/experiments.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/rollouts.argoproj.io created
serviceaccount/argo-rollouts created
clusterrole.rbac.authorization.k8s.io/argo-rollouts created
clusterrole.rbac.authorization.k8s.io/argo-rollouts-aggregate-to-admin created
clusterrole.rbac.authorization.k8s.io/argo-rollouts-aggregate-to-edit created
clusterrole.rbac.authorization.k8s.io/argo-rollouts-aggregate-to-view created
clusterrolebinding.rbac.authorization.k8s.io/argo-rollouts created
configmap/argo-rollouts-config created
secret/argo-rollouts-notification-secret created
service/argo-rollouts-metrics created
deployment.apps/argo-rollouts created

# 설치 확인
home@DESKTOP-0L33BAC MINGW64 ~/Desktop/groom/dev_sini/reciping-k8s-resources (feature-prod)
$ kubectl get crd | grep rollouts
rollouts.argoproj.io                   2025-08-06T11:34:22Z&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. Helm chart 수동배포로 일단 서버가 제대로 뜨는지 확인해보기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Helm 배포 명령어를 실행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762283249665&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm upgrade --install user-service ./charts/reciping-user-service \
  --namespace reciping \
  --create-namespace&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후에 자잘한 오류 디버깅하면 됩니다!&lt;/p&gt;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/118</guid>
      <comments>https://670811.tistory.com/118#entry118comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:44:47 +0900</pubDate>
    </item>
    <item>
      <title>[reciping] 프론트단의 Route53 + S3 + CloudFront 설정하기</title>
      <link>https://670811.tistory.com/117</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 보기 불편하실 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;프론트 배포하면서 딸려오는 서비스들을 배포해보겠습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 가비아에서 산 DNS를 Route53에 연결하기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2998&quot; data-origin-height=&quot;1650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OYgiA/dJMcafkBn4Q/tb3Hhqh2or25eGXKvmVbUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OYgiA/dJMcafkBn4Q/tb3Hhqh2or25eGXKvmVbUk/img.png&quot; data-alt=&quot;로그인 후, My가비아 &amp;amp;rarr; 이용중인 서비스 &amp;amp;rarr; 도메인 클릭 후, 이 화면 띄워놓기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OYgiA/dJMcafkBn4Q/tb3Hhqh2or25eGXKvmVbUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOYgiA%2FdJMcafkBn4Q%2Ftb3Hhqh2or25eGXKvmVbUk%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;2998&quot; height=&quot;1650&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2998&quot; data-origin-height=&quot;1650&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인 후, My가비아 &amp;rarr; 이용중인 서비스 &amp;rarr; 도메인 클릭 후, 이 화면 띄워놓기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 1.40.30.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/py7V7/dJMb995K3Ea/akUCA1xVP506KhiGdzs1G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/py7V7/dJMb995K3Ea/akUCA1xVP506KhiGdzs1G0/img.png&quot; data-alt=&quot;호스팅 영역 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/py7V7/dJMb995K3Ea/akUCA1xVP506KhiGdzs1G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpy7V7%2FdJMb995K3Ea%2FakUCA1xVP506KhiGdzs1G0%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-28 오후 1.40.30.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;호스팅 영역 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 1.43.13.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQZ6zn/dJMcaaDAYuC/2GX0wZ6ZUDXbeRlmuarE31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQZ6zn/dJMcaaDAYuC/2GX0wZ6ZUDXbeRlmuarE31/img.png&quot; data-alt=&quot;산 DNS 넣고 화면과 같이 설정 후, 호스팅 영역 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQZ6zn/dJMcaaDAYuC/2GX0wZ6ZUDXbeRlmuarE31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQZ6zn%2FdJMcaaDAYuC%2F2GX0wZ6ZUDXbeRlmuarE31%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-28 오후 1.43.13.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;산 DNS 넣고 화면과 같이 설정 후, 호스팅 영역 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YEeGR/dJMcaa4Fp49/or39oOODcykqrbxiqAear0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YEeGR/dJMcaa4Fp49/or39oOODcykqrbxiqAear0/img.png&quot; data-alt=&quot;호스팅 영역 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YEeGR/dJMcaa4Fp49/or39oOODcykqrbxiqAear0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYEeGR%2FdJMcaa4Fp49%2For39oOODcykqrbxiqAear0%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;3000&quot; height=&quot;1628&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;호스팅 영역 생성 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XZgoh/dJMb99Lsj2V/b4QdhslbNBhy08j3uI1sh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XZgoh/dJMb99Lsj2V/b4QdhslbNBhy08j3uI1sh1/img.png&quot; data-alt=&quot;NS Record 부분의 값을 가비아에 다시 돌아가서 가비아 네임 서버에 입력해주어야 합니다. (아래 이미지 참조)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XZgoh/dJMb99Lsj2V/b4QdhslbNBhy08j3uI1sh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXZgoh%2FdJMb99Lsj2V%2Fb4QdhslbNBhy08j3uI1sh1%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;3000&quot; height=&quot;1632&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1632&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NS Record 부분의 값을 가비아에 다시 돌아가서 가비아 네임 서버에 입력해주어야 합니다. (아래 이미지 참조)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;NS (Name Server) 레코드 :&lt;/b&gt; 해당 도메인의 DNS 요청을 처리하는 네입서버 주소를 지정하는 역할&lt;/li&gt;
&lt;li&gt;&amp;rArr; 즉, 특정 도메인(reciping.kr)에 대한 트래픽을 어떤 네임서버가 처리할 것인지 결정하는 것&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SOA (Start of Authority) 레코드 :&lt;/b&gt; 특정 DNS 존(zone)의 시작 지점이며, 해당 존을 관리하는 정보와 존의 버전 관리 정보를 제공&lt;/li&gt;
&lt;li&gt;&amp;rArr; 각 존에 단 하나만 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2992&quot; data-origin-height=&quot;1640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0mmmC/dJMb99SdTSU/1IqNt02QWxm4u07idussdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0mmmC/dJMb99SdTSU/1IqNt02QWxm4u07idussdK/img.png&quot; data-alt=&quot;네임서버 설정 클릭
(현재는 가비아의 네임서버가 디폴트로 관리되고 있음)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0mmmC/dJMb99SdTSU/1IqNt02QWxm4u07idussdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0mmmC%2FdJMb99SdTSU%2F1IqNt02QWxm4u07idussdK%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;2992&quot; height=&quot;1640&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2992&quot; data-origin-height=&quot;1640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네임서버 설정 클릭
(현재는 가비아의 네임서버가 디폴트로 관리되고 있음)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2998&quot; data-origin-height=&quot;1578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MRdD6/dJMcajtLQVi/wkZecFmY5nVgw8NKdnuhQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MRdD6/dJMcajtLQVi/wkZecFmY5nVgw8NKdnuhQ1/img.png&quot; data-alt=&quot;순서대로 1,2,3,4차 입력 후, 적용 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MRdD6/dJMcajtLQVi/wkZecFmY5nVgw8NKdnuhQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMRdD6%2FdJMcajtLQVi%2FwkZecFmY5nVgw8NKdnuhQ1%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;2998&quot; height=&quot;1578&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2998&quot; data-origin-height=&quot;1578&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;순서대로 1,2,3,4차 입력 후, 적용 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Route 53에서 &lt;a style=&quot;color: #000000;&quot; href=&quot;http://www.reciping.kr/&quot; data-token-index=&quot;1&quot;&gt;&lt;span&gt;www.reciping.kr&lt;/span&gt;&lt;/a&gt; &amp;rarr; CloudFront로 연결하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 호스팅 영역 &amp;gt; &quot;&lt;a href=&quot;http://reciping.kr&quot;&gt;reciping.kr&lt;/a&gt;&quot; &amp;gt; 레코드 생성&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;레코드 이름&lt;/b&gt;: www&lt;/li&gt;
&lt;li&gt;&lt;b&gt;레코드 유형&lt;/b&gt;: A - IPv4 address + AWS 리소스로 트래픽 라우팅&lt;/li&gt;
&lt;li&gt;&lt;b&gt;별칭(Alias)&lt;/b&gt;: ✅ &lt;b&gt;켜기&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;트래픽 라우팅 대상 &amp;rarr; 엔드포인트 선택: CloudFront 배포&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;드롭다운에서 너가 생성한 CloudFront 배포 선택&lt;/li&gt;
&lt;li&gt;리전 선택은 자동으로 설정됨 (CloudFront는 글로벌 서비스라 리전 설정 없음)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 라우팅 정책: 단순 라우팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Route53의 라우팅 정책 선정 기준 정리&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정책 설명 사용 사례&lt;/li&gt;
&lt;/ul&gt;
&lt;table id=&quot;2690661c-e628-813b-a767-cc1b99b6f6bc&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-813c-9f77-dd80a24ca7e8&quot;&gt;
&lt;td id=&quot;S\SG&quot;&gt;정책&lt;/td&gt;
&lt;td id=&quot;d~fI&quot;&gt;설명&lt;/td&gt;
&lt;td id=&quot;K\pZ&quot;&gt;사용 사례&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-810b-b1d0-e292dc567437&quot;&gt;
&lt;td id=&quot;S\SG&quot;&gt;✅ &lt;b&gt;Simple&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;d~fI&quot;&gt;가장 기본, 1개 대상 IP/DNS만 설정&lt;/td&gt;
&lt;td id=&quot;K\pZ&quot;&gt;단일 ALB, 단일 서비스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8106-aabb-e0615122c3fc&quot;&gt;
&lt;td id=&quot;S\SG&quot;&gt;&lt;b&gt;Weighted&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;d~fI&quot;&gt;여러 대상에 트래픽 분산 (비율 설정)&lt;/td&gt;
&lt;td id=&quot;K\pZ&quot;&gt;A/B 테스트, Blue-Green 배포&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8132-96af-c2839b2b9226&quot;&gt;
&lt;td id=&quot;S\SG&quot;&gt;&lt;b&gt;Latency-based&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;d~fI&quot;&gt;리전별 응답속도 기준 분기&lt;/td&gt;
&lt;td id=&quot;K\pZ&quot;&gt;다중 리전 운영 시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8152-8754-e22c5f9e6db4&quot;&gt;
&lt;td id=&quot;S\SG&quot;&gt;&lt;b&gt;Failover&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;d~fI&quot;&gt;Active-Standby 구성&lt;/td&gt;
&lt;td id=&quot;K\pZ&quot;&gt;장애 복구용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81dd-9fe3-ffe0bf373df0&quot;&gt;
&lt;td id=&quot;S\SG&quot;&gt;&lt;b&gt;Geolocation&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;d~fI&quot;&gt;국가/지역별 라우팅&lt;/td&gt;
&lt;td id=&quot;K\pZ&quot;&gt;지역 맞춤 서비스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-812a-9436-ddfe236ca49f&quot;&gt;
&lt;td id=&quot;S\SG&quot;&gt;&lt;b&gt;Multivalue answer&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;d~fI&quot;&gt;여러 IP 중 무작위 응답&lt;/td&gt;
&lt;td id=&quot;K\pZ&quot;&gt;간단한 부하분산 (잘 안 씀)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 언제 다른 라우팅 정책을 쓸 수 있을까? ]&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-8170-9eb1-c081b7138745&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-81fb-a668-f4ed31b7361d&quot;&gt;
&lt;td id=&quot;QFYb&quot;&gt;정책&lt;/td&gt;
&lt;td id=&quot;&amp;#96;^V\&quot;&gt;향후 활용 가능 시나리오&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8147-ba85-ce575ac689a6&quot;&gt;
&lt;td id=&quot;QFYb&quot;&gt;&lt;b&gt;Weighted&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;&amp;#96;^V\&quot;&gt;실험적으로 신기능을 일부 사용자에게 제공할 때 (A/B 테스트)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81e2-9c61-c379c8b7d831&quot;&gt;
&lt;td id=&quot;QFYb&quot;&gt;&lt;b&gt;Latency-based&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;&amp;#96;^V\&quot;&gt;다중 리전 서비스로 확장할 경우 (예: 글로벌 유저 확보)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8113-ac70-e85bfa37d679&quot;&gt;
&lt;td id=&quot;QFYb&quot;&gt;&lt;b&gt;Failover&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;&amp;#96;^V\&quot;&gt;장애 대비용 백업 게이트웨이 또는 ALB 구성 시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 프론트 이미지 빌드 후, ECR에 푸쉬하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프론트엔드 프로젝트 루트폴더에 아래의 dockerfile과 nginx.conf 추가해두기&lt;/p&gt;
&lt;pre id=&quot;code_1762288519941&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1단계: Vite로 빌드
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm install &amp;amp;&amp;amp; npm run build

# 2단계: Nginx로 정적 파일 서빙
FROM nginx:1.25-alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD [&quot;nginx&quot;, &quot;-g&quot;, &quot;daemon off;&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762288531615&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;worker_processes 1;

events {
  worker_connections 1024;
}

http {
  include       mime.types;
  default_type  application/octet-stream;
  sendfile        on;

  server {
    listen       80;
    server_name  localhost;

    root   /usr/share/nginx/html;
    index  index.html;

    location / {
      try_files $uri /index.html;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762288540176&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 이 단계 먼저 오기 전에 node.js 설치 안 되어있으면 설치 후 작업하기
/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
# 설치 확인
node -v
npm -v&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762288547331&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 프론트 디렉토리로 이동
cd ~/Desktop/dev_sini/reciping-fe

# 2. 빌드 (최초 1회)
npm install
npm run build

# 3. Docker 이미지 빌드
docker build --no-cache --platform linux/amd64 -t reciping-FE:v1.0.0 .

# 4. ECR 태그 설정 (리포지토리명이 reciping-FE인 경우)
docker tag reciping-FE:v1.0.0 \
892117097999.dkr.ecr.ap-northeast-2.amazonaws.com/reciping-FE:v1.0.0

# 5. 이미지 푸시
docker push 892117097999.dkr.ecr.ap-northeast-2.amazonaws.com/reciping-FE:v1.0.0&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/117</guid>
      <comments>https://670811.tistory.com/117#entry117comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:43:50 +0900</pubDate>
    </item>
    <item>
      <title>[reciping] ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 (2)</title>
      <link>https://670811.tistory.com/116</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762286314439&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 | Notion&quot; data-og-description=&quot;1. 각각에 넣을 보안그룹 생성하기( ALB, Gateway Server, ECS )&quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gAVbF/hyZM9B6omL/HWOE8HoJv23zIdtpIUcgN0/img.png?width=2048&amp;amp;height=1118&amp;amp;face=0_0_2048_1118,https://scrap.kakaocdn.net/dn/bIQpZ4/hyZNfbf8SJ/b8yNj6RabMSLUhkjWRyYFK/img.png?width=2048&amp;amp;height=1118&amp;amp;face=0_0_2048_1118&quot;&gt;&lt;a href=&quot;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gAVbF/hyZM9B6omL/HWOE8HoJv23zIdtpIUcgN0/img.png?width=2048&amp;amp;height=1118&amp;amp;face=0_0_2048_1118,https://scrap.kakaocdn.net/dn/bIQpZ4/hyZNfbf8SJ/b8yNj6RabMSLUhkjWRyYFK/img.png?width=2048&amp;amp;height=1118&amp;amp;face=0_0_2048_1118');&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;ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 각각에 넣을 보안그룹 생성하기( ALB, Gateway Server, ECS )&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. ALB 생성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4-1) alb 생성하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오전 2.08.22.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qOYHR/dJMcadNQ74R/imf4mGjCEjOw68LKf8kHPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qOYHR/dJMcadNQ74R/imf4mGjCEjOw68LKf8kHPk/img.png&quot; data-alt=&quot;로드 밸런서 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qOYHR/dJMcadNQ74R/imf4mGjCEjOw68LKf8kHPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqOYHR%2FdJMcadNQ74R%2Fimf4mGjCEjOw68LKf8kHPk%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;3024&quot; height=&quot;1648&quot; data-filename=&quot;스크린샷 2025-05-28 오전 2.08.22.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로드 밸런서 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오전 2.23.25.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btPoqJ/dJMcaeeVvhL/6duSbr42BFE2n7hlmPMdRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btPoqJ/dJMcaeeVvhL/6duSbr42BFE2n7hlmPMdRK/img.png&quot; data-alt=&quot;ALB 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btPoqJ/dJMcaeeVvhL/6duSbr42BFE2n7hlmPMdRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtPoqJ%2FdJMcaeeVvhL%2F6duSbr42BFE2n7hlmPMdRK%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-28 오전 2.23.25.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ALB 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오전 2.09.38.png&quot; data-origin-width=&quot;1507&quot; data-origin-height=&quot;817&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5jL0e/dJMcahpbA3M/KahAEPjn8mqFNe9yUC58M1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5jL0e/dJMcahpbA3M/KahAEPjn8mqFNe9yUC58M1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5jL0e/dJMcahpbA3M/KahAEPjn8mqFNe9yUC58M1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5jL0e%2FdJMcahpbA3M%2FKahAEPjn8mqFNe9yUC58M1%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;1507&quot; height=&quot;817&quot; data-filename=&quot;스크린샷 2025-05-29 오전 2.09.38.png&quot; data-origin-width=&quot;1507&quot; data-origin-height=&quot;817&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.00.20.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpybiA/dJMcaiVVSCM/FuxkicE1vT1N3jbweke5R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpybiA/dJMcaiVVSCM/FuxkicE1vT1N3jbweke5R1/img.png&quot; data-alt=&quot;1번 가용영역과 2번 가용영역을 번갈아가면서 배정해야 하므로 퍼블릭 서브넷을 아래와 같이 매핑합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpybiA/dJMcaiVVSCM/FuxkicE1vT1N3jbweke5R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpybiA%2FdJMcaiVVSCM%2FFuxkicE1vT1N3jbweke5R1%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;3024&quot; height=&quot;1648&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.00.20.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1번 가용영역과 2번 가용영역을 번갈아가면서 배정해야 하므로 퍼블릭 서브넷을 아래와 같이 매핑합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.11.39.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4ttLz/dJMcacuD45U/dW01k8o6K73NVBrhxpWXv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4ttLz/dJMcacuD45U/dW01k8o6K73NVBrhxpWXv1/img.png&quot; data-alt=&quot;만들어둔 alb 보안그룹 설정하고, 80과 443을 설정하되, 80으로 들어갔을 때 443으로 바로 리디렉션하는 설정을 alb 만들고 할 것이니 일단 이렇게 만들어두세요.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4ttLz/dJMcacuD45U/dW01k8o6K73NVBrhxpWXv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4ttLz%2FdJMcacuD45U%2FdW01k8o6K73NVBrhxpWXv1%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;3840&quot; height=&quot;1870&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.11.39.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;만들어둔 alb 보안그룹 설정하고, 80과 443을 설정하되, 80으로 들어갔을 때 443으로 바로 리디렉션하는 설정을 alb 만들고 할 것이니 일단 이렇게 만들어두세요.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.15.05.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceqL1W/dJMcacg6Qyt/dXY6N7BBUL1AW5k6y78BQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceqL1W/dJMcacg6Qyt/dXY6N7BBUL1AW5k6y78BQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceqL1W/dJMcacg6Qyt/dXY6N7BBUL1AW5k6y78BQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceqL1W%2FdJMcacg6Qyt%2FdXY6N7BBUL1AW5k6y78BQk%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;3840&quot; height=&quot;1864&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.15.05.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1864&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 정책 이름 ] :&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 TLS 1.2/1.3 지원하는 ELBSecurityPolicy-TLS13-1-2-Res-2021-06 추천 (보안성 가장 좋음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 현업에서도 많이 쓰이는 모던 보안 정책입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 클라이언트 인증서 처리 &amp;rarr; 상호 인증(m TLS) ] :&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적인 웹사이트나 API 통신에서는 클라이언트 인증서는 필요 X&lt;/li&gt;
&lt;li&gt;Mutual TLS는 금융권/내부망에서만 특수하게 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.25.13.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu5cOD/dJMcagDOv79/ADNBSRCIEKNwdjKvOWSE2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu5cOD/dJMcagDOv79/ADNBSRCIEKNwdjKvOWSE2k/img.png&quot; data-alt=&quot;alb 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu5cOD/dJMcagDOv79/ADNBSRCIEKNwdjKvOWSE2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu5cOD%2FdJMcagDOv79%2FADNBSRCIEKNwdjKvOWSE2k%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;3840&quot; height=&quot;1864&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.25.13.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1864&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;alb 생성 완료&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;4-2) 80으로 들어갔을 때 443으로 바로 리디렉션하는 설정하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.27.56.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NDoAY/dJMcakzrH8s/scP1XsVcMqwGQ6pfOGbMAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NDoAY/dJMcakzrH8s/scP1XsVcMqwGQ6pfOGbMAk/img.png&quot; data-alt=&quot;80 체크 후, 규칙 편집 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NDoAY/dJMcakzrH8s/scP1XsVcMqwGQ6pfOGbMAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNDoAY%2FdJMcakzrH8s%2FscP1XsVcMqwGQ6pfOGbMAk%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;3840&quot; height=&quot;1848&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.27.56.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1848&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;80 체크 후, 규칙 편집 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.49.33.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJEOqH/dJMcafLFIvN/OCKSKkgyNwpeJHp3Ur4s2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJEOqH/dJMcafLFIvN/OCKSKkgyNwpeJHp3Ur4s2K/img.png&quot; data-alt=&quot;기본값 체크 후, 규칙 편집 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJEOqH/dJMcafLFIvN/OCKSKkgyNwpeJHp3Ur4s2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJEOqH%2FdJMcafLFIvN%2FOCKSKkgyNwpeJHp3Ur4s2K%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;3840&quot; height=&quot;1866&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.49.33.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기본값 체크 후, 규칙 편집 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.50.35.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d9gVo6/dJMcagw2RoL/8AiKPelXG9vb2WHu14mvAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d9gVo6/dJMcagw2RoL/8AiKPelXG9vb2WHu14mvAK/img.png&quot; data-alt=&quot;해당 화면과 같이 리디렉션으로 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d9gVo6/dJMcagw2RoL/8AiKPelXG9vb2WHu14mvAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9gVo6%2FdJMcagw2RoL%2F8AiKPelXG9vb2WHu14mvAK%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;3840&quot; height=&quot;1870&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.50.35.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해당 화면과 같이 리디렉션으로 변경&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.50.43.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3Gr2N/dJMcaeFZQoL/AvldbrSaYAwYLm1KHaVpyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3Gr2N/dJMcaeFZQoL/AvldbrSaYAwYLm1KHaVpyk/img.png&quot; data-alt=&quot;사용자 지정 호스트, 경로, 쿼리를 사용하십시오&amp;amp;hellip; 체크
(= 리디렉션 대상 URL을 좀 더 정밀하게 제어할 수 있도록 도와주는 옵션)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3Gr2N/dJMcaeFZQoL/AvldbrSaYAwYLm1KHaVpyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3Gr2N%2FdJMcaeFZQoL%2FAvldbrSaYAwYLm1KHaVpyk%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;3840&quot; height=&quot;1864&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.50.43.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1864&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사용자 지정 호스트, 경로, 쿼리를 사용하십시오&amp;hellip; 체크
(= 리디렉션 대상 URL을 좀 더 정밀하게 제어할 수 있도록 도와주는 옵션)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.58.37.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eFHuYA/dJMcajAxpDm/aLweP2NjYPe5f4CatLuvG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eFHuYA/dJMcajAxpDm/aLweP2NjYPe5f4CatLuvG1/img.png&quot; data-alt=&quot;작업(다음 수행) - 리디렉션 대상 이 &amp;amp;nbsp;HTTPS://#{host}:443/#{path}?#{query} 로 변경된 것을 볼 수 있음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eFHuYA/dJMcajAxpDm/aLweP2NjYPe5f4CatLuvG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeFHuYA%2FdJMcajAxpDm%2FaLweP2NjYPe5f4CatLuvG1%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;3840&quot; height=&quot;1870&quot; data-filename=&quot;스크린샷 2025-05-29 오후 1.58.37.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;작업(다음 수행) - 리디렉션 대상 이 &amp;nbsp;HTTPS://#{host}:443/#{path}?#{query} 로 변경된 것을 볼 수 있음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. Route 53에서 A 레코드 생성 (&lt;a style=&quot;color: #000000;&quot; href=&quot;http://api.reciping.kr/&quot; data-token-index=&quot;1&quot;&gt;&lt;span&gt;api.reciping.kr&lt;/span&gt;&lt;/a&gt; &amp;rarr; ALB)&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 2.13.21.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQxAQB/dJMcadG5vs5/rhkRHaZTeT1c7Fbtr48mJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQxAQB/dJMcadG5vs5/rhkRHaZTeT1c7Fbtr48mJ0/img.png&quot; data-alt=&quot;reciping.kr 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQxAQB/dJMcadG5vs5/rhkRHaZTeT1c7Fbtr48mJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQxAQB%2FdJMcadG5vs5%2FrhkRHaZTeT1c7Fbtr48mJ0%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;3840&quot; height=&quot;1868&quot; data-filename=&quot;스크린샷 2025-05-29 오후 2.13.21.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1868&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;reciping.kr 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 2.14.35.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSybOM/dJMcaeMLqwI/nbTQrXiDZh3GpT3dglJJmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSybOM/dJMcaeMLqwI/nbTQrXiDZh3GpT3dglJJmK/img.png&quot; data-alt=&quot;레코드 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSybOM/dJMcaeMLqwI/nbTQrXiDZh3GpT3dglJJmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSybOM%2FdJMcaeMLqwI%2FnbTQrXiDZh3GpT3dglJJmK%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;3840&quot; height=&quot;1866&quot; data-filename=&quot;스크린샷 2025-05-29 오후 2.14.35.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;레코드 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 4.48.22.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zLxLV/dJMcac9fBWe/Uy07HYlJ0ibeljdiuBIFQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zLxLV/dJMcac9fBWe/Uy07HYlJ0ibeljdiuBIFQ0/img.png&quot; data-alt=&quot;백엔드는 https://api.reciping.kr~ 로 갑니다. DNS&amp;amp;rarr;IP이니 A레코드로 설정하고, 별칭(alias) 켜주시고, 아까 만들어둔 alb도 넣어줍니다. 다 끝나면 레코드 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zLxLV/dJMcac9fBWe/Uy07HYlJ0ibeljdiuBIFQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzLxLV%2FdJMcac9fBWe%2FUy07HYlJ0ibeljdiuBIFQ0%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;3840&quot; height=&quot;1868&quot; data-filename=&quot;스크린샷 2025-05-29 오후 4.48.22.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1868&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백엔드는 https://api.reciping.kr~ 로 갑니다. DNS&amp;rarr;IP이니 A레코드로 설정하고, 별칭(alias) 켜주시고, 아까 만들어둔 alb도 넣어줍니다. 다 끝나면 레코드 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오후 4.51.32.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1794&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWeTss/dJMcafZcVmA/rBor46J8pXXXqjSVY5t8uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWeTss/dJMcafZcVmA/rBor46J8pXXXqjSVY5t8uk/img.png&quot; data-alt=&quot;A 레코드 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWeTss/dJMcafZcVmA/rBor46J8pXXXqjSVY5t8uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWeTss%2FdJMcafZcVmA%2FrBor46J8pXXXqjSVY5t8uk%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;3840&quot; height=&quot;1794&quot; data-filename=&quot;스크린샷 2025-05-29 오후 4.51.32.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1794&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;A 레코드 생성 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;+) 게이트웨이 서버를 기본 EC2에 배포하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 그 다음 절차는 gateway server를 EC2에 띄우는 것인데 그 과정은 다른 페이지에 따로 담았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/EC2-Gateway-Server-1fc0661ce62880d4b7f3d51d5e26780d?pvs=21&quot;&gt;기본 EC2 배포하기(Gateway Server)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762286578891&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;기본 EC2 배포하기(Gateway Server) | Notion&quot; data-og-description=&quot;1. EC2 키페어 만들기&quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/EC2-Gateway-Server-1fc0661ce62880d4b7f3d51d5e26780d?pvs=21&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/EC2-Gateway-Server-1fc0661ce62880d4b7f3d51d5e26780d&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HDrg5/hyZMYhUAAT/UPyWopXIZnGuskgE0S8FDK/img.png?width=2048&amp;amp;height=1001&amp;amp;face=0_0_2048_1001,https://scrap.kakaocdn.net/dn/fNldo/hyZNe4vpjs/qM8Sg8NRk5s5uGgRtx5a8K/img.png?width=2048&amp;amp;height=1001&amp;amp;face=0_0_2048_1001&quot;&gt;&lt;a href=&quot;https://www.notion.so/EC2-Gateway-Server-1fc0661ce62880d4b7f3d51d5e26780d?pvs=21&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/EC2-Gateway-Server-1fc0661ce62880d4b7f3d51d5e26780d?pvs=21&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HDrg5/hyZMYhUAAT/UPyWopXIZnGuskgE0S8FDK/img.png?width=2048&amp;amp;height=1001&amp;amp;face=0_0_2048_1001,https://scrap.kakaocdn.net/dn/fNldo/hyZNe4vpjs/qM8Sg8NRk5s5uGgRtx5a8K/img.png?width=2048&amp;amp;height=1001&amp;amp;face=0_0_2048_1001');&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;기본 EC2 배포하기(Gateway Server) | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. EC2 키페어 만들기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. ECS 클러스터 생성하기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-03 오후 1.13.18.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUY8ez/dJMb99YZsyj/SKysqo8DCfqGKuxKyEOMz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUY8ez/dJMb99YZsyj/SKysqo8DCfqGKuxKyEOMz0/img.png&quot; data-alt=&quot;클러스터 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUY8ez/dJMb99YZsyj/SKysqo8DCfqGKuxKyEOMz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUY8ez%2FdJMb99YZsyj%2FSKysqo8DCfqGKuxKyEOMz0%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;1920&quot; height=&quot;934&quot; data-filename=&quot;스크린샷 2025-06-03 오후 1.13.18.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;클러스터 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-03 오후 10.54.59.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daoKoQ/dJMcagRlATW/296QLyk9H3ZffoPAl3luJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daoKoQ/dJMcagRlATW/296QLyk9H3ZffoPAl3luJ1/img.png&quot; data-alt=&quot;기본 네임스페이스는 새 네임스페이스 생성 클릭해서 아래와 같이 만든 후, 그것으로 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daoKoQ/dJMcagRlATW/296QLyk9H3ZffoPAl3luJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaoKoQ%2FdJMcagRlATW%2F296QLyk9H3ZffoPAl3luJ1%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;1920&quot; height=&quot;499&quot; data-filename=&quot;스크린샷 2025-06-03 오후 10.54.59.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;499&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;&lt;u&gt;+) 네임스페이스 설정하기&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;[ 기본 네임스페이스 ] :&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선택사항이긴 하지만, 클러스터 내부에서 서비스들을 논리적으로 그룹화하고 싶을 때 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;향후 Prometheus, CloudWatch, Service Connect 등을 고려하면 reciping-ns 같은 네임스페이스를 만들어 두는 것도 나쁘지 않기에 만들어두겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;+) 네임스페이스의 다른 좋은 점 정리&lt;/u&gt;&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-81a7-8016-ed50281e4d2d&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-8113-9422-d1fd68d9c8c6&quot;&gt;
&lt;td id=&quot;ZxP]&quot;&gt;기능&lt;/td&gt;
&lt;td id=&quot;SaQC&quot;&gt;네임스페이스 사용 시 효과&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81c6-a9bf-d67777210c15&quot;&gt;
&lt;td id=&quot;ZxP]&quot;&gt;&lt;b&gt;서비스 격리&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;SaQC&quot;&gt;reciping-user-service 와 reciping-recommend-service 를 분리해서 관리 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8166-aba0-ceb42cdd7d38&quot;&gt;
&lt;td id=&quot;ZxP]&quot;&gt;&lt;b&gt;Cloud Map 연동&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;SaQC&quot;&gt;서비스 디스커버리 이름이 recommend.reciping.local 이런 식으로 구조화 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-814a-b211-f339e153a4b6&quot;&gt;
&lt;td id=&quot;ZxP]&quot;&gt;&lt;b&gt;Observability 향상&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;SaQC&quot;&gt;CloudWatch, X-Ray, Prometheus 연동 시 태깅 기준으로 분석 용이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-812b-bdf2-fcf446a54852&quot;&gt;
&lt;td id=&quot;ZxP]&quot;&gt;&lt;b&gt;Multi-tenant 운영 대비&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;SaQC&quot;&gt;나중에 하나의 클러스터에 여러 팀/서비스를 운영할 때 구조적으로 구분 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-03 오후 1.08.25.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;935&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwR4Tk/dJMcadUCLoe/K0nQgRCwk0f62RExeF03tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwR4Tk/dJMcadUCLoe/K0nQgRCwk0f62RExeF03tK/img.png&quot; data-alt=&quot;해당과 같이 적은 후, 네임스페이스 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwR4Tk/dJMcadUCLoe/K0nQgRCwk0f62RExeF03tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwR4Tk%2FdJMcadUCLoe%2FK0nQgRCwk0f62RExeF03tK%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;1920&quot; height=&quot;935&quot; data-filename=&quot;스크린샷 2025-06-03 오후 1.08.25.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;935&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;&lt;b&gt;[ 네임스페이스 이름 ] :&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[프로젝트명].local&lt;/b&gt; 도메인은 VPC 내부 전용 용도로 AWS가 자동 인식해서 설정해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 내부 DNS에서 user.reciping.local, event.reciping.local처럼 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 인스턴스 검색 ] :&lt;/b&gt;&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-81c9-9255-d490916c3002&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-813d-bb38-e1aa0b239299&quot;&gt;
&lt;td id=&quot;^eIH&quot;&gt;옵션&lt;/td&gt;
&lt;td id=&quot;}~\\&quot;&gt;설명&lt;/td&gt;
&lt;td id=&quot;ZqTy&quot;&gt;권장 여부&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8185-8bf9-f781ec38811a&quot;&gt;
&lt;td id=&quot;^eIH&quot;&gt;&lt;b&gt;API 호출&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;}~\\&quot;&gt;서비스 디스커버리 이름으로 ECS에서 호출할 때 Cloud Map을 API 통해 조회함&lt;/td&gt;
&lt;td id=&quot;ZqTy&quot;&gt;기본 + 요금 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-817a-a0ba-c4b5d38c783a&quot;&gt;
&lt;td id=&quot;^eIH&quot;&gt;&lt;b&gt;VPC에서 API 호출 및 DNS 쿼리&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;}~\\&quot;&gt;DNS 기반 + API 호출을 모두 지원함 (비용 발생)&lt;/td&gt;
&lt;td id=&quot;ZqTy&quot;&gt;외부 서비스가 DNS로 호출해야 할 때만 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8117-828f-c7bb34858644&quot;&gt;
&lt;td id=&quot;^eIH&quot;&gt;&lt;b&gt;퍼블릭 DNS 쿼리 포함&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;}~\\&quot;&gt;퍼블릭 DNS로도 외부에서 접근 가능 (비용 발생)&lt;/td&gt;
&lt;td id=&quot;ZqTy&quot;&gt;지금 상황에서는 불필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-03 오후 11.18.40.png&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;935&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcFtES/dJMcah3M8ic/Jzwukdf6V6LusgPSSpBmRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcFtES/dJMcah3M8ic/Jzwukdf6V6LusgPSSpBmRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcFtES/dJMcah3M8ic/Jzwukdf6V6LusgPSSpBmRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcFtES%2FdJMcah3M8ic%2FJzwukdf6V6LusgPSSpBmRK%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;1907&quot; height=&quot;935&quot; data-filename=&quot;스크린샷 2025-06-03 오후 11.18.40.png&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;935&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Auto Scaling 그룹(ASG) ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 클러스터에 EC2 Capacity Provider로 사용할 Auto Scaling Group을 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;⬇️&amp;nbsp;여기서 EC2 Capacity Provider란?&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 인스턴스를 ECS에서 자동으로 사용할 수 있게 해주는 중개자 매개체&lt;/li&gt;
&lt;li&gt;즉, Auto Scaling Group(ASG) 기반의 EC2 인스턴스를 ECS가 자동으로 관리하게끔 연결해주는 &quot;다리&amp;rdquo;&lt;/li&gt;
&lt;li&gt;ECS가 태스크를 실행해야 할 때 ASG의 용량을 보고 자동으로 EC2 인스턴스를 띄움&lt;/li&gt;
&lt;li&gt;예) 태스크 수 증가 &amp;rarr; Capacity 부족하면 &amp;rarr; ASG 스케일 아웃 유도&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1762286740124&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 구성 요소 흐름도
Auto Scaling Group (EC2 인스턴스 묶음)
     &amp;darr; 연결
EC2 Capacity Provider
     &amp;darr; 연결
ECS 클러스터 내 서비스&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;결론 : 일단 새 ASG 생성으로 자동생성&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이후 세밀 조절을 위해 EC2 &amp;gt; Auto Scaling &amp;gt; 생성된 그룹으로 이동해서 정책을 추가해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 예) CPU 60% 이상이면 EC2 한 대 더 생성 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; fargate는 ECS 서비스 &amp;gt; Auto Scaling 설정에서 task수를 자동 증가 정책 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 예) 예: CPU 평균 60% 이상이면 Task 수를 2 &amp;rarr; 3으로 자동 증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 컨테이너 인스턴스 AMI ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: Amazon Linux 2 그대로 두면 ECS Agent 포함된 최적화된 AMI로 자동 선택됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ EC2 인스턴스 역할 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 기본값 ecsInstanceRole 선택 &amp;rArr; ECS 에이전트가 동작하고 CloudWatch, ECR 등에 접근할 권한을 가짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 시작 인스턴스 수 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 기본값 최소가 0으로 되어있는데 그대로 두면 &amp;lsquo;최초 배포 안 해도 된다&amp;rsquo; 는 표시이니 최소 1 / 최대 2로 초기 세팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ SSH 키 페어 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: EC2 인스턴스에 접속해서 디버깅하고 싶다면 꼭 필요 &amp;rArr; reciping-prod-ec2-key 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 루트 EBS 볼륨 크기 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;EC2 인스턴스의 기본 디스크 공간&lt;/b&gt;(운영체제, 로그, 컨테이너 캐시 등 저장)&lt;/li&gt;
&lt;li&gt;ECS에서 컨테이너를 EC2에서 실행할 경우, 도커 이미지/로그도 이 루트 볼륨에 저장됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 대부분의 AMI에서 기본값은 30 GiB인데, 지금 MSA 서비스 여러 개 구성 예정이니 넉넉하게 50GiB로 세팅&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-03 오후 11.25.08.png&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LqAS1/dJMcajAxpDR/TKBhMwm4zM3ulEFJQRcX20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LqAS1/dJMcajAxpDR/TKBhMwm4zM3ulEFJQRcX20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LqAS1/dJMcajAxpDR/TKBhMwm4zM3ulEFJQRcX20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLqAS1%2FdJMcajAxpDR%2FTKBhMwm4zM3ulEFJQRcX20%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;1906&quot; height=&quot;936&quot; data-filename=&quot;스크린샷 2025-06-03 오후 11.25.08.png&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 퍼블릭 IP 자동 할당 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 프라이빗 서브넷에서 동작할 것이므로 끄기 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-03 오후 11.19.16.png&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcCCId/dJMcafdPMOH/oG5upOxmYKca7vIrHMwPT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcCCId/dJMcafdPMOH/oG5upOxmYKca7vIrHMwPT1/img.png&quot; data-alt=&quot;태그 입력 후, 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcCCId/dJMcafdPMOH/oG5upOxmYKca7vIrHMwPT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcCCId%2FdJMcafdPMOH%2FoG5upOxmYKca7vIrHMwPT1%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;1906&quot; height=&quot;428&quot; data-filename=&quot;스크린샷 2025-06-03 오후 11.19.16.png&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;태그 입력 후, 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. ECR 생성하기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-03 오후 11.59.27.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZaJYi/dJMcake8UIu/h3pLQMLlBtlLI0x5xYGL70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZaJYi/dJMcake8UIu/h3pLQMLlBtlLI0x5xYGL70/img.png&quot; data-alt=&quot;리포지토리 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZaJYi/dJMcake8UIu/h3pLQMLlBtlLI0x5xYGL70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZaJYi%2FdJMcake8UIu%2Fh3pLQMLlBtlLI0x5xYGL70%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;1920&quot; height=&quot;934&quot; data-filename=&quot;스크린샷 2025-06-03 오후 11.59.27.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리포지토리 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오전 12.01.34.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sHn4e/dJMcaiBC3WH/A20kJp0wL0vcZYgqTFVfmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sHn4e/dJMcaiBC3WH/A20kJp0wL0vcZYgqTFVfmk/img.png&quot; data-alt=&quot;각 서비스별로 ecr을 만들 것임(reciping-user-service, reciping-recipe-service..) 입력 후, 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sHn4e/dJMcaiBC3WH/A20kJp0wL0vcZYgqTFVfmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsHn4e%2FdJMcaiBC3WH%2FA20kJp0wL0vcZYgqTFVfmk%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;1920&quot; height=&quot;936&quot; data-filename=&quot;스크린샷 2025-06-04 오전 12.01.34.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;각 서비스별로 ecr을 만들 것임(reciping-user-service, reciping-recipe-service..) 입력 후, 생성 클릭&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;b&gt;[ 이미지 태그 변경 가능성 ] &lt;/b&gt;&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-8130-98aa-cb4bb680c7d5&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-81c7-861e-d8a1aac91323&quot;&gt;
&lt;td id=&quot;NXz=&quot;&gt;옵션&lt;/td&gt;
&lt;td id=&quot;R&amp;lt;~j&quot;&gt;설명&lt;/td&gt;
&lt;td id=&quot;;TVE&quot;&gt;구분 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8101-b7e2-c8ed9c900984&quot;&gt;
&lt;td id=&quot;NXz=&quot;&gt;Mutable (기본값)&lt;/td&gt;
&lt;td id=&quot;R&amp;lt;~j&quot;&gt;같은 태그로 이미지를 덮어쓰기 가능 &lt;br /&gt;(예: latest)&lt;/td&gt;
&lt;td id=&quot;;TVE&quot;&gt;개발/테스트 환경에서 많이 씀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81cc-85f8-dc537478e385&quot;&gt;
&lt;td id=&quot;NXz=&quot;&gt;&lt;b&gt;Immutable&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;R&amp;lt;~j&quot;&gt;같은 태그로는 한 번만 푸시 가능 (덮어쓰기 불가)&lt;/td&gt;
&lt;td id=&quot;;TVE&quot;&gt;실운영 배포 환경에서 선호 (보안 및 추적성 확보)&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 암호화 설정 ]&lt;/b&gt;&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-8180-bf8f-ff0f26e1502a&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-8154-b2a3-eccbd21b004c&quot;&gt;
&lt;td id=&quot;ZGbK&quot;&gt;옵션&lt;/td&gt;
&lt;td id=&quot;{~YH&quot;&gt;설명&lt;/td&gt;
&lt;td id=&quot;GnY^&quot;&gt;구분 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-819d-80d7-f87b9be4ae77&quot;&gt;
&lt;td id=&quot;ZGbK&quot;&gt;&lt;b&gt;AES-256 (기본값)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;{~YH&quot;&gt;AWS가 자동으로 암호화 관리&lt;/td&gt;
&lt;td id=&quot;GnY^&quot;&gt;대부분 이걸 씀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8135-8b7e-e4344c13fe3b&quot;&gt;
&lt;td id=&quot;ZGbK&quot;&gt;AWS KMS&lt;/td&gt;
&lt;td id=&quot;{~YH&quot;&gt;직접 생성한 KMS 키로 암호화&lt;/td&gt;
&lt;td id=&quot;GnY^&quot;&gt;보안이 매우 민감한 조직에서 사용 (예: 금융, 의료)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 이미지 스캔 설정 ]&lt;/b&gt; - 푸쉬된 이미지 취약점 검사해주는 옵션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 저희는 현재 리포지토리 단위에서 구성되므로, 신경 쓰지 말고 그냥 꺼두면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오전 1.54.38.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tPSZW/dJMcagRlAVK/LdQLS7O9eFKGmNva7LJpD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tPSZW/dJMcagRlAVK/LdQLS7O9eFKGmNva7LJpD0/img.png&quot; data-alt=&quot;각 서비스별로 ECR 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tPSZW/dJMcagRlAVK/LdQLS7O9eFKGmNva7LJpD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtPSZW%2FdJMcagRlAVK%2FLdQLS7O9eFKGmNva7LJpD0%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;1920&quot; height=&quot;934&quot; data-filename=&quot;스크린샷 2025-06-04 오전 1.54.38.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;각 서비스별로 ECR 생성 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. Dockerfile 작성하기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;멀티 스테이지 빌드를 이용하겠습니다. &amp;amp; 경량 베이스 이미지도 사용&lt;/blockquote&gt;
&lt;pre id=&quot;code_1762286931310&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1단계 : Build Stage
# 빠른 빌드에 최적화된 이미지인 openjdk:17-jdk-slim 사용, Builder 단계에서만 사용
FROM openjdk:17-jdk-slim AS builder

WORKDIR /app

# gradle 설정 복사
COPY gradlew build.gradle settings.gradle ./
COPY gradle ./gradle

# 소스 복사
COPY src ./src

# 실행 권한 부여 + 빌드
# bootJar만 빌드하여 build 전체 안 쓰고 필요한 아티팩트만 생성해서 빠르게 함
# --no-daemon 사용하여 도커 환경에서 데몬 프로세스 오류 방지
RUN chmod +x ./gradlew &amp;amp;&amp;amp; ./gradlew bootJar --no-daemon

# 2단계: Runtime Stage (이 또한 경량 이미지)
# 런타임은 경량 + AWS 친화적 (ECS, EC2 AMI와 일관성 유지)
FROM amazoncorretto:17-alpine
WORKDIR /app

# 빌드된 JAR 복사
COPY --from=builder /app/build/libs/*.jar app.jar

# 도커 컨테이너 내부에서 사용하는 헬스체크용 포트 노출
EXPOSE 8080

# Spring Boot 실행
ENTRYPOINT [&quot;java&quot;, &quot;-jar&quot;, &quot;app.jar&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) MacOS에 AWS CLI 설치&lt;/p&gt;
&lt;pre id=&quot;code_1762286956465&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl &quot;https://awscli.amazonaws.com/AWSCLIV2.pkg&quot; -o &quot;AWSCLIV2.pkg&quot;
sudo installer -pkg AWSCLIV2.pkg -target /

# 설치 끝나면 아래로 확인
# 예시 출력: aws-cli/2.x.x 이런 식이면 성공
aws --version&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;스크린샷 2025-06-04 오전 2.52.23.png&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FHNtV/dJMcabicBNE/Cr2q7pFScnTq6kIrg2EsR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FHNtV/dJMcabicBNE/Cr2q7pFScnTq6kIrg2EsR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FHNtV/dJMcabicBNE/Cr2q7pFScnTq6kIrg2EsR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFHNtV%2FdJMcabicBNE%2FCr2q7pFScnTq6kIrg2EsR1%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;673&quot; height=&quot;214&quot; data-filename=&quot;스크린샷 2025-06-04 오전 2.52.23.png&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762286979584&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ECR에 로그인하기 위해 인증 정보 입력해야 함
aws configure

# 그 뒤에는 아랫 내용 입력하면 됩니다.&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;+) IAM에서 내 계정(내 사용자) 엑세스 키 만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오전 2.57.26.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;933&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Go4iS/dJMcaacwCYW/CRTw1gIblnM4pyZElbiuT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Go4iS/dJMcaacwCYW/CRTw1gIblnM4pyZElbiuT1/img.png&quot; data-alt=&quot;IAM &amp;amp;rarr; 사용자 &amp;amp;rarr; 본인 계정 &amp;amp;rarr; 액세스키 생성 클릭 후, 이 화면이 나오는데 CLI 선택후 다음 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Go4iS/dJMcaacwCYW/CRTw1gIblnM4pyZElbiuT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGo4iS%2FdJMcaacwCYW%2FCRTw1gIblnM4pyZElbiuT1%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;1905&quot; height=&quot;933&quot; data-filename=&quot;스크린샷 2025-06-04 오전 2.57.26.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;933&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;IAM &amp;rarr; 사용자 &amp;rarr; 본인 계정 &amp;rarr; 액세스키 생성 클릭 후, 이 화면이 나오는데 CLI 선택후 다음 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오전 3.00.21.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yVsw5/dJMcagcJ8tf/mYwi3iN0Pmg7vm7GyJvhj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yVsw5/dJMcagcJ8tf/mYwi3iN0Pmg7vm7GyJvhj0/img.png&quot; data-alt=&quot;이 페이지 벗어나면 더이상 볼 수 없으니, 저거 복사해서 메모장에 붙여넣기 하거나 .csv파일로 보관해둬야 합니다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yVsw5/dJMcagcJ8tf/mYwi3iN0Pmg7vm7GyJvhj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyVsw5%2FdJMcagcJ8tf%2FmYwi3iN0Pmg7vm7GyJvhj0%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;1920&quot; height=&quot;934&quot; data-filename=&quot;스크린샷 2025-06-04 오전 3.00.21.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이 페이지 벗어나면 더이상 볼 수 없으니, 저거 복사해서 메모장에 붙여넣기 하거나 .csv파일로 보관해둬야 합니다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-81f5-9984-d93fac3948a6&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-8189-bb30-fb7889e86217&quot;&gt;
&lt;td id=&quot;aGJX&quot;&gt;항목&lt;/td&gt;
&lt;td id=&quot;VEt;&quot;&gt;설명&lt;/td&gt;
&lt;td id=&quot;jt];&quot;&gt;입력값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81e3-941d-e39fc6804ce6&quot;&gt;
&lt;td id=&quot;aGJX&quot;&gt;AWS Access Key ID&lt;/td&gt;
&lt;td id=&quot;VEt;&quot;&gt;IAM 사용자로 받은 키&lt;/td&gt;
&lt;td id=&quot;jt];&quot;&gt;AKIA...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-817d-9338-efc2e0127437&quot;&gt;
&lt;td id=&quot;aGJX&quot;&gt;AWS Secret Access Key&lt;/td&gt;
&lt;td id=&quot;VEt;&quot;&gt;IAM 사용자 시크릿&lt;/td&gt;
&lt;td id=&quot;jt];&quot;&gt;xxyyzz...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-810f-9b36-c8bbdf053a8b&quot;&gt;
&lt;td id=&quot;aGJX&quot;&gt;Default region name&lt;/td&gt;
&lt;td id=&quot;VEt;&quot;&gt;서울 리전&lt;/td&gt;
&lt;td id=&quot;jt];&quot;&gt;ap-northeast-2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81c8-b695-ef9012b242bc&quot;&gt;
&lt;td id=&quot;aGJX&quot;&gt;Default output format&lt;/td&gt;
&lt;td id=&quot;VEt;&quot;&gt;그대로 엔터 쳐도 됨&lt;/td&gt;
&lt;td id=&quot;jt];&quot;&gt;json 혹은 그냥 엔터&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오전 3.03.48.png&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTXAo6/dJMcae0iBYu/h6HrIhHgrcHuZTVXpXC8v0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTXAo6/dJMcae0iBYu/h6HrIhHgrcHuZTVXpXC8v0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTXAo6/dJMcae0iBYu/h6HrIhHgrcHuZTVXpXC8v0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTXAo6%2FdJMcae0iBYu%2Fh6HrIhHgrcHuZTVXpXC8v0%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;1056&quot; height=&quot;214&quot; data-filename=&quot;스크린샷 2025-06-04 오전 3.03.48.png&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;nbsp;docker desktop 실행 중인 상태로 아랫 명령어 쭉 진행합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762287073204&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 일단 user-service 기준으로 문서 남겨둡니다.
# 892117097999.dkr.ecr.ap-northeast-2.amazonaws.com =&amp;gt; ecr에서 유저 서비스 url 그대로 가져오면 됩니다.
aws ecr get-login-password --region ap-northeast-2 | \
docker login --username AWS --password-stdin 892117097999.dkr.ecr.ap-northeast-2.amazonaws.com&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;스크린샷 2025-06-04 오전 3.09.11.png&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuRXUg/dJMcajm0d8I/ZDWdxDEodiX6jttwn0cTN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuRXUg/dJMcajm0d8I/ZDWdxDEodiX6jttwn0cTN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuRXUg/dJMcajm0d8I/ZDWdxDEodiX6jttwn0cTN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuRXUg%2FdJMcajm0d8I%2FZDWdxDEodiX6jttwn0cTN0%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;728&quot; height=&quot;113&quot; data-filename=&quot;스크린샷 2025-06-04 오전 3.09.11.png&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희는 이미지 버전을 mutable하게 가져가지 않고(lastest ❌) &lt;b&gt;Immutable&lt;/b&gt;하게 v1.0.0 형식으로 버전관리할 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;주의할 점&amp;gt; : 과정 중에 이후의 하나의 과정이라도 실패하면 그냥 해당 ECR 삭제하고 다시 만드는 것 추천&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1762287100745&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker build -t reciping-user-service:v1.0.0 .&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;스크린샷 2025-06-04 오전 3.08.51.png&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6xct4/dJMcajAxpKW/pYFLmPii9UrW0S4spK5s1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6xct4/dJMcajAxpKW/pYFLmPii9UrW0S4spK5s1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6xct4/dJMcajAxpKW/pYFLmPii9UrW0S4spK5s1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6xct4%2FdJMcajAxpKW%2FpYFLmPii9UrW0S4spK5s1K%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;727&quot; height=&quot;376&quot; data-filename=&quot;스크린샷 2025-06-04 오전 3.08.51.png&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762287118871&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 빌드한 도커 이미지'reciping-user-service:v1.0.0'를 태깅 후, ECR에 푸쉬
docker tag reciping-user-service:v1.0.0 \
892117097999.dkr.ecr.ap-northeast-2.amazonaws.com/reciping-user-service:v1.0.0

docker push 892117097999.dkr.ecr.ap-northeast-2.amazonaws.com/reciping-user-service:v1.0.0&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;스크린샷 2025-06-04 오전 3.58.13.png&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D2OsF/dJMcaacwCY1/bMdnVZ3d73S7GguRYEWAk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D2OsF/dJMcaacwCY1/bMdnVZ3d73S7GguRYEWAk1/img.png&quot; data-alt=&quot;성공한 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D2OsF/dJMcaacwCY1/bMdnVZ3d73S7GguRYEWAk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD2OsF%2FdJMcaacwCY1%2FbMdnVZ3d73S7GguRYEWAk1%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;730&quot; height=&quot;186&quot; data-filename=&quot;스크린샷 2025-06-04 오전 3.58.13.png&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;186&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;+) 나머지 서비스들도 다 똑같은 과정으로 진행하세요.&lt;/p&gt;
&lt;pre id=&quot;code_1762287150463&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 디렉토리 이동 (예: reciping-recipe-service-BE)
cd ~/Desktop/dev_sini/reciping-recipe-service-BE

# 2. jar 빌드
./gradlew clean bootJar --no-daemon

# 3. 도커 이미지 빌드 (캐시 없이)
docker build --no-cache --platform linux/amd64 -t reciping-recipe-service:v1.0.0 .

# 4. 태깅
docker tag reciping-recipe-service:v1.0.0 \
892117097999.dkr.ecr.ap-northeast-2.amazonaws.com/reciping-recipe-service:v1.0.0

# 5. 푸시
docker push 892117097999.dkr.ecr.ap-northeast-2.amazonaws.com/reciping-recipe-service:v1.0.0&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. 태스크 정의 생성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8-1) fargate 태스크 정의 예시 (reciping-user-service)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오후 1.41.45.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctw1o8/dJMb99YZsHa/v7ss4HPSuhxIkWr6gTapMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctw1o8/dJMb99YZsHa/v7ss4HPSuhxIkWr6gTapMk/img.png&quot; data-alt=&quot;새 태스크 정의 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctw1o8/dJMb99YZsHa/v7ss4HPSuhxIkWr6gTapMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctw1o8%2FdJMb99YZsHa%2Fv7ss4HPSuhxIkWr6gTapMk%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;3840&quot; height=&quot;1870&quot; data-filename=&quot;스크린샷 2025-06-04 오후 1.41.45.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;새 태스크 정의 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오후 1.51.42.png&quot; data-origin-width=&quot;3812&quot; data-origin-height=&quot;1866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOnCFM/dJMcai9s3tY/j3XJNqD7DI5mo0wF3TMPIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOnCFM/dJMcai9s3tY/j3XJNqD7DI5mo0wF3TMPIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOnCFM/dJMcai9s3tY/j3XJNqD7DI5mo0wF3TMPIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOnCFM%2FdJMcai9s3tY%2Fj3XJNqD7DI5mo0wF3TMPIK%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;3812&quot; height=&quot;1866&quot; data-filename=&quot;스크린샷 2025-06-04 오후 1.51.42.png&quot; data-origin-width=&quot;3812&quot; data-origin-height=&quot;1866&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 운영 체제/아키텍처 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: Linux/X86_64 대부분 기본 설정.(ARM 기반 컨테이너가 맞을 때는 다른거 사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 태스크 크기 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: fargate는 EC2와 달리 조합을 미리 정해둡니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현업에서는 웹 서비스: 0.5 vCPU + 1GB ~ 1 vCPU + 3GB, 검색, 머신러닝 등 고성능: 2~4 vCPU + 8GB~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 태스크 역할 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 컨테이너 내 애플리케이션이 AWS 리소스에 접근할 수 있도록 부여된 IAM Role&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현업에서는 ecsTaskExecutionRole 또는 서비스 전용 Role 따로 생성해서 사용한다고 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오후 5.57.16.png&quot; data-origin-width=&quot;3810&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cllDFI/dJMcagcJ8tq/r62vZu5PzHVEqnF1AtRdrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cllDFI/dJMcagcJ8tq/r62vZu5PzHVEqnF1AtRdrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cllDFI/dJMcagcJ8tq/r62vZu5PzHVEqnF1AtRdrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcllDFI%2FdJMcagcJ8tq%2Fr62vZu5PzHVEqnF1AtRdrK%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;3810&quot; height=&quot;1870&quot; data-filename=&quot;스크린샷 2025-06-04 오후 5.57.16.png&quot; data-origin-width=&quot;3810&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 프라이빗 레지스트리 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 프라이빗 레지스트리 인증을 켜면, Docker 이미지의 사용자명/비밀번호가 필요할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ECR이 아닌 타사 프라이빗 레지스트리(ex. DockerHub Pro, GitHub Container Registry 등)일 경우는 Secrets Manager를 통해 자격 증명을 받아야 하는데 ECR 사용하고 있으니 켜놓긴 하되, Secrets Manager 설정은 빈칸으로 두세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 포트 매핑 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: ECS에서 유저 서비스는 포트 8080로 스프링부트가 구동되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 읽기 전용 루트 파일 시스템 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 컨테이너 내의 루트 파일 시스템을 읽기 전용으로 설정할지 선택 &amp;rArr; 스프링 부트 앱이면 읽기 전용은 체크 X&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 리소스 할당 제한 ]&lt;/b&gt;&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-81c4-beb7-f764a4cf4436&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-813a-81be-ef895a2b4146&quot;&gt;
&lt;td id=&quot;R&amp;#96;\&amp;#96;&quot;&gt;목적&lt;/td&gt;
&lt;td id=&quot;hjif&quot;&gt;CPU&lt;/td&gt;
&lt;td id=&quot;@H&amp;#96;l&quot;&gt;Memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81dc-9087-c8282769e9d8&quot;&gt;
&lt;td id=&quot;R&amp;#96;\&amp;#96;&quot;&gt;소규모 API 서비스 (트래픽 적음)&lt;/td&gt;
&lt;td id=&quot;hjif&quot;&gt;0.5 vCPU&lt;/td&gt;
&lt;td id=&quot;@H&amp;#96;l&quot;&gt;1~2 GiB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-811a-ad60-cc3b4b9d513f&quot;&gt;
&lt;td id=&quot;R&amp;#96;\&amp;#96;&quot;&gt;일반 SpringBoot 서비스 (유저 로그인/조회 등)&lt;/td&gt;
&lt;td id=&quot;hjif&quot;&gt;1 vCPU&lt;/td&gt;
&lt;td id=&quot;@H&amp;#96;l&quot;&gt;2~3 GiB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8123-815c-f9e116e47b53&quot;&gt;
&lt;td id=&quot;R&amp;#96;\&amp;#96;&quot;&gt;대용량 또는 병렬 처리 서비스&lt;/td&gt;
&lt;td id=&quot;hjif&quot;&gt;2 vCPU&lt;/td&gt;
&lt;td id=&quot;@H&amp;#96;l&quot;&gt;4 GiB 이상&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 환경 변수 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포 자동화 환경(Jenkins)에서 환경 변수를 주입할 거면 ECS 환경변수 설정은 생략해도 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오후 6.58.45.png&quot; data-origin-width=&quot;3806&quot; data-origin-height=&quot;1868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/enq92d/dJMcagqhhMr/8IXZasZ7O5gwCGoi9mjTwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/enq92d/dJMcagqhhMr/8IXZasZ7O5gwCGoi9mjTwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/enq92d/dJMcagqhhMr/8IXZasZ7O5gwCGoi9mjTwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fenq92d%2FdJMcagqhhMr%2F8IXZasZ7O5gwCGoi9mjTwk%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;3806&quot; height=&quot;1868&quot; data-filename=&quot;스크린샷 2025-06-04 오후 6.58.45.png&quot; data-origin-width=&quot;3806&quot; data-origin-height=&quot;1868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-04 오후 6.58.54.png&quot; data-origin-width=&quot;3808&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uTDnu/dJMcaeMLqKo/rW0MbJD56pzBgjL3kKJ5fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uTDnu/dJMcaeMLqKo/rW0MbJD56pzBgjL3kKJ5fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uTDnu/dJMcaeMLqKo/rW0MbJD56pzBgjL3kKJ5fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuTDnu%2FdJMcaeMLqKo%2FrW0MbJD56pzBgjL3kKJ5fk%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;3808&quot; height=&quot;1870&quot; data-filename=&quot;스크린샷 2025-06-04 오후 6.58.54.png&quot; data-origin-width=&quot;3808&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8-2) EC2 태스크 정의 예시 (reciping-search-service)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-07 오후 5.40.05.png&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nuhFF/dJMcagjvHBx/QyvYqRzhfsoC0kkZq7KVp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nuhFF/dJMcagjvHBx/QyvYqRzhfsoC0kkZq7KVp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nuhFF/dJMcagjvHBx/QyvYqRzhfsoC0kkZq7KVp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnuhFF%2FdJMcagjvHBx%2FQyvYqRzhfsoC0kkZq7KVp0%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;3022&quot; height=&quot;1644&quot; data-filename=&quot;스크린샷 2025-06-07 오후 5.40.05.png&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 네트워크 모드 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: awsvpc : ECS Task가 ENI(IP)를 직접 받아서 통신함 &amp;rarr; 보안 그룹, IAM 관리도 쉬움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 작업 배치 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가 X&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 결함 주입 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: AWS Fault Injection Simulator (FIS)와 연동하여 &lt;b&gt;장애 유도 테스트&lt;/b&gt; 수행 옵션이며, 보통 장애 대응 훈련, 복원력 테스트 시 QA 환경에서 사용 가능하며 현재 프로덕션 환경에선 사용 안 하므로 체크 X&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-09 오전 1.58.05.png&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuIb9o/dJMcahCILTM/6MGOZrxEruYYm0pgNvx2QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuIb9o/dJMcahCILTM/6MGOZrxEruYYm0pgNvx2QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuIb9o/dJMcahCILTM/6MGOZrxEruYYm0pgNvx2QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuIb9o%2FdJMcahCILTM%2F6MGOZrxEruYYm0pgNvx2QK%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;1907&quot; height=&quot;932&quot; data-filename=&quot;스크린샷 2025-06-09 오전 1.58.05.png&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;932&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;9. 서비스 생성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9-1) fargate일 경우(예 : user-service)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-09 오전 2.18.37.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oD2MS/dJMcaklUxwa/r6wHifd8Zdz3ng43VksYTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oD2MS/dJMcaklUxwa/r6wHifd8Zdz3ng43VksYTk/img.png&quot; data-alt=&quot;서비스 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oD2MS/dJMcaklUxwa/r6wHifd8Zdz3ng43VksYTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoD2MS%2FdJMcaklUxwa%2Fr6wHifd8Zdz3ng43VksYTk%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;1920&quot; height=&quot;934&quot; data-filename=&quot;스크린샷 2025-06-09 오전 2.18.37.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서비스 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-09 오전 2.29.00.png&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvIAbY/dJMcaa4FpNJ/LsBDsrL0AR4KUiPklMB6f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvIAbY/dJMcaa4FpNJ/LsBDsrL0AR4KUiPklMB6f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvIAbY/dJMcaa4FpNJ/LsBDsrL0AR4KUiPklMB6f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvIAbY%2FdJMcaa4FpNJ%2FLsBDsrL0AR4KUiPklMB6f0%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;1907&quot; height=&quot;934&quot; data-filename=&quot;스크린샷 2025-06-09 오전 2.29.00.png&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 태스크 정의 개정 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 최신 개정 선택(예: :1, :2 등) &amp;rarr; 수동 선택 가능, 일반적으로 최신 개정 선택 (기본값 유지 OK)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 서비스 이름 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 자동으로 reciping-user-task-service-&amp;lt;랜덤&amp;gt;처럼 생성될텐데 이건 직접 reciping-user-service로 수정해야 팀 기준으로 서비스명 일관성이 유지가 되니 꼭 바꾸기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 컴퓨팅 구성(고급) ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 어떤 인스턴스에 태스크를 띄울지 ECS가 알아서 선택하는 방식 &amp;rarr; 용량 공급자 전략 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;( 시작 유형은 예전 방식이며, 간단하지만 오토 스케일링과 스팟 연동 등 제한)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 용량 공급자 전략 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;fargate의 경우, 사용자 지정 사용(고급) 선택 ( EC2의 경우, 클러스터 기본값 사용 선택)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 용량 공급자 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메인 컨테이너를 정규 fargate에서 실행한다는 의미로 FARGATE 선택&lt;/li&gt;
&lt;li&gt;가중치는 1 기본값 유지 (FARGATE_SPOT을 추가하려면 전략적으로 FARGATE: 1, FARGATE_SPOT: 1 같이 구성해서 비용 최적화도 가능)&lt;/li&gt;
&lt;li&gt;&amp;rArr; 하지만 user-service처럼 항상 켜져야 하는 서비스는 FARGATE 단독이 안정적&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 플랫폼 버전 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: LATEST 선택 (보안 정책상 고정 버전 사용하는 금융/대겹은 1.4.0 사용하기도 한다고 합니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-09 오전 2.45.52.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwmx5C/dJMcacBpDMe/L0kbn1cM3TkYuWx9JSt150/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwmx5C/dJMcacBpDMe/L0kbn1cM3TkYuWx9JSt150/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwmx5C/dJMcacBpDMe/L0kbn1cM3TkYuWx9JSt150/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdwmx5C%2FdJMcacBpDMe%2FL0kbn1cM3TkYuWx9JSt150%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;1905&quot; height=&quot;936&quot; data-filename=&quot;스크린샷 2025-06-09 오전 2.45.52.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 서비스 유형 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 원하는 태스크 수만큼 ECS가 유지하는 구조 (MSA 대부분이 여기에 해당) &amp;rarr; 복제본 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 원하는 태스크 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 초기에는 1개로 시작, 필요 시 오토 스케일링 설정하면 되는데 저희는 나중에 설정할 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(실무에서는 초기 서비스에서는 1~2개 선택하고 트래픽 증가에 따라 조정한다고 합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 가용 영역 리밸런싱 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: Fargate가 AZ 불균형 발생 시 자동으로 리밸런싱 해줌 (현업에서 반드시 켜놓음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 상태 검사 유예 기간 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 스프링 부트 서버의 경우, 기동이 20~30초 걸린다 생각하면 30으로 설정해두기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 배포 유형 ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;롤링 업데이트 : 한 번에 일부 태스크를 교체하며 무중단 배포 &amp;rarr; 규모 작을 때 적합합니다. 이거 선택&lt;/li&gt;
&lt;li&gt;블루/그린 : 테스트 후 승인 방식 배포 &amp;rarr; 서버가 많이 떠있으면 가능(지금은 필요X / 나중에 고려)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 최소 실행 작업 비율 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 업데이트 도중 기존 태스크는 100% 유지, 새 태스크 배포 후 교체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 최대 실행 작업 비율 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 최대 몇 개까지 동시 실행 가능한지 (기존 + 신규) &amp;rarr; 기본값 200% 적용(오토 스케일링 대응 포함됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 배포 실패 감지 ]&lt;/b&gt;&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-811a-b0ee-fceac9cddc8e&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-8119-baba-e407a83834be&quot;&gt;
&lt;td id=&quot;FGvl&quot;&gt;옵션&lt;/td&gt;
&lt;td id=&quot;OLz:&quot;&gt;설명&lt;/td&gt;
&lt;td id=&quot;Ctnp&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8144-ae2d-cd167f0dbe63&quot;&gt;
&lt;td id=&quot;FGvl&quot;&gt;Amazon ECS 배포 회로 차단기 사용&lt;/td&gt;
&lt;td id=&quot;OLz:&quot;&gt;배포 중 태스크가 unhealthy 상태에 도달하면 즉시 배포 중단&lt;/td&gt;
&lt;td id=&quot;Ctnp&quot;&gt;항상 ON(기본 보호 메커니즘)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81d7-b8f4-ee5f568e18cb&quot;&gt;
&lt;td id=&quot;FGvl&quot;&gt;실패 시 롤백&lt;/td&gt;
&lt;td id=&quot;OLz:&quot;&gt;새 배포가 실패하면 이전 정상 상태로 자동 롤백&lt;/td&gt;
&lt;td id=&quot;Ctnp&quot;&gt;ON (중단 없는 운영을 위해)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-811e-bfa7-ece30a5172f9&quot;&gt;
&lt;td id=&quot;FGvl&quot;&gt;CloudWatch 경보 사용&lt;/td&gt;
&lt;td id=&quot;OLz:&quot;&gt;CloudWatch Alarm이 발생하면 배포 중단&lt;/td&gt;
&lt;td id=&quot;Ctnp&quot;&gt;알람 연동된 모니터링 세팅이 있는 경우만 사용 (없으면 꺼두는 게 맞습니다)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-09 오전 3.13.55.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mdVr1/dJMcaeeVvAj/YQ5O4M9atybHu519O8xPR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mdVr1/dJMcaeeVvAj/YQ5O4M9atybHu519O8xPR1/img.png&quot; data-alt=&quot;fargate가 프라이빗 서브넷에서 실행되고, ALB가 라우팅을 담당하니까 퍼블릭 IP도 꺼짐 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mdVr1/dJMcaeeVvAj/YQ5O4M9atybHu519O8xPR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmdVr1%2FdJMcaeeVvAj%2FYQ5O4M9atybHu519O8xPR1%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;1905&quot; height=&quot;936&quot; data-filename=&quot;스크린샷 2025-06-09 오전 3.13.55.png&quot; data-origin-width=&quot;1905&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;fargate가 프라이빗 서브넷에서 실행되고, ALB가 라우팅을 담당하니까 퍼블릭 IP도 꺼짐 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-09 오전 3.15.12.png&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;935&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cO0kpd/dJMcad1oiK5/uVe27Hk8mYxo0cbFLA7aF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cO0kpd/dJMcad1oiK5/uVe27Hk8mYxo0cbFLA7aF1/img.png&quot; data-alt=&quot;여기서 태그만 사용하겠습니다.(서비스 자동 크기 조정(오토 스케일링)같은 경우, 나중에 따로 설정할 것)
alb &amp;amp;rarr; ecs 구조면 로드 밸런싱 옵션 사용해야 함&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cO0kpd/dJMcad1oiK5/uVe27Hk8mYxo0cbFLA7aF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO0kpd%2FdJMcad1oiK5%2FuVe27Hk8mYxo0cbFLA7aF1%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;1908&quot; height=&quot;935&quot; data-filename=&quot;스크린샷 2025-06-09 오전 3.15.12.png&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;935&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;여기서 태그만 사용하겠습니다.(서비스 자동 크기 조정(오토 스케일링)같은 경우, 나중에 따로 설정할 것)
alb &amp;rarr; ecs 구조면 로드 밸런싱 옵션 사용해야 함&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/116</guid>
      <comments>https://670811.tistory.com/116#entry116comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:43:33 +0900</pubDate>
    </item>
    <item>
      <title>[reciping] ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 (1)</title>
      <link>https://670811.tistory.com/115</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762285522173&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 | Notion&quot; data-og-description=&quot;1. 각각에 넣을 보안그룹 생성하기( ALB, Gateway Server, ECS )&quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gAVbF/hyZM9B6omL/HWOE8HoJv23zIdtpIUcgN0/img.png?width=2048&amp;amp;height=1118&amp;amp;face=0_0_2048_1118,https://scrap.kakaocdn.net/dn/bIQpZ4/hyZNfbf8SJ/b8yNj6RabMSLUhkjWRyYFK/img.png?width=2048&amp;amp;height=1118&amp;amp;face=0_0_2048_1118&quot;&gt;&lt;a href=&quot;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/ECS-EC2-Fargate-EC2-2690661ce6288002b649e41cce173d12&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gAVbF/hyZM9B6omL/HWOE8HoJv23zIdtpIUcgN0/img.png?width=2048&amp;amp;height=1118&amp;amp;face=0_0_2048_1118,https://scrap.kakaocdn.net/dn/bIQpZ4/hyZNfbf8SJ/b8yNj6RabMSLUhkjWRyYFK/img.png?width=2048&amp;amp;height=1118&amp;amp;face=0_0_2048_1118');&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;ECS(EC2, Fargate)로 백엔드 애플리케이션 배포하기 + 기본 EC2배포까지 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 각각에 넣을 보안그룹 생성하기( ALB, Gateway Server, ECS )&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ECS - ECR 세팅과정을 담았습니다. CICD 적용 전이라 나중에 조금씩 세팅이 바뀔 수 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 각각에 넣을 보안그룹 생성하기( ALB, Gateway Server, ECS )&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ELB에는 NLB와 ALB 등이 있는데 ALB를 선택한 이유는 한 번 따로 찾아봐주시길 바랍니다! 외부 클라이언트 &amp;rarr; ALB 요청을 조건에 따라 허용하는 보안그룹을 설정하겠습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적인 흐름은 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762285593200&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[클라이언트]
   &amp;darr; 443
[ALB] ───── SG A ───────▶ 포트 8090
   &amp;darr;
[게이트웨이 EC2] ───── SG B ─────▶ 포트 8080&amp;ndash;8093
   &amp;darr;
[ECS 서비스들] ───── SG C&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;1-1) ALB &lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;1&quot;&gt;보안그룹&lt;/span&gt; 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-27 오후 2.42.10.png&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5PVPA/dJMcaawPqCA/sBfVdwHFi427NPtGatFrLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5PVPA/dJMcaawPqCA/sBfVdwHFi427NPtGatFrLk/img.png&quot; data-alt=&quot;원래는 위와 같이 인바운드만 HTTP, HTTPS, 0.0.0.0/0으로 열어주고 보안 그룹 생성 클릭하나, 우리는 특별한 상황(게이트웨이 서버가 존재)이니 아웃바운드 규칙을 게이트웨이 서버 보안그룹과 연결해줍니다. &amp;amp;rarr; 일단 수정할건데 이렇게 두기( 인바운드도 나중에 프론트 배포 후, cloudfront IP만 허용하는 걸로 바꿀 거임 )&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5PVPA/dJMcaawPqCA/sBfVdwHFi427NPtGatFrLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5PVPA%2FdJMcaawPqCA%2FsBfVdwHFi427NPtGatFrLk%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;3022&quot; height=&quot;1650&quot; data-filename=&quot;스크린샷 2025-05-27 오후 2.42.10.png&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1650&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;원래는 위와 같이 인바운드만 HTTP, HTTPS, 0.0.0.0/0으로 열어주고 보안 그룹 생성 클릭하나, 우리는 특별한 상황(게이트웨이 서버가 존재)이니 아웃바운드 규칙을 게이트웨이 서버 보안그룹과 연결해줍니다. &amp;rarr; 일단 수정할건데 이렇게 두기( 인바운드도 나중에 프론트 배포 후, cloudfront IP만 허용하는 걸로 바꿀 거임 )&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-27 오후 2.43.21 (1).png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfnO5d/dJMcagcJ78m/2PqkKqmKNEOgKn2wOtttb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfnO5d/dJMcagcJ78m/2PqkKqmKNEOgKn2wOtttb1/img.png&quot; data-alt=&quot;ALB용 보안 그룹 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfnO5d/dJMcagcJ78m/2PqkKqmKNEOgKn2wOtttb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfnO5d%2FdJMcagcJ78m%2F2PqkKqmKNEOgKn2wOtttb1%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;3024&quot; height=&quot;1642&quot; data-filename=&quot;스크린샷 2025-05-27 오후 2.43.21 (1).png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ALB용 보안 그룹 생성 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-2) Gateway server 보안그룹 생성&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Gateway server용 보안그룹은 ALB &amp;rarr; Gateway server의 통신을 허용하는 역할이라서 ALB 보안 그룹에서 오는 트래픽만 허용하겠습니다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-27 오후 8.42.04.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk1lyt/dJMcaj8nntj/xuhrRiFLGAlRh9rQcKPOR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk1lyt/dJMcaj8nntj/xuhrRiFLGAlRh9rQcKPOR0/img.png&quot; data-alt=&quot;일단 인바운드는 alb에서 들어오니까 이렇게 설정해놓고 아웃바운드는 ecs 보안그룹 만든 후에 다시 세팅할 것입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk1lyt/dJMcaj8nntj/xuhrRiFLGAlRh9rQcKPOR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk1lyt%2FdJMcaj8nntj%2FxuhrRiFLGAlRh9rQcKPOR0%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;3024&quot; height=&quot;1644&quot; data-filename=&quot;스크린샷 2025-05-27 오후 8.42.04.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;일단 인바운드는 alb에서 들어오니까 이렇게 설정해놓고 아웃바운드는 ecs 보안그룹 만든 후에 다시 세팅할 것입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-02 오후 4.22.08.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcu1Di/dJMcad79UuX/Cgk5QdFXnc4pSBDU5fkjgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcu1Di/dJMcad79UuX/Cgk5QdFXnc4pSBDU5fkjgK/img.png&quot; data-alt=&quot;+) 추가로 gateway에 bastion서버를 통해 jar파일 배포하고 싶으면 인바운드로 아래와 같이 추가 필요!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcu1Di/dJMcad79UuX/Cgk5QdFXnc4pSBDU5fkjgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdcu1Di%2FdJMcad79UuX%2FCgk5QdFXnc4pSBDU5fkjgK%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;3840&quot; height=&quot;1870&quot; data-filename=&quot;스크린샷 2025-06-02 오후 4.22.08.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;+) 추가로 gateway에 bastion서버를 통해 jar파일 배포하고 싶으면 인바운드로 아래와 같이 추가 필요!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  왜 80이 아니라 80XX(ex : 8090)를 쓰는 이유&lt;/h3&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;80번&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;공식 HTTP 표준 포트&lt;/td&gt;
&lt;td&gt;브라우저가 기본으로 연결함 (&lt;a href=&quot;http://example.com&quot;&gt;http://example.com&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;443번&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;공식 HTTPS 표준 포트&lt;/td&gt;
&lt;td&gt;TLS 기반 HTTPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;80XX번&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;개발용/비표준 HTTP 포트&lt;/td&gt;
&lt;td&gt;앱 내부 통신, 리버스 프록시 뒤의 서버 등&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 80포트는 ALB에서 이미 점유하고 있어서 게이트웨이나 내부 서버에서는 내부 포트를 따로 둬야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 서비스 간 내부 라우팅은 명시적으로 포트 분리를 선호합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 게이트웨이 &amp;rarr; user-service: 8081, 게이트웨이 &amp;rarr; recipe-service: 8082..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이렇게 포트를 나눠야 서비스별 라우팅이 명확합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 우리 서버 포트 참고 자료 ] &lt;a href=&quot;https://www.notion.so/1f20661ce62880589bf4c470d9f8ba3b?pvs=21&quot;&gt;레시핑 서비스별 포트번호 정리&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;1-3) ECS 보안그룹 생성&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ECS용 보안그룹은 Gateway Server &amp;rarr; ECS Task의 통신을 허용하는 역할이라서 Gateway Server 보안 그룹에서 오는 트래픽만 허용하겠습니다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 3.54.07.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNHRtq/dJMcaeeVvec/Ita94Jt48TTC328dap8Zq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNHRtq/dJMcaeeVvec/Ita94Jt48TTC328dap8Zq1/img.png&quot; data-alt=&quot;인바운드는 우리 띄워진 서버들 열어줍니다. 보안 그룹 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNHRtq/dJMcaeeVvec/Ita94Jt48TTC328dap8Zq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNHRtq%2FdJMcaeeVvec%2FIta94Jt48TTC328dap8Zq1%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;3024&quot; height=&quot;1648&quot; data-filename=&quot;스크린샷 2025-05-28 오후 3.54.07.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인바운드는 우리 띄워진 서버들 열어줍니다. 보안 그룹 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 3.56.04.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXCVln/dJMcaeeVvee/LkdFuFMomGf4rQOuZQiqT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXCVln/dJMcaeeVvee/LkdFuFMomGf4rQOuZQiqT1/img.png&quot; data-alt=&quot;ECS용 보안 그룹 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXCVln/dJMcaeeVvee/LkdFuFMomGf4rQOuZQiqT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXCVln%2FdJMcaeeVvee%2FLkdFuFMomGf4rQOuZQiqT1%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-28 오후 3.56.04.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ECS용 보안 그룹 생성 완료&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-4) alb, gateway 보안 그룹 다시 수정하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.07.01.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGm5BX/dJMcaaQ8edW/jBmdyORYXsL4pYHOfupD61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGm5BX/dJMcaaQ8edW/jBmdyORYXsL4pYHOfupD61/img.png&quot; data-alt=&quot;alb 보안그룹 선택 후, 아웃바운드 규칙 편집 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGm5BX/dJMcaaQ8edW/jBmdyORYXsL4pYHOfupD61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGm5BX%2FdJMcaaQ8edW%2FjBmdyORYXsL4pYHOfupD61%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;3024&quot; height=&quot;1650&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.07.01.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1650&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;alb 보안그룹 선택 후, 아웃바운드 규칙 편집 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.09.39.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqZ9KT/dJMcabP2vOK/RIENGF1tluMut9L7KOIflK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqZ9KT/dJMcabP2vOK/RIENGF1tluMut9L7KOIflK/img.png&quot; data-alt=&quot;원래 있던 아웃바운드 규칙 삭제 클릭 후, 규칙 추가 클릭, 해당과 같이 입력 후 규칙 저장 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqZ9KT/dJMcabP2vOK/RIENGF1tluMut9L7KOIflK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqZ9KT%2FdJMcabP2vOK%2FRIENGF1tluMut9L7KOIflK%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;3024&quot; height=&quot;1644&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.09.39.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;원래 있던 아웃바운드 규칙 삭제 클릭 후, 규칙 추가 클릭, 해당과 같이 입력 후 규칙 저장 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.09.58.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yryHT/dJMcaeFZQeH/fbBexmfNsV1DGadykwOWX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yryHT/dJMcaeFZQeH/fbBexmfNsV1DGadykwOWX1/img.png&quot; data-alt=&quot;alb 보안그룹 수정 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yryHT/dJMcaeFZQeH/fbBexmfNsV1DGadykwOWX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyryHT%2FdJMcaeFZQeH%2FfbBexmfNsV1DGadykwOWX1%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.09.58.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;alb 보안그룹 수정 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.13.01.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rSouB/dJMcacnSnWi/AKn0Uv6uU8j6DDzkkKZdLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rSouB/dJMcacnSnWi/AKn0Uv6uU8j6DDzkkKZdLK/img.png&quot; data-alt=&quot;마찬가지로 ecs 보안그룹도 원래 있던 아웃바운드 규칙 삭제 클릭 후, 규칙 추가 클릭, 해당과 같이 입력 후 규칙 저장 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rSouB/dJMcacnSnWi/AKn0Uv6uU8j6DDzkkKZdLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrSouB%2FdJMcacnSnWi%2FAKn0Uv6uU8j6DDzkkKZdLK%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;3024&quot; height=&quot;1648&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.13.01.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마찬가지로 ecs 보안그룹도 원래 있던 아웃바운드 규칙 삭제 클릭 후, 규칙 추가 클릭, 해당과 같이 입력 후 규칙 저장 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.13.29.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y8QHj/dJMcaf5YvQh/C89njK1MnPx2QgeokkbVsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y8QHj/dJMcaf5YvQh/C89njK1MnPx2QgeokkbVsk/img.png&quot; data-alt=&quot;gateway 보안그룹 수정 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y8QHj/dJMcaf5YvQh/C89njK1MnPx2QgeokkbVsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy8QHj%2FdJMcaf5YvQh%2FC89njK1MnPx2QgeokkbVsk%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;3024&quot; height=&quot;1644&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.13.29.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;gateway 보안그룹 수정 완료&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;table id=&quot;2690661c-e628-81b2-affa-d41b38a2ded2&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-8148-a4cc-f28333ee162a&quot;&gt;
&lt;td id=&quot;&amp;lt;cZI&quot;&gt;&lt;u&gt;&lt;b&gt;보안그룹&lt;/b&gt;&lt;/u&gt;&lt;/td&gt;
&lt;td id=&quot;py_^&quot;&gt;&lt;u&gt;&lt;b&gt;인바운드&lt;/b&gt;&lt;/u&gt;&lt;/td&gt;
&lt;td id=&quot;CJ;;&quot;&gt;&lt;u&gt;&lt;b&gt;아웃바운드&lt;/b&gt;&lt;/u&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81de-b602-f8ffd0fb2f23&quot;&gt;
&lt;td id=&quot;&amp;lt;cZI&quot;&gt;&lt;b&gt;ALB (A)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;py_^&quot;&gt;80/443 from 0.0.0.0/0(cloudfront 적용하면 수정할 것임)&lt;/td&gt;
&lt;td id=&quot;CJ;;&quot;&gt;To Security Group B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8129-af54-efa2c86f5699&quot;&gt;
&lt;td id=&quot;&amp;lt;cZI&quot;&gt;&lt;b&gt;Gateway (B)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;py_^&quot;&gt;8080 from &lt;b&gt;SG A / SSH from SG bastion&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;CJ;;&quot;&gt;To &lt;b&gt;SG C&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-8100-a1b0-ce0bcb77bcf7&quot;&gt;
&lt;td id=&quot;&amp;lt;cZI&quot;&gt;&lt;b&gt;ECS (C)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;py_^&quot;&gt;8080 from &lt;b&gt;SG B&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;CJ;;&quot;&gt;외부 통신용 (S3 등) or 제한 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. ALB에 붙일 대상그룹 생성하기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.24.40.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/df3o22/dJMcaaQ8ed2/DBk9k751gzvFDRfo4FKpl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/df3o22/dJMcaaQ8ed2/DBk9k751gzvFDRfo4FKpl0/img.png&quot; data-alt=&quot;대상 그룹 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/df3o22/dJMcaaQ8ed2/DBk9k751gzvFDRfo4FKpl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdf3o22%2FdJMcaaQ8ed2%2FDBk9k751gzvFDRfo4FKpl0%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;3024&quot; height=&quot;1644&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.24.40.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대상 그룹 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.31.16.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zkBLC/dJMcaksF5TE/gjvgZUFfmSfP6RK1a3lLK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zkBLC/dJMcaksF5TE/gjvgZUFfmSfP6RK1a3lLK0/img.png&quot; data-alt=&quot;ALB의 트래픽을 게이트웨이 서버 인스턴스로 연결하니 반드시 인스턴스로 대상 유형을 선택합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zkBLC/dJMcaksF5TE/gjvgZUFfmSfP6RK1a3lLK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzkBLC%2FdJMcaksF5TE%2FgjvgZUFfmSfP6RK1a3lLK0%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;3024&quot; height=&quot;1648&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.31.16.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ALB의 트래픽을 게이트웨이 서버 인스턴스로 연결하니 반드시 인스턴스로 대상 유형을 선택합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.33.22.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J4Qqv/dJMcahbEo5n/TophUfnVtXH315E3d0ekr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J4Qqv/dJMcahbEo5n/TophUfnVtXH315E3d0ekr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J4Qqv/dJMcahbEo5n/TophUfnVtXH315E3d0ekr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ4Qqv%2FdJMcahbEo5n%2FTophUfnVtXH315E3d0ekr1%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-28 오후 4.33.22.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[ 프로토콜 : 포트 ] : (1) HTTPS는 ALB가 처리하고 여기선 내부 통신이므로 HTTP 선택 (내부통신은 HTTPS 불필요, ALB가 SSL 처리함) (2) 게이트웨이 서버 내부 포트인 8090 추가&lt;/li&gt;
&lt;li&gt;[ 프로토콜 버전 ] :&lt;/li&gt;
&lt;/ul&gt;
&lt;table id=&quot;2690661c-e628-8140-a8f8-cb624630e658&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-81f4-a892-dd3bd6894201&quot;&gt;
&lt;td id=&quot;;p^D&quot;&gt;&lt;b&gt;버전&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;pUki&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;KKkF&quot;&gt;&lt;b&gt;사용 추천 상황&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81ed-9187-d21ec9afd052&quot;&gt;
&lt;td id=&quot;;p^D&quot;&gt;HTTP1&lt;/td&gt;
&lt;td id=&quot;pUki&quot;&gt;대부분의 Spring, Express, Nginx 서버는 기본적으로 HTTP/1.1&lt;/td&gt;
&lt;td id=&quot;KKkF&quot;&gt;현재 환경에 가장 안정적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81b5-a652-cb27c5f1ee2a&quot;&gt;
&lt;td id=&quot;;p^D&quot;&gt;HTTP2&lt;/td&gt;
&lt;td id=&quot;pUki&quot;&gt;요청 다중화 지원. 하지만 서버가 지원 안 하면 연결 실패&lt;/td&gt;
&lt;td id=&quot;KKkF&quot;&gt;Spring Boot, Nginx 기본은 HTTP1을 씁니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-811d-8244-d38b835d9eae&quot;&gt;
&lt;td id=&quot;;p^D&quot;&gt;gRPC&lt;/td&gt;
&lt;td id=&quot;pUki&quot;&gt;gRPC 프로토콜 전용&lt;/td&gt;
&lt;td id=&quot;KKkF&quot;&gt;일반 HTTP 서비스에서는 사용하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 5.29.32.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vJNgR/dJMcac2tY3r/dmrEVx1YNHsQA9XposRAxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vJNgR/dJMcac2tY3r/dmrEVx1YNHsQA9XposRAxk/img.png&quot; data-alt=&quot;(1) 게이트웨이 서버가 HTTP로 응답하니 HTTP 로 설정
(2) ALB가 트래픽 보내는 포트(=8090)으로 검사하니 트래픽 포트 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vJNgR/dJMcac2tY3r/dmrEVx1YNHsQA9XposRAxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvJNgR%2FdJMcac2tY3r%2FdmrEVx1YNHsQA9XposRAxk%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-28 오후 5.29.32.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(1) 게이트웨이 서버가 HTTP로 응답하니 HTTP 로 설정
(2) ALB가 트래픽 보내는 포트(=8090)으로 검사하니 트래픽 포트 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 5.30.15.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CeLmw/dJMcacnSnZC/9VbX38M4rJMTFxYmRMsaAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CeLmw/dJMcacnSnZC/9VbX38M4rJMTFxYmRMsaAK/img.png&quot; data-alt=&quot;(3) 기본값으로 가져가기(실무에서는 간격을 10초로도 가져간다고는 하네요)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CeLmw/dJMcacnSnZC/9VbX38M4rJMTFxYmRMsaAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCeLmw%2FdJMcacnSnZC%2F9VbX38M4rJMTFxYmRMsaAK%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;3024&quot; height=&quot;1650&quot; data-filename=&quot;스크린샷 2025-05-28 오후 5.30.15.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1650&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(3) 기본값으로 가져가기(실무에서는 간격을 10초로도 가져간다고는 하네요)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 5.30.41.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yhWEx/dJMcahJum3I/ZWq5U0FWemjKpm5dAsfkz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yhWEx/dJMcahJum3I/ZWq5U0FWemjKpm5dAsfkz1/img.png&quot; data-alt=&quot;태그 추가후, 다음 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yhWEx/dJMcahJum3I/ZWq5U0FWemjKpm5dAsfkz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyhWEx%2FdJMcahJum3I%2FZWq5U0FWemjKpm5dAsfkz1%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;3024&quot; height=&quot;1648&quot; data-filename=&quot;스크린샷 2025-05-28 오후 5.30.41.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;태그 추가후, 다음 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-28 오후 5.45.06.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi05IM/dJMcabP2vQt/paEM4iJ7UhzWak2m3kLGyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi05IM/dJMcabP2vQt/paEM4iJ7UhzWak2m3kLGyk/img.png&quot; data-alt=&quot;인스턴스 선택하라고 하는데 일단 넘기고 그냥 만들어서 비정상이 뜨는 것인데요. 나중에 연결할 겁니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi05IM/dJMcabP2vQt/paEM4iJ7UhzWak2m3kLGyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi05IM%2FdJMcabP2vQt%2FpaEM4iJ7UhzWak2m3kLGyk%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-28 오후 5.45.06.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인스턴스 선택하라고 하는데 일단 넘기고 그냥 만들어서 비정상이 뜨는 것인데요. 나중에 연결할 겁니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. HTTPS 연결을 위한 ACM 인증서 발급하기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;CloudFront, ALB, API Gateway 등을 사용하는 AWS 네이티브 아키텍처일 때 ACM(=SSL인증서)을 씁니다. HTTPS는 암호화된 통신이라 브라우저가 https://api.reciping.kr로 접속하면, &quot;SSL Handshake&quot;라는 걸 하면서 ACM을 통해 &amp;ldquo;정말 reciping.kr 도메인을 너가 소유한 거 맞는지&amp;rdquo; AWS가 검증해야 하기 때문에 씁니다. 이것은 자동으로 인증서를 갱신하고 콘솔이나 테라폼으로 관리도 가능하며, AWS 서비스들과 연동이 편하고, 인증서 프라이빗 키가 AWS 내부에서만 저장되어서 보안성이 높습니다. 그리고 퍼블릭 인증서는 공짜입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3-1) 인증서 발급하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오전 9.12.47.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D7940/dJMcagX7goG/NZJKvxtJNTgxKHH74mNo90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D7940/dJMcagX7goG/NZJKvxtJNTgxKHH74mNo90/img.png&quot; data-alt=&quot;퍼블릭 인증서 요청 (공용 인증서) 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D7940/dJMcagX7goG/NZJKvxtJNTgxKHH74mNo90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD7940%2FdJMcagX7goG%2FNZJKvxtJNTgxKHH74mNo90%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;3024&quot; height=&quot;1604&quot; data-filename=&quot;스크린샷 2025-05-29 오전 9.12.47.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1604&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;퍼블릭 인증서 요청 (공용 인증서) 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오전 9.41.01.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O4Lpj/dJMcahW1vWR/ZHuA4al6veW3CzNd0gs4rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O4Lpj/dJMcahW1vWR/ZHuA4al6veW3CzNd0gs4rk/img.png&quot; data-alt=&quot;(1) 전체 커버용 와일드카드 인증서 *.reciping.kr 적기 &amp;amp;rarr; www.reciping.kr, admin.reciping.kr 등등..다 가능
(2) 와일드 카드 적용 안 되는 reciping.kr 적기(선택)
(3) 키 알고리즘은 RSA 2048 선택 &amp;amp;rarr; 이건 다 호환되고 가장 보편적이라 많이 사용(나머지는 미지원 가능성과 성능부담 존재)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O4Lpj/dJMcahW1vWR/ZHuA4al6veW3CzNd0gs4rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO4Lpj%2FdJMcahW1vWR%2FZHuA4al6veW3CzNd0gs4rk%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;3024&quot; height=&quot;1644&quot; data-filename=&quot;스크린샷 2025-05-29 오전 9.41.01.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(1) 전체 커버용 와일드카드 인증서 *.reciping.kr 적기 &amp;rarr; www.reciping.kr, admin.reciping.kr 등등..다 가능
(2) 와일드 카드 적용 안 되는 reciping.kr 적기(선택)
(3) 키 알고리즘은 RSA 2048 선택 &amp;rarr; 이건 다 호환되고 가장 보편적이라 많이 사용(나머지는 미지원 가능성과 성능부담 존재)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오전 9.47.31.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u2b4D/dJMcafZcViO/9SmED0JaL6vKl4s6oYby7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u2b4D/dJMcafZcViO/9SmED0JaL6vKl4s6oYby7k/img.png&quot; data-alt=&quot;ACM 인증서 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u2b4D/dJMcafZcViO/9SmED0JaL6vKl4s6oYby7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu2b4D%2FdJMcafZcViO%2F9SmED0JaL6vKl4s6oYby7k%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-29 오전 9.47.31.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ACM 인증서 생성 완료&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;3-2) Route 53에 DNS 레코드 추가하기&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Route 53을 통해 도메인 소유자임을 DNS로 인증하는 과정&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오전 9.50.18.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AGyA4/dJMcagjvHey/zXL6P6YAok8W4bz6J4RHIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AGyA4/dJMcagjvHey/zXL6P6YAok8W4bz6J4RHIk/img.png&quot; data-alt=&quot;CNAME 이름, CNAME 값 부분 기억해두세요! &amp;amp;rarr; route53에 붙여넣을 것입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AGyA4/dJMcagjvHey/zXL6P6YAok8W4bz6J4RHIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAGyA4%2FdJMcagjvHey%2FzXL6P6YAok8W4bz6J4RHIk%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-29 오전 9.50.18.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CNAME 이름, CNAME 값 부분 기억해두세요! &amp;rarr; route53에 붙여넣을 것입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오전 11.14.56.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wLNkP/dJMcajAxpzV/FeEAQ7MPlKdzNdset4b06k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wLNkP/dJMcajAxpzV/FeEAQ7MPlKdzNdset4b06k/img.png&quot; data-alt=&quot;Route53에서 만든 reciping.kr 클릭 후, 레코드 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wLNkP/dJMcajAxpzV/FeEAQ7MPlKdzNdset4b06k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwLNkP%2FdJMcajAxpzV%2FFeEAQ7MPlKdzNdset4b06k%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;3024&quot; height=&quot;1642&quot; data-filename=&quot;스크린샷 2025-05-29 오전 11.14.56.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Route53에서 만든 reciping.kr 클릭 후, 레코드 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오전 11.22.17.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ce80YS/dJMcajm0dZY/cv6ErHgys1UWJk7kS50MIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ce80YS/dJMcajm0dZY/cv6ErHgys1UWJk7kS50MIk/img.png&quot; data-alt=&quot;레코드 이름 에 ACM( CNAME 이름 ) 붙여넣기, 값 에 ACM( CNAME 값 ) 붙여넣기 후, 레코드 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ce80YS/dJMcajm0dZY/cv6ErHgys1UWJk7kS50MIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fce80YS%2FdJMcajm0dZY%2Fcv6ErHgys1UWJk7kS50MIk%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-29 오전 11.22.17.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;레코드 이름 에 ACM( CNAME 이름 ) 붙여넣기, 값 에 ACM( CNAME 값 ) 붙여넣기 후, 레코드 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오전 11.24.07.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVDx2m/dJMcae0iBUx/C8upNzlzxmqYFOLb8FPP40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVDx2m/dJMcae0iBUx/C8upNzlzxmqYFOLb8FPP40/img.png&quot; data-alt=&quot;레코드 발급 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVDx2m/dJMcae0iBUx/C8upNzlzxmqYFOLb8FPP40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVDx2m%2FdJMcae0iBUx%2FC8upNzlzxmqYFOLb8FPP40%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;3024&quot; height=&quot;1646&quot; data-filename=&quot;스크린샷 2025-05-29 오전 11.24.07.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1646&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;레코드 발급 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-29 오전 11.25.29.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ql9WW/dJMcaklUxrQ/U3TOZTo0Xih6pNsLKf8bgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ql9WW/dJMcaklUxrQ/U3TOZTo0Xih6pNsLKf8bgK/img.png&quot; data-alt=&quot;ACM으로 다시 돌아가면 상태가 발급됨 으로 바뀐 것을 알 수 있음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ql9WW/dJMcaklUxrQ/U3TOZTo0Xih6pNsLKf8bgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQl9WW%2FdJMcaklUxrQ%2FU3TOZTo0Xih6pNsLKf8bgK%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;3024&quot; height=&quot;1648&quot; data-filename=&quot;스크린샷 2025-05-29 오전 11.25.29.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ACM으로 다시 돌아가면 상태가 발급됨 으로 바뀐 것을 알 수 있음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/115</guid>
      <comments>https://670811.tistory.com/115#entry115comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:43:09 +0900</pubDate>
    </item>
    <item>
      <title>[reciping] 베스천 서버 세팅하기</title>
      <link>https://670811.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/2690661ce628802f887de3658e79ac15&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.notion.so/2690661ce628802f887de3658e79ac15&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762284750005&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;베스천 서버 세팅하기 | Notion&quot; data-og-description=&quot;0. 베스천 서버란?&quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/2690661ce628802f887de3658e79ac15&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/2690661ce628802f887de3658e79ac15&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cQ7pN7/hyZM8pFI7J/cGhFmqeeYs91WN7cKit6t1/img.png?width=2048&amp;amp;height=1108&amp;amp;face=0_0_2048_1108,https://scrap.kakaocdn.net/dn/yMqVx/hyZNclibqc/0Zjzbq5uGjroDs7cBE2rX1/img.png?width=2048&amp;amp;height=1108&amp;amp;face=0_0_2048_1108&quot;&gt;&lt;a href=&quot;https://www.notion.so/2690661ce628802f887de3658e79ac15&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/2690661ce628802f887de3658e79ac15&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cQ7pN7/hyZM8pFI7J/cGhFmqeeYs91WN7cKit6t1/img.png?width=2048&amp;amp;height=1108&amp;amp;face=0_0_2048_1108,https://scrap.kakaocdn.net/dn/yMqVx/hyZNclibqc/0Zjzbq5uGjroDs7cBE2rX1/img.png?width=2048&amp;amp;height=1108&amp;amp;face=0_0_2048_1108');&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;베스천 서버 세팅하기 | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;0. 베스천 서버란?&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;베스천 서버 세팅하는 과정을 담았습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 베스천 서버란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 베스천 서버는 내부요소를 변경할 필요가 있거나, 접근이 필요할 때 내부(Public)와 외부(Private)를 연결해주는 서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. EC2 키페어 생성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS에서 모든 EC2를 생성할 때에는 키 페어를 먼저 발급해야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 6.58.29.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7sJoW/dJMcahCILvM/0G3UsGRetovSRgJKQeTHNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7sJoW/dJMcahCILvM/0G3UsGRetovSRgJKQeTHNk/img.png&quot; data-alt=&quot;키 페어 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7sJoW/dJMcahCILvM/0G3UsGRetovSRgJKQeTHNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7sJoW%2FdJMcahCILvM%2F0G3UsGRetovSRgJKQeTHNk%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;3024&quot; height=&quot;1636&quot; data-filename=&quot;스크린샷 2025-05-26 오후 6.58.29.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1636&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키 페어 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.00.37.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WyQ3x/dJMcahW1vCr/1yEr7bsIjm90yEISMYCa0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WyQ3x/dJMcahW1vCr/1yEr7bsIjm90yEISMYCa0k/img.png&quot; data-alt=&quot;키 페어 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WyQ3x/dJMcahW1vCr/1yEr7bsIjm90yEISMYCa0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWyQ3x%2FdJMcahW1vCr%2F1yEr7bsIjm90yEISMYCa0k%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;3024&quot; height=&quot;1638&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.00.37.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1638&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키 페어 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.22.09.png&quot; data-origin-width=&quot;3002&quot; data-origin-height=&quot;1640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxCBtA/dJMcabvJHLU/hipzJUbho9MIn2SCExCTAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxCBtA/dJMcabvJHLU/hipzJUbho9MIn2SCExCTAK/img.png&quot; data-alt=&quot;키 페어 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxCBtA/dJMcabvJHLU/hipzJUbho9MIn2SCExCTAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxCBtA%2FdJMcabvJHLU%2FhipzJUbho9MIn2SCExCTAK%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;3002&quot; height=&quot;1640&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.22.09.png&quot; data-origin-width=&quot;3002&quot; data-origin-height=&quot;1640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키 페어 생성 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 베스천 서버를 보호해줄 보안 그룹 생성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 보안규칙을 설정하지 않으면 다 접속이 가능하기 때문에 프라이빗 영역은 오직 같은 VPC 내부 요소만 접근 가능하게 만들어놓고 외부에서 퍼블릭 영역을 접근할 때, 외부에서 인증이 없어도 접근가능한 영역과 인증해야만 접근가능한 영역을 나눠서 설정해야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.40.58.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbagaO/dJMcahipXN6/dYR4NHWHfO9RHR2HK8kufK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbagaO/dJMcahipXN6/dYR4NHWHfO9RHR2HK8kufK/img.png&quot; data-alt=&quot;보안 그룹 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbagaO/dJMcahipXN6/dYR4NHWHfO9RHR2HK8kufK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbagaO%2FdJMcahipXN6%2FdYR4NHWHfO9RHR2HK8kufK%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;3024&quot; height=&quot;1642&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.40.58.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보안 그룹 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.14.59.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3L59a/dJMcacVInq7/dBAL8NiHoeDP2xyKqsZ0k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3L59a/dJMcacVInq7/dBAL8NiHoeDP2xyKqsZ0k0/img.png&quot; data-alt=&quot;VPC는 reciping-vpc 로 세팅&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3L59a/dJMcacVInq7/dBAL8NiHoeDP2xyKqsZ0k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3L59a%2FdJMcacVInq7%2FdBAL8NiHoeDP2xyKqsZ0k0%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;3024&quot; height=&quot;1642&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.14.59.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VPC는 reciping-vpc 로 세팅&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;SSH접속으로만 콘솔 접속을 허용할 것이기 때문에 SSH에 대한 규칙만 정의&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr;  &amp;nbsp;일단 저희 집도 다 다르고 하니, SSH 접속 IP를 0.0.0.0/0(위치무관)으로 가져가지만 현업에서는 해당 회사 IP주소로 가져가야 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;아웃바운드는 기본 설정인 모든 트래픽 그대로 설정(모든 외부로의 통신 허용 상태)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 그러나 혹시 현업에서 보안 정책이 엄격하거나, 특정 IP/도메인으로만 아웃바운드 트래픽 허용해야 할 때, NAT Gateway 없이 프라이빗 서브넷에서 아웃바운드 허용 설정이 필요한 경우 등등 특정한 상황에서는 아웃바운드 설정도 필요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.39.26.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fy4Em/dJMcajN4yYT/5aeW4bTVWkOLPxcgBD2YZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fy4Em/dJMcajN4yYT/5aeW4bTVWkOLPxcgBD2YZK/img.png&quot; data-alt=&quot;보안 그룹 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fy4Em/dJMcajN4yYT/5aeW4bTVWkOLPxcgBD2YZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFy4Em%2FdJMcajN4yYT%2F5aeW4bTVWkOLPxcgBD2YZK%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;3024&quot; height=&quot;1648&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.39.26.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보안 그룹 생성 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.46.56.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtehTb/dJMcajHiW0t/mqktTT1CVLcWr0QUvvylj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtehTb/dJMcajHiW0t/mqktTT1CVLcWr0QUvvylj1/img.png&quot; data-alt=&quot;보안 그룹 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtehTb/dJMcajHiW0t/mqktTT1CVLcWr0QUvvylj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtehTb%2FdJMcajHiW0t%2FmqktTT1CVLcWr0QUvvylj1%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;3024&quot; height=&quot;1640&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.46.56.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;보안 그룹 생성 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 베스천 서버를 띄울 &lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;1&quot;&gt;EC2&lt;/span&gt; 생성하기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.23.19.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crpSS6/dJMcaksF5RC/XtXtIl4ZGuFC0aeOIFl4KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crpSS6/dJMcaksF5RC/XtXtIl4ZGuFC0aeOIFl4KK/img.png&quot; data-alt=&quot;인스턴스 시작 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crpSS6/dJMcaksF5RC/XtXtIl4ZGuFC0aeOIFl4KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrpSS6%2FdJMcaksF5RC%2FXtXtIl4ZGuFC0aeOIFl4KK%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;3024&quot; height=&quot;1640&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.23.19.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인스턴스 시작 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.29.07.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7lhdv/dJMcaaDAXSV/oAFcmkrlTp8vbbm03hY82K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7lhdv/dJMcaaDAXSV/oAFcmkrlTp8vbbm03hY82K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7lhdv/dJMcaaDAXSV/oAFcmkrlTp8vbbm03hY82K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7lhdv%2FdJMcaaDAXSV%2FoAFcmkrlTp8vbbm03hY82K%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;3024&quot; height=&quot;1640&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.29.07.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.29.21.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQlN7L/dJMcagRlAEl/OYeDPtew2LzwQjz473K2g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQlN7L/dJMcagRlAEl/OYeDPtew2LzwQjz473K2g0/img.png&quot; data-alt=&quot;프리티어 인스턴스 를 적용 &amp;amp;amp; 아까 만들어둔 키 페어 등록&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQlN7L/dJMcagRlAEl/OYeDPtew2LzwQjz473K2g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQlN7L%2FdJMcagRlAEl%2FOYeDPtew2LzwQjz473K2g0%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;3024&quot; height=&quot;1644&quot; data-filename=&quot;스크린샷 2025-05-26 오후 7.29.21.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프리티어 인스턴스 를 적용 &amp;amp; 아까 만들어둔 키 페어 등록&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.50.56.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0CWML/dJMcai2HpXa/Kz4aB3tqX3MvqRBkXI2PK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0CWML/dJMcai2HpXa/Kz4aB3tqX3MvqRBkXI2PK0/img.png&quot; data-alt=&quot;네트워크 설정 에서 편집 클릭 후, 해당과 같이 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0CWML/dJMcai2HpXa/Kz4aB3tqX3MvqRBkXI2PK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0CWML%2FdJMcai2HpXa%2FKz4aB3tqX3MvqRBkXI2PK0%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;3024&quot; height=&quot;1648&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.50.56.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네트워크 설정 에서 편집 클릭 후, 해당과 같이 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.51.07.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt6kJv/dJMcagw2Q9r/PdjLCG9dSlA1zkmHRiiMcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt6kJv/dJMcagw2Q9r/PdjLCG9dSlA1zkmHRiiMcK/img.png&quot; data-alt=&quot;(1) 스토리지 구성 은 어차피 베스천 서버라 터미널로만 접속할 것이기 때문에 스토리지는 크게 필요없으니 디폴트값으로 가져가기
(2) 인스턴스 시작 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt6kJv/dJMcagw2Q9r/PdjLCG9dSlA1zkmHRiiMcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt6kJv%2FdJMcagw2Q9r%2FPdjLCG9dSlA1zkmHRiiMcK%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;3024&quot; height=&quot;1644&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.51.07.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(1) 스토리지 구성 은 어차피 베스천 서버라 터미널로만 접속할 것이기 때문에 스토리지는 크게 필요없으니 디폴트값으로 가져가기
(2) 인스턴스 시작 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.54.14.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GZNgM/dJMcahvW8XL/QkEDpBEFLY7gjDv26kvHz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GZNgM/dJMcahvW8XL/QkEDpBEFLY7gjDv26kvHz1/img.png&quot; data-alt=&quot;베스천 서버용 EC2 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GZNgM/dJMcahvW8XL/QkEDpBEFLY7gjDv26kvHz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGZNgM%2FdJMcahvW8XL%2FQkEDpBEFLY7gjDv26kvHz1%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;3024&quot; height=&quot;1642&quot; data-filename=&quot;스크린샷 2025-05-26 오후 8.54.14.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;베스천 서버용 EC2 생성 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 베스천 서버 접속 테스트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 주로 putty, mobax 등을 이용하는데 윈도우에서는 파워셸로 가능, 맥에서는 그냥 터미널로 가능&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;현재 상황 요약 : &lt;br /&gt;- 퍼블릭 IP: 3.39.222.21 &lt;br /&gt;- Key 파일 이름: reciping-bastion-ec2-key.pem &lt;br /&gt;- SSH 인바운드 규칙: 0.0.0.0/0 &lt;/blockquote&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;span style=&quot;color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;ssh &lt;/span&gt;폴더 생성&lt;/p&gt;
&lt;pre id=&quot;code_1762285225487&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir -p ~/.ssh&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;-p는 이미 폴더가 있어도 에러 없이 무시하고 지나가게 함&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2)&lt;span style=&quot;color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;.pem&lt;/span&gt;키 파일 이동&lt;/p&gt;
&lt;pre id=&quot;code_1762285251539&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mv /Users/sini/Desktop/dev_documents/reciping-bastion-ec2-key.pem ~/.ssh/&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;✅&amp;nbsp;[ 맥북에서 파일 위치 확인하는 방법 ]&lt;br /&gt;&lt;br /&gt;Finder에서 원하는 파일을 선택 후, ⌘ + Option + C 키를 누르면 해당 파일의 전체 경로가 클립보드에 복사됨&lt;/blockquote&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;mv만 하면 나중에 컴퓨터 변경 시, 위험하니 백업이 필요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.pem 키 백업하는 방법(mv 명령어 이전에 실행)&lt;/p&gt;
&lt;pre id=&quot;code_1762285275087&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 백업할 디렉토리 만들기 (예: 데스크탑에 secure_backup 폴더)
mkdir -p ~/Desktop/secure_backup

# .ssh 디렉토리에서 베스천 키 복사
cp ~/.ssh/reciping-bastion-ec2-key.pem ~/Desktop/secure_backup/&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;(3) 작업 폴더 이동&lt;/p&gt;
&lt;pre id=&quot;code_1762285289451&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd ~/.ssh&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;(4) 권한 설정 (보안 경고 방지)&lt;/p&gt;
&lt;pre id=&quot;code_1762285301247&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 400 reciping-bastion-ec2-key.pem&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;  맥이나 리눅스에서 SSH 접속할 때, 키 파일이 너무 오픈되어있어서(644권한) 보안취약점이 있다고 인식해서 접근이 안 되는 경우가 있는데 이 경우에는 파일 권한을 이런 식으로 400주면 해결됩니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(5) SSH 접속 시도&lt;/p&gt;
&lt;pre id=&quot;code_1762285335853&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ssh -i reciping-bastion-ec2-key.pem ec2-user@3.39.222.21&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(6)&lt;/p&gt;
&lt;pre id=&quot;code_1762285348110&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;The authenticity of host '3.39.222.21 (3.39.222.21)' can't be established.
ED25519 key fingerprint is SHA256:V1VwHN8e0Z74hDdpqm3vxZ6YbbHudtJshn7LdadpYT8.
...
Are you sure you want to continue connecting (yes/no/[fingerprint])?&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이 메세지의 의미는 ED25519 fingerprint는 해당 서버의 고유한 SSH 식별자로 처음 접속할 때 항상 나오는 메세지인데 서버가 내가 만든 EC2가 맞는지 물어보는거니 yes 입력&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-27 오전 10.17.32.png&quot; data-origin-width=&quot;1528&quot; data-origin-height=&quot;736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bowfx3/dJMcain5Tw1/kUK9GCinyC8sHE31l7oOt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bowfx3/dJMcain5Tw1/kUK9GCinyC8sHE31l7oOt1/img.png&quot; data-alt=&quot;최종 접속 성공 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bowfx3/dJMcain5Tw1/kUK9GCinyC8sHE31l7oOt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbowfx3%2FdJMcain5Tw1%2FkUK9GCinyC8sHE31l7oOt1%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;1528&quot; height=&quot;736&quot; data-filename=&quot;스크린샷 2025-05-27 오전 10.17.32.png&quot; data-origin-width=&quot;1528&quot; data-origin-height=&quot;736&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;span style=&quot;color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;ctrl + d &lt;/span&gt;혹은 &lt;span style=&quot;color: #eb5757;&quot; data-token-index=&quot;3&quot;&gt;logout &lt;/span&gt;명령어를 통해 나가기까지!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-27 오전 10.28.02.png&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n15m3/dJMcaawPqCs/WyWOPKh45c41K53YnMDztk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n15m3/dJMcaawPqCs/WyWOPKh45c41K53YnMDztk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n15m3/dJMcaawPqCs/WyWOPKh45c41K53YnMDztk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn15m3%2FdJMcaawPqCs%2FWyWOPKh45c41K53YnMDztk%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;1180&quot; height=&quot;530&quot; data-filename=&quot;스크린샷 2025-05-27 오전 10.28.02.png&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;530&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;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/114</guid>
      <comments>https://670811.tistory.com/114#entry114comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:42:50 +0900</pubDate>
    </item>
    <item>
      <title>[reciping] 기본 EC2 배포하기(Gateway Server)</title>
      <link>https://670811.tistory.com/113</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;※ 기존에 기록해둔 노션 글을 옮겨적은 것으로, 노션 템플릿에 맞게 적게된 글이라 해당 링크를 통해 더 가독성있게 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/EC2-Gateway-Server-2690661ce6288076a2aee25376a5a77d&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.notion.so/EC2-Gateway-Server-2690661ce6288076a2aee25376a5a77d&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762287580191&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;기본 EC2 배포하기(Gateway Server) | Notion&quot; data-og-description=&quot;1. EC2 키페어 만들기&quot; data-og-host=&quot;pleasant-sand-55a.notion.site&quot; data-og-source-url=&quot;https://www.notion.so/EC2-Gateway-Server-2690661ce6288076a2aee25376a5a77d&quot; data-og-url=&quot;https://pleasant-sand-55a.notion.site/EC2-Gateway-Server-2690661ce6288076a2aee25376a5a77d&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lONMl/hyZMXiYRIf/2ZVtIdjypAQNmcAZkydBhK/img.png?width=2048&amp;amp;height=1001&amp;amp;face=0_0_2048_1001,https://scrap.kakaocdn.net/dn/1m6pS/hyZM1jMoMU/1rpep8klTpdBRwWMnBw6S0/img.png?width=2048&amp;amp;height=1001&amp;amp;face=0_0_2048_1001&quot;&gt;&lt;a href=&quot;https://www.notion.so/EC2-Gateway-Server-2690661ce6288076a2aee25376a5a77d&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/EC2-Gateway-Server-2690661ce6288076a2aee25376a5a77d&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lONMl/hyZMXiYRIf/2ZVtIdjypAQNmcAZkydBhK/img.png?width=2048&amp;amp;height=1001&amp;amp;face=0_0_2048_1001,https://scrap.kakaocdn.net/dn/1m6pS/hyZM1jMoMU/1rpep8klTpdBRwWMnBw6S0/img.png?width=2048&amp;amp;height=1001&amp;amp;face=0_0_2048_1001');&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;기본 EC2 배포하기(Gateway Server) | Notion&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. EC2 키페어 만들기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pleasant-sand-55a.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. EC2 키페어 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reciping-vpc(애플리케이션 운영용 VPC)에 필요한 범용 prod .pem키를 발급해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-30 오후 2.27.31.png&quot; data-origin-width=&quot;3822&quot; data-origin-height=&quot;1868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MWyqs/dJMcadf09nq/cMnvkYOVb3tCDX0DvDAyj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MWyqs/dJMcadf09nq/cMnvkYOVb3tCDX0DvDAyj1/img.png&quot; data-alt=&quot;해당 정보 입력 후, 키 페어 생성 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MWyqs/dJMcadf09nq/cMnvkYOVb3tCDX0DvDAyj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMWyqs%2FdJMcadf09nq%2FcMnvkYOVb3tCDX0DvDAyj1%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;3822&quot; height=&quot;1868&quot; data-filename=&quot;스크린샷 2025-05-30 오후 2.27.31.png&quot; data-origin-width=&quot;3822&quot; data-origin-height=&quot;1868&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;h2 data-ke-size=&quot;size26&quot;&gt;2. EC2 인스턴스 만들기 및 세부 설정 항목들에 관하여&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-23 오전 9.31.15.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2QqgI/dJMcad79US7/KQOv6946YBUPINVmPSK65k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2QqgI/dJMcad79US7/KQOv6946YBUPINVmPSK65k/img.png&quot; data-alt=&quot;&amp;amp;lsquo;인스턴스 시작&amp;amp;rsquo; 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2QqgI/dJMcad79US7/KQOv6946YBUPINVmPSK65k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2QqgI%2FdJMcad79US7%2FKQOv6946YBUPINVmPSK65k%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;3024&quot; height=&quot;1644&quot; data-filename=&quot;스크린샷 2025-05-23 오전 9.31.15.png&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&amp;lsquo;인스턴스 시작&amp;rsquo; 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-30 오후 1.42.28.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xw0mS/dJMcaap3Pp8/DhAh3ae8KFkFflvaoIQUN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xw0mS/dJMcaap3Pp8/DhAh3ae8KFkFflvaoIQUN0/img.png&quot; data-alt=&quot;이름은 reciping-gateway-ec2-01, reciping-gateway-ec2-02로 가져가겠습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xw0mS/dJMcaap3Pp8/DhAh3ae8KFkFflvaoIQUN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxw0mS%2FdJMcaap3Pp8%2FDhAh3ae8KFkFflvaoIQUN0%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;3840&quot; height=&quot;1862&quot; data-filename=&quot;스크린샷 2025-05-30 오후 1.42.28.png&quot; data-origin-width=&quot;3840&quot; data-origin-height=&quot;1862&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이름은 reciping-gateway-ec2-01, reciping-gateway-ec2-02로 가져가겠습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 애플리케이션 및 OS 이미지(Amazon Machine Image) ]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Q&lt;/b&gt; : 여기서 AMI란?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A&lt;/b&gt; : AMI(Amazon Machine Image) 는 EC2 인스턴스를 실행할 때 사용하는 운영체제(OS)와 필수 소프트웨어가 미리 설치되어 있는 &quot;템플릿 이미지&quot; (=AMI는 &amp;ldquo;이대로 인스턴스를 부팅해라&amp;rdquo;라는 스냅샷+설정 모음집)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Quick Start ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: Quick Start는 AWS에서 자주 사용하는 OS/애플리케이션 조합을 미리 골라놓은 대표적인 AMI 목록&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Amazon Linux : AWS 최적화, 성능 좋고 AWS CLI 및 SSM Agent 기본 탑재&lt;/li&gt;
&lt;li&gt;Ubuntu : 리눅스 환경, 오픈소스 친화적, 문서 많고 커뮤니티 활발&lt;/li&gt;
&lt;li&gt;MacOS : iOS/macOS 앱 빌드(웹X), 테스트 용도(Mac 전용 인스턴스(mac1..)만 사용 가능 &amp;rarr; 매우 고가)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;span data-token-index=&quot;0&quot;&gt;&lt;span&gt;✅&lt;/span&gt;&amp;nbsp;+) Quick Start vs Community AMI vs Marketplace&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;table id=&quot;2690661c-e628-81fa-9e29-c11f55c1abe0&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;2690661c-e628-81d5-a658-eff3ce27960a&quot;&gt;
&lt;td id=&quot;tWFQ&quot;&gt;유형&lt;/td&gt;
&lt;td id=&quot;Xr@|&quot;&gt;설명&lt;/td&gt;
&lt;td id=&quot;nYZ\&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81fe-9bf0-fdec4b484359&quot;&gt;
&lt;td id=&quot;tWFQ&quot;&gt;&lt;b&gt;Quick Start&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Xr@|&quot;&gt;AWS 공식 인기 이미지&lt;/td&gt;
&lt;td id=&quot;nYZ\&quot;&gt;안정성 &amp;uarr;, 기본적인 구성, 초보자 추천&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81a5-99ae-f0b96470fc5f&quot;&gt;
&lt;td id=&quot;tWFQ&quot;&gt;&lt;b&gt;My AMIs&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Xr@|&quot;&gt;사용자가 직접 만든 이미지&lt;/td&gt;
&lt;td id=&quot;nYZ\&quot;&gt;재사용 목적, 커스텀 설정 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-81fc-89fc-db9aeb2b9a40&quot;&gt;
&lt;td id=&quot;tWFQ&quot;&gt;&lt;b&gt;AWS Marketplace&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Xr@|&quot;&gt;서드파티 제공 이미지&lt;/td&gt;
&lt;td id=&quot;nYZ\&quot;&gt;상용 소프트웨어 포함 (예: Bitnami, Jenkins)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;2690661c-e628-816a-a1c8-c484071a51e2&quot;&gt;
&lt;td id=&quot;tWFQ&quot;&gt;&lt;b&gt;Community AMIs&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Xr@|&quot;&gt;누구나 올린 공개 이미지&lt;/td&gt;
&lt;td id=&quot;nYZ\&quot;&gt;무료 많지만 보안 위험 주의&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-30 오후 3.10.07.png&quot; data-origin-width=&quot;1992&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buKdJS/dJMcae64c8r/CarokJJI685qkkDSkObKxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buKdJS/dJMcae64c8r/CarokJJI685qkkDSkObKxk/img.png&quot; data-alt=&quot;충분히 트래픽을 감당하도록 단일 큰용량의 인스턴스 필요, VCPU 2개 / RAM 4GB로 초기 트래픽으로 설정(나중에 모니터링 후, 용량 다시 설정해야 합니다.)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buKdJS/dJMcae64c8r/CarokJJI685qkkDSkObKxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuKdJS%2FdJMcae64c8r%2FCarokJJI685qkkDSkObKxk%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;1992&quot; height=&quot;742&quot; data-filename=&quot;스크린샷 2025-05-30 오후 3.10.07.png&quot; data-origin-width=&quot;1992&quot; data-origin-height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;충분히 트래픽을 감당하도록 단일 큰용량의 인스턴스 필요, VCPU 2개 / RAM 4GB로 초기 트래픽으로 설정(나중에 모니터링 후, 용량 다시 설정해야 합니다.)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 모든 세대 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 모든 세대 옵션은 ON했을 경우 최신 세대와 예전 세대 전부를 다 보여주는데, 되도록이면 최신 세대(t3&amp;hellip;)를 사용하는게 좋습니다. 왜냐하면 오래된 세대는 phase-out되는 경우가 있기 때문입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-05-30 오후 3.13.51.png&quot; data-origin-width=&quot;3838&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MqAYS/dJMb99YZsRw/eGpr610h5HstJK2mAYtgo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MqAYS/dJMb99YZsRw/eGpr610h5HstJK2mAYtgo0/img.png&quot; data-alt=&quot;똑같이 구성하고 인스턴스 시작 클릭 
(가용영역이 2개여서 인스턴스를 reciping-private-subnet-02 로 똑같이 하나 더 만들기)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MqAYS/dJMb99YZsRw/eGpr610h5HstJK2mAYtgo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMqAYS%2FdJMb99YZsRw%2FeGpr610h5HstJK2mAYtgo0%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;3838&quot; height=&quot;1870&quot; data-filename=&quot;스크린샷 2025-05-30 오후 3.13.51.png&quot; data-origin-width=&quot;3838&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;똑같이 구성하고 인스턴스 시작 클릭 
(가용영역이 2개여서 인스턴스를 reciping-private-subnet-02 로 똑같이 하나 더 만들기)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ 퍼블릭 IP 자동 할당 ]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 프라이빗 서브넷에서는 퍼블릭 IP가 없어야 정상이고, ALB를 통해서만 접근하게 되므로 퍼블릭 IP 필요 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 로컬 ~/.ssh에 .pem키 백업하고 백업본 따로 저장해두기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-01 오전 11.53.37.png&quot; data-origin-width=&quot;1758&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TJKAr/dJMcaacwC9p/NK5TUHSnbPJfT8k1vAr161/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TJKAr/dJMcaacwC9p/NK5TUHSnbPJfT8k1vAr161/img.png&quot; data-alt=&quot;전에 베스천 서버 만들 때처럼 해주시면 됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TJKAr/dJMcaacwC9p/NK5TUHSnbPJfT8k1vAr161/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTJKAr%2FdJMcaacwC9p%2FNK5TUHSnbPJfT8k1vAr161%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;1758&quot; height=&quot;242&quot; data-filename=&quot;스크린샷 2025-06-01 오전 11.53.37.png&quot; data-origin-width=&quot;1758&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;전에 베스천 서버 만들 때처럼 해주시면 됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1762287778625&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# pem키 백업하기 (제 맥북 배경화면에 있는 dev_backup 폴더에 백업)
cp /Users/sini/Desktop/dev_documents/reciping-prod-ec2-key.pem /Users/sini/Desktop/dev_backup/

# ~/.ssh 폴더로 복사
cp /Users/sini/Desktop/dev_documents/reciping-prod-ec2-key.pem ~/.ssh/

# 퍼미션 설정 (보안 경고 방지)
chmod 400 ~/.ssh/reciping-prod-ec2-key.pem&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 로컬에서 빌드한 JAR 파일을 Bastion 서버를 거쳐 EC2에 업로드&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;아마 본인 로컬 상황에 따라 여기서부터 좀 다르게 가져가실 수 있습니다.&lt;br /&gt;&lt;br /&gt;그래서 어떤 과정인지만 알아두시고 챗지피티와 소통을..!!ㅎ&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) application-prod.yml 설정&lt;/p&gt;
&lt;pre id=&quot;code_1762287818266&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server:
  port: 8090

spring:
  cloud:
    gateway:
      globalcors:
        add-to-simple-url-handler-mapping: true
        corsConfigurations:
          '[/**]':
            allowedOrigins:
              - &quot;https://www.reciping.kr&quot; 
              - &quot;https://reciping.kr&quot;
            allowedMethods:
              - GET
              - POST
              - PUT
              - DELETE
              - OPTIONS
            allowedHeaders:
              - &quot;*&quot;
              - Authorization
              - Content-Type
            exposedHeaders:
              - Authorization
            allowCredentials: true

logging:
  level:
    com.three.recipinggatewayservicebe.jwt: DEBUG

jwt:
  secret:
    key: m5M/3YqO8kB/32Xu0/AlU8TKtsKhXHXuRAm5XGvx786uTj3+BpN1RAA65tJvbOg1pZuVG+TqMyFk2XRL3rU7HA==&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762287831846&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server:
  port: 8090

spring:
  cloud:
    gateway:
      globalcors:
        add-to-simple-url-handler-mapping: true
        corsConfigurations:
          '[/**]':
            allowedOrigins:
              - &quot;https://www.reciping.kr&quot; 
              - &quot;https://reciping.kr&quot;
            allowedMethods:
              - GET
              - POST
              - PUT
              - DELETE
              - OPTIONS
            allowedHeaders:
              - &quot;*&quot;
              - Authorization
              - Content-Type
            exposedHeaders:
              - Authorization
            allowCredentials: true
      routes:
        - id: user-service
          uri: http://10.0.64.103:8080
          predicates:
            - Path=/users/**
            
logging:
  level:
    com.three.recipinggatewayservicebe.jwt: DEBUG

jwt:
  secret:
    key: m5M/3YqO8kB/32Xu0/AlU8TKtsKhXHXuRAm5XGvx786uTj3+BpN1RAA65tJvbOg1pZuVG+TqMyFk2XRL3rU7HA==&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;(2) [ Mac 터미널에서 해야하는 작업 (1) ]&lt;/p&gt;
&lt;pre id=&quot;code_1762287845737&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# cd 명령어를 통해 현재 디렉토리를 해당 프로젝트 폴더로 이동
cd /Users/sini/Desktop/dev_sini/reciping-gateway-service-BE

# Gradle Wrapper (gradlew)를 실행
# 프로젝트를 새로 빌드해서 실행 가능한 .jar 파일을 생성
# /build/libs/ 디렉토리에 아래와 같은 결과물이 생깁니다.
# 예시) reciping-gateway-service-BE-0.0.1-SNAPSHOT.jar
# 기존에 var/logs..로 로컬 리눅스 폴더에 만들었기 때문에 xml쪽 빌드가 안될 것임(먼저 -x test로 테스트 없이 빌드)
./gradlew clean build -x test&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;3) +) 참고사항&lt;/p&gt;
&lt;pre id=&quot;code_1762287866587&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# JAR 이름은 build.gradle에 이렇게 지정했으니
bootJar {
    archiveFileName = 'reciping-gateway.jar'
}
# 따라서 jar 파일 경로는 다음과 같을 것임
/Users/sini/Desktop/dev_sini/reciping-gateway-service-BE/build/libs/reciping-gateway.jar&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;(4)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ Mac 터미널에서 해야하는 작업 ]&lt;/p&gt;
&lt;pre id=&quot;code_1762287880499&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# scp로 jar 파일을 우선 Bastion 서버로 업로드(macOS 기준) / 베스천 서버의 퍼블릭 IP : 3.39.222.21
scp -i ~/.ssh/reciping-bastion-ec2-key.pem \
  /Users/sini/Desktop/dev_sini/reciping-gateway-service-BE/build/libs/reciping-gateway.jar \
  ec2-user@3.39.222.21:~&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ Bastion 서버에서 해야하는 작업 ]&lt;/p&gt;
&lt;pre id=&quot;code_1762287893797&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Bastion 서버에 ssh 접속
ssh -i ~/.ssh/reciping-bastion-ec2-key.pem ec2-user@3.39.222.21
# 베스천의 ssh폴더에 pem키 옮기기
mv ~/reciping-prod-ec2-key.pem ~/.ssh/reciping-prod-ec2-key.pem
# AWS EC2 접속용 키에 필요한 권한 설정(권한 400 주기)
chmod 400 ~/.ssh/reciping-prod-ec2-key.pem&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ Mac 터미널에서 해야하는 작업 ] - Jar 전송하기&lt;/p&gt;
&lt;pre id=&quot;code_1762287905314&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Gateway 1로 JAR 복사
scp -o &quot;ProxyCommand=ssh -i ~/.ssh/reciping-bastion-ec2-key.pem -W %h:%p ec2-user@3.39.222.21&quot; -i ~/.ssh/reciping-prod-ec2-key.pem /Users/sini/Desktop/dev_sini/reciping-gateway-service-BE/build/libs/reciping-gateway.jar ec2-user@10.0.72.75:~


# Gateway 2로 JAR 복사
scp -o &quot;ProxyCommand=ssh -i ~/.ssh/reciping-bastion-ec2-key.pem -W %h:%p ec2-user@3.39.222.21&quot; -i ~/.ssh/reciping-prod-ec2-key.pem /Users/sini/Desktop/dev_sini/reciping-gateway-service-BE/build/libs/reciping-gateway.jar ec2-user@10.0.83.252:~&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;스크린샷 2025-06-02 오후 5.43.04.png&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cImAt1/dJMcaap3Pp9/XJ4CbFh2qPIuvL5eiqNVw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cImAt1/dJMcaap3Pp9/XJ4CbFh2qPIuvL5eiqNVw1/img.png&quot; data-alt=&quot;참고 이미지 - 자르 파일 전송되는 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cImAt1/dJMcaap3Pp9/XJ4CbFh2qPIuvL5eiqNVw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcImAt1%2FdJMcaap3Pp9%2FXJ4CbFh2qPIuvL5eiqNVw1%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;1394&quot; height=&quot;396&quot; data-filename=&quot;스크린샷 2025-06-02 오후 5.43.04.png&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;396&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;Amazon Linux (특히 Amazon Linux 2나 2023)는 기본적으로 &lt;span style=&quot;color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;java&lt;/span&gt;가 &lt;span data-token-index=&quot;3&quot;&gt;설치되어 있지 않아서 &lt;/span&gt;애플리케이션 서버에서 직접 &lt;span data-token-index=&quot;5&quot;&gt;수동 설치해야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762287926140&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install -y java-17-amazon-corretto&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;혹은 아래 링크로 다운 후, 폴더를 download 파일에 넣어두기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://corretto.aws/downloads/latest/amazon-corretto-17-x64-linux-jdk.rpm&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://corretto.aws/downloads/latest/amazon-corretto-17-x64-linux-jdk.rpm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-06-02 오후 6.48.04.png&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXpfF4/dJMcaiuRviy/8f96sn3fNnLf63Wylfduk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXpfF4/dJMcaiuRviy/8f96sn3fNnLf63Wylfduk0/img.png&quot; data-alt=&quot;설치중인 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXpfF4/dJMcaiuRviy/8f96sn3fNnLf63Wylfduk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXpfF4%2FdJMcaiuRviy%2F8f96sn3fNnLf63Wylfduk0%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;1918&quot; height=&quot;64&quot; data-filename=&quot;스크린샷 2025-06-02 오후 6.48.04.png&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;64&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;(5)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ gateway 서버에서 해야하는 작업 ] - Bastion ProxyJump 방식으로 Gateway 서버에 접속 후, rpm으로 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;az-2도 똑같이 반복해주시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1762288022584&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 게이트웨이 ec2 인스턴스에 접속 (예 : az-1)
ssh \
-o &quot;ProxyCommand=ssh -i ~/.ssh/reciping-bastion-ec2-key.pem -W %h:%p ec2-user@3.39.222.21&quot; \
-i ~/.ssh/reciping-prod-ec2-key.pem \
ec2-user@10.0.72.75

# rpm으로 ec2에 자바17 설치
sudo rpm -ivh ./java-17-amazon-corretto-devel-17.0.15.6-1.x86_64.rpm

# 설치 확인
java -version

# java -version 입력 시, 결과 화면
openjdk version &quot;17.0.15&quot; 2025-04-15 LTS
OpenJDK Runtime Environment Corretto-17.0.15.6.1 (build 17.0.15+6-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.15.6.1 (build 17.0.15+6-LTS, mixed mode, sharing)&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;(5)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ Mac 터미널에서 해야하는 작업 ] - Bastion ProxyJump 방식으로 Gateway 서버에 접속&lt;/p&gt;
&lt;pre id=&quot;code_1762288036155&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# scp로 ec2 인스턴스로 전송 (az-1)
scp \
-o &quot;ProxyCommand=ssh -i ~/.ssh/reciping-bastion-ec2-key.pem -W %h:%p ec2-user@3.39.222.21&quot; \
-i ~/.ssh/reciping-prod-ec2-key.pem \
./amazon-corretto-17-x64-linux-jdk.rpm \
ec2-user@10.0.72.75:~

# 게이트웨이 ec2 인스턴스에 접속 (az-1)
ssh \
-o &quot;ProxyCommand=ssh -i ~/.ssh/reciping-bastion-ec2-key.pem -W %h:%p ec2-user@3.39.222.21&quot; \
-i ~/.ssh/reciping-prod-ec2-key.pem \
ec2-user@10.0.72.75

# 다시 게이트웨이 서버에 로그 디렉토리 생성 및 권한 부여
sudo mkdir -p /var/log/reciping/gateway-service
sudo chown -R $(whoami) /var/log/reciping/gateway

# 게이트웨이 서버 실행
nohup java -jar ~/reciping-gateway.jar &amp;gt; /var/log/reciping/gateway/gateway-nohup.log 2&amp;gt;&amp;amp;1 &amp;amp;


# 정상실행 확인
ps -ef | grep reciping-gateway&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762288043175&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# scp로 ec2 인스턴스로 전송 (az-2)
scp \
-o &quot;ProxyCommand=ssh -i ~/.ssh/reciping-bastion-ec2-key.pem -W %h:%p ec2-user@3.39.222.21&quot; \
-i ~/.ssh/reciping-prod-ec2-key.pem \
./amazon-corretto-17-x64-linux-jdk.rpm \
ec2-user@10.0.83.252:~

# 게이트웨이 ec2 인스턴스에 접속 (az-2)
ssh \
-o &quot;ProxyCommand=ssh -i ~/.ssh/reciping-bastion-ec2-key.pem -W %h:%p ec2-user@3.39.222.21&quot; \
-i ~/.ssh/reciping-prod-ec2-key.pem \
ec2-user@10.0.83.252

# 다시 게이트웨이 서버에 로그 디렉토리 생성 및 권한 부여
sudo mkdir -p /var/log/reciping/gateway-service
sudo chown -R $(whoami) /var/log/reciping/gateway

# 게이트웨이 서버 실행
nohup java -jar ~/reciping-gateway.jar &amp;gt; /var/log/reciping/gateway/gateway-nohup.log 2&amp;gt;&amp;amp;1 &amp;amp;

# 정상실행 확인
ps -ef | grep reciping-gateway&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762288051303&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# +) 참고사항!
# JAR 실행 기본 명령어는 아래와 같습니다. (각 인스턴스 접속 후)
java -jar ~/reciping-gateway.jar

# =&amp;gt; 이렇게 하면 포그라운드에서 실행돼서 터미널이 JAR 실행 화면에 고정됨. 나중에 꺼지면 앱도 종료됨.
# 그래서 이 방법 말고, 기존에 커스텀 로그 설정한 것도 있으니, 백그라운드 실행 + 로그 저장 방식으로 실행하기
nohup java -jar ~/reciping-gateway.jar &amp;gt; /var/log/reciping/gateway-service/gateway-nohup.log 2&amp;gt;&amp;amp;1 &amp;amp;&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;스크린샷 2025-06-03 오전 1.55.36.png&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxcY72/dJMcaaQ8eC8/V4jMcrZfK2t3SkuHrLzkck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxcY72/dJMcaaQ8eC8/V4jMcrZfK2t3SkuHrLzkck/img.png&quot; data-alt=&quot;결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxcY72/dJMcaaQ8eC8/V4jMcrZfK2t3SkuHrLzkck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxcY72%2FdJMcaaQ8eC8%2FV4jMcrZfK2t3SkuHrLzkck%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;859&quot; height=&quot;370&quot; data-filename=&quot;스크린샷 2025-06-03 오전 1.55.36.png&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;370&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;</description>
      <category>Project/reciping</category>
      <author>S_N_Y</author>
      <guid isPermaLink="true">https://670811.tistory.com/113</guid>
      <comments>https://670811.tistory.com/113#entry113comment</comments>
      <pubDate>Wed, 5 Nov 2025 05:42:25 +0900</pubDate>
    </item>
  </channel>
</rss>