<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>EEYatHo 앱 깎는 이야기</title>
    <link>https://eeyatho.tistory.com/</link>
    <description>앱 깎는 장인이 되고싶은 EEYatHo 입니다.
let blog = Blog(type: .appDevelop)</description>
    <language>ko</language>
    <pubDate>Wed, 20 May 2026 07:41:35 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>EEYatHo</managingEditor>
    <image>
      <title>EEYatHo 앱 깎는 이야기</title>
      <url>https://tistory1.daumcdn.net/tistory/4530473/attach/44369a7e37004860abb6535763ef2ac7</url>
      <link>https://eeyatho.tistory.com</link>
    </image>
    <item>
      <title>2025 서울 바베큐 페스타 후기</title>
      <link>https://eeyatho.tistory.com/312</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2025 서울 바베큐 페스타에 다녀왔어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;내일(10/26)에 가시는 분들 도움되실까봐 후딱 남겨요!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기왕이면 맹꽁이 버스를 타려했는데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;행사장소인 노을캠핑장으로 가는 맹꽁이 버스는 주차장에서만 운행하더라구요..?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;퀸즈스마일 앱으로 셔틀버스 예매하고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;월드컵경기장 역으로 출발했습니다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(셔틀버스 인당 3000원. 맹꽁이랑 달리 강아지 추가 요금 없음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDETZj/dJMb9OAI7sZ/SqFE0Z1n1kd7SjzP2ugP8k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDETZj/dJMb9OAI7sZ/SqFE0Z1n1kd7SjzP2ugP8k/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-06 001.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDETZj/dJMb9OAI7sZ/SqFE0Z1n1kd7SjzP2ugP8k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDETZj%2FdJMb9OAI7sZ%2FSqFE0Z1n1kd7SjzP2ugP8k%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sSDWl/dJMb9gRs0nW/JF9zysk0WYmRpo6kcrQ4l1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sSDWl/dJMb9gRs0nW/JF9zysk0WYmRpo6kcrQ4l1/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-07 002.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sSDWl/dJMb9gRs0nW/JF9zysk0WYmRpo6kcrQ4l1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsSDWl%2FdJMb9gRs0nW%2FJF9zysk0WYmRpo6kcrQ4l1%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biAH15/dJMb9gRs0nV/efzeTzM5umaIMXhSFQZvB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biAH15/dJMb9gRs0nV/efzeTzM5umaIMXhSFQZvB1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-07 003.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biAH15/dJMb9gRs0nV/efzeTzM5umaIMXhSFQZvB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiAH15%2FdJMb9gRs0nV%2FefzeTzM5umaIMXhSFQZvB1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/If9Fm/dJMb9OAI7sY/S262T7Mm6Kj4WumVBgMoO1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/If9Fm/dJMb9OAI7sY/S262T7Mm6Kj4WumVBgMoO1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-07 004.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/If9Fm/dJMb9OAI7sY/S262T7Mm6Kj4WumVBgMoO1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIf9Fm%2FdJMb9OAI7sY%2FS262T7Mm6Kj4WumVBgMoO1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wbrGM/dJMb9LjHY6n/RKu2wcZfx6AhOLUcl7yZFk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wbrGM/dJMb9LjHY6n/RKu2wcZfx6AhOLUcl7yZFk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-08 005.jpeg&quot; style=&quot;width: 32.5581%; margin-top: 10px;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wbrGM/dJMb9LjHY6n/RKu2wcZfx6AhOLUcl7yZFk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwbrGM%2FdJMb9LjHY6n%2FRKu2wcZfx6AhOLUcl7yZFk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;월드컵경기장역에서 셔틀버스 타는 곳까지.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;약 10분정도 걸어갔고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;셔틀버스 타고 7분정도 더 가서,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;행사장소 근처인 월드컵파크골프장에 내렸어요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca1KKt/dJMb88lAPYA/Tv7Mey6oYkbf7Wl4tWLZNk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca1KKt/dJMb88lAPYA/Tv7Mey6oYkbf7Wl4tWLZNk/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-09 007.jpeg&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca1KKt/dJMb88lAPYA/Tv7Mey6oYkbf7Wl4tWLZNk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca1KKt%2FdJMb88lAPYA%2FTv7Mey6oYkbf7Wl4tWLZNk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BegYt/dJMb88lAPYB/7v0khyrEX68iSloUV9aAB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BegYt/dJMb88lAPYB/7v0khyrEX68iSloUV9aAB1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-10 009.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BegYt/dJMb88lAPYB/7v0khyrEX68iSloUV9aAB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBegYt%2FdJMb88lAPYB%2F7v0khyrEX68iSloUV9aAB1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9yhI3/dJMb9N9Fbop/PPDEbqIFRXUdlG1ngE9yx0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9yhI3/dJMb9N9Fbop/PPDEbqIFRXUdlG1ngE9yx0/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-09 008.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9yhI3/dJMb9N9Fbop/PPDEbqIFRXUdlG1ngE9yx0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9yhI3%2FdJMb9N9Fbop%2FPPDEbqIFRXUdlG1ngE9yx0%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;셔틀버스 내리자마자 산 위라 그런지&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;공기나 뷰가 모두 좋았어요!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-10 010.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHPZQV/dJMb87tseSV/ct60FkKORsyWQrZv3k1HWK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHPZQV/dJMb87tseSV/ct60FkKORsyWQrZv3k1HWK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHPZQV/dJMb87tseSV/ct60FkKORsyWQrZv3k1HWK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHPZQV%2FdJMb87tseSV%2Fct60FkKORsyWQrZv3k1HWK%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;459&quot; height=&quot;612&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-10 010.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 산책로 따라 조금만 더(5분?)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;걸어 들어가면 행사장이 나와요~&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;날씨 좋고, 탁 트인 곳에, 사람들 적당히 왁자지껄&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;고기 향기도 솔솔나니 기분이 너무 좋아지더라구요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KKkze/dJMb8WZLx9b/Z6k7ke0kiq7xgK0Ykhh7dk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KKkze/dJMb8WZLx9b/Z6k7ke0kiq7xgK0Ykhh7dk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;819&quot; data-origin-height=&quot;888&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-11 011.jpeg&quot; style=&quot;width: 54.5102%; margin-right: 10px;&quot; data-widthpercent=&quot;55.15&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KKkze/dJMb8WZLx9b/Z6k7ke0kiq7xgK0Ykhh7dk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKKkze%2FdJMb8WZLx9b%2FZ6k7ke0kiq7xgK0Ykhh7dk%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;819&quot; height=&quot;888&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qepxS/dJMb8WZLx88/jVT3051mGbh3wujhUU3Q0K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qepxS/dJMb8WZLx88/jVT3051mGbh3wujhUU3Q0K/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-11 012.jpeg&quot; data-widthpercent=&quot;44.85&quot; style=&quot;width: 44.327%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qepxS/dJMb8WZLx88/jVT3051mGbh3wujhUU3Q0K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqepxS%2FdJMb8WZLx88%2FjVT3051mGbh3wujhUU3Q0K%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;나무 평상이나, 드럼통 테이블이 있어서 몸만왔는데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;피크닉 매트를 무료로 대여해주시더라구요?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;가까이서 버스킹 즐기려고 대여했어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이름이랑 전화번호 쓰고 수령하고, 2시간 내에 반납.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;혹은 그냥 와서 2시간씩 연장해도 됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;크기는 성인 둘이 앉는 정도에요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(눕는건 불가)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6LgPs/dJMb9OHuh6e/yYFnH09BZsQtrtsgJMFyjk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6LgPs/dJMb9OHuh6e/yYFnH09BZsQtrtsgJMFyjk/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-12 013.jpeg&quot; style=&quot;width: 63.2558%; margin-right: 10px;&quot; data-widthpercent=&quot;64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6LgPs/dJMb9OHuh6e/yYFnH09BZsQtrtsgJMFyjk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6LgPs%2FdJMb9OHuh6e%2FyYFnH09BZsQtrtsgJMFyjk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM3vet/dJMb9MbP299/b2O2egHwwdnJhBz656sw11/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM3vet/dJMb9MbP299/b2O2egHwwdnJhBz656sw11/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-13 016.jpeg&quot; style=&quot;width: 35.5814%;&quot; data-widthpercent=&quot;36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM3vet/dJMb9MbP299/b2O2egHwwdnJhBz656sw11/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM3vet%2FdJMb9MbP299%2Fb2O2egHwwdnJhBz656sw11%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;3024&quot; height=&quot;4032&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/pFQu2/dJMb9MbP295/3gOX1uHxBifTpDcX40vBW1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pFQu2/dJMb9MbP295/3gOX1uHxBifTpDcX40vBW1/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-12 014.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pFQu2/dJMb9MbP295/3gOX1uHxBifTpDcX40vBW1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpFQu2%2FdJMb9MbP295%2F3gOX1uHxBifTpDcX40vBW1%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dC7HJx/dJMb8WZLx9x/dayIS6TGK7ArcKPtFDm9dK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dC7HJx/dJMb8WZLx9x/dayIS6TGK7ArcKPtFDm9dK/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-12 015.jpeg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dC7HJx/dJMb8WZLx9x/dayIS6TGK7ArcKPtFDm9dK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdC7HJx%2FdJMb8WZLx9x%2FdayIS6TGK7ArcKPtFDm9dK%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;음식은 중간에 있는 키오스크에서 결제하고, 가게들에서 음식 수령하는 구조에요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;퀸즈스마일 앱에서 고기 3대장 음식들 예약 되던데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;직접와서 보고 고르고 싶어서 그냥 왔어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;왼쪽이 주먹고기 (9000원)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오른쪽이 소시지 (4000원), 껍데기 (4000원)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;먹고싶은거 고르다보니 전부 뭉텅에서 샀네요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;맛 최고  &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;불맛 제대로  &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3대장 가게들 가격보다 훨씬 저렴해서 놀랐는데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;맛도 너무 만족스러웠어요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; 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;KakaoTalk_Photo_2025-10-25-17-09-44.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgQpPu/dJMb9fLM1n0/VnQKSpP4CUHX7iQrHdrje1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgQpPu/dJMb9fLM1n0/VnQKSpP4CUHX7iQrHdrje1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgQpPu/dJMb9fLM1n0/VnQKSpP4CUHX7iQrHdrje1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgQpPu%2FdJMb9fLM1n0%2FVnQKSpP4CUHX7iQrHdrje1%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;508&quot; height=&quot;381&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-17-09-44.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3대장 가게 메뉴는 라면도 6000원 이던데,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;직접 와보니 2500원도 있네요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다들 느끼한 고기 드시다보니 라면 인기 폭발~&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kzQ06/dJMb9OAI7Wo/uVRErVeDU5LMFKSKFFa3L1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kzQ06/dJMb9OAI7Wo/uVRErVeDU5LMFKSKFFa3L1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-14 018.jpeg&quot; style=&quot;width: 38.1168%; margin-right: 10px;&quot; data-widthpercent=&quot;39.02&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kzQ06/dJMb9OAI7Wo/uVRErVeDU5LMFKSKFFa3L1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkzQ06%2FdJMb9OAI7Wo%2FuVRErVeDU5LMFKSKFFa3L1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/svdDb/dJMb9OAI7Wp/RVJZETS4MKwIpi7XUYNzrk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/svdDb/dJMb9OAI7Wp/RVJZETS4MKwIpi7XUYNzrk/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-15 019.jpeg&quot; data-widthpercent=&quot;21.95&quot; style=&quot;width: 21.4407%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/svdDb/dJMb9OAI7Wp/RVJZETS4MKwIpi7XUYNzrk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsvdDb%2FdJMb9OAI7Wp%2FRVJZETS4MKwIpi7XUYNzrk%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKEprs/dJMb9YiXrOn/O04EKxSxM4SJQA0KB3AOx0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKEprs/dJMb9YiXrOn/O04EKxSxM4SJQA0KB3AOx0/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-16 021.jpeg&quot; style=&quot;width: 38.1168%;&quot; data-widthpercent=&quot;39.03&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKEprs/dJMb9YiXrOn/O04EKxSxM4SJQA0KB3AOx0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKEprs%2FdJMb9YiXrOn%2FO04EKxSxM4SJQA0KB3AOx0%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;버스킹 보고 들으면서 여유롭게 먹었습니다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;배도 채웠겠다&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;축제 규모가 워낙 크다보니, 여기저기 돌아다니기 시작했어요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-15 020.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPDeja/dJMb8Vs1pWQ/GEgWrQW6VqwRfDoqdRbkC1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPDeja/dJMb8Vs1pWQ/GEgWrQW6VqwRfDoqdRbkC1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPDeja/dJMb8Vs1pWQ/GEgWrQW6VqwRfDoqdRbkC1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPDeja%2FdJMb8Vs1pWQ%2FGEgWrQW6VqwRfDoqdRbkC1%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;515&quot; height=&quot;386&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-15 020.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;K-바베큐로드 가운데 부분.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;30분 간격으로 한우 시식회도 열리더라구요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;시간마다 메뉴가 달랐어요, 불고기, 채끝, 꼬치 등&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;시간마다 50명, 30명 등 제한&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;특정 시간은 게임을 진행해서 사회자를 이겨야 먹을 수 있었어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(왜 사진 안찍었지 ㅠ)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저희는 13시에 갔고, 인스타 팔로우 &amp;amp; 카톡 친추하고 불고기 얻어먹었어요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; 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;KakaoTalk_Photo_2025-10-25-16-41-16 022.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IABt4/dJMb89SldXe/bobQA5C6YQT2F8YLmWIIV0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IABt4/dJMb89SldXe/bobQA5C6YQT2F8YLmWIIV0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IABt4/dJMb89SldXe/bobQA5C6YQT2F8YLmWIIV0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIABt4%2FdJMb89SldXe%2FbobQA5C6YQT2F8YLmWIIV0%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;354&quot; height=&quot;472&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-16 022.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 외에도&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;1. 인스타 작성시 카카오 프렌즈에서 스티커카드, 마스크 팩을 받을 수 있었고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;2. 인스타 팔로우시, 비락 식혜 (오리지널 or 제로)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;3. 설문조사 작성시 무알콜 맥주&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;를 받을 수 있었어요~&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;정말 퍼주는 축제 같았어요  &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(사진 좀더 많이 찍을걸..)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DiPTY/dJMb9MbP3lC/wJQYhHO68416Uynwzffn8K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DiPTY/dJMb9MbP3lC/wJQYhHO68416Uynwzffn8K/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-19 029.jpeg&quot; style=&quot;width: 38.1168%; margin-right: 10px;&quot; data-widthpercent=&quot;39.02&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DiPTY/dJMb9MbP3lC/wJQYhHO68416Uynwzffn8K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDiPTY%2FdJMb9MbP3lC%2FwJQYhHO68416Uynwzffn8K%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUn3fv/dJMb9OAI7ZH/j2dL8p5JP7WmIi78BHfIWk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUn3fv/dJMb9OAI7ZH/j2dL8p5JP7WmIi78BHfIWk/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-20 030.jpeg&quot; data-widthpercent=&quot;21.95&quot; style=&quot;width: 21.4407%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUn3fv/dJMb9OAI7ZH/j2dL8p5JP7WmIi78BHfIWk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUn3fv%2FdJMb9OAI7ZH%2Fj2dL8p5JP7WmIi78BHfIWk%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM8cjx/dJMb9Qeft15/mLSA6WktU7LHDagzloKQl1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM8cjx/dJMb9Qeft15/mLSA6WktU7LHDagzloKQl1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-40-35 001.jpeg&quot; style=&quot;width: 38.1168%;&quot; data-widthpercent=&quot;39.03&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM8cjx/dJMb9Qeft15/mLSA6WktU7LHDagzloKQl1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM8cjx%2FdJMb9Qeft15%2FmLSA6WktU7LHDagzloKQl1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;심지어 노을라운지 내, 노을야외도서관 이라는 곳에서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;야외 독서 키트(?)를 2시간씩 대여 해주시더라구요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이름과 전화번호만 쓰고 2시간 대여하고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;담요와 좌식의자 덕에 정말 편하고 여유롭게 독서도 하고 왔어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;주변에 가족단위의 애들과 반려견도 많고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;야외에서 편한 자세로 힐링되는 책을 보고있는데 이게 다 공짜라고?&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 누려도 되나 싶었습니다..&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 1.5권정도 읽다가 다시 일어났어요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHJJXw/dJMb9bWVmd0/UjrAImiDQopKgWZV123Uh0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHJJXw/dJMb9bWVmd0/UjrAImiDQopKgWZV123Uh0/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-17 024.jpeg&quot; style=&quot;width: 38.1168%; margin-right: 10px;&quot; data-widthpercent=&quot;39.02&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHJJXw/dJMb9bWVmd0/UjrAImiDQopKgWZV123Uh0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHJJXw%2FdJMb9bWVmd0%2FUjrAImiDQopKgWZV123Uh0%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7gOwo/dJMb9fLM1xq/LqK51eeEpNoskYzsZuWzG1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7gOwo/dJMb9fLM1xq/LqK51eeEpNoskYzsZuWzG1/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-19 027.jpeg&quot; style=&quot;width: 21.4407%; margin-right: 10px;&quot; data-widthpercent=&quot;21.95&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7gOwo/dJMb9fLM1xq/LqK51eeEpNoskYzsZuWzG1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7gOwo%2FdJMb9fLM1xq%2FLqK51eeEpNoskYzsZuWzG1%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgICaD/dJMb8Z91GbF/mpCNkQNQaKk7qWeN2zkmj0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgICaD/dJMb8Z91GbF/mpCNkQNQaKk7qWeN2zkmj0/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-18 025.jpeg&quot; data-widthpercent=&quot;39.03&quot; style=&quot;width: 38.1168%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgICaD/dJMb8Z91GbF/mpCNkQNQaKk7qWeN2zkmj0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgICaD%2FdJMb8Z91GbF%2FmpCNkQNQaKk7qWeN2zkmj0%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;노을 라운지도 넓어서&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;커피나 견과류, 여러 농수산물 파는 곳도 있었고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;6.69초(bbq)를 맞춰서 타이머를 멈춰야하는 미니게임도 할 수 있었어요.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저희는 둘다 0.1초 차이로 실패.. (6.59, 6.79)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-17 023.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HzvTR/dJMb9fLM1xp/3sbRzWX0bM8PhUCv8ugZK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HzvTR/dJMb9fLM1xp/3sbRzWX0bM8PhUCv8ugZK0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HzvTR/dJMb9fLM1xp/3sbRzWX0bM8PhUCv8ugZK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHzvTR%2FdJMb9fLM1xp%2F3sbRzWX0bM8PhUCv8ugZK0%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;631&quot; height=&quot;473&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-41-17 023.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;서울 고깃집 3대장 구역이에요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;고기 굽는 연기 모락모락나고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다양한 사람들이 고기와 술을 즐기는 모습&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;대충 다 본거같고~&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;저녁되면 사람도 많아질거고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;좀 쌀쌀해서 얼른 튀튀&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHqTi1/dJMb9Xj29n5/wQ82MAgvxqkdRXroBb7y2k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHqTi1/dJMb9Xj29n5/wQ82MAgvxqkdRXroBb7y2k/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-40-36 003.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHqTi1/dJMb9Xj29n5/wQ82MAgvxqkdRXroBb7y2k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHqTi1%2FdJMb9Xj29n5%2FwQ82MAgvxqkdRXroBb7y2k%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wHju1/dJMb9i2OGdb/tniG3SvPI5lHNGPVj0a2Dk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wHju1/dJMb9i2OGdb/tniG3SvPI5lHNGPVj0a2Dk/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-40-37 005.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wHju1/dJMb9i2OGdb/tniG3SvPI5lHNGPVj0a2Dk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwHju1%2FdJMb9i2OGdb%2FtniG3SvPI5lHNGPVj0a2Dk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xX4q9/dJMb9i2OGdd/1UT5l0WvaRnL1fz2QgTEl1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xX4q9/dJMb9i2OGdd/1UT5l0WvaRnL1fz2QgTEl1/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-40-37 007.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xX4q9/dJMb9i2OGdd/1UT5l0WvaRnL1fz2QgTEl1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxX4q9%2FdJMb9i2OGdd%2F1UT5l0WvaRnL1fz2QgTEl1%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;셔틀버스 타러 가는 길에,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;지도에 명칭되지 않은 넓은 부지가 있어서 들어가봤더니&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;웨딩촬영 성지였네요 ㄷㄷ&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;무려 8커플이나 웨딩촬영을 하고 있었습니다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqmuPp/dJMb9OAI8c5/44QKJtsiYVKpFoNmxqx2Lk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqmuPp/dJMb9OAI8c5/44QKJtsiYVKpFoNmxqx2Lk/img.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-40-38 008.jpeg&quot; style=&quot;width: 63.2558%; margin-right: 10px;&quot; data-widthpercent=&quot;64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqmuPp/dJMb9OAI8c5/44QKJtsiYVKpFoNmxqx2Lk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqmuPp%2FdJMb9OAI8c5%2F44QKJtsiYVKpFoNmxqx2Lk%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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCBMRe/dJMb9gRs0L6/NsHHULKgyYj0CODkZ2e6tk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCBMRe/dJMb9gRs0L6/NsHHULKgyYj0CODkZ2e6tk/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2025-10-25-16-40-38 009.jpeg&quot; data-widthpercent=&quot;36&quot; style=&quot;width: 35.5814%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCBMRe/dJMb9gRs0L6/NsHHULKgyYj0CODkZ2e6tk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCBMRe%2FdJMb9gRs0L6%2FNsHHULKgyYj0CODkZ2e6tk%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;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;셔틀버스 똑같이 타서 내려오고,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다시역으로 걸어가는 중,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;큰 시장 건물이 보여 들어갔어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;아니 근데 저 회를 만원에 파시더라구요?!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;집에서 위스키랑 먹으려고 사왔어요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;오늘 저녁에 해치울 예정 ㅎ&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 이만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;즐거운 주말 되세요!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;!-- Nemo --&gt;&lt;/p&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px; margin: 2px 0; padding-left: 12px; padding-right: 12px;&quot;&gt;&lt;!-- 앱 로고 및 설정 --&gt; &lt;img style=&quot;width: 59%; min-width: 250px; flex-grow: 1; height: auto; object-fit: cover; border-radius: 8px; margin-bottom: 2px;&quot; src=&quot;https://blog.kakaocdn.net/dna/7KG1e/dJMb9Wk8UOO/AAAAAAAAAAAAAAAAAAAAABoX6oSoQs0CpwKJFLAgBLG4nxmoZ3T5tNKdDJOvWSOT/img.jpg?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1761922799&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=nu33i30dSuJkM6VWZF9CF%2F17Eek%3D&quot; alt=&quot;Nemo 로고&quot; /&gt; &lt;!-- 앱스토어 --&gt; &lt;a style=&quot;width: 17%; min-width: 150px; flex-grow: 1; margin-bottom: 2px;&quot; href=&quot;https://apps.apple.com/app/apple-store/id1547183996?pt=122511703&amp;amp;ct=tistory&amp;amp;mt=8&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; &lt;img style=&quot;width: 100%; height: auto; object-fit: cover; border-radius: 8px;&quot; src=&quot;https://blog.kakaocdn.net/dn/cz9ZhK/btsOblWpPM8/2PirgqFkNoPNiZGk1k00eK/img.jpg&quot; alt=&quot;앱스토어&quot; /&gt; &lt;/a&gt; &lt;!-- 플레이스토어 --&gt; &lt;a style=&quot;width: 17%; min-width: 150px; flex-grow: 1; margin-bottom: 2px;&quot; href=&quot;https://play.google.com/store/apps/details?id=com.Nemo.ParkYoungHo&amp;amp;hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; &lt;img style=&quot;width: 100%; height: auto; object-fit: cover; border-radius: 8px;&quot; src=&quot;https://blog.kakaocdn.net/dn/kyW1A/btsOa3veWWY/TnYKUkXBAq3lKzQD87W8gK/img.jpg&quot; alt=&quot;플레이스토어&quot; /&gt; &lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;!-- 티켓로그 --&gt;&lt;/p&gt;
&lt;div style=&quot;display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px; margin: 2px 0; padding-left: 12px; padding-right: 12px;&quot;&gt;&lt;!-- 앱 로고 및 설정 --&gt;&lt;img style=&quot;width: 59%; min-width: 250px; flex-grow: 1; height: auto; object-fit: cover; border-radius: 8px; margin-bottom: 2px;&quot; src=&quot;https://blog.kakaocdn.net/dn/cgcnd9/btsObK89KuE/R4A6YgXUeLZJwIOiGxTBTk/img.jpg&quot; alt=&quot;티켓로그 로고&quot; /&gt; &lt;!-- 앱스토어 --&gt; &lt;a style=&quot;width: 17%; min-width: 150px; flex-grow: 1; margin-bottom: 2px;&quot; href=&quot;https://apps.apple.com/app/apple-store/id6741766750?pt=127561309&amp;amp;ct=tistory&amp;amp;mt=8&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; &lt;img style=&quot;width: 100%; height: auto; object-fit: cover; border-radius: 8px;&quot; src=&quot;https://blog.kakaocdn.net/dn/cz9ZhK/btsOblWpPM8/2PirgqFkNoPNiZGk1k00eK/img.jpg&quot; alt=&quot;앱스토어&quot; /&gt; &lt;/a&gt; &lt;!-- 플레이스토어 --&gt; &lt;a style=&quot;width: 17%; min-width: 150px; flex-grow: 1; margin-bottom: 2px;&quot; href=&quot;https://play.google.com/store/apps/details?id=com.memorylog.yhlab&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt; &lt;img style=&quot;width: 100%; height: auto; object-fit: cover; border-radius: 8px;&quot; src=&quot;https://blog.kakaocdn.net/dn/kyW1A/btsOa3veWWY/TnYKUkXBAq3lKzQD87W8gK/img.jpg&quot; alt=&quot;플레이스토어&quot; /&gt; &lt;/a&gt;&lt;/div&gt;</description>
      <category>일상</category>
      <category>2025</category>
      <category>노을공원</category>
      <category>노을캠핑장</category>
      <category>바베큐</category>
      <category>서울</category>
      <category>페스타</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/312</guid>
      <comments>https://eeyatho.tistory.com/312#entry312comment</comments>
      <pubDate>Sat, 25 Oct 2025 17:48:53 +0900</pubDate>
    </item>
    <item>
      <title>Mac ) 메모리(ram) 사용량 확인</title>
      <link>https://eeyatho.tistory.com/311</link>
      <description>&lt;h2 data-end=&quot;287&quot; data-start=&quot;247&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 활성 상태 보기(Activity Monitor)로 확인&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;329&quot; data-start=&quot;289&quot; data-ke-size=&quot;size16&quot;&gt;맥에서 가장 직관적인 방법은 활성 상태 보기 앱을 활용하는 것&lt;/p&gt;
&lt;p data-end=&quot;329&quot; data-start=&quot;289&quot; 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-end=&quot;434&quot; data-start=&quot;349&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;393&quot; data-start=&quot;349&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;Spotlight(⌘ + Space)&lt;/span&gt;을 열고 &lt;b&gt;활성 상태 보기&lt;/b&gt;&amp;nbsp;검색&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;메모리 탭 확인&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;606&quot; data-start=&quot;457&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;509&quot; data-start=&quot;457&quot;&gt;상단 탭에서 &lt;b&gt;메모리&lt;/b&gt;를 클릭&lt;/li&gt;
&lt;li data-end=&quot;606&quot; data-start=&quot;513&quot;&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;스크린샷 2025-09-01 오후 1.16.36.png&quot; data-origin-width=&quot;1067&quot; data-origin-height=&quot;649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZsYaU/btsQc2gRMS2/G2oR0XbpmzNig9rF02PEp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZsYaU/btsQc2gRMS2/G2oR0XbpmzNig9rF02PEp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZsYaU/btsQc2gRMS2/G2oR0XbpmzNig9rF02PEp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZsYaU%2FbtsQc2gRMS2%2FG2oR0XbpmzNig9rF02PEp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1067&quot; height=&quot;649&quot; data-filename=&quot;스크린샷 2025-09-01 오후 1.16.36.png&quot; data-origin-width=&quot;1067&quot; data-origin-height=&quot;649&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;811&quot; data-start=&quot;788&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 터미널 명령어로 확인하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;851&quot; data-start=&quot;813&quot; data-ke-size=&quot;size16&quot;&gt;터미널에서도 멋있게(?) 메모리 상태 확인 가능&lt;/p&gt;
&lt;p data-end=&quot;851&quot; data-start=&quot;813&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;851&quot; data-start=&quot;813&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. vm_stat 명령어&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756700627165&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vm_stat&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;페이지 단위로 메모리 상태가 출력&amp;nbsp; (Pages free, Pages active, Pages inactive, Pages wired down 등)&lt;/li&gt;
&lt;li&gt;단위가 페이지(4KB).. 복잡한 계산 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-09-01 오후 1.35.07.png&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcKSw8/btsQgUupuhj/agLKIdMD8s1WIBQoBigugk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcKSw8/btsQgUupuhj/agLKIdMD8s1WIBQoBigugk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcKSw8/btsQgUupuhj/agLKIdMD8s1WIBQoBigugk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcKSw8%2FbtsQgUupuhj%2FagLKIdMD8s1WIBQoBigugk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;396&quot; height=&quot;374&quot; data-filename=&quot;스크린샷 2025-09-01 오후 1.35.07.png&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. top 명령어&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756700663206&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;top -l 1 | grep PhysMem&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1211&quot; data-start=&quot;1117&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1150&quot; data-start=&quot;1117&quot;&gt;현재 메모리 사용량을 직관적으로 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IW1w7/btsQfAwsxGP/FxLHB0Tw6m3dmVkx6VlNGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IW1w7/btsQfAwsxGP/FxLHB0Tw6m3dmVkx6VlNGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IW1w7/btsQfAwsxGP/FxLHB0Tw6m3dmVkx6VlNGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIW1w7%2FbtsQfAwsxGP%2FFxLHB0Tw6m3dmVkx6VlNGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;453&quot; height=&quot;29&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. htop (추가 설치 필요)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1756700697260&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install htop
htop&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1306&quot; data-start=&quot;1243&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1306&quot; data-start=&quot;1243&quot;&gt;Homebrew로 htop을 설치하면 멋있는 인터페이스로 CPU/메모리 사용량 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-09-01 오후 1.25.25.png&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmlCax/btsQfbwWTSr/8D2AUQaE2PDap9UtxjlKLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmlCax/btsQfbwWTSr/8D2AUQaE2PDap9UtxjlKLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmlCax/btsQfbwWTSr/8D2AUQaE2PDap9UtxjlKLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmlCax%2FbtsQfbwWTSr%2F8D2AUQaE2PDap9UtxjlKLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1071&quot; height=&quot;378&quot; data-filename=&quot;스크린샷 2025-09-01 오후 1.25.25.png&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;1386&quot; data-start=&quot;1360&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 메뉴 막대에서 간단히 확인하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1434&quot; data-start=&quot;1388&quot; data-ke-size=&quot;size16&quot;&gt;앱스토어에서 앱을 설치해, 메뉴 막대에서 메모리 사용량을 실시간으로 볼 수도 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1515&quot; data-start=&quot;1435&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1478&quot; data-start=&quot;1435&quot;&gt;대표적인 앱: &lt;b&gt;RunCat, iStat Menus&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1515&quot; data-start=&quot;1479&quot;&gt;시스템 리소스를 지속적으로 모니터링해야 한다면 추천&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-09-01 오후 1.31.34.png&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;924&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djgntk/btsQelthoev/V48bUdGUT4TEvKxSud2qe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djgntk/btsQelthoev/V48bUdGUT4TEvKxSud2qe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djgntk/btsQelthoev/V48bUdGUT4TEvKxSud2qe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdjgntk%2FbtsQelthoev%2FV48bUdGUT4TEvKxSud2qe0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;277&quot; height=&quot;452&quot; data-filename=&quot;스크린샷 2025-09-01 오후 1.31.34.png&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;924&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>iOS, Swift/Mac</category>
      <category>렘</category>
      <category>맥</category>
      <category>메모리</category>
      <category>작업관리자</category>
      <category>활성상태보기</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/311</guid>
      <comments>https://eeyatho.tistory.com/311#entry311comment</comments>
      <pubDate>Mon, 1 Sep 2025 13:37:37 +0900</pubDate>
    </item>
    <item>
      <title>YOLO 논문(2016/5) 중요부분 정리</title>
      <link>https://eeyatho.tistory.com/310</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2016/05/9에 작성된 &lt;a href=&quot;https://arxiv.org/pdf/1506.02640&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;YOLO 논문&lt;/a&gt;&amp;nbsp;중요부분 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;1. YOLO 개요, 특징&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;YOLO(You Only Look Once)&lt;/b&gt;는 실시간 객체 검출을 위한 새로운 방법 (지금은 평범한 방법)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 방법들은 분류기(classifier)를 재활용하여 검출하는 방식을 사용했으나, YOLO는 객체 검출을 회귀(regression) 문제로 바라봄&lt;/li&gt;
&lt;/ul&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;b&gt;단일 신경망&lt;/b&gt;이 이미지를 입력받아 여러 개의 바운딩 박스와 클래스 확률을 동시에 예측&lt;/li&gt;
&lt;li&gt;이 방식은 매우 빠르며, 실시간 영상 처리에 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&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;li&gt;그러나 위치 정밀도는 다소 떨어질 수 있음 (옛날 말..)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;2. YOLO 작동 원리, 구조&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;: 입력 이미지를 S&amp;times;S개의 격자로 나누고, 셀이 B개의 객체 검출 시도&lt;/li&gt;
&lt;li&gt;&lt;b&gt;객체 책임 할당&lt;/b&gt;: 객체의 중심이 특정 그리드 셀에 속하면, 해당 그리드 셀이 그 객체를 탐지할 책임&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;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; B개의 [&lt;b&gt;바운딩 박스&lt;/b&gt;와 &lt;b&gt;신뢰도 점수&lt;/b&gt;]를 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;바운딩 박스&lt;/b&gt;는 중심 좌표(x,y), 너비(w), 높이(h)를 예측. (이미지 넓이 높이에 따라 정규화된 값)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;신뢰도 점수&lt;/b&gt;는 박스의 객체 존재 확률, 박스 좌표 정확도를 반영
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;신뢰도 공식은 Pr(Object) * IOU_truth_pred (객체가 박스에 있을 확률 * 예측 박스와 정답 박스간의 IOU)&lt;/li&gt;
&lt;li&gt;Pr(Object) : &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;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; Pr(Object) = 1&lt;/li&gt;
&lt;li&gt;&lt;b&gt;없으면&lt;/b&gt; Pr(Object) = 0&lt;/li&gt;
&lt;/ul&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;b&gt;그 박스에 객체가 있을 확률&lt;/b&gt;을 의미&lt;/li&gt;
&lt;li&gt;softmax/로지스틱 출력을 통해 0~1 사이 값&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IOU_truth_pred : 예측 박스와 정답 박스간의 IOU
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IOU(Intersection Over Union): 두 박스의 교집합 넓이 / 합집합 넓이&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;confidence 점수 하나로 &amp;ldquo;객체 존재 + 위치 정확도&amp;rdquo;를 동시에 나타냄
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체가 없으면 confidence = 0&lt;/li&gt;
&lt;li&gt;객체가 있지만 위치가 틀리면 confidence 낮음&lt;/li&gt;
&lt;li&gt;객체가 있고 위치 정확하면 confidence 높음&lt;/li&gt;
&lt;li&gt;최종 목적: 객체가 있으면 신뢰도 점수는 예측된 박스와 실제박스 간의 IOU와 같도록.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;자신이 예측한 박스에 객체가 포함되어있다고 판단할 경우에만, 특정 클래스에 속할 확률을 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;박스가 아닌 각 셀이 계산&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;박스 갯수 B와 관계없이,그리드 &lt;b&gt;셀당 하나의 클래스 확률 세트만 예측&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클래스 확률과, 개별 박스 신뢰도 예측을 곱하여 각 박스에 대한 클래스별 신뢰도 점수를 얻음
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;이 점수는 해당 클래스가 박스에 나타날 확률과 예측된 박스가 객체에 얼마나 잘 맞는지 모두 인코딩&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;YOLO는 탐지를 회귀 문제로 모델링하였으며, 이미지를 S x S 그리드로 나누고, 각 그리드 셀에 대해 B개의 바운딩 박스, 해당 박스의 신뢰도 C, 클래스 확률을 예측 &lt;br /&gt;이러한 예측은 &lt;b&gt;S x S x (B * 5 + C) 텐서로 인코딩 됨.&lt;/b&gt;&lt;/li&gt;
&lt;li data-start=&quot;537&quot; data-end=&quot;560&quot;&gt;&lt;span&gt;&lt;span&gt;예:&lt;/span&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start=&quot;537&quot; data-end=&quot;560&quot;&gt;&lt;span&gt;&lt;span&gt;S=7&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(7&amp;times;7 그리드)&lt;/li&gt;
&lt;li data-start=&quot;561&quot; data-end=&quot;582&quot;&gt;&lt;span&gt;&lt;span&gt;B=2&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(박스 2개)&lt;/li&gt;
&lt;li data-start=&quot;583&quot; data-end=&quot;622&quot;&gt;&lt;span&gt;&lt;span&gt;C=20&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(클래스 20개, PASCAL VOC 기준)&lt;/li&gt;
&lt;li data-start=&quot;583&quot; data-end=&quot;622&quot;&gt;출력 텐서 크기:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;7&amp;times;7&amp;times;(2&amp;sdot;5+20)&lt;span aria-hidden=&quot;true&quot;&gt;= 7&amp;times;7&amp;times;30 = 1470&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-08-25 오전 11.03.18.png&quot; data-origin-width=&quot;2200&quot; data-origin-height=&quot;2088&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbITAE/btsP4aZRrUM/L72NkqGWdPuKi2iTUk16q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbITAE/btsP4aZRrUM/L72NkqGWdPuKi2iTUk16q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbITAE/btsP4aZRrUM/L72NkqGWdPuKi2iTUk16q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbITAE%2FbtsP4aZRrUM%2FL72NkqGWdPuKi2iTUk16q1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2200&quot; height=&quot;2088&quot; data-filename=&quot;스크린샷 2025-08-25 오전 11.03.18.png&quot; data-origin-width=&quot;2200&quot; data-origin-height=&quot;2088&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 나머지는 딱히 중요하지 않음&lt;/b&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점과 성능, pt모델의 사전학습 방법 등..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 모델의 백본, 넥, 헤드 내용을 분석해서 다른 글에 정리&lt;/p&gt;</description>
      <category>Vision</category>
      <category>Ai</category>
      <category>Detection</category>
      <category>object</category>
      <category>visoin</category>
      <category>yolo</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/310</guid>
      <comments>https://eeyatho.tistory.com/310#entry310comment</comments>
      <pubDate>Mon, 25 Aug 2025 13:33:11 +0900</pubDate>
    </item>
    <item>
      <title>vcpkg로 onnxruntime-gpu 설치 시 Invalid empty pathname 에러</title>
      <link>https://eeyatho.tistory.com/309</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 Windows 환경에서 &lt;code&gt;onnxruntime-gpu&lt;/code&gt;를 vcpkg로 설치하다가 꽤 황당한 문제를 겪었습니다. 동일한 문제를 만나는 분들이 있을 것 같아 기록을 남겨둡니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 상황&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 명령어로 &lt;code&gt;onnxruntime-gpu&lt;/code&gt;를 설치했습니다.&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;vcpkg install onnxruntime-gpu:x64-windows&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 정상적으로 다운로드가 진행되다가, &lt;code&gt;microsoft-onnxruntime-v1.19.2.tar.gz&lt;/code&gt; 압축을 해제하는 단계에서 에러가 발생했습니다.&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;CMake Error: Problem with archive_write_header(): Invalid empty pathname
CMake Error: Current file: 
CMake Error: Problem extracting tar: C:/vcpkg/downloads/microsoft-onnxruntime-v1.19.2.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음엔 파일이 손상된 줄 알고 &lt;code&gt;downloads&lt;/code&gt; 폴더의 파일을 지우고 다시 받아보기도 하고, 수동으로 tar.gz를 풀어서 넣어보기도 했습니다. 하지만 계속 같은 에러가 발생했습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원인 추적&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색해 보니 CMake의 &lt;code&gt;libarchive&lt;/code&gt;가 압축을 풀 때 &lt;b&gt;로캘/언어 설정 문제&lt;/b&gt;로 경로를 제대로 읽지 못하면, 내부적으로 &quot;empty pathname&quot;을 만들어 버리면서 압축 해제에 실패할 수 있다고 하더군요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 제 환경에서 &lt;b&gt;Windows 시스템 언어가 한국어로 설정되어 있어서&lt;/b&gt; 문제가 발생한 것이었습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 언어를 영어(United States)로 변경 후 다시 시도했더니, 아무 문제 없이 설치가 진행되었습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정리하자면:&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;vcpkg install onnxruntime-gpu:x64-windows&lt;/code&gt; 실행 시 &lt;code&gt;Invalid empty pathname&lt;/code&gt; 에러가 난다면,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시스템 언어/로캘을 영어로 변경&lt;/b&gt;하거나,&lt;/li&gt;
&lt;li&gt;vcpkg 디렉토리를 &lt;code&gt;C:\dev\vcpkg&lt;/code&gt; 같이 &lt;b&gt;완전히 영어 경로&lt;/b&gt;에 두고 시도하면 해결됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&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;Windows 개발 환경에서 C/C++ 라이브러리 빌드 시, 로캘 문제로 의외의 오류가 발생할 수 있다.&lt;/li&gt;
&lt;li&gt;특히 vcpkg, CMake는 아직 한글 경로나 로캘에 취약하다.&lt;/li&gt;
&lt;li&gt;개발 환경은 가능하면 영어 경로/영어 로캘을 유지하는 것이 정신 건강에 좋다  &lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 저와 같은 문제를 겪으신 분들이 있다면, 위 방법을 시도해 보시길 바랍니다!&lt;/p&gt;</description>
      <category>Window</category>
      <category>Invalid empty pathname</category>
      <category>onnxruntime-gpu</category>
      <category>vcpkg</category>
      <category>window</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/309</guid>
      <comments>https://eeyatho.tistory.com/309#entry309comment</comments>
      <pubDate>Thu, 21 Aug 2025 14:06:04 +0900</pubDate>
    </item>
    <item>
      <title>CMake</title>
      <link>https://eeyatho.tistory.com/308</link>
      <description>&lt;h2 data-end=&quot;189&quot; data-start=&quot;171&quot; data-ke-size=&quot;size26&quot;&gt;1. CMake란 무엇인가?&lt;/h2&gt;
&lt;p data-end=&quot;365&quot; data-start=&quot;190&quot; data-ke-size=&quot;size16&quot;&gt;CMake는 크로스 플랫폼 빌드 시스템을 생성하는 도구.&lt;br /&gt;운영체제마다 빌드 방식이 다른데, CMake는 하나의 설정 파일(CMakeLists.txt)로 &lt;b&gt;Linux는 Makefile, Windows는 Visual Studio 프로젝트, macOS는 Xcode 프로젝트&lt;/b&gt;를 자동으로 만들어줌&lt;/p&gt;
&lt;p data-end=&quot;365&quot; data-start=&quot;190&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;410&quot; data-start=&quot;367&quot; data-ke-size=&quot;size16&quot;&gt;한 번 정의하면 어디서나 빌드 가능하게 해주는 도구&lt;/p&gt;
&lt;p data-end=&quot;410&quot; data-start=&quot;367&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;410&quot; data-start=&quot;367&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;438&quot; data-start=&quot;417&quot; data-ke-size=&quot;size26&quot;&gt;2. CMake 사용 이유&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;595&quot; data-start=&quot;439&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;480&quot; data-start=&quot;439&quot;&gt;&lt;b&gt;플랫폼 독립성&lt;/b&gt;: OS와 컴파일러에 맞는 빌드 파일 자동 생성&lt;/li&gt;
&lt;li data-end=&quot;536&quot; data-start=&quot;481&quot;&gt;&lt;b&gt;대규모 프로젝트 관리&lt;/b&gt;: 서브 프로젝트, 외부 라이브러리, 테스트 등을 체계적으로 관리&lt;/li&gt;
&lt;li data-end=&quot;595&quot; data-start=&quot;537&quot;&gt;&lt;b&gt;오픈소스 표준&lt;/b&gt;: OpenCV, LLVM, Qt 같은 대형 프로젝트들이 모두 CMake 기반&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;614&quot; data-start=&quot;602&quot; data-ke-size=&quot;size26&quot;&gt;3. 기본 사용법&lt;/h2&gt;
&lt;h3 data-end=&quot;629&quot; data-start=&quot;615&quot; data-ke-size=&quot;size23&quot;&gt;설치 및 실행 흐름&lt;/h3&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1755739881337&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// CMakeLists.txt파일 위치에서 시작.
mkdir build
cd build
cmake ..   // 상위 디렉토리의 CMakeLists.txt를 읽고 빌드 파일 생성
cmake --build .   // 실제 컴파일 실행&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;810&quot; data-start=&quot;784&quot; data-ke-size=&quot;size26&quot;&gt;4. CMakeLists.txt 기본 구조&lt;/h2&gt;
&lt;pre id=&quot;code_1755739889976&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cmake_minimum_required(VERSION 3.20)  # 최소 요구 버전
project(MyApp LANGUAGES CXX)          # 프로젝트 이름/언어 지정

set(CMAKE_CXX_STANDARD 17)            # C++17 사용

add_executable(myapp main.cpp foo.cpp) # 실행 파일 생성&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;h2 data-end=&quot;1054&quot; data-start=&quot;1034&quot; data-ke-size=&quot;size26&quot;&gt;5. 모던 CMake 핵심 개념&lt;/h2&gt;
&lt;h3 data-end=&quot;1067&quot; data-start=&quot;1055&quot; data-ke-size=&quot;size23&quot;&gt;타깃 기반 설정&lt;/h3&gt;
&lt;p data-end=&quot;1114&quot; data-start=&quot;1068&quot; data-ke-size=&quot;size16&quot;&gt;CMake 3.x부터는 **타깃 단위 관리(target_*)**가 권장&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1755739896576&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;add_library(mylib src/mylib.cpp)

target_include_directories(mylib PUBLIC include)
target_compile_definitions(mylib PRIVATE DEBUG_MODE=1)
target_link_libraries(mylib PUBLIC fmt::fmt)​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1425&quot; data-start=&quot;1311&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1338&quot; data-start=&quot;1311&quot;&gt;&lt;b&gt;PRIVATE&lt;/b&gt;: 현재 타깃에만 적용&lt;/li&gt;
&lt;li data-end=&quot;1377&quot; data-start=&quot;1339&quot;&gt;&lt;b&gt;PUBLIC&lt;/b&gt;: 현재 이 타깃을 사용하는 곳에도 전파&lt;/li&gt;
&lt;li data-end=&quot;1425&quot; data-start=&quot;1378&quot;&gt;&lt;b&gt;INTERFACE&lt;/b&gt;: 사용자에게만 전파 (헤더 온리 라이브러리에서 유용)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1449&quot; data-start=&quot;1432&quot; data-ke-size=&quot;size26&quot;&gt;6. 외부 라이브러리 연동&lt;/h2&gt;
&lt;h3 data-end=&quot;1469&quot; data-start=&quot;1450&quot; data-ke-size=&quot;size23&quot;&gt;1) find_package&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1755739760831&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;find_package(fmt CONFIG REQUIRED)
target_link_libraries(myapp PRIVATE fmt::fmt)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;1582&quot; data-start=&quot;1563&quot; data-ke-size=&quot;size23&quot;&gt;2) FetchContent&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1755739769125&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;include(FetchContent)
FetchContent_Declare(fmt
  GIT_REPOSITORY https://github.com/fmtlib/fmt.git
  GIT_TAG 11.0.2
)
FetchContent_MakeAvailable(fmt)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;1767&quot; data-start=&quot;1751&quot; data-ke-size=&quot;size26&quot;&gt;7. 테스트(CTest)&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1755739796426&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enable_testing()

add_executable(mytest tests/test.cpp)
target_link_libraries(mytest PRIVATE mylib)

add_test(NAME mytest COMMAND mytest)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;실행: ctest --output-on-failure&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;1980&quot; data-start=&quot;1967&quot; data-ke-size=&quot;size26&quot;&gt;8. 설치 &amp;amp; 배포&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1755739815611&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;install(TARGETS mylib myapp
  RUNTIME DESTINATION bin
  LIBRARY DESTINATION lib
  ARCHIVE DESTINATION lib
)
install(DIRECTORY include/ DESTINATION include)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2198&quot; data-start=&quot;2150&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; cmake --install build --prefix out 로 설치 가능&lt;/p&gt;
&lt;p data-end=&quot;2198&quot; data-start=&quot;2150&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2198&quot; data-start=&quot;2150&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;2218&quot; data-start=&quot;2205&quot; data-ke-size=&quot;size26&quot;&gt;9. 자주 쓰는 팁&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2372&quot; data-start=&quot;2219&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2261&quot; data-start=&quot;2219&quot;&gt;Out-of-Source 빌드 권장: build/ 폴더 따로 두기&lt;/li&gt;
&lt;li data-end=&quot;2336&quot; data-start=&quot;2262&quot;&gt;include_directories(), add_definitions() 전역 사용은 지양 &amp;rarr; target_* 사용&lt;/li&gt;
&lt;li data-end=&quot;2372&quot; data-start=&quot;2337&quot;&gt;빌드 옵션은 Generator Expression으로 관리:&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1755739839839&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;target_compile_definitions(myapp PRIVATE 
  $&amp;lt;$&amp;lt;CONFIG:Debug&amp;gt;:DEBUG_BUILD&amp;gt;
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;2479&quot; data-start=&quot;2469&quot; data-ke-size=&quot;size26&quot;&gt;10. 기타&lt;/h2&gt;
&lt;p data-end=&quot;2686&quot; data-start=&quot;2480&quot; data-ke-size=&quot;size16&quot;&gt;작은 프로젝트에서는 간단히 add_executable, target_link_libraries만 알아도 충분&lt;br /&gt;규모가 커질수록 find_package, install, CTest 같은 기능을 점진적으로 활용&lt;/p&gt;</description>
      <category>Window</category>
      <category>CMAKE</category>
      <category>window</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/308</guid>
      <comments>https://eeyatho.tistory.com/308#entry308comment</comments>
      <pubDate>Thu, 21 Aug 2025 10:32:01 +0900</pubDate>
    </item>
    <item>
      <title>Flutter ) ShoreBird 배포가이드</title>
      <link>https://eeyatho.tistory.com/303</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OTA가 아닌, 새로운 버전을 스토어에 배포할 경우 shorebird Release&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;pubspec.yaml 에서 version 수정 후 저장 (ex. version: 1.0.0+4 -&amp;gt; 1.0.1+5)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;iOS의 Xcode 빌드 버전이나, Android의 local.properties 버전이 바로 바뀌지 않음&lt;/li&gt;
&lt;li&gt;앞의 버전이 바뀌어도 빌드번호는 올라가야함 (Android는 중복 빌드버전 금지)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;android 배포
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;shorebird release android --artifact apk&lt;/b&gt; 실행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 명령어 실행시 Android의 local.properties 버전이 바뀜&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이 파일로 Firebase App Distribution 배포 진행 build/app/outputs/apk/release/app-release.apk&lt;/li&gt;
&lt;li&gt;이 파일로 PlayStore 배포 진행 build/app/outputs/bundle/release/app-release.aab&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;iOS 배포
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;shorebird release ios&lt;/b&gt; 실행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 명령어 실행시 Xcode의 빌드 버전이 바뀜&lt;/li&gt;
&lt;li&gt;Xcode15 에러 발생시, 16.1로 변경 ( sudo xcode-select -s /Applications/Xcode16.1.app/Contents/Developer )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;build/ios/archive/Runner.xcarchive 파일 실행 (organizer 노출)&lt;/li&gt;
&lt;li&gt;custom &amp;gt; Manage Version and Build Number 체크 해제 후 Distribute App 진행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.shorebird.dev/guides/submitting/app-store/&quot;&gt;https://docs.shorebird.dev/guides/submitting/app-store/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;OTA 배포 할 경우, 해당 릴리즈에 Patch를 생성 (shorebird patch)&lt;/b&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;shorebird patch android&lt;/li&gt;
&lt;li&gt;shorebird patch ios&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이후 앱 실행시, 재실행 해달라는 업데이트 팝업 노출 재실행하면 Patch 적용됨&lt;br /&gt;(&lt;a href=&quot;https://eeyatho.tistory.com/302&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://eeyatho.tistory.com/302&lt;/a&gt;&amp;nbsp;여기 글대로 팝업노출 작업을 했을 경우.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Shorebird 문제 생겼을 경우, flutter 기본 배포 방법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flutter build apk --release --verbose&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flutter build ios --release --verbose&lt;/p&gt;</description>
      <category>Flutter/ShoreBird</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/303</guid>
      <comments>https://eeyatho.tistory.com/303#entry303comment</comments>
      <pubDate>Mon, 14 Apr 2025 16:54:02 +0900</pubDate>
    </item>
    <item>
      <title>Flutter ) ShoreBird 활용 강제 업데이트 적용</title>
      <link>https://eeyatho.tistory.com/302</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. 개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Shorebird는 패치를 다운로드한 후 앱을 재시작하지 않으면 최신패치가 적용되지 않음&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;치명적인 오류를 OTA로 급히 수정했는데, 유저에게 즉시 패치된 버전을 제공할 수 없다는 점은 큰 단점&lt;/span&gt;&lt;br /&gt;(특히, 앱 스토어에서 처음 다운로드시, 패치가 적용되지않은 초기 release 버전을 설치)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;하지만, Shorebird 상태를 관리하고 강제로 재실행시키는 로직을 추가하는 등의 커스텀이 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;-&amp;gt; 그러려면, shorebird에서 제공하는 자동 업데이트를 제거하고, 커스텀하게 조절하는 부분이 필요&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 자동 업데이트 끄기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shorebird.yaml 에서 auto_update: false&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;// shorebird.yaml
auto_update: false
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. shorebird_code_push 라이브러리 적용&lt;/h3&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// pubspec.yaml
# shorebird 버전 파악 및 강제 업데이트 추가를 위함
shorebird_code_push: 2.0.2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. ShoreBird 상태를 &lt;span data-token-index=&quot;0&quot;&gt;체크하고 패치를 다운로드하는&lt;/span&gt; 클래스 선언&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특이사항&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 롤백하는 경우 대응하기 위해, &lt;b&gt;upToDate &lt;/b&gt;여도 다운로드 시도&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:shorebird_code_push/shorebird_code_push.dart';

final class ShorebirdService {
  final _updater = ShorebirdUpdater();
  Patch? currentPatch;
  bool _needRestart = false;

  Future&amp;lt;bool&amp;gt; isNeedRestart() async {
    _needRestart = false;
    if (!_updater.isAvailable) {
      debugPrint(&quot; ️  updater.isAvailable == false 이므로 패스&quot;);
      return false;
    }
    await _readPatch();
    await _checkForUpdate();
    return _needRestart;
  }

  Future&amp;lt;void&amp;gt; _readPatch() async {
    try {
      final currentPatch = await _updater.readCurrentPatch();
      debugPrint(&quot; ️ 현재 패치 버전: ${currentPatch?.number}&quot;);
      this.currentPatch = currentPatch;
    } catch (error) {
      debugPrint(&quot; ️  _readPatch Error: $error&quot;);
    }
  }

  Future&amp;lt;void&amp;gt; _checkForUpdate() async {
    try {
      debugPrint(&quot; ️ 업데이트 필요한지 체크&quot;);
      final status = await _updater.checkForUpdate(track: UpdateTrack.stable);

      switch (status) {
        case UpdateStatus.upToDate:
          debugPrint(&quot; ️ 최신버전이지만 롤백하는 경우도 있어서 시도해야함 (upToDate)&quot;);
          await _downloadAndUpdate();
        case UpdateStatus.outdated:
          debugPrint(&quot; ️ 패치 다운로드 필요 (outdated)&quot;);
          await _downloadAndUpdate();
        case UpdateStatus.restartRequired:
          debugPrint(&quot; ️ 재시작 필요 (restartRequired)&quot;);
          _needRestart = true;
        case UpdateStatus.unavailable:
          debugPrint(&quot; ️ 불가능 (unavailable)&quot;);
      }
    } catch (error) {
      debugPrint(&quot; ️  checkForUpdate Error: $error&quot;);
    }
  }

  Future&amp;lt;void&amp;gt; _downloadAndUpdate() async {
    try {
      // 다운로드 및 업데이트 (_updater.update 완료시, 재시작하면 되는 상태가 됨)
      await _updater.update(track: UpdateTrack.stable);
      debugPrint(&quot; ️ 패치 다운로드 완료&quot;);
      _needRestart = true;
    } on UpdateException catch (error) {
      debugPrint(&quot; ️  downloadPatch Error: ${error.message}&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;h2 data-ke-size=&quot;size26&quot;&gt;4. 앱 시작시 체크&lt;/h2&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;// iOS는 조금 오래걸리므로, await 사용 x
shorebirdService.isNeedRestart().then((isNeedRestart) {
  if (isNeedRestart) {
    showRestartDialog();
    return;
  }
});
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;import 'dart:io';

import 'package:flutter/material.dart';
import 'package:homeknocktown_admin/presentation/design_system/atoms/dialog/dialog.dart';
import 'package:homeknocktown_admin/route.dart';
import 'package:homeknocktown_admin/utils/local_notification.dart';

Future&amp;lt;dynamic&amp;gt; showRestartDialog() async {
  return showDialog(
      context: navigatorKey.currentContext!,
      barrierDismissible: false, // 배경 눌러도 안꺼지게
      builder: (_) {
        return PopScope(
            canPop: false,
            child: YourAwesomeDialog( /// dialog 정도는 각자 알아서 띄워주기..
                text: &quot;개선사항을 적용할 준비가 되었어요! 앱을 재시작 해주세요.&quot;,
                confirmText: &quot;앱 종료&quot;,
                onConfirm: () async {
                  // await showLocalNotification(1, &quot;개선사항 반영 완료&quot;, &quot;앱을 다시 시작하기 위해 눌러주세요!&quot;);
                  exit(0);
                }));
      });
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보너스
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;iOS는 앱에서 스스로 재시작이 불가능함.&lt;/li&gt;
&lt;li&gt;로컬 푸시로 유저에게 재실행하기 좋은 UX 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dart&quot;&gt;&lt;code&gt;import 'package:flutter_local_notifications/flutter_local_notifications.dart';

// 로컬 푸시 알림 보여주기
Future&amp;lt;void&amp;gt; showLocalNotification(int id, String? title, String? body) async {
  debugPrint(&quot;  showLocalNotification id: $id, title: $title, body: $body&quot;);

  await plugin.show(
    id,
    title,
    body,
    NotificationDetails(
      android: AndroidNotificationDetails(
        channel.id,
        channel.name,
        channelDescription: channel.description,
        importance: Importance.max,
        priority: Priority.high,
        icon: '@mipmap/ic_notification', // 알림 아이콘
        enableVibration: true, // 진동 활성화
        playSound: true, // 소리 활성화
        showWhen: true, // 시간 표시
      ),
    ),  );
}

&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Flutter/ShoreBird</category>
      <category>Codepush</category>
      <category>FLUTTER</category>
      <category>Restart</category>
      <category>shorebird</category>
      <category>update</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/302</guid>
      <comments>https://eeyatho.tistory.com/302#entry302comment</comments>
      <pubDate>Mon, 14 Apr 2025 16:46:14 +0900</pubDate>
    </item>
    <item>
      <title>Flutter ) ShoreBird 중요한 것들 정리</title>
      <link>https://eeyatho.tistory.com/301</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;패치가 성능에 미치는 영향&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Android는 패치를 적용해도 성능에 영향을 미치지 않음. (애뮬레이터도 마찬가지)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;iOS 및 macOS는 패치로직이 Android와 다름.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;변경되지 않은 코드는 CPU에서 실행되고, 변경 또는 추가된 코드는 Dart 인터프리터에서 실행됨 (CPU보다 느림)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;일반적으로는 이런 성능 차이를 감지할 수 없지만, 성능에 민감한 이미지 또는 대용량 데이터 처리 코드는 성능 차이가 나타날 수 있음&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;스테이징 패치, 스테이징 프리뷰&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능 영향을 체크하거나 기타 테스트를 위해 스테이징 패치, 스테이징 프리뷰가 존재&lt;/p&gt;
&lt;pre id=&quot;code_1744615384057&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 스테이징 패치 업로드
shorebird patch android --track=staging

// 스테이징 패치를 지정하여 프리뷰로 볼 수 있음
shorebird preview --staging --app-id ee322dc4-3dc2-4324-90a9-04c40a62ae76 --release-version 1.0.0+1&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;이후 Shorebird 콘솔에서 Go Live를 누르면 프로적션으로 승격하여 모든 기기에 OTA 적용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFXelU/btsNllhtvUI/eWdpN9TyUDzBFzzApAtWPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFXelU/btsNllhtvUI/eWdpN9TyUDzBFzzApAtWPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFXelU/btsNllhtvUI/eWdpN9TyUDzBFzzApAtWPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFXelU%2FbtsNllhtvUI%2FeWdpN9TyUDzBFzzApAtWPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;592&quot; height=&quot;460&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;패치 후 스토어에서 다운받을 때 (&lt;a href=&quot;https://docs.shorebird.dev/update-strategies/#manual&quot;&gt;&lt;b&gt;링크&lt;/b&gt;&lt;/a&gt;)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;패치를 적용해도, 스토어에서는 패치되지 않은 release를 받게됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;shorebird는 런타임에만 패치를 다운로드할 수 있기때문&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;따라서 패치전 버전을 원천 차단하기 위해서는, shorebird_code_push를 이용하여 패치 및 재시작이 필요할 타이밍을 파악하여, &lt;a href=&quot;https://eeyatho.tistory.com/302&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;강제로 재시작하게 하는 로직&lt;/a&gt;이 필요&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;롤백&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1,2,3 패치를 진행 후 3을 롤백하면 패치3을 설치한 유저는 패치 2로 다운그레이드 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패치 1 밖에 없는데 롤백했을 경우, 기본 릴리즈로 다운그레이드 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shorebird_code_push 에서, 롤백(다운그레이드)도 그냥 update가 필요하다고 나옴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;패치 무결성 및 자동 롤백&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱에 포함된 Shorebird의 &lt;a href=&quot;https://github.com/shorebirdtech/updater&quot;&gt;Updater&lt;/a&gt;은, 자동 온디바이스 롤백이 포함 (오픈소스)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 이유로든 패치의 해시나 서명이 일치하지 않으면 패치가 삭제되며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 이유로든 패치가 Dart 런타임에 로드되지 않으면 해당 장치에서 패치가 &amp;ldquo;불량&amp;rdquo; 표시되고 앱은 자동으로 최신 설치된 패치로 롤백됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 가능한 이유는, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;이전 패치 파일은 다음 패치가 성공적으로 부팅될 때 까지 디스크에 보관되며, 부팅이 성공적으로 완료되면 패치 파일이 자동으로 정리되어 디스크 사용량을 최소화함&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Crashlytics와의 통합 (패치 버전 파악하기)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Crashlytics를 사용하는 경우 Shorebird 릴리스 및 패치와 함께 바로 작동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 여러 패치가 있는 경우 충돌을 일으킨 패치가 무엇인지 불분명 (Sentry도 마찬가지)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;shorebird_code_push&lt;/b&gt; 패키지를 사용하면, 패치를 구별 가능하므로, Crashlytics 커스텀 키에 추가하면됨&lt;/p&gt;
&lt;pre id=&quot;code_1744615494428&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Future&amp;lt;void&amp;gt; main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );

  final patchNumber = await ShorebirdCodePush().currentPatchNumber();

  // Add the patch number as a tag. You can use whatever name you would like
  // as the key. `$patchNumber` will be &quot;null&quot; if there is no patch. You may
  // wish to handle this case differently.
  FirebaseCrashlytics.instance.setCustomKey(
    'shorebird_patch_number',
    '$patchNumber',
  );
  runApp(const MyApp());
}&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;h2 data-ke-size=&quot;size26&quot;&gt;흔한 실수. updater.isAvailable == false인 경우&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;빌드 모드가 release가 아닌 debug 일때&lt;/li&gt;
&lt;li&gt;shorebird release 명령어가 아닌 다른 방법으로 빌드되었을 때&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;shorebird preview 흔한 실수&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 수정한 코드가 바로 보이는 것이 아닌, shorebird에 있는 release를 받아오는 것임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사이드 로딩 및 MDM&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스토어에 등록하여 배포하지 않고, 사이드 로딩이나 MDM으로 설치된 앱도 shorebird가 잘 동작함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어로 shorebird가 적용된 APK를 얻을 수 있음&lt;/p&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;shorebird release android --artifact=apk
&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;h2 data-ke-size=&quot;size26&quot;&gt;안드로이드 INTERNET 권한 필요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱이 Shorebird 서버와 통신하여 패치를 다운로드할 수 있도록 하는 데 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;shorebird init&lt;/b&gt; 명령어는 이 권한이 없으면 자동으로 추가해주기에 신경x&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;// android/app/src/main/AndroidManifest.xml 

&amp;lt;manifest ...&amp;gt;
&amp;lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&amp;gt;
...
&amp;lt;/manifest&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로젝트를 다시 초기화 하고싶다면&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shorebird init --force 명령어를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shorebird.yaml에 새로운 app과 app_id를 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 앱은 향을 받지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;iOS preview가 안된다면&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 깔려있던 앱을 삭제하고 시도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;새로운 위젯 추가, 새로운 라우팅 추가 다 잘 되는가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실헝해보니 iOS, Android 다 잘됨&lt;/p&gt;</description>
      <category>Flutter/ShoreBird</category>
      <category>Codepush</category>
      <category>FLUTTER</category>
      <category>shorebird</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/301</guid>
      <comments>https://eeyatho.tistory.com/301#entry301comment</comments>
      <pubDate>Mon, 14 Apr 2025 16:26:24 +0900</pubDate>
    </item>
    <item>
      <title>Flutter ) CodePush(ShoreBird) 개요</title>
      <link>https://eeyatho.tistory.com/300</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문서 &lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.shorebird.dev/code-push/overview/&quot; data-token-index=&quot;1&quot;&gt;&lt;span&gt;링크&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드푸시 동작 방식&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Shorebird로 빌드된 앱에는 수정된 Flutter 엔진이 포함&lt;/span&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;(즉, 배포시 shorebird 명령어로 빌드해야함)&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;앱 시작 시 앱의 Dart 코드에 대한 업데이트를 확인&lt;/li&gt;
&lt;li&gt;업데이트가 있으면 엔진이 업데이트를 다운로드&lt;/li&gt;
&lt;li&gt;사용자는 업데이트가 다운로드된 후 앱을 다시 시작할 때 업데이트를 볼 수 있음&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;일반적인 코드 푸시 워크플로&lt;/h2&gt;
&lt;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; Shorebird CLI를 사용하여 앱의 새로운&amp;nbsp;&lt;b&gt;릴리스를 빌드&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;shorebird release android // ios&lt;/li&gt;
&lt;li&gt;&lt;b&gt;(사전작업)&lt;/b&gt; App Store나 Google Play를 통해 해당 릴리스를 배포&lt;/li&gt;
&lt;li&gt;Code Push가 필요해져서 앱의 Dart 코드를 변경
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;UI뿐 아니라, 새로운 기능, 버그 수정, 업데이트 된 Dart 종속성도 포함&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Shorebird CLI를 사용하여&amp;nbsp;첫 번째 단계에서 만든 릴리스에 대한 새&amp;nbsp;&lt;b&gt;패치 업로드&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;shorebird patch android // ios&lt;/li&gt;
&lt;li&gt;사용자는 다음에 앱을 다시 시작할 때 업데이트를 볼 수 있음&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &lt;a href=&quot;https://eeyatho.tistory.com/303&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;커스텀 배포 가이드&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;패치란 (&lt;a href=&quot;https://docs.shorebird.dev/code-push/overview/#patching&quot;&gt;링크&lt;/a&gt;)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 새 버전을 다운로드/업데이트 할 필요없이 앱 코드를 업데이트하는 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;패치에 어떤 변경 사항이 포함될 수 있는가? (&lt;a href=&quot;https://docs.shorebird.dev/code-push/overview/#what-types-of-changes-can-be-included-in-a-patch&quot;&gt;링크&lt;/a&gt;)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;모든 Dart 코드들&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;앱 코드&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;생성된 코드&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;pubspec.yaml (네이티브 코드 변경 사항을 포함하지 않는 경우만)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다음은 포함되지&amp;nbsp;않음&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이미지, 글꼴 등 asset 파일. 가까운 미래에 지원할 계획(&lt;a style=&quot;color: #ee2323;&quot; href=&quot;https://github.com/shorebirdtech/shorebird/issues/318&quot;&gt;참조&lt;/a&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;네이티브 코드(예: Android의 Java/Kotlin 또는 iOS의 Objective-C/Swift)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;플러터 엔진 (코드 푸시를 사용하여 앱의 플러터 버전을 변경할 수 없습니다)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;앱, 릴리즈, 패치, 아티팩트간의 용어 해석&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;애플리케이션&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;flutter create [app_name]명령어를 통해 생성되어, 스토어에서 id값을 부여받은 프로젝트를 뜻함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;앱은 shorebird init시 부여받은 app_id가 있으며, shorebird.yaml에서 볼 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;앱에는 0개 이상의 릴리즈가 존재&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;릴리즈&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;버전과 빌드 번호로 식별되는 특정 버전의 앱 (ex. 1.0.0+1)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;릴리즈를 통해 만든 결과물을 스토어에 등록 후 스토어 밖에서 코드 푸시 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;릴리즈에는 0개 이상의 패치가 존재&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;패치&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;특정 릴리즈에 대한 변경 사항&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;OTA 업데이트로 적용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;버그 수정, 새로운 기능 등&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;릴리즈에 여러 패치를 등록할 수 있지만, 하나의 패치만 활성화할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;릴리즈 버전과 패치 번호로 식별 (패치 번호는 자동 증가하는 정수)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;유저가 앱 실행시, 사용 가능한 패치를 확인하고 백그라운드에서 최신 패치를 적용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;이 패치는 다음 앱 시작시 표시됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;아티팩트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드 및 패치 작업의 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;릴리즈 아티팩트: &lt;b&gt;shorebird release android&lt;/b&gt;를 통해 만들어진 여러 아키텍처별 &lt;b&gt;libapp.so&lt;/b&gt; 파일과 &lt;b&gt;Android 아카이브(.aab)&lt;/b&gt; 파일들&lt;/li&gt;
&lt;li&gt;패치 아티팩트: &lt;b&gt;shorebird patch android&lt;/b&gt; 를 통해 만들어진 Dart 코드 차이점을 포착하는 &lt;b&gt;diff&lt;/b&gt; 파일 등&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Flutter/ShoreBird</category>
      <category>Codepush</category>
      <category>FLUTTER</category>
      <category>shorebird</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/300</guid>
      <comments>https://eeyatho.tistory.com/300#entry300comment</comments>
      <pubDate>Mon, 14 Apr 2025 16:22:01 +0900</pubDate>
    </item>
    <item>
      <title>Cursor, VSCode DebugConsole Filter (or, not 조건)</title>
      <link>https://eeyatho.tistory.com/299</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로 로그에 이모지를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 관련된 로그만 보고싶을 때는, 로그창을 필터링하는데,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-25 오후 3.54.06.png&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LKjOY/btsMW6xUlXG/OVeuMQAHg0weNXnhzdYyyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LKjOY/btsMW6xUlXG/OVeuMQAHg0weNXnhzdYyyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LKjOY/btsMW6xUlXG/OVeuMQAHg0weNXnhzdYyyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLKjOY%2FbtsMW6xUlXG%2FOVeuMQAHg0weNXnhzdYyyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1480&quot; height=&quot;80&quot; data-filename=&quot;스크린샷 2025-03-25 오후 3.54.06.png&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 쉽게 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(network request:  )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;or 조건&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나라도 포함된 로그로 Filter하고 싶다면 (즉 or조건을 걸고싶다면)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-25 오후 3.52.45.png&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgKeVX/btsMVsWIe8A/tYWCJb5I5eOgQRH42rNmT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgKeVX/btsMVsWIe8A/tYWCJb5I5eOgQRH42rNmT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgKeVX/btsMVsWIe8A/tYWCJb5I5eOgQRH42rNmT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgKeVX%2FbtsMVsWIe8A%2FtYWCJb5I5eOgQRH42rNmT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1470&quot; height=&quot;68&quot; data-filename=&quot;스크린샷 2025-03-25 오후 3.52.45.png&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;68&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;( init:  , deinit:  ️)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;not 조건&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 값이 없는 로그들로 필터링하고 싶다면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-25 오후 4.03.11.png&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x7UKR/btsMWlbvcf0/eIOgVOZT8eu3EElIuEKoH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x7UKR/btsMWlbvcf0/eIOgVOZT8eu3EElIuEKoH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x7UKR/btsMWlbvcf0/eIOgVOZT8eu3EElIuEKoH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx7UKR%2FbtsMWlbvcf0%2FeIOgVOZT8eu3EElIuEKoH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1470&quot; height=&quot;66&quot; data-filename=&quot;스크린샷 2025-03-25 오후 4.03.11.png&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;!를 붙히면 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마우스를 올리면 나오는 글이 힌트였는데, 알아듣기 힘들었다..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm5oHH/btsMWFOfeT5/1s8OoMYC40xOk430So8qOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm5oHH/btsMWFOfeT5/1s8OoMYC40xOk430So8qOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm5oHH/btsMWFOfeT5/1s8OoMYC40xOk430So8qOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm5oHH%2FbtsMWFOfeT5%2F1s8OoMYC40xOk430So8qOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;416&quot; height=&quot;52&quot; data-origin-width=&quot;416&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Cursor</category>
      <category>console</category>
      <category>cusor</category>
      <category>Debug</category>
      <category>Filter</category>
      <category>Keyword</category>
      <category>Log</category>
      <category>Multiple</category>
      <category>not</category>
      <category>Or</category>
      <category>vscode</category>
      <author>EEYatHo</author>
      <guid isPermaLink="true">https://eeyatho.tistory.com/299</guid>
      <comments>https://eeyatho.tistory.com/299#entry299comment</comments>
      <pubDate>Tue, 25 Mar 2025 16:07:53 +0900</pubDate>
    </item>
  </channel>
</rss>