<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>공부 기록장  </title>
    <link>https://dream-and-develop.tistory.com/</link>
    <description>Keep Studying, Being Steady

Done is better than perfect</description>
    <language>ko</language>
    <pubDate>Wed, 6 May 2026 13:16:21 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>dream_for</managingEditor>
    <image>
      <title>공부 기록장  </title>
      <url>https://tistory1.daumcdn.net/tistory/4466286/attach/8d02fb013eb24e9fb37b06acb2a2eec5</url>
      <link>https://dream-and-develop.tistory.com</link>
    </image>
    <item>
      <title>[Docker] 컨테이너 시간대 KST로 변경하여 실행하기</title>
      <link>https://dream-and-develop.tistory.com/547</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Docker 컨테이너가 서버의 KST 시간대를&amp;nbsp;상속하지 않고 UTC로 나오는 이유는 Docker의&amp;nbsp;설계 특성&amp;nbsp;때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;서버가 KST 시간대를 따라도, 컨테이너는&amp;nbsp;&lt;/span&gt;항상 기본 UTC이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그렇기에 docker 환경에서 배포된 애플리케이션 서버 로그를 grafana로 확인 할 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;9시간 이전의 시간으로 나타나는 경우가 종종 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이를 해결해보자!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;docker 컨테이너 내부로 이동하여 시간대를 확인해보면, UTC 2025 시간대를 따르고 있는 것을 확인.&lt;/p&gt;
&lt;pre id=&quot;code_1764650846170&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ docker exec -it 4130fe1aac69 /bin/bash
root@4130fe1aac69:/opt/program# date
Tue Dec  2 04:44:52 UTC 2025&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 docker 실행 명령어에 -e, -v 파라미터 값을 추가하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1764650782349&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# KST 시간대로 재실행
docker run -d \
  --name container_name&amp;gt; \
  -e TZ=Asia/Seoul \
  -v /etc/localtime:/etc/localtime:ro \
  &amp;lt;image_name&amp;gt;&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;혹은 docker-compose를 사용하는 경우라면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker-compose.yml 을 아래와 같이 설정할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1764651165899&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  flask-app:
    image: &amp;lt;image_name&amp;gt;
    environment:
      - TZ=Asia/Seoul
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro&lt;/code&gt;&lt;/pre&gt;</description>
      <category># Develop</category>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/547</guid>
      <comments>https://dream-and-develop.tistory.com/547#entry547comment</comments>
      <pubDate>Tue, 2 Dec 2025 13:55:23 +0900</pubDate>
    </item>
    <item>
      <title>네이버의 Media Tech 기술들</title>
      <link>https://dream-and-develop.tistory.com/545</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;DAN24 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;실시간 라이브 인코딩 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://tv.naver.com/v/67&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tv.naver.com/v/67&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762827834632&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;네이버 TV&quot; data-og-description=&quot;&quot; data-og-host=&quot;tv.naver.com&quot; data-og-source-url=&quot;https://tv.naver.com/v/67&quot; data-og-url=&quot;https://tv.naver.com/v/67&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://tv.naver.com/v/67&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tv.naver.com/v/67&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;네이버 TV&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tv.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Dan25&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://tv.naver.com/v/87882294&quot;&gt;https://tv.naver.com/v/87882294&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762827847142&quot; style=&quot;color: #333333; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WC9At/hyZNpyFX3R/3xhUDo6QfyeGwrHPxsATFK/img.png?width=1109&amp;amp;height=624&amp;amp;face=0_0_1109_624,https://scrap.kakaocdn.net/dn/eCiLuw/hyZNJ341Bj/YkERwzt0I91Xekkz9ZkAS1/img.png?width=1109&amp;amp;height=624&amp;amp;face=0_0_1109_624&quot; data-og-url=&quot;https://tv.naver.com/v/87882294&quot; data-og-source-url=&quot;https://tv.naver.com/v/87882294&quot; data-og-host=&quot;tv.naver.com&quot; data-og-description=&quot;[팀네이버 컨퍼런스 DAN25] Keynote 03: 입체적 경험이 가능한 콘텐츠 플랫폼&quot; data-og-title=&quot;네이버&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://tv.naver.com/v/87882294&quot; data-source-url=&quot;https://tv.naver.com/v/87882294&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;네이버&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;[팀네이버 컨퍼런스 DAN25] Keynote 03: 입체적 경험이 가능한 콘텐츠 플랫폼&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;tv.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ncloud Media Intelligence Platform&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #222222; color: #ffffff; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://www.ncloud.com/product/media/mediaAIUnderstanding#detail&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.ncloud.com/product/media/mediaAIUnderstanding#detail&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762827360189&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;NAVER CLOUD PLATFORM&quot; data-og-description=&quot;cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification&quot; data-og-host=&quot;www.ncloud.com&quot; data-og-source-url=&quot;https://www.ncloud.com/product/media/mediaAIUnderstanding#detail&quot; data-og-url=&quot;https://www.ncloud.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/YuhcN/hyZNs3dTz3/dQxtyE1KQNfxYJPbVbKcK0/img.jpg?width=526&amp;amp;height=274&amp;amp;face=0_0_526_274,https://scrap.kakaocdn.net/dn/eEg2i/hyZNfXaO1c/xRvoul7Nk2vclJkOCsXwiK/img.png?width=1600&amp;amp;height=720&amp;amp;face=0_0_1600_720,https://scrap.kakaocdn.net/dn/3hMeH/hyZNlC0Syr/zEZeymfsXcjuH2a9b4KKjk/img.png?width=1600&amp;amp;height=720&amp;amp;face=0_0_1600_720&quot;&gt;&lt;a href=&quot;https://www.ncloud.com/product/media/mediaAIUnderstanding#detail&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.ncloud.com/product/media/mediaAIUnderstanding#detail&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/YuhcN/hyZNs3dTz3/dQxtyE1KQNfxYJPbVbKcK0/img.jpg?width=526&amp;amp;height=274&amp;amp;face=0_0_526_274,https://scrap.kakaocdn.net/dn/eEg2i/hyZNfXaO1c/xRvoul7Nk2vclJkOCsXwiK/img.png?width=1600&amp;amp;height=720&amp;amp;face=0_0_1600_720,https://scrap.kakaocdn.net/dn/3hMeH/hyZNlC0Syr/zEZeymfsXcjuH2a9b4KKjk/img.png?width=1600&amp;amp;height=720&amp;amp;face=0_0_1600_720');&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;NAVER CLOUD PLATFORM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.ncloud.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ABP 기술&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.navercorp.com/media/pressReleasesDetail?seq=33096&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.navercorp.com/media/pressReleasesDetail?seq=33096&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1762827445824&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;보도자료 News&quot; data-og-description=&quot;네이버 보도자료 수록&quot; data-og-host=&quot;www.navercorp.com&quot; data-og-source-url=&quot;https://www.navercorp.com/media/pressReleasesDetail?seq=33096&quot; data-og-url=&quot;https://www.navercorp.com/media/pressReleases&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FAHM6/hyZNIYoYIG/9w66VpVILf6zwP86lbfK4k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.navercorp.com/media/pressReleasesDetail?seq=33096&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.navercorp.com/media/pressReleasesDetail?seq=33096&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FAHM6/hyZNIYoYIG/9w66VpVILf6zwP86lbfK4k/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;보도자료 News&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;네이버 보도자료 수록&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.navercorp.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AI인코딩 최적화, MUAi, 오토클립&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;https://byline.network/2025/07/0718-5/&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category># Tech Studies/Computer Vision &amp;bull; Media Tech</category>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/545</guid>
      <comments>https://dream-and-develop.tistory.com/545#entry545comment</comments>
      <pubDate>Tue, 11 Nov 2025 11:19:28 +0900</pubDate>
    </item>
    <item>
      <title>[AI 막차 탑승 : HyperCLOVA X] HCX J팀의 점메추저메추 서비스 산출물 소개, 챌린지 참여 후기</title>
      <link>https://dream-and-develop.tistory.com/544</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;안녕하세요.&amp;nbsp;&lt;br&gt;6월 1일부터 7월 3일까지 약 한 달 간 NUCU (NAVER Cloud User Community) 에서 주최 및 주관한 [AI 막차탑승 : HyperCLOVA X 프로젝트 챌린지] 프로젝트에 참여하였습니다.&lt;br&gt;해당 프로젝트는 Clova Studio 의 다양한 서비스들을 깊게 학습 및 실습하고 이를 활용해 팀원들과 협업하여 실제 서비스를 구현해보는 챌린지였습니다. 또한 제공되는 Credit을 통해 서버, 로드밸런서 등 NCP 인프라 서비스들을 활용할 수 있었습니다.&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;실습했던 내용들을 정리하고, J팀의 서비스 '점메추저메추' 산출물에 대한 소개, 그리고 참여 후기를 남겨보려 합니다.&lt;br&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;p data-ke-size=&quot;size16&quot;&gt;제가 속한 J팀은 클라우드 엔지니어, 클라우드 아키텍트, 백엔드 개발자, 프리랜서 총 4명으로 이루어진 팀입니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;저희는 각자 각자 하이퍼클로바X 서비스를 스터디하고 실습한 내용들을 공유하는 회의 시간을 매주 가졌습니다.&lt;br&gt;동시에 Clova Studio와 Hyper Clova X 를 활용하여 구현할 서비스에 대한 아이디어 기획도 함께 진행을 했는데요.&lt;br&gt;&amp;nbsp;&lt;br&gt;팀원분이 소개해주셨던 getgpt의 저메추 서비스(&lt;a href=&quot;https://getgpt.app/play/OYWdTCSaIF?provider=google&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://getgpt.app/play/OYWdTCSaIF?provider=google&lt;/span&gt;&lt;/a&gt;) 에서 아이디어를 얻었습니다. 요리에 넣을 재료를 사용자로부터 입력받아 이를 기반으로 만들 수 있는 요리를 소개해주는 '저메추' 서비스를 벤치마킹하였습니다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;851&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXiIC6/btsImb5XBLm/So7NW38DVmwbBbFttbBXQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXiIC6/btsImb5XBLm/So7NW38DVmwbBbFttbBXQk/img.png&quot; data-alt=&quot;벤치마킹한 '저메추' 서비스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXiIC6/btsImb5XBLm/So7NW38DVmwbBbFttbBXQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXiIC6%2FbtsImb5XBLm%2FSo7NW38DVmwbBbFttbBXQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;464&quot; height=&quot;620&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;851&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;벤치마킹한 '저메추' 서비스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;여기서 약간 방향을 틀어 사용자로부터 위치와 음식을 입력받아 두 정보를 기반으로 음식점을 추천해주어&lt;br&gt;직장인들이 매번 메뉴와 음식점 선정에 겪는 어려움을 해소할 수 있는 '점메추저메추'(점심메뉴, 저녁메뉴 추천) 서비스로 아이디어를 구체화하게 되었습니다.&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;아래에서 보다 자세하게 서비스 설명을 이어나가도록 하겠습니다~&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 스터디 및 실습 내용&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;Naver Cloud Platform Console (&lt;a href=&quot;https://console.ncloud.com/dashboard&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://console.ncloud.com/dashboard&lt;/span&gt;&lt;/a&gt;) 과 Clova Studio (&lt;a href=&quot;https://clovastudio.ncloud.com/&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://clovastudio.ncloud.com/&lt;/span&gt;&lt;/a&gt;) 에서 주로 hyper clova x 서비스를 사용해볼 수 있었고, 여러 실습을 진행하였습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Clova Studio&amp;nbsp;&lt;/b&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;우선 Clova Studio에서 초기에 힘을 썼던 부분은 '스킬 트레이너' 였습니다.&lt;br&gt;스킬 트레이너의 경우 사용자가 모델에게 학습할 정보들에 대한 자세한 설명을 직접 제공할 수 있으며,&amp;nbsp;&lt;br&gt;결과값에 대한 형식 및 원하는 정보 추출에 대한 내용을 직접 제공하여 보다 모델의 완성도를 높일 수 있는 여러 도구들이 마련되어 있었습니다.&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;점메추 저메추 서비스 구현을 위해,&lt;br&gt;초반에 장소 검색을 위해 외부 OpenAPI인 네이버 지역 검색 API (&lt;a href=&quot;https://developers.naver.com/docs/serviceapi/search/local/local.md#%EC%A7%80%EC%97%AD&quot; target=&quot;_blank&quot;&gt;&lt;span&gt; Naver Search Local API&lt;/span&gt;&lt;/a&gt;)를 활용하였고&lt;br&gt;세부적으로 장소와 음식 카테고리 기반으로 구체적인 음식점 검색을 하기 위해 스킬셋을 생성하여 모델 학습을 진행하는 방식을 채택했습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;1) 스킬셋 정보 입력 및 API Spec 정보 등록&lt;/b&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;855&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wJSs2/btsIloLRflK/RozTwNrT6IK0n3qyZkcT2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wJSs2/btsIloLRflK/RozTwNrT6IK0n3qyZkcT2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wJSs2/btsIloLRflK/RozTwNrT6IK0n3qyZkcT2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwJSs2%2FbtsIloLRflK%2FRozTwNrT6IK0n3qyZkcT2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1227&quot; height=&quot;855&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;855&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;API Spec의 경우, 실제 local search api 에 대한 정보, 입력 파라미터와 응답 파라미터에 대한 정보들을 json 형태로 입력해줘야 합니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pppUq/btsIlln4PNH/RHakmBVXkBc6TG0Y2lCex0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pppUq/btsIlln4PNH/RHakmBVXkBc6TG0Y2lCex0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pppUq/btsIlln4PNH/RHakmBVXkBc6TG0Y2lCex0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpppUq%2FbtsIlln4PNH%2FRHakmBVXkBc6TG0Y2lCex0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1750&quot; height=&quot;934&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;해당 데이터를 바탕으로 내부적으로 api 호출이 진행되며, '검증하기' 를 통해 정상적으로 호출이 되는지 검증 또한 진행해볼 수 있었습니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KvzGm/btsImEfTMMZ/cUWlIYtdn9L9WtsKGViSdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KvzGm/btsImEfTMMZ/cUWlIYtdn9L9WtsKGViSdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KvzGm/btsImEfTMMZ/cUWlIYtdn9L9WtsKGViSdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKvzGm%2FbtsImEfTMMZ%2FcUWlIYtdn9L9WtsKGViSdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1195&quot; height=&quot;576&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;Manifest 정보로는 보다 구체적으로 지역 검색 API에 대한 정보를 모델에게 설명하는 프롬프트를 작성해주었습니다.&lt;br&gt;API 호출 시 필요한 헤더 키 값이 무엇인지, 호출 시 필요한 검색 쿼리 파라미터는 무엇인지 최대한 자세히 작성하였습니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csTWqg/btsImLMCRrq/kebxt97Opz2hublGsPbXxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csTWqg/btsImLMCRrq/kebxt97Opz2hublGsPbXxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csTWqg/btsImLMCRrq/kebxt97Opz2hublGsPbXxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsTWqg%2FbtsImLMCRrq%2Fkebxt97Opz2hublGsPbXxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1750&quot; height=&quot;764&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;2) API 설명 추가 및 스킬 호출 추가 / 데이터 수집&lt;/b&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;다음으로 API 호출 시 필요한 값들 (header key 값들, query parameter) 에 대한 쿼리에 대한 추가적인 설명,&lt;br&gt;그리고 API 결과 값으로부터 상세하게 얻고 싶은 값들에 대한 설명을 입력하여&amp;nbsp;&lt;br&gt;보다 모델이 상세하게 데이터들을 수집할 수 있도록 구성을 진행하였습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUmO0l/btsImgzBmHO/EIx07kLHkJislKvO0j1g3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUmO0l/btsImgzBmHO/EIx07kLHkJislKvO0j1g3k/img.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;1214&quot; style=&quot;width: 44.5929%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUmO0l/btsImgzBmHO/EIx07kLHkJislKvO0j1g3k/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUmO0l%2FbtsImgzBmHO%2FEIx07kLHkJislKvO0j1g3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1750&quot; height=&quot;1214&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/etgciu/btsInpbkkKw/bDOR0iEa5pD6CwiUVOWrZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/etgciu/btsInpbkkKw/bDOR0iEa5pD6CwiUVOWrZ1/img.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;998&quot; style=&quot;width: 54.2443%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/etgciu/btsInpbkkKw/bDOR0iEa5pD6CwiUVOWrZ1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fetgciu%2FbtsInpbkkKw%2FbDOR0iEa5pD6CwiUVOWrZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1750&quot; height=&quot;998&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d4mklg/btsIlRzThFt/IkkVcO00lKHteUz6dwqsm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d4mklg/btsIlRzThFt/IkkVcO00lKHteUz6dwqsm1/img.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;1260&quot; style=&quot;width: 47.3765%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d4mklg/btsIlRzThFt/IkkVcO00lKHteUz6dwqsm1/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4mklg%2FbtsIlRzThFt%2FIkkVcO00lKHteUz6dwqsm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1750&quot; height=&quot;1260&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qosh1/btsImCvBIch/HcRzszDn4CR9ZYThyrneK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qosh1/btsImCvBIch/HcRzszDn4CR9ZYThyrneK0/img.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;1160&quot; style=&quot;width: 51.4607%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qosh1/btsImCvBIch/HcRzszDn4CR9ZYThyrneK0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqosh1%2FbtsImCvBIch%2FHcRzszDn4CR9ZYThyrneK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1750&quot; height=&quot;1160&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buYHRs/btsImLy5eiI/YuyAyplXDzRjue4XemGj8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buYHRs/btsImLy5eiI/YuyAyplXDzRjue4XemGj8K/img.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;1265&quot; style=&quot;width: 47.4272%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buYHRs/btsImLy5eiI/YuyAyplXDzRjue4XemGj8K/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuYHRs%2FbtsImLy5eiI%2FYuyAyplXDzRjue4XemGj8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1750&quot; height=&quot;1265&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWI0sM/btsInEzjLm0/lC1ZgoBbAAoMYlQXHeQK61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWI0sM/btsInEzjLm0/lC1ZgoBbAAoMYlQXHeQK61/img.png&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;1167&quot; style=&quot;width: 51.41%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWI0sM/btsInEzjLm0/lC1ZgoBbAAoMYlQXHeQK61/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWI0sM%2FbtsInEzjLm0%2FlC1ZgoBbAAoMYlQXHeQK61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1750&quot; height=&quot;1167&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;4) 데이터 학습 및 APP 버전 관리&lt;/b&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;이후 데이터 학습이 진행되며,&lt;br&gt;실제로 API에 필요한 값들을 포함하고, API를 호출하여 얻는 값 중 원하는 결과값만을 도출하도록 학습을 진행한&lt;br&gt;하이퍼클로바X 모델 기반의 API를 활용할 수 있는 코드와&amp;nbsp; curl API 와 Python Code가 제공됩니다.&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1557&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/befYYf/btsIlBKRlMu/4eVLcq24rZhKbafYkSeNXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/befYYf/btsIlBKRlMu/4eVLcq24rZhKbafYkSeNXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/befYYf/btsIlBKRlMu/4eVLcq24rZhKbafYkSeNXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbefYYf%2FbtsIlBKRlMu%2F4eVLcq24rZhKbafYkSeNXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1557&quot; height=&quot;728&quot; data-origin-width=&quot;1557&quot; data-origin-height=&quot;728&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;Clova Studio 실습을 통해 하이퍼 클로바 x 모델에 데이터들을 학습시키고, 세부적인 조정 및 튜닝이 가능하였습니다.&amp;nbsp;&lt;br&gt;비록 해당 Open API 를 스킬셋으로 활용하기에는, 결과가 도출되기까지 오랜 시간이 걸리기 때문에 실제 서비스에 직접 적용할 수는 없었지만,&lt;br&gt;쉽고 빠르게 모델 구축을 하기에 최적화된 플랫폼이라는 것을 다시 한 번 느꼈던 것 같습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Naver Cloud Platform Console&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;Clova Studio 는 학습 기반의 생성형 AI 모델을 구축하는데 사용했다면,&lt;br&gt;Naver Cloud Platform을 통해서는 점메추저메추 서비스를 하나의 웹서비스로 배포하기 위해 여러 인프라 장비 서비스들을 쉽게 활용할 수 있었습니다.&amp;nbsp;&lt;br&gt;아래 Naver Cloud Platform 콘솔을 통해 여러 네트워크 서비스 및 인프라(Server, Public IP, Load Balancer)들을 쉽게 관리할 수 있었습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;서버 생성 및 관리 대시보드는 아래와 같습니다.&lt;br&gt;사용한 인프라 서버로는 Rocky linux 8.6을 사용하였습니다.&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1459&quot; data-origin-height=&quot;871&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPElgo/btsIniwE2E0/WvDsFxdNxsdZLVlvOJqkKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPElgo/btsIniwE2E0/WvDsFxdNxsdZLVlvOJqkKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPElgo/btsIniwE2E0/WvDsFxdNxsdZLVlvOJqkKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPElgo%2FbtsIniwE2E0%2FWvDsFxdNxsdZLVlvOJqkKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1459&quot; height=&quot;871&quot; data-origin-width=&quot;1459&quot; data-origin-height=&quot;871&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;특히, 서버 접근 보안으로는 IP 기반으로 제어가 되어 있었는데, 해당 서버에 접근할 수 있는 IP 를 쉽게 등록할 수 있는 ACG 서비스가 정말 편리했던 것 같습니다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1709&quot; data-origin-height=&quot;671&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHbET6/btsIm5xoUQw/hZtK0KWEX0QgGzZ7u6nfJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHbET6/btsIm5xoUQw/hZtK0KWEX0QgGzZ7u6nfJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHbET6/btsIm5xoUQw/hZtK0KWEX0QgGzZ7u6nfJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHbET6%2FbtsIm5xoUQw%2FhZtK0KWEX0QgGzZ7u6nfJ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1709&quot; height=&quot;671&quot; data-origin-width=&quot;1709&quot; data-origin-height=&quot;671&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6yOS9/btsInvP1d6n/bq97klFvTTyau39iMDwkM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6yOS9/btsInvP1d6n/bq97klFvTTyau39iMDwkM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6yOS9/btsInvP1d6n/bq97klFvTTyau39iMDwkM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6yOS9%2FbtsInvP1d6n%2Fbq97klFvTTyau39iMDwkM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;972&quot; height=&quot;420&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&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;3. 점메추저메추 서비스 소개&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;저희가 구현한 '점메추저메추' 서비스는 사용자가 '위치'와 '음식 종류' 두 가지를 입력하면, 이에 기반하여 음식점을 추천해주는 서비스입니다.&amp;nbsp;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위치와 음식 카테고리를 기반으로 &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Naver Search API를 활용해 장소(음식점)을 검색하고, Naver Blog Search API를 통해 각 음식점에 대한 리뷰를 남긴 블로그로부터 Beautiful Soup 라이브러리를 기반으로 블로그의 텍스트를 추출하고, 해당 텍스트를 하이퍼클로바X 모델을 활용하여 블로그 내용을 요약하여,&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;최종적으로 사용자에게 여러 맛집들에 대한 정보들을 제공하는 서비스입니다.&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;구현한 서비스 링크는 아래와 같습니다.&lt;br&gt;&lt;a href=&quot;https://www.jummmechu.shop/&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://www.jummmechu.shop/&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;시연 화면은 다음과 같습니다. 위 링크에 연결하게 되면, 아래와 같은 화면이 나타납니다.&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1872&quot; data-origin-height=&quot;1450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QfQRI/btsIAQGMKUu/vUzQa37frCcsY3knGR6PQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QfQRI/btsIAQGMKUu/vUzQa37frCcsY3knGR6PQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QfQRI/btsIAQGMKUu/vUzQa37frCcsY3knGR6PQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQfQRI%2FbtsIAQGMKUu%2FvUzQa37frCcsY3knGR6PQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1872&quot; height=&quot;1450&quot; data-origin-width=&quot;1872&quot; data-origin-height=&quot;1450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;사용자가 위치와 음식 종류 두 가지를 입력하고 나면, 아래와 같이 결과가 도출됩니다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1956&quot; data-origin-height=&quot;1484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKIc6U/btsIy2uMh1C/5teQY0m2KkYVz4BVcPHpb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKIc6U/btsIy2uMh1C/5teQY0m2KkYVz4BVcPHpb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKIc6U/btsIy2uMh1C/5teQY0m2KkYVz4BVcPHpb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKIc6U%2FbtsIy2uMh1C%2F5teQY0m2KkYVz4BVcPHpb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1956&quot; height=&quot;1484&quot; data-origin-width=&quot;1956&quot; data-origin-height=&quot;1484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2066&quot; data-origin-height=&quot;1494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgZqVV/btsIzSSQRlo/YUz6U3C157aXGAOTkEoqb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgZqVV/btsIzSSQRlo/YUz6U3C157aXGAOTkEoqb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgZqVV/btsIzSSQRlo/YUz6U3C157aXGAOTkEoqb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgZqVV%2FbtsIzSSQRlo%2FYUz6U3C157aXGAOTkEoqb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2066&quot; height=&quot;1494&quot; data-origin-width=&quot;2066&quot; data-origin-height=&quot;1494&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;'역삼', '스시' 집을 검색했을 때는 '대진도원참치 강남역집' 이라는 식당이 상위 첫번째 결과로 나타났는데요.&lt;br&gt;음식종류, 전화번호, 공식 사이트 링크, 그리고 블로그 리뷰의 제목, 블로그명, 블로그 링크와 해당 블로그 글의 요약본이 나타납니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;(추가) Open Map 버튼을 클릭하여 위치에 대한 지도가 나올 수 있도록 구현을 추가적으로 진행완료.)&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qAeVR/btsIyBRc3Ld/KWdHs140UnDllvFvoiK4U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qAeVR/btsIyBRc3Ld/KWdHs140UnDllvFvoiK4U0/img.png&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;2556&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qAeVR/btsIyBRc3Ld/KWdHs140UnDllvFvoiK4U0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqAeVR%2FbtsIyBRc3Ld%2FKWdHs140UnDllvFvoiK4U0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1179&quot; height=&quot;2556&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btpyHx/btsIyhejmtv/vEvWAKoGxuijmvKeX4RxKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btpyHx/btsIyhejmtv/vEvWAKoGxuijmvKeX4RxKK/img.png&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;2556&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btpyHx/btsIyhejmtv/vEvWAKoGxuijmvKeX4RxKK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtpyHx%2FbtsIyhejmtv%2FvEvWAKoGxuijmvKeX4RxKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1179&quot; height=&quot;2556&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TtBFr/btsIzzZmw6z/VM2HHyXRvLwNAUuDjwP2N0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TtBFr/btsIzzZmw6z/VM2HHyXRvLwNAUuDjwP2N0/img.png&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;2556&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TtBFr/btsIzzZmw6z/VM2HHyXRvLwNAUuDjwP2N0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTtBFr%2FbtsIzzZmw6z%2FVM2HHyXRvLwNAUuDjwP2N0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1179&quot; height=&quot;2556&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EUYG0/btsIzoQ5ucO/GJ1PBEOjQii99FNuakDbr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EUYG0/btsIzoQ5ucO/GJ1PBEOjQii99FNuakDbr0/img.png&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;2556&quot; style=&quot;width: 32.5198%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EUYG0/btsIzoQ5ucO/GJ1PBEOjQii99FNuakDbr0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEUYG0%2FbtsIzoQ5ucO%2FGJ1PBEOjQii99FNuakDbr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1179&quot; height=&quot;2556&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qjxPV/btsIzKff79q/OUoha94qkVN3Nhq60YEkE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qjxPV/btsIzKff79q/OUoha94qkVN3Nhq60YEkE0/img.png&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;2556&quot; style=&quot;width: 32.5198%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qjxPV/btsIzKff79q/OUoha94qkVN3Nhq60YEkE0/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqjxPV%2FbtsIzKff79q%2FOUoha94qkVN3Nhq60YEkE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1179&quot; height=&quot;2556&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KCAJ7/btsIAwgyBdF/ehd3HucEXcKaQeZiwGCmOk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KCAJ7/btsIAwgyBdF/ehd3HucEXcKaQeZiwGCmOk/img.jpg&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;2547&quot; style=&quot;width: 32.6347%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KCAJ7/btsIAwgyBdF/ehd3HucEXcKaQeZiwGCmOk/img.jpg&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKCAJ7%2FbtsIAwgyBdF%2Fehd3HucEXcKaQeZiwGCmOk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1179&quot; height=&quot;2547&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그의 요약본의 경우, 첫 문장에서 '해당 블로그 글의 핵심 내용을 5문장 이내로 요약하면 다음과 같습니다' 와 같이&lt;br&gt;미리 학습한 프롬프트에 대한 값이 나는 것을 확인할 수 있었습니다.&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;현재 반응형으로도 개발을 하여, 모바일에서도 접속하여 문제없이 결과를 확인할 수 있도록 구현하였습니다.&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&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;4. 사용한 서비스 및 개발 도구&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;사용한 Naver Cloud의 인프라 서비스는 아래와 같습니다.&lt;br&gt;- Clova Studio&lt;br&gt;- Global DNS&lt;br&gt;- LoadBalancer&lt;br&gt;- Server (Rocky OS 8.6)&lt;br&gt;- Certificate Manager&lt;br&gt;&amp;nbsp;&lt;br&gt;개발하는데 사용한 언어 및 프레임워크는 다음과 같습니다.&lt;br&gt;- Python FastAPI (Backend Framework)&lt;br&gt;- React, HTML/CSS/Javascript (Frontend)&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 프로젝트 후기&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;이번 HyperClova X 막차 챌린지 프로젝트를 통해 NCP를 통해 인프라 서비스들을 쉽게 이용하고,&lt;br&gt;Clova Studio 를 통해 하이퍼 클로바X 모델에 스킬셋 및 스킬 트레이너를 활용해 보다 정교한 prompt engineering을 해볼 수 있었습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;팀원분들이 없었다면 혼자서는 어려움을 많이 겪었겠지만,&lt;br&gt;매주 온라인으로 모여 각자 실습한 내용들을 공유하는 시간을 통해, 초반에 두 플랫폼을 사용하는데 있어 많은 도움을 얻었고 저 또한 마지막 서비스 구현과 개발을 진행하는데 있어 더욱 열정을 쏟을 수 있었던 것 같습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;특히 마지막 5주차 때는 오프라인으로 만나 네트워킹을 하며 팀원분들을 포함해 다양한 직군의 개발자, 엔지니어, 마케터 분들을 만나 소통할 수 있었고, 모각코 시간을 통해 인프라 환경 구축 및 개발 환경 세팅을 진행하며, 서비스 구현을 하는데 박차를 가할 수 있었습니다.&lt;br&gt;그동안 팀원분들의 지속적인 인사이트 공유를 통해, 서비스를 기획하고 구현해나가며 챌린지를 마무리하기까지 지속적인 동기부여가 되었던 것 같습니다.&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;남은 시간 동안 '점메추저메추' 서비스의 프론트 앞단 부분들을 조금 더 다듬어 사용성 있는 서비스로 개선해 나가보려 합니다. :)&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;마지막으로 하이퍼클로바X 챌린지를 통해 AI, Cloud 두 분야에 대한 시야가 더 넓어진 것 같고,&lt;br&gt;이번 프로젝트를 하며 얻은 경험과 개발자로서 보유한 역량들을 기반으로 재밌는 서비스들을 더 많이 개발해보고 싶다는 생각이 들었습니다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4030&quot; data-origin-height=&quot;4610&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eBwI6Z/btsIlUcrCau/amkk5y6JaSu9NOxMMIh1M1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eBwI6Z/btsIlUcrCau/amkk5y6JaSu9NOxMMIh1M1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eBwI6Z/btsIlUcrCau/amkk5y6JaSu9NOxMMIh1M1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeBwI6Z%2FbtsIlUcrCau%2Famkk5y6JaSu9NOxMMIh1M1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;495&quot; height=&quot;566&quot; data-origin-width=&quot;4030&quot; data-origin-height=&quot;4610&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category># Develop/Project</category>
      <category>ai막차탑승</category>
      <category>clovastudio</category>
      <category>ncloud</category>
      <category>ncp</category>
      <category>네이버지도api</category>
      <category>네이버클라우드</category>
      <category>네이버클라우드플랫폼</category>
      <category>클로바스튜디오</category>
      <category>하이퍼클로바X</category>
      <category>하이퍼클로바x프로젝트챌린지</category>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/544</guid>
      <comments>https://dream-and-develop.tistory.com/544#entry544comment</comments>
      <pubDate>Wed, 3 Jul 2024 22:21:10 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] Windows용 Docker 이미지 생성하기</title>
      <link>https://dream-and-develop.tistory.com/539</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Docker Engine 설치&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.docker.com/desktop/&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://docs.docker.com/desktop/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Docker Desktop&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot; &quot; data-og-host=&quot;docs.docker.com&quot; data-og-source-url=&quot;https://docs.docker.com/desktop/&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/mkEAc/hyS2wYHzym/AAAAAAAAAAAAAAAAAAAAAPOLkBrkFM3EWUL0GATDRdvrcsVc0DFq4HdTYyd42bd0/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=b1qYY8bVIUxE0NqKzi9XFq5DJWs%3D&quot; data-og-url=&quot;https://docs.docker.com/desktop/&quot;&gt;&lt;a href=&quot;https://docs.docker.com/desktop/&quot; target=&quot;_blank&quot; data-source-url=&quot;https://docs.docker.com/desktop/&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/mkEAc/hyS2wYHzym/AAAAAAAAAAAAAAAAAAAAAPOLkBrkFM3EWUL0GATDRdvrcsVc0DFq4HdTYyd42bd0/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=b1qYY8bVIUxE0NqKzi9XFq5DJWs%3D')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;Docker Desktop&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt; &lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;docs.docker.com&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pNcKc/btskrmJXi0w/6oaXl3Ib5aoA3x6wUSYx21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pNcKc/btskrmJXi0w/6oaXl3Ib5aoA3x6wUSYx21/img.png&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;405&quot; style=&quot;width: 39.3228%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pNcKc/btskrmJXi0w/6oaXl3Ib5aoA3x6wUSYx21/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpNcKc%2FbtskrmJXi0w%2F6oaXl3Ib5aoA3x6wUSYx21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;486&quot; height=&quot;405&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HQ3zB/btskA8pZ2Hn/eSWWh2yOMozOzXU2ESKreK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HQ3zB/btskA8pZ2Hn/eSWWh2yOMozOzXU2ESKreK/img.png&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;272&quot; style=&quot;width: 59.5144%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HQ3zB/btskA8pZ2Hn/eSWWh2yOMozOzXU2ESKreK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHQ3zB%2FbtskA8pZ2Hn%2FeSWWh2yOMozOzXU2ESKreK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;494&quot; height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. MySQL Docker Image 다운로드&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;$ docker pull mysql/mysql-server:8.0&lt;/i&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;653&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/97DMq/btskloImmEi/BL3GRgRCYHrAQRQ0j0K0l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/97DMq/btskloImmEi/BL3GRgRCYHrAQRQ0j0K0l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/97DMq/btskloImmEi/BL3GRgRCYHrAQRQ0j0K0l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F97DMq%2FbtskloImmEi%2FBL3GRgRCYHrAQRQ0j0K0l0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;653&quot; height=&quot;229&quot; data-origin-width=&quot;653&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;Docker Image 생성&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;491&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bS6w5b/btskuNN2Kw0/kFdKl590kkdoppn3EhmJVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bS6w5b/btskuNN2Kw0/kFdKl590kkdoppn3EhmJVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bS6w5b/btskuNN2Kw0/kFdKl590kkdoppn3EhmJVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbS6w5b%2FbtskuNN2Kw0%2FkFdKl590kkdoppn3EhmJVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1248&quot; height=&quot;491&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;491&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 다운로드 받은 Docker Image로 Docker Container 실행&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;$ docker run --name=mysql_container --restart on-failure -d mysql/mysql-server:8.0&lt;/i&gt;&lt;br&gt;(컨테이너 이름 : docker_container)&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh4eos/btskuNAu9Ck/edf1XYXY3P37tsgNzIIbz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh4eos/btskuNAu9Ck/edf1XYXY3P37tsgNzIIbz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh4eos/btskuNAu9Ck/edf1XYXY3P37tsgNzIIbz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh4eos%2FbtskuNAu9Ck%2Fedf1XYXY3P37tsgNzIIbz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;813&quot; height=&quot;59&quot; data-origin-width=&quot;813&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;Docker container 생성&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkG09B/btskrnoAq9J/g8GqRu7sQh4bePDLkktQGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkG09B/btskrnoAq9J/g8GqRu7sQh4bePDLkktQGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkG09B/btskrnoAq9J/g8GqRu7sQh4bePDLkktQGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkG09B%2FbtskrnoAq9J%2Fg8GqRu7sQh4bePDLkktQGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1232&quot; height=&quot;356&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;$ docker ps&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;현재 컴퓨터에서 실행하고 있는 모든 Docker Container 확인&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8bf2d/btsknwe3w3P/s5H3wlvtkNaGSdN1iTzGG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8bf2d/btsknwe3w3P/s5H3wlvtkNaGSdN1iTzGG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8bf2d/btsknwe3w3P/s5H3wlvtkNaGSdN1iTzGG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8bf2d%2Fbtsknwe3w3P%2Fs5H3wlvtkNaGSdN1iTzGG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;973&quot; height=&quot;111&quot; data-origin-width=&quot;973&quot; data-origin-height=&quot;111&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. MySQL Root 계정의 패스워드 찾기&lt;/b&gt;&lt;/h4&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;$ docker logs mysql_container 2&amp;gt;&amp;amp;1 | grep GENERATED&lt;/i&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u1JW3/btskrcUXVnb/4opDtgW91untOc01NYi6bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u1JW3/btskrcUXVnb/4opDtgW91untOc01NYi6bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u1JW3/btskrcUXVnb/4opDtgW91untOc01NYi6bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu1JW3%2FbtskrcUXVnb%2F4opDtgW91untOc01NYi6bk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1301&quot; height=&quot;613&quot; data-origin-width=&quot;1301&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;임시 생성 PASSWORD&lt;br&gt;E2X9*Y%4^A74Hg05?osAL&amp;amp;2N+JM_;kMB&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. MySQL shell 실행하기&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;$ docker exec -it mysql_container mysql -u root -p&lt;/i&gt;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;docker exec -it mysql_container 이후로는 컨테이너 내에서 실행하고 싶은 명령어들을 작성해주면된다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/539</guid>
      <comments>https://dream-and-develop.tistory.com/539#entry539comment</comments>
      <pubDate>Mon, 19 Jun 2023 14:53:37 +0900</pubDate>
    </item>
    <item>
      <title>[Java/JUnit5] Paramterized Tests 사용하기</title>
      <link>https://dream-and-develop.tistory.com/535</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dublin-java.tistory.com/56&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://dublin-java.tistory.com/56&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;JUnit 5 Parameterized Tests 사용하기&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;혹시 테스트 코드를 작성할 때 아래와 같은 중복되는 코드를 작성하고 계신가요? @Test @DisplayName(&amp;quot;User 생성 name 2자 미만 예외처리&amp;quot;) void createUserException01() { IllegalArgumentException e = assertThrows(IllegalArgu&quot; data-og-host=&quot;dublin-java.tistory.com&quot; data-og-source-url=&quot;https://dublin-java.tistory.com/56&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/wYUAm/hySYAtENal/AAAAAAAAAAAAAAAAAAAAAMVqWNnERzyz2AkbaLt5UAR6iA1l5lkvv8kYLbeQOeMl/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=j9gHSE523yzBDMlVIp%2FJoUy5diw%3D&quot; data-og-url=&quot;https://dublin-java.tistory.com/56&quot;&gt;&lt;a href=&quot;https://dublin-java.tistory.com/56&quot; target=&quot;_blank&quot; data-source-url=&quot;https://dublin-java.tistory.com/56&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/wYUAm/hySYAtENal/AAAAAAAAAAAAAAAAAAAAAMVqWNnERzyz2AkbaLt5UAR6iA1l5lkvv8kYLbeQOeMl/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=j9gHSE523yzBDMlVIp%2FJoUy5diw%3D')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;JUnit 5 Parameterized Tests 사용하기&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;혹시 테스트 코드를 작성할 때 아래와 같은 중복되는 코드를 작성하고 계신가요? @Test @DisplayName(&quot;User 생성 name 2자 미만 예외처리&quot;) void createUserException01() { IllegalArgumentException e = assertThrows(IllegalArgu&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;dublin-java.tistory.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;</description>
      <category># Tech Studies/Java &amp;bull; IntellJ</category>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/535</guid>
      <comments>https://dream-and-develop.tistory.com/535#entry535comment</comments>
      <pubDate>Tue, 13 Jun 2023 18:53:35 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] 멀티 스레드 환경에서의 동시성 제어 AtomicVariable</title>
      <link>https://dream-and-develop.tistory.com/533</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jaehoney.tistory.com/112&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://jaehoney.tistory.com/112&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Java - Atomic Variable (+ 동시성 제어 비교 with volatile, synchronized)&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;동시성 제어 in 자바 자바에서 Multi Thread 환경의 동시성을 제어를 위한 방법은 대표적으로 3가지가 있습니다. volatile synchronized Atomic variable 3가지 방법은 모두 쓰임새가 다른 데 같이 살펴보겠습니&quot; data-og-host=&quot;jaehoney.tistory.com&quot; data-og-source-url=&quot;https://jaehoney.tistory.com/112&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/kdi0a/hySYF9biqC/AAAAAAAAAAAAAAAAAAAAAMc5g3WJXRy7Pho5s5M1AzIvmc07WmsGCBkrnfkFBO4R/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=yTAXbduTVuumops9kBzAdffewjw%3D&quot; data-og-url=&quot;https://jaehoney.tistory.com/112&quot;&gt;&lt;a href=&quot;https://jaehoney.tistory.com/112&quot; target=&quot;_blank&quot; data-source-url=&quot;https://jaehoney.tistory.com/112&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/kdi0a/hySYF9biqC/AAAAAAAAAAAAAAAAAAAAAMc5g3WJXRy7Pho5s5M1AzIvmc07WmsGCBkrnfkFBO4R/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=yTAXbduTVuumops9kBzAdffewjw%3D')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;Java - Atomic Variable (+ 동시성 제어 비교 with volatile, synchronized)&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;동시성 제어 in 자바 자바에서 Multi Thread 환경의 동시성을 제어를 위한 방법은 대표적으로 3가지가 있습니다. volatile synchronized Atomic variable 3가지 방법은 모두 쓰임새가 다른 데 같이 살펴보겠습니&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;jaehoney.tistory.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;br&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category># Tech Studies/Java &amp;bull; IntellJ</category>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/533</guid>
      <comments>https://dream-and-develop.tistory.com/533#entry533comment</comments>
      <pubDate>Tue, 13 Jun 2023 13:28:00 +0900</pubDate>
    </item>
    <item>
      <title>[디자인패턴] 전략 패턴 (Strategy Pattern) 에 대해 알아보자</title>
      <link>https://dream-and-develop.tistory.com/529</link>
      <description>&lt;h1&gt;전략 패턴(Strategy Pattern) 이란?&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;b&gt;전략 패턴&lt;/b&gt;이란, 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴 (Behavior Design Pattern) 이다. 특정한 계열의&amp;nbsp;알고리즘들을 정의하고, 각 알고리즘을&amp;nbsp;캡슐화&amp;nbsp;하여 이 알고리즘들을 해당 계열 안에서&amp;nbsp;상호 교체가 가능하게 만든다.&lt;/span&gt;&lt;br /&gt;&lt;br /&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;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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유사한 행위에 대한 알고리즘을 각각 정의하여 &lt;b&gt;캡슐화&lt;/b&gt; 한다.&lt;/li&gt;
&lt;li&gt;객체의 행위(알고리즘, 전략)를 &lt;b&gt;동적&lt;/b&gt;으로 바꿀 수 있는데, 직접 수정하는 것이 아니라 &lt;b&gt;주입을 통해 유연하게 확장&lt;/b&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;전략패턴_1.webp&quot; data-origin-width=&quot;1005&quot; data-origin-height=&quot;557&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfut4H/dJMcagRxS2K/dbJcRI26yBoKr13qcT2B60/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfut4H/dJMcagRxS2K/dbJcRI26yBoKr13qcT2B60/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfut4H/dJMcagRxS2K/dbJcRI26yBoKr13qcT2B60/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdfut4H%2FdJMcagRxS2K%2FdbJcRI26yBoKr13qcT2B60%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;692&quot; height=&quot;384&quot; data-filename=&quot;전략패턴_1.webp&quot; data-origin-width=&quot;1005&quot; data-origin-height=&quot;557&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전략 패턴을 구성하는 3가지 요소&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Client : 전략 객체를 생성하여 컨텍스트에 주입하는 제 3자 (공급자)&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;Context : 전략 객체를 사용하는 소비자&lt;/b&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;/li&gt;
&lt;li&gt;&lt;b&gt;Strategy : 구체적인 전략의 공통, 추상체&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Strategy 인터페이스와 각 비즈니스 로직을 담당하는 하위 구현체들을 선언&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ConcreteStrategy : 변경되는 구체적인 전략 구현체&lt;/b&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;/li&gt;
&lt;/ol&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;전략패턴_2.webp&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;739&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MssgA/dJMcaiaLpiX/wfrVicVYXbN9KXJBaClWh1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MssgA/dJMcaiaLpiX/wfrVicVYXbN9KXJBaClWh1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MssgA/dJMcaiaLpiX/wfrVicVYXbN9KXJBaClWh1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMssgA%2FdJMcaiaLpiX%2FwfrVicVYXbN9KXJBaClWh1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;638&quot; height=&quot;236&quot; data-filename=&quot;전략패턴_2.webp&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;739&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;길찾기 예시를 통해 알아보자!&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;전략패턴_3.webp&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;795&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tawiD/dJMcafd2Him/ghI0GduRehGRe5Ro7hBJx1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tawiD/dJMcafd2Him/ghI0GduRehGRe5Ro7hBJx1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tawiD/dJMcafd2Him/ghI0GduRehGRe5Ro7hBJx1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtawiD%2FdJMcafd2Him%2FghI0GduRehGRe5Ro7hBJx1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;478&quot; height=&quot;343&quot; data-filename=&quot;전략패턴_3.webp&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;795&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;&amp;nbsp;사용자로부터 출발지, 도착지, 그리고 이동 수단을 입력 받아 길찾기를 진행하고 최적 경로를 알려주는 프로그램&lt;/li&gt;
&lt;li&gt;기존 코드&amp;nbsp;&lt;b&gt;if-else 분기 구문으로 이루어진 기존 코드의 단점&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;확장의 어려움&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 수단 (ex) 자전거, 미래 모빌리티) 을 통한 길찾기를 하고 싶은 경우, 코드가 길어지고 복잡해진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;System.out.println(&quot;이동 수단을 선택해 주세요.(0. 종료 1. 대중 교통 2. 자동차 3. 도보 4. 자전거 5. 미래 모빌리티)&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;else if (userInput==4){
    System.out.println(&quot;자전거를 이용한 최적 경로를 계산합니다.&quot;);
    //
}
else if (userInput==5){
    System.out.println(&quot;미래 모빌리티 XXX를 이용한 최적 경로를 계산합니다.&quot;);
    //
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;누락, 변경의 위험성&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 코드를 수정하는 과정에서 수정하는 위치를 매번 찾아야 하고, 수정하면서 다른 코드에 영향을 미칠 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;즉 유지 보수하기 어려운 코드가 생산되었다.&lt;/b&gt;&lt;/li&gt;
&lt;li class=&quot;pgsql&quot;&gt;&lt;code&gt;public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println(&quot;출발 지점을 입력해 주세요.&quot;);  String departure = input.next();
        System.out.println(&quot;도착 지점을 입력해 주세요.&quot;);  String destination = input.next();

        System.out.println(&quot;이동 수단을 선택해 주세요.(0. 종료 1. 대중 교통 2. 자동차 3. 도보)&quot;);
        int userInput = input.nextInt();
        if (userInput==1){
            System.out.println(&quot;대중 교통을 이용한 최적 경로를 계산합니다.&quot;);
            // 대중 교통 기반 최적 경로 계산

        }
        else if (userInput==2){
            System.out.println(&quot;자동차를 이용한 최적 경로를 계산합니다.&quot;);
            // 자동차를 이용한 최적 경로 계산

        }
        else if (userInput==3){
            System.out.println(&quot;도보를 이용한 최적 경로를 계산합니다.&quot;);
            // 도보를 이용한 최적 경로 계산

        }
    }
}

&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기존의 분기 코드&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전략 Strategy 코드
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;trace() 메서드: 출발지에서 도착지까지의 최적 경로를 계산하는 추상 메소드&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;public interface RouteStrategy {
    void trace(LocationInput locationInput);
}

&lt;/code&gt;&lt;/pre&gt;
&lt;b&gt;전략 구현체 : PublicTransportStrategy&lt;/b&gt;&lt;b&gt;전략 구현체 : CarStrategy&lt;/b&gt;&lt;b&gt;전략 구현체 : WalkStrategy&lt;/b&gt;&lt;b&gt;전략 구현체 : BicycleStrategy&lt;/b&gt;&lt;b&gt;새로운 전략 구현체 : FutureMobilityXXX ?&lt;/b&gt;&amp;rarr; &lt;b&gt;OCP(Open-Closed Principle, 개방 폐쇄 원칙)&lt;/b&gt; : 확장에 대해서는 열려 있고, 변경에 대해서는 닫혀 있는 원칙&lt;br /&gt;&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;public class BicycleStrategy implements RouteStrategy { @Override public void trace(LocationInput locationInput) { System.out.println(locationInput.getDeparture() + &quot;에서 &quot;+locationInput.getDestination()+&quot;까지 자전거를 이용한 최적 경로 입니다.\\n\\n&quot;); // } }&lt;/li&gt;
&lt;li&gt;public class WalkingStrategy implements RouteStrategy { @Override public void trace(LocationInput locationInput) { System.out.println(locationInput.getDeparture() + &quot;에서 &quot;+locationInput.getDestination()+&quot;까지 도보를 이용한 최적 경로입니다.\\n\\n&quot;); // } }&lt;/li&gt;
&lt;li&gt;public class CarStrategy implements RouteStrategy { @Override public void trace(LocationInput locationInput) { System.out.println(locationInput.getDeparture() + &quot;에서 &quot;+locationInput.getDestination()+&quot;까지 자동차를 이용한 최적 경로 입니다.\\n\\n&quot;); // } }&lt;/li&gt;
&lt;li&gt;public class PublicTransportStrategy implements RouteStrategy { @Override public void trace(LocationInput locationInput) { System.out.println(locationInput.getDeparture() + &quot;에서 &quot;+locationInput.getDestination()+&quot;까지 대중 교통을 이용한 최적 경로 입니다.\\n\\n&quot;); // } }&lt;/li&gt;
&lt;li&gt;전략 : RouteStrategy 인터페이스&lt;/li&gt;
&lt;li&gt;Context 코드
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;execute(): 주입받은 RouteStrategy 구현체의 trace() 메서드를 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;public class ShortestPathCalculator {
    private LocationInput locationInput;
    private RouteStrategy routeStrategy;

    void setLocation(LocationInput locationInput){
        this.locationInput = locationInput;
    }

    void setRouteStrategy(RouteStrategy strategy){
        this.routeStrategy = strategy;
    }

    void execute(){
        System.out.println(&quot;출발 : &quot; + locationInput.getDeparture() + &quot;\\n도착 : &quot; + locationInput.getDestination());
        routeStrategy.trace(locationInput);
    }
}

&lt;/code&gt;&lt;/pre&gt;
&amp;rarr; &lt;b&gt;DIP (Dependency Injection Principle, 의존성 주입 원칙&lt;/b&gt;) : 상위 모듈이 하위 모듈에 의존하지 않음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컨텍스트 : ShortestPathCalculator&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Client 코드
&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 class=&quot;reasonml&quot;&gt;&lt;code&gt;public class MapUserClient {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ShortestPathCalculator pathCalculator = new ShortestPathCalculator();
        LocationInput locationInput = new LocationInput();

        System.out.println(&quot;출발 지점을 입력해 주세요.&quot;);  locationInput.setDeparture(input.next());
        System.out.println(&quot;도착 지점을 입력해 주세요.&quot;);   locationInput.setDestination(input.next());
        pathCalculator.setLocation(locationInput);

        while(ifInput){
            System.out.println(&quot;이동 수단을 선택해 주세요.(1. 대중 교통 2. 자동차 3. 도보 4. 자전거)&quot;);
            int userInput = input.nextInt();
            switch (userInput) {
                case PUBLIC_TRANSPORTATION:
                    pathCalculator.setRouteStrategy(new PublicTransportStrategy());
                    continue;
                case AUTO_MOBILE:
                    pathCalculator.setRouteStrategy(new CarStrategy());
                    continue;
                case WALK:
                    pathCalculator.setRouteStrategy(new WalkingStrategy());
                    continue;
                case BICYCLE:
                    pathCalculator.setRouteStrategy(new BicycleStrategy());
            }
            pathCalculator.execute(); // 실행 
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;public class LocationInput {
    private String departure;
    private String destination;

    void setDeparture(String departure){
        this.departure = departure;
    }

    void setDestination(String destination){
        this.destination = destination;
    }

    String getDeparture(){return departure;}
    String getDestination(){return destination;}
}

&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;public class ClientCommand {
    public static final int EXIT = 0;
    public static final int PUBLIC_TRANSPORT = 1;
    public static final int CAR = 2;
    public static final int WALK = 3;
    public static final int BICYCLE = 4;
}

&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Client : MapUserClient전략 패턴을 적용한 새로운 코드&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;전략패턴_4.webp&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1016&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bej2Bt/dJMcadUL75z/HfvMrUee7qGeoKy2EZU3Jk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bej2Bt/dJMcadUL75z/HfvMrUee7qGeoKy2EZU3Jk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bej2Bt/dJMcadUL75z/HfvMrUee7qGeoKy2EZU3Jk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbej2Bt%2FdJMcadUL75z%2FHfvMrUee7qGeoKy2EZU3Jk%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;1016&quot; data-filename=&quot;전략패턴_4.webp&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1016&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전략 패턴은 언제 적용하는 것이 좋을까?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체 내에서 다른 알고리즘을 사용하고, &lt;b&gt;런타임 중에 한 알고리즘에서 다른 알고리즘으로 전환&lt;/b&gt;이 필요할 때&lt;/li&gt;
&lt;li&gt;일부 동작을 실행하는 방식만 다른 유사한 클래스가 많이 있는 경우&lt;/li&gt;
&lt;li&gt;패턴을 사용하여, 컨텍스트에서 중요하지 않을 수 있는 알고리즘을 세부 구상체에서 구현하여, 클래스의 비즈니스 로직을 분리하고자 할 때&lt;/li&gt;
&lt;li&gt;클래스에 동일한 계열 내의 서로 다른 알고리즘을 전환하는 거대한 덩어리의 조건문이 있는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  전략 패턴의 장점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 전략을 추가해도 기존 코드(Context 코드)를 변경하지 않는다. (OCP)&lt;/li&gt;
&lt;li&gt;상속 대신 위임을 사용할 수 있다. (DIP)&lt;/li&gt;
&lt;li&gt;실행 중 동적으로 전략의 변경이 가능하다. (런타임 시 전략 변경)&lt;/li&gt;
&lt;li&gt;알고리즘의 구현 세부 정보를 분리할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;☹️ &lt;b&gt;전략 패턴의 단점&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;클라이언트 코드가 구체적인 전략을 알아야 한다.&lt;/li&gt;
&lt;li&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;/li&gt;
&lt;li&gt;최신 모던 프로그래밍 기술을 이용해 익명 함수를 활용하여 다양한 버전의 알고리즘을 구현할 수 있기 때문에, 인터페이스와 클래스로 분리하여 코드를 부풀리지 않는 것이 좋다.&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;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트의 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴!&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <category># Tech Studies</category>
      <category>Strategy Pattern</category>
      <category>객체지향</category>
      <category>디자인패턴</category>
      <category>스프링입문을위한객체지향</category>
      <category>자바디자인패턴</category>
      <category>전략패턴</category>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/529</guid>
      <comments>https://dream-and-develop.tistory.com/529#entry529comment</comments>
      <pubDate>Mon, 12 Jun 2023 10:36:53 +0900</pubDate>
    </item>
    <item>
      <title>[Git] .gitignore 적용되지 않는 문제 해결하기</title>
      <link>https://dream-and-develop.tistory.com/521</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gitignore에 새로운 파일명을 적고 적용을 하려고 했을 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 작동하지 않는 경우가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 원격 저장소에 이미 저장되어 있는 파일에 대해,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬에서 삭제 혹은 gitignore에 적용한다고 해서 원격 저장소에서 삭제가 이루어지지 않기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 경우 캐시 되어 있는 파일들을 모두 삭제 후, 다시 적용을 해주어 해결할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 명령어를 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background-color: #f6f8fa; color: #24292e; text-align: start;&quot;&gt;&lt;code&gt;git rm -r --cached .
git add .
git commit -m &quot;fixed untracked files&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;application.yml 의 파일을 새로 아래 .gitignore에 추가해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;application.yml에 중요한 aws 관련 정보들을 추가한 후에 이를 git에 업로드되지 않도록 유의해야 하는 상황이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZPas0/btsgn2icu3G/Udk9zBYKxNkrgAS8z3X5J0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZPas0/btsgn2icu3G/Udk9zBYKxNkrgAS8z3X5J0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZPas0/btsgn2icu3G/Udk9zBYKxNkrgAS8z3X5J0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZPas0%2Fbtsgn2icu3G%2FUdk9zBYKxNkrgAS8z3X5J0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;245&quot; height=&quot;124&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;124&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;그러나 commit 해야 하는 파일에 application.yml에 포함되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;231&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn95Aw/btsgn2Cqt9d/aMI1oOvyLNPhhaTCFX1sQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn95Aw/btsgn2Cqt9d/aMI1oOvyLNPhhaTCFX1sQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn95Aw/btsgn2Cqt9d/aMI1oOvyLNPhhaTCFX1sQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn95Aw%2Fbtsgn2Cqt9d%2FaMI1oOvyLNPhhaTCFX1sQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;231&quot; height=&quot;108&quot; data-origin-width=&quot;231&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 위의 명령어들을 차례대로 터미널 창에 입력해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE2QXQ/btsHXFyR90g/ZiGT0kZFg634kBP9T1aDkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE2QXQ/btsHXFyR90g/ZiGT0kZFg634kBP9T1aDkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE2QXQ/btsHXFyR90g/ZiGT0kZFg634kBP9T1aDkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE2QXQ%2FbtsHXFyR90g%2FZiGT0kZFg634kBP9T1aDkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;749&quot; height=&quot;290&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 Git 저장소에 업로드되어 있는 모든 파일이 remove되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 commit을 하게 되면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 저장소에 업로드되어 있는 application.yml이 정상적으로 delete 되었다는 설명이 나타나는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNU51B/btsHWVWJqPN/D8gKvQX8dKFVSdqo8KuEJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNU51B/btsHWVWJqPN/D8gKvQX8dKFVSdqo8KuEJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNU51B/btsHWVWJqPN/D8gKvQX8dKFVSdqo8KuEJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNU51B%2FbtsHWVWJqPN%2FD8gKvQX8dKFVSdqo8KuEJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;851&quot; height=&quot;127&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category># Tech Studies/Git &amp;bull; Github</category>
      <category>.gitginore</category>
      <category>git</category>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/521</guid>
      <comments>https://dream-and-develop.tistory.com/521#entry521comment</comments>
      <pubDate>Thu, 18 May 2023 18:26:03 +0900</pubDate>
    </item>
    <item>
      <title>[AWS/RDS] 이 데이터베이스는 삭제 방지 옵션이 활성화되어 있습니다 문제 해결하기</title>
      <link>https://dream-and-develop.tistory.com/517</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 상황&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;최근 교내 축제 웹사이트 백엔드 Admin 서버를 Elastic Beanstalk으로, MySQL DB를 RDS로 배포한 후 서비스를 출시한지도 어느덧 약 일주일이라는 시간이 지났다.&lt;br&gt;AWS로부터 점점 RDS 인스턴스 프리티어 만료에 따른 과금 메일이 지속해서 오고 있고 &lt;span style=&quot;color: #333333;&quot;&gt;AWS Billing 청구서를 보니 점점 사비로는 감당하기 어려울 정도의 요금이 청구되고 있었다.&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;결국에 스냅샷을 저장하고 RDS 인스턴스를 삭제하기로 결정하였다.&lt;/span&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6ZYNS/btsf2mubzXu/PjNOqQtlBzJsykdZmJPer0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6ZYNS/btsf2mubzXu/PjNOqQtlBzJsykdZmJPer0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6ZYNS/btsf2mubzXu/PjNOqQtlBzJsykdZmJPer0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6ZYNS%2Fbtsf2mubzXu%2FPjNOqQtlBzJsykdZmJPer0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1318&quot; height=&quot;558&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;아래와 같이 삭제를 눌렀는데,&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsxMZ6/btsf43Ac62O/miW7J6SzrNKiO2Yl9NWwt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsxMZ6/btsf43Ac62O/miW7J6SzrNKiO2Yl9NWwt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsxMZ6/btsf43Ac62O/miW7J6SzrNKiO2Yl9NWwt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsxMZ6%2Fbtsf43Ac62O%2FmiW7J6SzrNKiO2Yl9NWwt1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1308&quot; height=&quot;335&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이슈 발생&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;다음과 같은 이슈가 발생하였다.&lt;br&gt;삭제 방지 옵션이 활성화되어 있어 곧바로 인스턴스 삭제를 할 수가 없었다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1HXch/btsfPDXTR6a/hTu2O1K6eV4cpMeAkGrD60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1HXch/btsfPDXTR6a/hTu2O1K6eV4cpMeAkGrD60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1HXch/btsfPDXTR6a/hTu2O1K6eV4cpMeAkGrD60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1HXch%2FbtsfPDXTR6a%2FhTu2O1K6eV4cpMeAkGrD60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;740&quot; height=&quot;294&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 해결&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;찾아보니, AWS는 데이터베이스가 예기치 않게 삭제되는 것을 방지하기 위해&lt;br&gt;인스턴스 구성에 '삭제 방지 활성화' 옵션을 제공하고 있고, 이 옵션을 비활성화로 변경해주어야 삭제가 가능하다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1315&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8S0xX/btsf2XHqi6j/qecHIlaGCI9CDN8aiaPQAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8S0xX/btsf2XHqi6j/qecHIlaGCI9CDN8aiaPQAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8S0xX/btsf2XHqi6j/qecHIlaGCI9CDN8aiaPQAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8S0xX%2Fbtsf2XHqi6j%2FqecHIlaGCI9CDN8aiaPQAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1315&quot; height=&quot;269&quot; data-origin-width=&quot;1315&quot; data-origin-height=&quot;269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;fepe 인스턴스의 수정을 눌러준 후&lt;br&gt;&amp;nbsp;&lt;br&gt;가장 아래에 위치한 &quot;삭제 방지 활성화&quot; 옵션을 꺼주도록 하자.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TvBdk/btsf6F6PrSX/r8QANRCAZuNzClh9ejd7Xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TvBdk/btsf6F6PrSX/r8QANRCAZuNzClh9ejd7Xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TvBdk/btsf6F6PrSX/r8QANRCAZuNzClh9ejd7Xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTvBdk%2Fbtsf6F6PrSX%2Fr8QANRCAZuNzClh9ejd7Xk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;812&quot; height=&quot;419&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;수정 예약은 &quot;즉시 적용&quot; 으로 바꾸어 가능한 빨리 비동기식으로 적용되도록 하자.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;616&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DLjJa/btsf6EmyvVC/60xvu7yKEmXf9XzOKGAuuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DLjJa/btsf6EmyvVC/60xvu7yKEmXf9XzOKGAuuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DLjJa/btsf6EmyvVC/60xvu7yKEmXf9XzOKGAuuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDLjJa%2Fbtsf6EmyvVC%2F60xvu7yKEmXf9XzOKGAuuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;743&quot; height=&quot;570&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;616&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;DB 최종 스냅샷은 꼭 생성하도록 하자!&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MfZm1/btsf6asjY8N/KqOR5smTU6dBZjLZa0UQi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MfZm1/btsf6asjY8N/KqOR5smTU6dBZjLZa0UQi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MfZm1/btsf6asjY8N/KqOR5smTU6dBZjLZa0UQi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMfZm1%2Fbtsf6asjY8N%2FKqOR5smTU6dBZjLZa0UQi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;680&quot; height=&quot;653&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;653&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;해결 완료!&lt;/p&gt;</description>
      <category># Tech Studies/AWS</category>
      <category>AWS RDS 삭제</category>
      <category>RDS 인스턴스 삭제</category>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/517</guid>
      <comments>https://dream-and-develop.tistory.com/517#entry517comment</comments>
      <pubDate>Tue, 16 May 2023 01:30:52 +0900</pubDate>
    </item>
    <item>
      <title>[AWS/Github CI/CD] Code Pipline을 이용한 Elastic Beanstalk 자동 배포</title>
      <link>https://dream-and-develop.tistory.com/510</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;1. Code Build&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oVzMD/btseG2RgjOT/bhL3Ky6IVj32vYwKwYQU61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oVzMD/btseG2RgjOT/bhL3Ky6IVj32vYwKwYQU61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oVzMD/btseG2RgjOT/bhL3Ky6IVj32vYwKwYQU61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoVzMD%2FbtseG2RgjOT%2FbhL3Ky6IVj32vYwKwYQU61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1053&quot; height=&quot;554&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;917&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/12kVR/btseIHMixFi/ucUOwFQKlfxcCyjKIw0Lz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/12kVR/btseIHMixFi/ucUOwFQKlfxcCyjKIw0Lz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/12kVR/btseIHMixFi/ucUOwFQKlfxcCyjKIw0Lz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F12kVR%2FbtseIHMixFi%2FucUOwFQKlfxcCyjKIw0Lz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;537&quot; height=&quot;917&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;917&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1063&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMoBfY/btseK2PWai4/a0FKKtLkughXjKv5IM2dLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMoBfY/btseK2PWai4/a0FKKtLkughXjKv5IM2dLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMoBfY/btseK2PWai4/a0FKKtLkughXjKv5IM2dLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMoBfY%2FbtseK2PWai4%2Fa0FKKtLkughXjKv5IM2dLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1063&quot; height=&quot;628&quot; data-origin-width=&quot;1063&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;766&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rppT3/btseHZGrOTn/A9ikl6FNpk3Hv409XDdivK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rppT3/btseHZGrOTn/A9ikl6FNpk3Hv409XDdivK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rppT3/btseHZGrOTn/A9ikl6FNpk3Hv409XDdivK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrppT3%2FbtseHZGrOTn%2FA9ikl6FNpk3Hv409XDdivK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;719&quot; height=&quot;766&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;553&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d81Cum/btseHO5YAsO/01r3nzOCAIgG8IdlSBnT81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d81Cum/btseHO5YAsO/01r3nzOCAIgG8IdlSBnT81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d81Cum/btseHO5YAsO/01r3nzOCAIgG8IdlSBnT81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd81Cum%2FbtseHO5YAsO%2F01r3nzOCAIgG8IdlSBnT81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;553&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;553&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIMoxK/btseHmWdk2P/qTPfDK3A1Xj7HuRsghQbw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIMoxK/btseHmWdk2P/qTPfDK3A1Xj7HuRsghQbw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIMoxK/btseHmWdk2P/qTPfDK3A1Xj7HuRsghQbw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIMoxK%2FbtseHmWdk2P%2FqTPfDK3A1Xj7HuRsghQbw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;978&quot; height=&quot;385&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;385&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;2. Pipeline&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv5uAh/btseAbVN98O/hF26GcugLjoJXTofym5k41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv5uAh/btseAbVN98O/hF26GcugLjoJXTofym5k41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv5uAh/btseAbVN98O/hF26GcugLjoJXTofym5k41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv5uAh%2FbtseAbVN98O%2FhF26GcugLjoJXTofym5k41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1254&quot; height=&quot;492&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1112&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diZAg1/btseBdlxKKN/v0djLuPOgnc44S884UHstk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diZAg1/btseBdlxKKN/v0djLuPOgnc44S884UHstk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diZAg1/btseBdlxKKN/v0djLuPOgnc44S884UHstk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiZAg1%2FbtseBdlxKKN%2Fv0djLuPOgnc44S884UHstk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1112&quot; height=&quot;687&quot; data-origin-width=&quot;1112&quot; data-origin-height=&quot;687&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1087&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ukfFy/btseGMAE7P5/J6HhfoxkXNtxRpJn4iHc21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ukfFy/btseGMAE7P5/J6HhfoxkXNtxRpJn4iHc21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ukfFy/btseGMAE7P5/J6HhfoxkXNtxRpJn4iHc21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FukfFy%2FbtseGMAE7P5%2FJ6HhfoxkXNtxRpJn4iHc21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1087&quot; height=&quot;528&quot; data-origin-width=&quot;1087&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chsNHc/btseIFAwQEG/TK7hCMPl5loeJGrJBl58r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chsNHc/btseIFAwQEG/TK7hCMPl5loeJGrJBl58r0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chsNHc/btseIFAwQEG/TK7hCMPl5loeJGrJBl58r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchsNHc%2FbtseIFAwQEG%2FTK7hCMPl5loeJGrJBl58r0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;877&quot; height=&quot;526&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J9VKe/btseBeSi8zs/W2yWPNaNF2L7DxbMgbSemK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J9VKe/btseBeSi8zs/W2yWPNaNF2L7DxbMgbSemK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J9VKe/btseBeSi8zs/W2yWPNaNF2L7DxbMgbSemK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ9VKe%2FbtseBeSi8zs%2FW2yWPNaNF2L7DxbMgbSemK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;860&quot; height=&quot;534&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;534&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA8dpm/btseDV6gtWM/2mSQ89e0NpMK3NiMzD0Kr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA8dpm/btseDV6gtWM/2mSQ89e0NpMK3NiMzD0Kr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA8dpm/btseDV6gtWM/2mSQ89e0NpMK3NiMzD0Kr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA8dpm%2FbtseDV6gtWM%2F2mSQ89e0NpMK3NiMzD0Kr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;585&quot; height=&quot;473&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/91HDv/btseIIKLNIN/8ZyA1xPppK164SiLlHOlJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/91HDv/btseIIKLNIN/8ZyA1xPppK164SiLlHOlJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/91HDv/btseIIKLNIN/8ZyA1xPppK164SiLlHOlJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F91HDv%2FbtseIIKLNIN%2F8ZyA1xPppK164SiLlHOlJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;570&quot; height=&quot;549&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UrqEe/btseH0EVHDk/QNXjDWqEaed8bBqwyyzOPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UrqEe/btseH0EVHDk/QNXjDWqEaed8bBqwyyzOPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UrqEe/btseH0EVHDk/QNXjDWqEaed8bBqwyyzOPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUrqEe%2FbtseH0EVHDk%2FQNXjDWqEaed8bBqwyyzOPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;560&quot; height=&quot;810&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;894&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qV2EF/btseKe3JsZI/IUo5bHyURoKncXEVIvDvq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qV2EF/btseKe3JsZI/IUo5bHyURoKncXEVIvDvq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qV2EF/btseKe3JsZI/IUo5bHyURoKncXEVIvDvq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqV2EF%2FbtseKe3JsZI%2FIUo5bHyURoKncXEVIvDvq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;568&quot; height=&quot;894&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;894&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd3swu/btseKb60K1S/VGZgilC3GCKVbeDNYPQLUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd3swu/btseKb60K1S/VGZgilC3GCKVbeDNYPQLUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd3swu/btseKb60K1S/VGZgilC3GCKVbeDNYPQLUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd3swu%2FbtseKb60K1S%2FVGZgilC3GCKVbeDNYPQLUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;790&quot; height=&quot;769&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;769&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cva72G/btseBdeMx8k/VxgwkCKYwMHYmRFaWH0jd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cva72G/btseBdeMx8k/VxgwkCKYwMHYmRFaWH0jd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cva72G/btseBdeMx8k/VxgwkCKYwMHYmRFaWH0jd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcva72G%2FbtseBdeMx8k%2FVxgwkCKYwMHYmRFaWH0jd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;783&quot; height=&quot;219&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d601nA/btseGEJIyUO/DXoCKjS8iljFyKdQKmzXek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d601nA/btseGEJIyUO/DXoCKjS8iljFyKdQKmzXek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d601nA/btseGEJIyUO/DXoCKjS8iljFyKdQKmzXek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd601nA%2FbtseGEJIyUO%2FDXoCKjS8iljFyKdQKmzXek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;675&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwp9W9/btseIFUPRAO/75kJn32g3JZ74Hu6Fvx8W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwp9W9/btseIFUPRAO/75kJn32g3JZ74Hu6Fvx8W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwp9W9/btseIFUPRAO/75kJn32g3JZ74Hu6Fvx8W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdwp9W9%2FbtseIFUPRAO%2F75kJn32g3JZ74Hu6Fvx8W1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1044&quot; height=&quot;439&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;439&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAQtAj/btseCEb5lbq/FAyiKScWHxMFTPK5K3Awak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAQtAj/btseCEb5lbq/FAyiKScWHxMFTPK5K3Awak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAQtAj/btseCEb5lbq/FAyiKScWHxMFTPK5K3Awak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAQtAj%2FbtseCEb5lbq%2FFAyiKScWHxMFTPK5K3Awak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;822&quot; height=&quot;580&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cShQKx/btseHZeXJ39/dJTwjG1IaoO8CuwW4lccAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cShQKx/btseHZeXJ39/dJTwjG1IaoO8CuwW4lccAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cShQKx/btseHZeXJ39/dJTwjG1IaoO8CuwW4lccAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcShQKx%2FbtseHZeXJ39%2FdJTwjG1IaoO8CuwW4lccAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1117&quot; height=&quot;680&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1088&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhJQWo/btseF8YB446/bwYqsh1k2a4VoHoJoQ1zLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhJQWo/btseF8YB446/bwYqsh1k2a4VoHoJoQ1zLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhJQWo/btseF8YB446/bwYqsh1k2a4VoHoJoQ1zLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhJQWo%2FbtseF8YB446%2FbwYqsh1k2a4VoHoJoQ1zLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1088&quot; height=&quot;738&quot; data-origin-width=&quot;1088&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;788&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEhPaq/btseGaIZECE/kFg0Adg46E9F6xwNQa51r1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEhPaq/btseGaIZECE/kFg0Adg46E9F6xwNQa51r1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEhPaq/btseGaIZECE/kFg0Adg46E9F6xwNQa51r1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEhPaq%2FbtseGaIZECE%2FkFg0Adg46E9F6xwNQa51r1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;978&quot; height=&quot;788&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;788&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1219&quot; data-origin-height=&quot;976&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nERdU/btseHkKtVC4/pYy9E2PufFhljy9ZVJoXPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nERdU/btseHkKtVC4/pYy9E2PufFhljy9ZVJoXPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nERdU/btseHkKtVC4/pYy9E2PufFhljy9ZVJoXPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnERdU%2FbtseHkKtVC4%2FpYy9E2PufFhljy9ZVJoXPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1219&quot; height=&quot;976&quot; data-origin-width=&quot;1219&quot; data-origin-height=&quot;976&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1jf7I/btseGbnhnwY/pr1ltR28sSUIQ9vsCo0YsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1jf7I/btseGbnhnwY/pr1ltR28sSUIQ9vsCo0YsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1jf7I/btseGbnhnwY/pr1ltR28sSUIQ9vsCo0YsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1jf7I%2FbtseGbnhnwY%2Fpr1ltR28sSUIQ9vsCo0YsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;962&quot; height=&quot;728&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;728&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;759&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UbCko/btseHQbhji6/813vZVhmyC9zi1rZkpUAsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UbCko/btseHQbhji6/813vZVhmyC9zi1rZkpUAsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UbCko/btseHQbhji6/813vZVhmyC9zi1rZkpUAsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUbCko%2FbtseHQbhji6%2F813vZVhmyC9zi1rZkpUAsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;914&quot; height=&quot;759&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RfH7M/btseF9b9HCv/GDNImHtmskwdZKwTAsrV01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RfH7M/btseF9b9HCv/GDNImHtmskwdZKwTAsrV01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RfH7M/btseF9b9HCv/GDNImHtmskwdZKwTAsrV01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRfH7M%2FbtseF9b9HCv%2FGDNImHtmskwdZKwTAsrV01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;945&quot; height=&quot;363&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;363&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/exPYFF/btseCFvnjr2/ZBvSAxU2OHev4EErqu7HV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/exPYFF/btseCFvnjr2/ZBvSAxU2OHev4EErqu7HV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/exPYFF/btseCFvnjr2/ZBvSAxU2OHev4EErqu7HV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FexPYFF%2FbtseCFvnjr2%2FZBvSAxU2OHev4EErqu7HV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;942&quot; height=&quot;822&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;822&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m3ElT/btseKc50mwO/5uqPfxswzYenbYhR3nFev0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m3ElT/btseKc50mwO/5uqPfxswzYenbYhR3nFev0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m3ElT/btseKc50mwO/5uqPfxswzYenbYhR3nFev0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm3ElT%2FbtseKc50mwO%2F5uqPfxswzYenbYhR3nFev0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;758&quot; height=&quot;227&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;227&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;723&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceYiYi/btseG4nZydw/3ez82cd9DvBvwI7WvjRF0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceYiYi/btseG4nZydw/3ez82cd9DvBvwI7WvjRF0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceYiYi/btseG4nZydw/3ez82cd9DvBvwI7WvjRF0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceYiYi%2FbtseG4nZydw%2F3ez82cd9DvBvwI7WvjRF0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;942&quot; height=&quot;723&quot; data-origin-width=&quot;942&quot; data-origin-height=&quot;723&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WJqpz/btseHnOjV0n/RDcx42EdYk6E0Ks0dvwtFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WJqpz/btseHnOjV0n/RDcx42EdYk6E0Ks0dvwtFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WJqpz/btseHnOjV0n/RDcx42EdYk6E0Ks0dvwtFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWJqpz%2FbtseHnOjV0n%2FRDcx42EdYk6E0Ks0dvwtFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1212&quot; height=&quot;460&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;647&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beHPKg/btseGbVrfvq/H8Ub8IbpNKhCn7vGpdakoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beHPKg/btseGbVrfvq/H8Ub8IbpNKhCn7vGpdakoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beHPKg/btseGbVrfvq/H8Ub8IbpNKhCn7vGpdakoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeHPKg%2FbtseGbVrfvq%2FH8Ub8IbpNKhCn7vGpdakoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;954&quot; height=&quot;647&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;647&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;819&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cA0ghM/btseK7XZh9K/d8HkTsumkm4xvA0OloeKi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cA0ghM/btseK7XZh9K/d8HkTsumkm4xvA0OloeKi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cA0ghM/btseK7XZh9K/d8HkTsumkm4xvA0OloeKi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcA0ghM%2FbtseK7XZh9K%2Fd8HkTsumkm4xvA0OloeKi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;712&quot; height=&quot;819&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;819&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;a href=&quot;https://potato-yong.tistory.com/80&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://potato-yong.tistory.com/80&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[CI/CD] Git과 연동하여 AWS Pipeline 생성하기&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;이번에 해볼 실습은 AWS에서 제공하고 있는 실습이다. aws.amazon.com/ko/getting-started/hands-on/create-continuous-delivery-pipeline/ AWS에서 지속적 전달 파이프라인을 생성 아래의 다이어그램은 이 자습서에서 사&quot; data-og-host=&quot;potato-yong.tistory.com&quot; data-og-source-url=&quot;https://potato-yong.tistory.com/80&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/b5hz4h/hySz750x4e/AAAAAAAAAAAAAAAAAAAAAGOUIKLt6CPSW9Tqa9PB_wSoXHIO1XoIiI8GJ2te0ZdH/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=uFBuPYnqxquITjVXZzRkpdlkPR8%3D&quot; data-og-url=&quot;https://potato-yong.tistory.com/80&quot;&gt;&lt;a href=&quot;https://potato-yong.tistory.com/80&quot; target=&quot;_blank&quot; data-source-url=&quot;https://potato-yong.tistory.com/80&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/b5hz4h/hySz750x4e/AAAAAAAAAAAAAAAAAAAAAGOUIKLt6CPSW9Tqa9PB_wSoXHIO1XoIiI8GJ2te0ZdH/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=uFBuPYnqxquITjVXZzRkpdlkPR8%3D')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;[CI/CD] Git과 연동하여 AWS Pipeline 생성하기&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;이번에 해볼 실습은 AWS에서 제공하고 있는 실습이다. aws.amazon.com/ko/getting-started/hands-on/create-continuous-delivery-pipeline/ AWS에서 지속적 전달 파이프라인을 생성 아래의 다이어그램은 이 자습서에서 사&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;potato-yong.tistory.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;br&gt;&amp;nbsp;&lt;br&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/blogs/deploying-a-nodejs-application-from-github-to-aws-elastic-beanstalk-and-creating-a-ci-cd-aws-codepipeline/&quot; target=&quot;_self&quot;&gt;&lt;span&gt;https://www.red-gate.com/simple-talk/blogs/deploying-a-nodejs-application-from-github-to-aws-elastic-beanstalk-and-creating-a-ci-cd-aws-codepipeline/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Deploying a NodeJS application from GitHub to AWS Elastic Beanstalk and creating a CI/CD AWS CodePipeline. - Simple Talk&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Goals In this article I will assist you to deploy a NodeJS application from GitHub into AWS Elastic Beanstalk and Building a CI/CD pipeline. What is&quot; data-og-host=&quot;www.red-gate.com&quot; data-og-source-url=&quot;https://www.red-gate.com/simple-talk/blogs/deploying-a-nodejs-application-from-github-to-aws-elastic-beanstalk-and-creating-a-ci-cd-aws-codepipeline/&quot; data-og-url=&quot;https://www.red-gate.com/simple-talk/blogs/deploying-a-nodejs-application-from-github-to-aws-elastic-beanstalk-and-creating-a-ci-cd-aws-codepipeline/&quot;&gt;&lt;a href=&quot;https://www.red-gate.com/simple-talk/blogs/deploying-a-nodejs-application-from-github-to-aws-elastic-beanstalk-and-creating-a-ci-cd-aws-codepipeline/&quot; target=&quot;_blank&quot; data-source-url=&quot;https://www.red-gate.com/simple-talk/blogs/deploying-a-nodejs-application-from-github-to-aws-elastic-beanstalk-and-creating-a-ci-cd-aws-codepipeline/&quot;&gt;&lt;div class=&quot;og-image&quot;&gt;&lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;Deploying a NodeJS application from GitHub to AWS Elastic Beanstalk and creating a CI/CD AWS CodePipeline. - Simple Talk&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;Goals In this article I will assist you to deploy a NodeJS application from GitHub into AWS Elastic Beanstalk and Building a CI/CD pipeline. What is&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;www.red-gate.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;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;a href=&quot;https://velog.io/@ovovvv/AWS-Elastic-Beanstalk%EC%97%90-Node.js-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%98%AC%EB%A6%AC%EA%B8%B0&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://velog.io/@ovovvv/AWS-Elastic-Beanstalk%EC%97%90-Node.js-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%98%AC%EB%A6%AC%EA%B8%B0&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;AWS Elastic Beanstalk에 Node.js 프로젝트 올리기&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;vv&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@ovovvv/AWS-Elastic-Beanstalk%EC%97%90-Node.js-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%98%AC%EB%A6%AC%EA%B8%B0&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/diRs9H/hySAb8abgx/AAAAAAAAAAAAAAAAAAAAAPFyb8-9H_S4-ZGKOF8OJUlCy169BxPC7U6w1hzeLjyv/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=9TVrraBGNPZ4BwbYlCsEsBu%2BxYs%3D&quot; data-og-url=&quot;https://velog.io/@ovovvv/AWS-Elastic-Beanstalk에-Node.js-프로젝트-올리기&quot;&gt;&lt;a href=&quot;https://velog.io/@ovovvv/AWS-Elastic-Beanstalk에-Node.js-프로젝트-올리기&quot; target=&quot;_blank&quot; data-source-url=&quot;https://velog.io/@ovovvv/AWS-Elastic-Beanstalk%EC%97%90-Node.js-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%98%AC%EB%A6%AC%EA%B8%B0&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/diRs9H/hySAb8abgx/AAAAAAAAAAAAAAAAAAAAAPFyb8-9H_S4-ZGKOF8OJUlCy169BxPC7U6w1hzeLjyv/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1764514799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=9TVrraBGNPZ4BwbYlCsEsBu%2BxYs%3D')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;AWS Elastic Beanstalk에 Node.js 프로젝트 올리기&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;vv&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;velog.io&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;</description>
      <category># Tech Studies/AWS</category>
      <author>dream_for</author>
      <guid isPermaLink="true">https://dream-and-develop.tistory.com/510</guid>
      <comments>https://dream-and-develop.tistory.com/510#entry510comment</comments>
      <pubDate>Wed, 10 May 2023 18:03:27 +0900</pubDate>
    </item>
  </channel>
</rss>