<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코딩항해기</title>
    <link>https://minibcake.tistory.com/</link>
    <description>개발자를 꿈꾸며 코딩 세계를 탐험하는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 16 Jul 2026 16:52:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>miniBcake</managingEditor>
    <image>
      <title>코딩항해기</title>
      <url>https://tistory1.daumcdn.net/tistory/7132823/attach/80513481fcce43f39ed1ab99afe53f28</url>
      <link>https://minibcake.tistory.com</link>
    </image>
    <item>
      <title>[Error/JTE] 외장 톰캣으로 실행 시 흰 페이지 뜨는 에러</title>
      <link>https://minibcake.tistory.com/581</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Springboot 4.0.1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내장 톰캣 (임베디드 톰캣)으로 구동 시에는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gg.jte.development-mode가 true여야하지만&lt;/p&gt;
&lt;pre id=&quot;code_1768968525226&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gg.jte.development-mode=true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외장 톰캣은 src/main/jte 폴더를 알지 못하므로 사전 컴파일 옵션을 켜줘야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면서 development-mode를 꺼줘야 정상 구동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(외장 톰캣 세팅 시 내장 톰캣으로는 구동 안됨)&lt;/p&gt;
&lt;pre id=&quot;code_1768968505933&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# JTE
gg.jte.development-mode=false
gg.jte.use-precompiled-templates=true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 정상 작동하는 걸 확인 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일이 없으니까 기본 Resolver가 실행된 건데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ViewResolver 문제라고만 나오고, 로그에도 크게 별 내용이 없고,, JTE도 처음 하는 거라 삽질 한 느낌..&lt;/p&gt;</description>
      <category>Error solution</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/581</guid>
      <comments>https://minibcake.tistory.com/581#entry581comment</comments>
      <pubDate>Wed, 21 Jan 2026 13:10:42 +0900</pubDate>
    </item>
    <item>
      <title>[기타](URL) Http 상태 코드 정리</title>
      <link>https://minibcake.tistory.com/578</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fzolr/dJMcahb5Nov/2eFbEV2obnZk4lkemmeQzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fzolr/dJMcahb5Nov/2eFbEV2obnZk4lkemmeQzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fzolr/dJMcahb5Nov/2eFbEV2obnZk4lkemmeQzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFzolr%2FdJMcahb5Nov%2F2eFbEV2obnZk4lkemmeQzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;150&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;a href=&quot;https://www.jin-blog.dev/posts/2aa737e1-66ac-42f8-bd70-bdaadfee96e3&quot;&gt;https://www.jin-blog.dev/posts/2aa737e1-66ac-42f8-bd70-bdaadfee96e3&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768729172459&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Jin's Dev Log | HTTP 응답 상태 코드&quot; data-og-description=&quot;내가 보려고 편집한 상태코드들 (feat: MDN)&quot; data-og-host=&quot;www.jin-blog.dev&quot; data-og-source-url=&quot;https://www.jin-blog.dev/posts/2aa737e1-66ac-42f8-bd70-bdaadfee96e3&quot; data-og-url=&quot;https://www.jin-blog.dev/posts/2aa737e1-66ac-42f8-bd70-bdaadfee96e3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dvQrrx/dJMb8TB3exP/oY9Hx1xYYEKk7uQq34L6j0/img.png?width=1200&amp;amp;height=630&amp;amp;face=414_183_667_458,https://scrap.kakaocdn.net/dn/gTksP/dJMb8VNo2Ud/OMF7Kd8KJcCk7nKt1ypbUK/img.png?width=1200&amp;amp;height=630&amp;amp;face=414_183_667_458&quot;&gt;&lt;a href=&quot;https://www.jin-blog.dev/posts/2aa737e1-66ac-42f8-bd70-bdaadfee96e3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.jin-blog.dev/posts/2aa737e1-66ac-42f8-bd70-bdaadfee96e3&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dvQrrx/dJMb8TB3exP/oY9Hx1xYYEKk7uQq34L6j0/img.png?width=1200&amp;amp;height=630&amp;amp;face=414_183_667_458,https://scrap.kakaocdn.net/dn/gTksP/dJMb8VNo2Ud/OMF7Kd8KJcCk7nKt1ypbUK/img.png?width=1200&amp;amp;height=630&amp;amp;face=414_183_667_458');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Jin's Dev Log | HTTP 응답 상태 코드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;내가 보려고 편집한 상태코드들 (feat: MDN)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.jin-blog.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/578</guid>
      <comments>https://minibcake.tistory.com/578#entry578comment</comments>
      <pubDate>Fri, 16 Jan 2026 17:26:12 +0900</pubDate>
    </item>
    <item>
      <title>[기초] WebDAV</title>
      <link>https://minibcake.tistory.com/577</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC70su/dJMcagEhcIr/rLw8s9KrJ69HZYfeMW2Tgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC70su/dJMcagEhcIr/rLw8s9KrJ69HZYfeMW2Tgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC70su/dJMcagEhcIr/rLw8s9KrJ69HZYfeMW2Tgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC70su%2FdJMcagEhcIr%2FrLw8s9KrJ69HZYfeMW2Tgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;200&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Web Distributed Authoring and Versioning (웹 분산 저작 및 버전 관리)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WebDAV는&amp;nbsp;HTTP를&amp;nbsp;확장해서&amp;nbsp;웹&amp;nbsp;서버의&amp;nbsp;파일을&amp;nbsp;네트워크&amp;nbsp;드라이브처럼&amp;nbsp;읽고/쓰게&amp;nbsp;해주는&amp;nbsp;파일&amp;nbsp;관리용&amp;nbsp;프로토콜이다. &lt;br /&gt;HTTP/HTTPS 위에서 동작하며, 원격 서버에 있는 문서&amp;middot;파일을 생성, 수정, 삭제, 이동할 수 있게 해준다. &lt;br /&gt;​ &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;주요 기능 정리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 잠금(lock): 동시에 여러 사용자가 편집할 때 덮어쓰기를 방지.&lt;br /&gt;속성 관리: 작성자, 수정 시간 등 메타데이터를 읽고/설정.&lt;br /&gt;컬렉션(폴더)&amp;nbsp;관리:&amp;nbsp;디렉터리&amp;nbsp;생성(MKCOL),&amp;nbsp;복사(COPY),&amp;nbsp;이동(MOVE)&amp;nbsp;등&amp;nbsp;제공. &lt;br /&gt;​ &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;HTTP&amp;nbsp;확장&amp;nbsp;메서드&lt;/b&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PROPFIND&lt;/b&gt;: 리소스의 속성 정보(메타데이터, 목록)를 조회.&lt;br /&gt;&lt;b&gt;PROPPATCH&lt;/b&gt;: 리소스의 속성을 수정/삭제.&lt;br /&gt;&lt;b&gt;MKCOL,&amp;nbsp;COPY,&amp;nbsp;MOVE,&amp;nbsp;LOCK,&amp;nbsp;UNLOCK&amp;nbsp;&lt;/b&gt;등&amp;nbsp;추가&amp;nbsp;메서드로&amp;nbsp;파일&amp;nbsp;시스템&amp;nbsp;비슷한&amp;nbsp;조작을&amp;nbsp;지원. &lt;br /&gt;​ &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;NAS, 웹하드, 그룹웨어, 문서 협업 시스템 등에서 웹 기반 파일 공유&lt;/b&gt;에 활용.&lt;br /&gt;FTP와&amp;nbsp;달리&amp;nbsp;80/443&amp;nbsp;포트&amp;nbsp;하나로&amp;nbsp;동작하고,&amp;nbsp;HTTPS를&amp;nbsp;통한&amp;nbsp;전송&amp;nbsp;암호화와&amp;nbsp;인증&amp;nbsp;연동이&amp;nbsp;용이하다는&amp;nbsp;장점이&amp;nbsp;있다. &lt;br /&gt;​&lt;/p&gt;</description>
      <category>기타/기초 지식</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/577</guid>
      <comments>https://minibcake.tistory.com/577#entry577comment</comments>
      <pubDate>Fri, 16 Jan 2026 09:20:49 +0900</pubDate>
    </item>
    <item>
      <title>[Linux](URL) 우분투 부팅 USB 만들기</title>
      <link>https://minibcake.tistory.com/576</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs8tTV/dJMcadU1MiF/HgTrM3t81qyRC2ugfuB641/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs8tTV/dJMcadU1MiF/HgTrM3t81qyRC2ugfuB641/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs8tTV/dJMcadU1MiF/HgTrM3t81qyRC2ugfuB641/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs8tTV%2FdJMcadU1MiF%2FHgTrM3t81qyRC2ugfuB641%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;147&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://amkorousagi-money.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%B6%80%ED%8C%85-usb-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%A4%EC%B9%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://amkorousagi-money.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%B6%80%ED%8C%85-usb-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%A4%EC%B9%98&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1768373772352&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;우분투 부팅 usb 만들기, 우분투 설치&quot; data-og-description=&quot;우분투 이미지 다운로드 우분투 22.04 버전이 stable이지만 몇몇 소프트웨어가 아직 호환이 되지 않는 문제가 있기 때문에 우분투 20.04 버전을 기준으로 포스팅합니다. Ubuntu 20.04.4 LTS (Focal Fossa) Selec&quot; data-og-host=&quot;amkorousagi-money.tistory.com&quot; data-og-source-url=&quot;https://amkorousagi-money.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%B6%80%ED%8C%85-usb-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%A4%EC%B9%98&quot; data-og-url=&quot;https://amkorousagi-money.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%B6%80%ED%8C%85-usb-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%A4%EC%B9%98&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bwzeX3/dJMb8U8M0YJ/3256XKRG13b4dkHaILwyb1/img.png?width=504&amp;amp;height=387&amp;amp;face=0_0_504_387,https://scrap.kakaocdn.net/dn/0s4e9/dJMb8YXEPyl/9MUaGp1hGVykiXwArK46P0/img.png?width=504&amp;amp;height=387&amp;amp;face=0_0_504_387,https://scrap.kakaocdn.net/dn/YD3vj/dJMb8Xj8My3/4QyqGbg2KRkSNMKHKkBLOK/img.png?width=1209&amp;amp;height=898&amp;amp;face=0_0_1209_898&quot;&gt;&lt;a href=&quot;https://amkorousagi-money.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%B6%80%ED%8C%85-usb-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%A4%EC%B9%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://amkorousagi-money.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%B6%80%ED%8C%85-usb-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%A4%EC%B9%98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bwzeX3/dJMb8U8M0YJ/3256XKRG13b4dkHaILwyb1/img.png?width=504&amp;amp;height=387&amp;amp;face=0_0_504_387,https://scrap.kakaocdn.net/dn/0s4e9/dJMb8YXEPyl/9MUaGp1hGVykiXwArK46P0/img.png?width=504&amp;amp;height=387&amp;amp;face=0_0_504_387,https://scrap.kakaocdn.net/dn/YD3vj/dJMb8Xj8My3/4QyqGbg2KRkSNMKHKkBLOK/img.png?width=1209&amp;amp;height=898&amp;amp;face=0_0_1209_898');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;우분투 부팅 usb 만들기, 우분투 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;우분투 이미지 다운로드 우분투 22.04 버전이 stable이지만 몇몇 소프트웨어가 아직 호환이 되지 않는 문제가 있기 때문에 우분투 20.04 버전을 기준으로 포스팅합니다. Ubuntu 20.04.4 LTS (Focal Fossa) Selec&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;amkorousagi-money.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ubuntu.com/download/desktop&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ubuntu.com/download/desktop&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://rufus.ie/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://rufus.ie/ko/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1768373833201&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Rufus - 부팅 가능한 USB 드라이브를 간편하게 만들기&quot; data-og-description=&quot;&quot; data-og-host=&quot;rufus.ie&quot; data-og-source-url=&quot;https://rufus.ie/ko/&quot; data-og-url=&quot;https://rufus.ie/ko/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdwjBH/dJMb81fLYu8/QEMuuVlaAV8aHCshlwKYlk/img.png?width=1018&amp;amp;height=1234&amp;amp;face=0_0_1018_1234,https://scrap.kakaocdn.net/dn/835os/dJMb89x6SzZ/jTMEev9VqZQPt29hWxcKZK/img.png?width=983&amp;amp;height=1235&amp;amp;face=0_0_983_1235,https://scrap.kakaocdn.net/dn/C8TQ7/dJMb9lL4YAp/e7U2a0VUrp7NkHoo9fBYK0/img.png?width=950&amp;amp;height=1266&amp;amp;face=0_0_950_1266&quot;&gt;&lt;a href=&quot;https://rufus.ie/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rufus.ie/ko/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdwjBH/dJMb81fLYu8/QEMuuVlaAV8aHCshlwKYlk/img.png?width=1018&amp;amp;height=1234&amp;amp;face=0_0_1018_1234,https://scrap.kakaocdn.net/dn/835os/dJMb89x6SzZ/jTMEev9VqZQPt29hWxcKZK/img.png?width=983&amp;amp;height=1235&amp;amp;face=0_0_983_1235,https://scrap.kakaocdn.net/dn/C8TQ7/dJMb9lL4YAp/e7U2a0VUrp7NkHoo9fBYK0/img.png?width=950&amp;amp;height=1266&amp;amp;face=0_0_950_1266');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Rufus - 부팅 가능한 USB 드라이브를 간편하게 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;rufus.ie&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;727&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca4oFu/dJMcagYwuz4/bgNkfbJI0kGcOLhfhChsk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca4oFu/dJMcagYwuz4/bgNkfbJI0kGcOLhfhChsk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca4oFu/dJMcagYwuz4/bgNkfbJI0kGcOLhfhChsk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca4oFu%2FdJMcagYwuz4%2FbgNkfbJI0kGcOLhfhChsk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;798&quot; height=&quot;727&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;727&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LzbIT/dJMcagxsZnN/ZhruYMHgYbXIKo9OXB4HJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LzbIT/dJMcagxsZnN/ZhruYMHgYbXIKo9OXB4HJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LzbIT/dJMcagxsZnN/ZhruYMHgYbXIKo9OXB4HJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLzbIT%2FdJMcagxsZnN%2FZhruYMHgYbXIKo9OXB4HJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;543&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yPvU3/dJMcaajIWt3/3Kl4E9djG6KodZTdvcCock/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yPvU3/dJMcaajIWt3/3Kl4E9djG6KodZTdvcCock/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yPvU3/dJMcaajIWt3/3Kl4E9djG6KodZTdvcCock/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyPvU3%2FdJMcaajIWt3%2F3Kl4E9djG6KodZTdvcCock%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;585&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpXnGn/dJMcai24LUb/qlVmtJNEqIN1sON227WZZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpXnGn/dJMcai24LUb/qlVmtJNEqIN1sON227WZZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpXnGn/dJMcai24LUb/qlVmtJNEqIN1sON227WZZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpXnGn%2FdJMcai24LUb%2FqlVmtJNEqIN1sON227WZZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;585&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ePIIvG/dJMcabiDNAK/cw79Kpb7vDJVMnJBSmEwjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ePIIvG/dJMcabiDNAK/cw79Kpb7vDJVMnJBSmEwjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ePIIvG/dJMcabiDNAK/cw79Kpb7vDJVMnJBSmEwjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FePIIvG%2FdJMcabiDNAK%2Fcw79Kpb7vDJVMnJBSmEwjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;585&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZFBXv/dJMcahwnMTV/tO3xWa2PkKYlJepM3Q2JE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZFBXv/dJMcahwnMTV/tO3xWa2PkKYlJepM3Q2JE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZFBXv/dJMcahwnMTV/tO3xWa2PkKYlJepM3Q2JE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZFBXv%2FdJMcahwnMTV%2FtO3xWa2PkKYlJepM3Q2JE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;548&quot; height=&quot;270&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dihSRJ/dJMcahC8nPf/XzCsgdqh72VfHnxBxLrtqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dihSRJ/dJMcahC8nPf/XzCsgdqh72VfHnxBxLrtqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dihSRJ/dJMcahC8nPf/XzCsgdqh72VfHnxBxLrtqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdihSRJ%2FdJMcahC8nPf%2FXzCsgdqh72VfHnxBxLrtqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;462&quot; height=&quot;165&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;165&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDJEne/dJMcagjVNSA/zROBcTisKpJI2gPu9puKqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDJEne/dJMcagjVNSA/zROBcTisKpJI2gPu9puKqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDJEne/dJMcagjVNSA/zROBcTisKpJI2gPu9puKqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDJEne%2FdJMcagjVNSA%2FzROBcTisKpJI2gPu9puKqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;585&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CFbn7/dJMcafFkYlh/NCimClsouIgxCVkb4BuCS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CFbn7/dJMcafFkYlh/NCimClsouIgxCVkb4BuCS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CFbn7/dJMcafFkYlh/NCimClsouIgxCVkb4BuCS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCFbn7%2FdJMcafFkYlh%2FNCimClsouIgxCVkb4BuCS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;418&quot; height=&quot;585&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;585&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>Linux</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/576</guid>
      <comments>https://minibcake.tistory.com/576#entry576comment</comments>
      <pubDate>Wed, 14 Jan 2026 16:53:30 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 크론탭 CronTab</title>
      <link>https://minibcake.tistory.com/573</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9p9g8/dJMcacokpdI/fOErZV5g3YoTKBFuWHdc8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9p9g8/dJMcacokpdI/fOErZV5g3YoTKBFuWHdc8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9p9g8/dJMcacokpdI/fOErZV5g3YoTKBFuWHdc8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9p9g8%2FdJMcacokpdI%2FfOErZV5g3YoTKBFuWHdc8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;147&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;crontab -e&lt;/b&gt; : Crontab 파일 편집기 열기&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;crontab -l&lt;/b&gt; : 현재 등록된 Cron 작업 확인&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; crontab -r&lt;/b&gt; : 현재 등록된 모든 Cron 작업 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size23&quot;&gt;Cron 구문 작성 규칙&lt;/h3&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size16&quot;&gt;Crontab 파일에 작업 스케줄을 등록할 때는 아래와 같은 &lt;b&gt;다섯 자리 시간 필드&lt;/b&gt;와 &lt;b&gt;실행할 명령어&lt;/b&gt; 순서로 작성해야 합니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;9&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;순서&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;필드&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;허용 값&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,1,0,0&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,1,1,0&quot;&gt;&lt;b&gt;분&lt;/b&gt; (Minute)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,1,2,0&quot;&gt;0 - 59&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,1,3,0&quot;&gt;몇 분에 실행할지&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,2,0,0&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,2,1,0&quot;&gt;&lt;b&gt;시&lt;/b&gt; (Hour)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,2,2,0&quot;&gt;0 - 23&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,2,3,0&quot;&gt;몇 시에 실행할지 (24시간제)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,3,0,0&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,3,1,0&quot;&gt;&lt;b&gt;일&lt;/b&gt; (Day of Month)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,3,2,0&quot;&gt;1 - 31&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,3,3,0&quot;&gt;매월 며칠에 실행할지&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,4,0,0&quot;&gt;&lt;b&gt;4&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,4,1,0&quot;&gt;&lt;b&gt;월&lt;/b&gt; (Month)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,4,2,0&quot;&gt;1 - 12&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,4,3,0&quot;&gt;몇 월에 실행할지&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,5,0,0&quot;&gt;&lt;b&gt;5&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,5,1,0&quot;&gt;&lt;b&gt;요일&lt;/b&gt; (Day of Week)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,5,2,0&quot;&gt;0 - 7&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,5,3,0&quot;&gt;요일에 실행할지 (0 또는 7=일요일, 1=월요일, ..., 6=토요일)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,6,0,0&quot;&gt;&lt;b&gt;6&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,6,1,0&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,6,2,0&quot;&gt;모든 쉘 명령어&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,6,3,0&quot;&gt;실제로 실행할 명령어 또는 스크립트&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;11&quot; data-ke-size=&quot;size26&quot;&gt;Crontab 시간 설정 예시&lt;/h2&gt;
&lt;p data-path-to-node=&quot;12&quot; data-ke-size=&quot;size16&quot;&gt;시간 필드에서는 특정 값 외에도 다양한 기호를 사용하여 반복을 설정할 수 있습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;13&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;기호&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,1,0,0&quot;&gt;&lt;b&gt;*&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,1,1,0&quot;&gt;&lt;b&gt;모든 값&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,1,2,0&quot;&gt;* * * * *&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,1,3,0&quot;&gt;매 분, 매 시, 매일 실행 (1분마다)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,2,0,0&quot;&gt;&lt;b&gt;,&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,2,1,0&quot;&gt;&lt;b&gt;쉼표 (목록)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,2,2,0&quot;&gt;0 10 * * 1,3,5&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,2,3,0&quot;&gt;매주 월, 수, 금요일 오전 10시 0분에 실행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,3,0,0&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,3,1,0&quot;&gt;&lt;b&gt;하이픈 (범위)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,3,2,0&quot;&gt;0 10 * * 1-5&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,3,3,0&quot;&gt;월요일부터 금요일까지 오전 10시 0분에 실행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,4,0,0&quot;&gt;&lt;b&gt;/&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,4,1,0&quot;&gt;&lt;b&gt;슬래시 (간격)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,4,2,0&quot;&gt;*/15 * * * *&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;13,4,3,0&quot;&gt;15분 간격(0, 15, 30, 45분)으로 실행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;14&quot; data-ke-size=&quot;size23&quot;&gt;주요 예제&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;스케줄 구문&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;15,1,0,0&quot;&gt;0 3 * * * /bin/bash /path/to/backup.sh&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;15,1,1,0&quot;&gt;매일 새벽 3시 0분에 backup.sh 스크립트 실행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;15,2,0,0&quot;&gt;*/10 * * * * /usr/bin/logger &quot;10분마다 실행&quot;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;15,2,1,0&quot;&gt;10분마다 로그 기록 (10분, 20분, 30분...)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;15,3,0,0&quot;&gt;0 0 1 * * /path/to/monthly_report.sh&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;15,3,1,0&quot;&gt;매월 1일 0시 0분에 월별 보고서 스크립트 실행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-path-to-node=&quot;28&quot; data-ke-size=&quot;size26&quot;&gt;특수 문자열 (Special Strings)&lt;/h2&gt;
&lt;p data-path-to-node=&quot;29&quot; data-ke-size=&quot;size16&quot;&gt;자주 사용하는 스케줄 패턴은 짧은 문자열로 대체하여 사용할 수 있습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;30&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;문자열&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;구문과 동일&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,1,0,0&quot;&gt;&lt;b&gt;@hourly&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,1,1,0&quot;&gt;0 * * * *&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,1,2,0&quot;&gt;매 시 정각&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,2,0,0&quot;&gt;&lt;b&gt;@daily&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,2,1,0&quot;&gt;0 0 * * *&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,2,2,0&quot;&gt;매일 자정 (새벽 0시 0분)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,3,0,0&quot;&gt;&lt;b&gt;@weekly&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,3,1,0&quot;&gt;0 0 * * 0&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,3,2,0&quot;&gt;매주 일요일 자정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,4,0,0&quot;&gt;&lt;b&gt;@monthly&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,4,1,0&quot;&gt;0 0 1 * *&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,4,2,0&quot;&gt;매월 1일 자정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,5,0,0&quot;&gt;&lt;b&gt;@annually&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,5,1,0&quot;&gt;0 0 1 1 *&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,5,2,0&quot;&gt;매년 1월 1일 자정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,6,0,0&quot;&gt;&lt;b&gt;@reboot&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;30,6,2,0&quot;&gt;시스템 재부팅 시 한 번 실행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Linux</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/573</guid>
      <comments>https://minibcake.tistory.com/573#entry573comment</comments>
      <pubDate>Sun, 7 Dec 2025 16:28:07 +0900</pubDate>
    </item>
    <item>
      <title>[Nexacro](URL) 넥사크로 OSMU</title>
      <link>https://minibcake.tistory.com/572</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vi56t/dJMcahXuM3S/0wgBrYv5LHCkTPuchEMg7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vi56t/dJMcahXuM3S/0wgBrYv5LHCkTPuchEMg7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vi56t/dJMcahXuM3S/0wgBrYv5LHCkTPuchEMg7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvi56t%2FdJMcahXuM3S%2F0wgBrYv5LHCkTPuchEMg7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;150&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/tobesoftux/220993962355&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://m.blog.naver.com/tobesoftux/220993962355&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1764030598929&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Nexacro platform으로 OSMU 시스템 만들기&quot; data-og-description=&quot;지난&amp;nbsp;&amp;lsquo;BUX모델이란?&amp;rsquo;&amp;nbsp;연재를 통해 모바일 오피스와 기업용&amp;nbsp;UI의&amp;nbsp;One Source ...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/tobesoftux/220993962355&quot; data-og-url=&quot;https://blog.naver.com/tobesoftux/220993962355&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cxNqxw/hyZOh2ElDO/OKW0NPTYKtLedCTaJfckD1/img.png?width=723&amp;amp;height=361&amp;amp;face=0_0_723_361&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/tobesoftux/220993962355&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/tobesoftux/220993962355&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cxNqxw/hyZOh2ElDO/OKW0NPTYKtLedCTaJfckD1/img.png?width=723&amp;amp;height=361&amp;amp;face=0_0_723_361');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Nexacro platform으로 OSMU 시스템 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난&amp;nbsp;&amp;lsquo;BUX모델이란?&amp;rsquo;&amp;nbsp;연재를 통해 모바일 오피스와 기업용&amp;nbsp;UI의&amp;nbsp;One Source ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/tobesoftux/220992459489&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://blog.naver.com/tobesoftux/220992459489&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1764030637500&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;모바일오피스,기업용 UI의 OSMU - 1&quot; data-og-description=&quot;혁신기업의 스마트워크-모바일오피스 도입오늘날 IT분야에서 모바일 만큼 사람들의 집중을 받는 주제는 ...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/tobesoftux/220992459489&quot; data-og-url=&quot;https://blog.naver.com/tobesoftux/220992459489&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bovWJr/hyZOgCCEek/q4OHqBRsNMItE1xJAAIF70/img.png?width=540&amp;amp;height=172&amp;amp;face=0_0_540_172&quot;&gt;&lt;a href=&quot;https://blog.naver.com/tobesoftux/220992459489&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/tobesoftux/220992459489&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bovWJr/hyZOgCCEek/q4OHqBRsNMItE1xJAAIF70/img.png?width=540&amp;amp;height=172&amp;amp;face=0_0_540_172');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;모바일오피스,기업용 UI의 OSMU - 1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;혁신기업의 스마트워크-모바일오피스 도입오늘날 IT분야에서 모바일 만큼 사람들의 집중을 받는 주제는 ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front/Nexacro</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/572</guid>
      <comments>https://minibcake.tistory.com/572#entry572comment</comments>
      <pubDate>Tue, 25 Nov 2025 09:30:42 +0900</pubDate>
    </item>
    <item>
      <title>[기타] Gson 어노테이션, Jackson 어노테이션 비교 (JSON)</title>
      <link>https://minibcake.tistory.com/570</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9lje2/dJMcaioxeKg/V2LntMsWckEfWfnSdC1BUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9lje2/dJMcaioxeKg/V2LntMsWckEfWfnSdC1BUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9lje2/dJMcaioxeKg/V2LntMsWckEfWfnSdC1BUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9lje2%2FdJMcaioxeKg%2FV2LntMsWckEfWfnSdC1BUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;200&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&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;Gson에서 Jackson으로 JSON 문자열 변경 라이브러리를 바꾸게 되었다.&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;table style=&quot;background-color: oklch(0.9902 0.004 106.47); color: oklch(0.3039 0.04 213.68); text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.8372%;&quot;&gt;&lt;b&gt; Gson &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.6977%;&quot;&gt;&lt;b&gt; Jackson &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.814%;&quot;&gt;&lt;b&gt; 기능 요약&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%;&quot;&gt;&lt;b&gt; 상세 설명 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.8372%;&quot;&gt;@SerializedName&lt;/td&gt;
&lt;td style=&quot;width: 25.6977%;&quot;&gt;@JsonProperty&lt;/td&gt;
&lt;td style=&quot;width: 20.814%;&quot;&gt;필드명을 JSON에서 다른 이름으로 매핑&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%;&quot;&gt;JSON과 자바 필드명이 다를 때 매핑. Jackson에서는 속성명뿐 아니라 직렬화/역직렬화 접근성(access = READ_ONLY,&lt;span&gt;&amp;nbsp;&lt;/span&gt;WRITE_ONLY)도 지정 가능.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.8372%;&quot;&gt;@Expose&lt;/td&gt;
&lt;td style=&quot;width: 25.6977%;&quot;&gt;@JsonProperty(access=...)&lt;br /&gt;@JsonIgnore&lt;/td&gt;
&lt;td style=&quot;width: 20.814%;&quot;&gt;해당 필드를 직렬화/역직렬화 할지 제어&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%;&quot;&gt;Gson은 기본적으로 모든 필드 직렬화/역직렬화하지만,&lt;span&gt;&amp;nbsp;&lt;/span&gt;GsonBuilder().excludeFieldsWithoutExposeAnnotation()을 설정하면 @Expose붙은 필드만 포함.&lt;br /&gt;@Expose(deserialize=false, serialize=true)처럼 세분화 지정 가능.&lt;br /&gt;Jackson은 @JsonProperty(access=...)로 읽기/쓰기 별도 제어.&lt;br /&gt;@JsonIgnore는 필드를 직렬화/역직렬화에서 완전히 제외.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.8372%;&quot;&gt;@Since&lt;/td&gt;
&lt;td style=&quot;width: 25.6977%;&quot;&gt;@JsonView&lt;br /&gt;@JsonProperty(access=...)&lt;/td&gt;
&lt;td style=&quot;width: 20.814%;&quot;&gt;특정 버전(이상)에서만 필드 포함&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%;&quot;&gt;Gson은 @Since로 특정 버전 이상일 때만 필드 포함 가능. Jackson은 완전히 같은 기능은 없지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;@JsonView로 특정 뷰, 또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;@JsonProperty(access=...)로 직렬화/역직렬화 제어 가능.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.8372%;&quot;&gt;@Until&lt;/td&gt;
&lt;td style=&quot;width: 25.6977%;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 20.814%;&quot;&gt;특정 버전(이하)에서만 필드 포함&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%;&quot;&gt;Gson만 지원. 지정한 버전 이하에서만 필드 포함. Jackson엔 직접 매칭 개념 없음.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.8372%;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 25.6977%;&quot;&gt;@JsonInclude&lt;/td&gt;
&lt;td style=&quot;width: 20.814%;&quot;&gt;조건(Null 등) 따라 JSON 포함 여부 선택&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%;&quot;&gt;Jackson만 지원. 필드 값이 null &amp;middot; default 등 조건에 따라 JSON 내 포함 여부를 결정함.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.8372%;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 25.6977%;&quot;&gt;@JsonIgnoreProperties&lt;/td&gt;
&lt;td style=&quot;width: 20.814%;&quot;&gt;여러 필드 한 번에 제외&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%;&quot;&gt;Jackson만 지원. 클래스나 필드 단위에서 여러 속성 이름을 한꺼번에 제외할 때 사용.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.8372%;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 25.6977%;&quot;&gt;@JsonAlias&lt;/td&gt;
&lt;td style=&quot;width: 20.814%;&quot;&gt;JSON의 여러 키를 하나의 필드로 허용&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%;&quot;&gt;Jackson만 지원. 여러 JSON key를 하나의 필드에 매핑할 때 유용.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>기타</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/570</guid>
      <comments>https://minibcake.tistory.com/570#entry570comment</comments>
      <pubDate>Fri, 15 Aug 2025 10:38:40 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] Gradle Dependency Configuration</title>
      <link>https://minibcake.tistory.com/569</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnMti3/btsOp65WZQY/j6uLIFnqC5sKknWg8FVTnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnMti3/btsOp65WZQY/j6uLIFnqC5sKknWg8FVTnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnMti3/btsOp65WZQY/j6uLIFnqC5sKknWg8FVTnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnMti3%2FbtsOp65WZQY%2Fj6uLIFnqC5sKknWg8FVTnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;128&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;gradle-dependency-configuration&quot; style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;주요 Gradle Dependency Configuration 종류, 예시, 설명&lt;/b&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: oklch(0.99 0.004 106.471); color: oklch(0.304 0.04 213.681); text-align: start;&quot;&gt;
&lt;table style=&quot;text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;종류&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;implementation&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;implementation 'org.springframework:spring-core:5.3.31'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;컴파일/런타임 모두 필요. 외부에 노출되지 않음(모듈 캡슐화). 가장 일반적으로 사용.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;api&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;api 'com.google.guava:guava:33.2.0-jre'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;컴파일/런타임 모두 필요.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;이 모듈을 사용하는 다른 모듈에도 의존성이 전파됨&lt;/b&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;compileOnly&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;compileOnly 'javax.servlet:servlet-api:2.5'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;컴파일 시에만 필요. 런타임에는 포함되지 않음. 예: 서블릿 API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;runtimeOnly&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;runtimeOnly 'mysql:mysql-connector-java:8.0.33'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;런타임에만 필요. 컴파일에는 필요 없음. 예: DB 드라이버&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;testImplementation&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;testImplementation 'org.junit.jupiter:junit-jupiter:5.11.4'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;테스트 코드에서만 필요. 실제 배포에는 포함되지 않음.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;testCompileOnly&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;testCompileOnly 'org.projectlombok:lombok:1.18.32'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;테스트 코드 컴파일 시에만 필요. 테스트 실행에는 포함되지 않음.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;testRuntimeOnly&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;testRuntimeOnly 'org.hsqldb:hsqldb:2.7.2'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;테스트 실행(런타임)에서만 필요. 예: 테스트 DB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;annotationProcessor&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;annotationProcessor 'org.projectlombok:lombok:1.18.32'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;컴파일 시 어노테이션 기반 코드 생성용. 예: Lombok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;developmentOnly&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;developmentOnly 'org.springframework.boot:spring-boot-devtools:3.3.0'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;개발 환경에서만 필요. 배포에는 포함되지 않음. 예: 핫리로드 도구&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;providedRuntime&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;WAR 배포 시 서버가 제공하므로 빌드 결과물에는 포함하지 않음.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;fileTree&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;implementation fileTree(dir: 'libs', include: ['*.jar'])&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;특정 폴더의 모든 JAR 파일을 의존성에 추가. 로컬 라이브러리 사용 시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.2093%;&quot;&gt;&lt;b&gt;project&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.7907%;&quot;&gt;implementation project(':common')&lt;/td&gt;
&lt;td style=&quot;width: 44.7674%;&quot;&gt;같은 멀티 프로젝트 내 다른 모듈을 의존성에 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1749103343324&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies {
    // 컴파일과 런타임 모두 필요한 일반적인 의존성
    implementation 'org.springframework.boot:spring-boot-starter-web'

    // 다른 모듈에서도 이 의존성을 사용할 수 있게 노출 (라이브러리 개발 시 주로 사용)
    api 'com.google.guava:guava:33.2.0-jre'

    // 컴파일 시에만 필요, 실행 파일에는 포함되지 않음 (예: Lombok)
    compileOnly 'org.projectlombok:lombok:1.18.32'

    // 컴파일 시 어노테이션 프로세서로 사용 (예: Lombok)
    annotationProcessor 'org.projectlombok:lombok:1.18.32'

    // 런타임에만 필요, 컴파일 시에는 필요 없음 (예: DB 드라이버)
    runtimeOnly 'mysql:mysql-connector-java:8.0.33'

    // 개발 환경에서만 필요, 배포에는 포함되지 않음 (예: DevTools)
    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    // WAR 배포 시 톰캣 등 서버가 제공하므로 빌드 결과물에는 포함하지 않음
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

    // 특정 폴더의 모든 JAR 파일을 의존성에 추가 (예: libs 폴더)
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    // 멀티 프로젝트에서 다른 모듈을 의존성에 추가
    implementation project(':common')

    // 테스트 코드에서만 필요
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    // 테스트 코드 컴파일 시에만 필요
    testCompileOnly 'org.projectlombok:lombok:1.18.32'

    // 테스트 실행(런타임)에서만 필요 (예: 테스트용 DB)
    testRuntimeOnly 'com.h2database:h2'
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Spring</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/569</guid>
      <comments>https://minibcake.tistory.com/569#entry569comment</comments>
      <pubDate>Thu, 5 Jun 2025 15:00:57 +0900</pubDate>
    </item>
    <item>
      <title>[Tip](URL) 인텔리제이 intellij 멀티 모듈</title>
      <link>https://minibcake.tistory.com/568</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqLuzb/btsOralnXch/QFwhdU44INzyfygTburkKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqLuzb/btsOralnXch/QFwhdU44INzyfygTburkKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqLuzb/btsOralnXch/QFwhdU44INzyfygTburkKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqLuzb%2FbtsOralnXch%2FQFwhdU44INzyfygTburkKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;149&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://j-ungry.tistory.com/382&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://j-ungry.tistory.com/382&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1749085619571&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Spring] intellij 멀티모듈 만들기 + 의존성 추가&quot; data-og-description=&quot;저번에 게이트웨이랑 api 서버 2개를 만들었는데 플젝마다 repo 를 만들면 git 에서 관리가 어려울 것 같아 멀티 모듈로 만들어보려고 한다 !!!프로젝트 우클릭 -&amp;gt; new -&amp;gt; module을 선택하면 spring 프로젝&quot; data-og-host=&quot;j-ungry.tistory.com&quot; data-og-source-url=&quot;https://j-ungry.tistory.com/382&quot; data-og-url=&quot;https://j-ungry.tistory.com/382&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bI2lZz/hyY34as1o9/NAkwRg0YMxPahjrmOtD0dK/img.png?width=572&amp;amp;height=268&amp;amp;face=0_0_572_268,https://scrap.kakaocdn.net/dn/n66HU/hyY1jmA0Pa/tBxbBrrlKeVjZL18F48Kzk/img.png?width=572&amp;amp;height=268&amp;amp;face=0_0_572_268,https://scrap.kakaocdn.net/dn/bN2jtw/hyY49o4L34/jSZykABSckkCHEhLkIza00/img.png?width=2602&amp;amp;height=1478&amp;amp;face=0_0_2602_1478&quot;&gt;&lt;a href=&quot;https://j-ungry.tistory.com/382&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://j-ungry.tistory.com/382&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bI2lZz/hyY34as1o9/NAkwRg0YMxPahjrmOtD0dK/img.png?width=572&amp;amp;height=268&amp;amp;face=0_0_572_268,https://scrap.kakaocdn.net/dn/n66HU/hyY1jmA0Pa/tBxbBrrlKeVjZL18F48Kzk/img.png?width=572&amp;amp;height=268&amp;amp;face=0_0_572_268,https://scrap.kakaocdn.net/dn/bN2jtw/hyY49o4L34/jSZykABSckkCHEhLkIza00/img.png?width=2602&amp;amp;height=1478&amp;amp;face=0_0_2602_1478');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Spring] intellij 멀티모듈 만들기 + 의존성 추가&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;저번에 게이트웨이랑 api 서버 2개를 만들었는데 플젝마다 repo 를 만들면 git 에서 관리가 어려울 것 같아 멀티 모듈로 만들어보려고 한다 !!!프로젝트 우클릭 -&amp;gt; new -&amp;gt; module을 선택하면 spring 프로젝&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;j-ungry.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타/Tip</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/568</guid>
      <comments>https://minibcake.tistory.com/568#entry568comment</comments>
      <pubDate>Thu, 5 Jun 2025 10:07:16 +0900</pubDate>
    </item>
    <item>
      <title>[실습/Flutter] inappwebview로 http status 처리</title>
      <link>https://minibcake.tistory.com/566</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/du0Man/btsN4cshXEB/L3TR4HaRjsjOsNATUD1BrK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/du0Man/btsN4cshXEB/L3TR4HaRjsjOsNATUD1BrK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/du0Man/btsN4cshXEB/L3TR4HaRjsjOsNATUD1BrK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdu0Man%2FbtsN4cshXEB%2FL3TR4HaRjsjOsNATUD1BrK%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&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;flutter에는 webview가 두 가지 있는데 그냥 webview는 공식에서 관리하는 대신 기능이 적고 inappwebview는 서드파티앱인 대신 기능이 상대적으로 많은 webview이다.&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;처음에는 webview를 사용했는데 http status를 받아와서 404나 500처리를 하려니 쉽지 않아서 inappwebview로 전환했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭔가 코드 구조도 좀 더 간결한 느낌...!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747795257704&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart'; // InAppWebView 패키지 가져오기

void main() {
  runApp(const Webview()); // 앱 실행
}

class Webview extends StatelessWidget {
  const Webview({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: WebviewPractice(), // 홈 화면으로 WebviewPractice 설정
    );
  }
}

class WebviewPractice extends StatefulWidget {
  const WebviewPractice({super.key});

  @override
  State&amp;lt;WebviewPractice&amp;gt; createState() =&amp;gt; _WebviewPracticeState(); // 상태 생성
}

class _WebviewPracticeState extends State&amp;lt;WebviewPractice&amp;gt; {
  late InAppWebViewController _controller; // 웹뷰 컨트롤러 

  // 접근 제어 목록
  final List&amp;lt;String&amp;gt; whitelist = ['naver.com', 'flutter.dev']; // 허용할 도메인 목록
  final List&amp;lt;String&amp;gt; blacklist = ['google.co.kr']; // 차단할 도메인 목록

  // 화이트 리스트 함수
  Future&amp;lt;NavigationActionPolicy&amp;gt; _checkWhiteList (host) async {
    if (whitelist.any((allowed) =&amp;gt; host.contains(allowed)))
      return NavigationActionPolicy.ALLOW; // 탐색 허용

    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('허용되지 않은 사이트입니다: $host')),
    );
    return NavigationActionPolicy.CANCEL; // 탐색 차단
  }

  // 블랙 리스트 함수
  Future&amp;lt;NavigationActionPolicy&amp;gt; _checkBlackList (host) async {
    if (blacklist.any((blocked) =&amp;gt; host.contains(blocked))) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('차단된 사이트입니다: $host')),
      );
      return NavigationActionPolicy.CANCEL; // 탐색 차단
    }
    return NavigationActionPolicy.ALLOW; // 그 외의 모든 URL은 허용
  }

  Future&amp;lt;NavigationActionPolicy&amp;gt; _chooseCheckList(host, String msg) async {
    switch (msg) {
      case 'B':
        return _checkBlackList(host);
      case 'W':
        return _checkWhiteList(host);
      default:
        debugPrint('error: 알 수 없는 리스트 타입 - $msg');
        return NavigationActionPolicy.CANCEL;
    }
  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('InAppWebView')), // 앱바 제목

      body: InAppWebView(
        // 초기 URL 설정
        initialUrlRequest: URLRequest(
          url: WebUri('https://naver.com'), // WebUri로 URL 생성 (초기 uri)
          
          // 테스트용
          // url: WebUri('https://httpstat.us/404'), // 404 오류 테스트를 위한 URL
          // url: WebUri('https://httpstat.us/500'), // 500 오류 테스트
          // url: WebUri('https://example.com/nonexistent-page'), // 404 오류 발생
          // url: WebUri('https://thiswebsitedoesnotexist.zzz'), // 도메인 해석 실패 테스트
        ),

        // 웹뷰 초기 설정
        initialSettings: InAppWebViewSettings(
          javaScriptEnabled: true, // 자바스크립트 활성화
        ),

        // 웹뷰가 생성됐을 때 호출되는 콜백
        onWebViewCreated: (controller) =&amp;gt; _controller = controller, // 컨트롤러 저장 (나중에 웹뷰 제어에 사용)

        // HTTP 통신 오류 처리 (서버 응답 오류: 404, 500 등)
        onReceivedHttpError: (controller, request, errorResponse) { // 매개변수로 받는 controller는 이벤트 controller, 콜백에서 저장한 _controller는 전역.. (동일한 객체 참조)
          int? statusCode = errorResponse.statusCode; //상태코드
          debugPrint('HTTP error: $statusCode, url: ${request.url}, description: ${errorResponse.reasonPhrase}');

          // 404나 500 오류일 때 리다이렉트 (연습을 위해 다른 페이지로 요청)
          if ( (statusCode == 404 || statusCode == 500) )
            _controller.loadUrl( urlRequest: URLRequest(url: WebUri('https://new.express.adobe.com/')) );
        },

        // 웹뷰 로딩 자체 오류 처리 (네트워크 연결 실패, 도메인 해석 실패 등)
        onReceivedError: (controller, request, error) =&amp;gt; debugPrint('Load error: ${error.type.toString()}, ${error.description}, url: ${request.url}'),

        // URL 로딩 요청을 가로채서 허용/차단 결정하는 콜백
        shouldOverrideUrlLoading: (controller, navigationAction) async {
          final uri = navigationAction.request.url;
          if (uri == null) return NavigationActionPolicy.CANCEL; // URL이 없으면 탐색 차단
          final host = uri.host; // 호스트 도메인 추출

          return _chooseCheckList(host, 'B');
        },
      ),
    );
  }
}&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;pre id=&quot;code_1747795395351&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        // HTTP 통신 오류 처리 (서버 응답 오류: 404, 500 등)
        onReceivedHttpError: (controller, request, errorResponse) { // 매개변수로 받는 controller는 이벤트 controller, 콜백에서 저장한 _controller는 전역.. (동일한 객체 참조)
          int? statusCode = errorResponse.statusCode; //상태코드
          debugPrint('HTTP error: $statusCode, url: ${request.url}, description: ${errorResponse.reasonPhrase}');

          // 404나 500 오류일 때 리다이렉트 (연습을 위해 다른 페이지로 요청)
          if ( (statusCode == 404 || statusCode == 500) )
            _controller.loadUrl( urlRequest: URLRequest(url: WebUri('https://new.express.adobe.com/')) );
        },&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분이 에러 발생 시 리다이렉트하는 부분이며, errorResponse로부터 statusCode를 받아와 전역 controller를 통해 리다이렉트 시키는 구조로 되어있다. onReceiveHttpError의 경우 http 에러가 발생했을 때만 처리되기 때문에 네트워크 문제나 도메인 해석 실패 등은 감지할 수 없고, 정상 작동도 여기서는 처리할 수 없다.&lt;/p&gt;</description>
      <category>problem solving/과제&amp;amp;실습 코딩</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/566</guid>
      <comments>https://minibcake.tistory.com/566#entry566comment</comments>
      <pubDate>Wed, 21 May 2025 11:45:41 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] Dart 기초</title>
      <link>https://minibcake.tistory.com/565</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EAV9b/btsN4059TVn/Y9llk1JqIQmujMbtHWfu2k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EAV9b/btsN4059TVn/Y9llk1JqIQmujMbtHWfu2k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EAV9b/btsN4059TVn/Y9llk1JqIQmujMbtHWfu2k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEAV9b%2FbtsN4059TVn%2FY9llk1JqIQmujMbtHWfu2k%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;다트 Dart&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글이 멀티 플랫폼 상에서 동작되도록 하는 앱을 위해 디자인된 객체지향 프로그래밍 언어이다. 2011년 10월 공개되었으며, C언어와 유사한 문법을 가지고 있고, Java, C#, JS와 같은 기능적 스트럭쳐를 추가한 언어라서 간결하고 강력한 기능을 지원한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dart는 DVM(Dart VM)상에서 동작하거나 네이티브 컴파일링을 통해 모바일, 데스크톱, 웹 브라우저, 서버 플랫폼 상에서 어플리케이션 실행을 지원한다. 구글에서 2017년 발표한 크로스플랫폼 앱 프레임워크인 Flutter가 사용하는 언어이다.&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;Android Studio, Intellij, VS Code 등에서 사용할 수 있다. (IDE)&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;Dart 자료형&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 99.7675%;&quot; colspan=&quot;3&quot;&gt;&lt;b&gt;기본 자료형&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;int&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;정수형&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;42, -1, 0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;double&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;부동 소수점&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;3.14, -0.5, 1.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;num&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;int와 double의 상위 타입&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;int 또는 double 값 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;bool&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;불리언&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;true, false&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;String&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;문자열&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;'안녕', &quot;Dart&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 99.7675%;&quot; colspan=&quot;3&quot;&gt;&lt;b&gt;컬렉션 자료형&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;List&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;순서가 있는 객체 집합&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;[1, 2, 3], &amp;lt;String&amp;gt;['a', 'b']&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Set&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;중복이 없는 객체 집합&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;{1, 2, 3}, &amp;lt;String&amp;gt;{'a', 'b'}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Map&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;키-값 쌍의 컬렉션&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;{'key': 'value'}, &amp;lt;String, int&amp;gt;{'a': 1}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 99.7675%;&quot; colspan=&quot;3&quot;&gt;&lt;b&gt;특수 자료형&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;dynamic&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;모든 타입 허용&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;어떤 타입도 할당 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;var&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;타입 추론&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;초기값에 따라 타입 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;final&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;한 번만 할당 가능&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;final name = 'Dart'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;const&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;컴파일 타임 상수&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;const pi = 3.14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Object&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;모든 클래스의 기본 클래스&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;모든 객체의 상위 타입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Null&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;null 값만 가질 수 있음&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;null&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 99.7675%;&quot; colspan=&quot;3&quot;&gt;&lt;b&gt;기타&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Runes&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;유니코드 문자열&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;' '.runes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Symbol&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;심볼 식별자&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;#name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Enum&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;열거형&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;enum Color { red, green, blue }&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Future&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;비동기 작업의 결과&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;Future&amp;lt;String&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Stream&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;비동기 데이터 시퀀스&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;Stream&amp;lt;int&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.8837%;&quot;&gt;Function&lt;/td&gt;
&lt;td style=&quot;width: 34.6512%;&quot;&gt;함수 타입&lt;/td&gt;
&lt;td style=&quot;width: 45.2326%;&quot;&gt;void Function(String)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기본 함수 구조&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747794646387&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;반환타입 함수이름(매개변수) { //매개변수 타입 생략 가능(명시하는 것이 좋음)
  // 함수 내용
  return 반환값; // 반환값이 있는 경우
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;var와 dynamic 차이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747794474052&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// [불가] - 문자 타입의 var 에 1 을 집어넣지 못함
var userName = 'aeco';
userName = 1;

// [가능] - 문자 타입의 dynamic 에 1 을 넣어 숫자 타입으로 변경 됨
dynamic userName = 'aeco';
userName = 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;&lt;b&gt;final, const 차이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747794518623&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;final String userName1 = 'aeco'; //런타임 때 생성
const String userName2 - 'aeco'; //컴파일 때 생성&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;물음표 연산자&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1747794566863&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 타입 뒤에 ?를 명시해서 null값을 가질 수 있음
double? number1 = null;

// 타입 뒤에 ?를 명시하지 않아 에러가 남
double number2 = null;

double? number;   // 자동으로 null값 지정
print(number);

number ??= 3;   // ??를 사용하면 기존 값이 null일 때만 저장
print(number);

number ??= 4; // null이 아니기 때문에 기존 3이 그대로 유지
print(number);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mjn5027.tistory.com/115&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mjn5027.tistory.com/115&lt;/a&gt;&lt;/p&gt;</description>
      <category>Front/Flutter</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/565</guid>
      <comments>https://minibcake.tistory.com/565#entry565comment</comments>
      <pubDate>Wed, 21 May 2025 11:31:26 +0900</pubDate>
    </item>
    <item>
      <title>[실습/Flutter] WebView</title>
      <link>https://minibcake.tistory.com/564</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW8gE2/btsN4a8ZpAw/ofXA654Gh54js3rHPswACk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW8gE2/btsN4a8ZpAw/ofXA654Gh54js3rHPswACk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW8gE2/btsN4a8ZpAw/ofXA654Gh54js3rHPswACk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW8gE2%2FbtsN4a8ZpAw%2FofXA654Gh54js3rHPswACk%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&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;앱 내에서 웹페이지 띄우기 (WebView 활용)&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;dependencies&lt;/p&gt;
&lt;pre id=&quot;code_1747745421375&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.8
  #WebView 의존 추가
  webview_flutter: ^4.12.0&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;dart code&lt;/p&gt;
&lt;pre id=&quot;code_1747745509711&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart'; //webview

void main() {
  runApp(const Webview());
}

class Webview extends StatelessWidget {
  const Webview({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: WebviewPractice(),
    );
  }
}

class WebviewPractice extends StatefulWidget {
  const WebviewPractice({super.key});

  @override
  State&amp;lt;WebviewPractice&amp;gt; createState() =&amp;gt; _WebviewPracticeState();
}

class _WebviewPracticeState extends State&amp;lt;WebviewPractice&amp;gt; {
  late final WebViewController _controller;

  // 화이트리스트 도메인
  final List&amp;lt;String&amp;gt; whitelist = ['naver.com', 'flutter.dev'];

  // 블랙리스트 도메인
  final List&amp;lt;String&amp;gt; blacklist = ['google.co.kr'];

  @override
  void initState() {
    super.initState();
    _controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setNavigationDelegate(
        NavigationDelegate( //검증
          onNavigationRequest: (NavigationRequest request) {
            final host = Uri.parse(request.url).host; //uri의 도메인 추출
            
            //화이트리스트 검증 또는 블랙리스트 검증 추가 위치
          },
        ),
      )
      ..loadRequest(Uri.parse('https://naver.com')); //첫 페이지 세팅
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('WebView')), //상단 바 세팅
      body: WebViewWidget(controller: _controller), //body 전체를 웹 페이지로
    );
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화이트 리스트의 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(화이트 리스트에 있는 도메인만 허용)&lt;/p&gt;
&lt;pre id=&quot;code_1747745611319&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 화이트리스트 로직
if (whitelist.any((allowed) =&amp;gt; host.contains(allowed))) { //whiteList의 요소가 host(도메인)에 포함된다면
     return NavigationDecision.navigate; //허용
}
// 차단된 도메인 접근 시 알림 가능
ScaffoldMessenger.of(context).showSnackBar( //스낵바알림
     SnackBar(content: Text('허용되지 않은 사이트입니다: $host')),
);
return NavigationDecision.prevent; //차단&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블랙 리스트의 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(블랙 리스트에 있는 도메인만 비허용)&lt;/p&gt;
&lt;pre id=&quot;code_1747745680621&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 블랙리스트 로직
if (blacklist.any((blocked) =&amp;gt; host.contains(blocked))) { //blackList의 요소가 host(도메인)에 포함된다면
     ScaffoldMessenger.of(context).showSnackBar( //스낵바알림
          SnackBar(content: Text('차단된 사이트입니다: $host')),
     );
     return NavigationDecision.prevent; //차단
}
return NavigationDecision.navigate; //허용&lt;/code&gt;&lt;/pre&gt;</description>
      <category>problem solving/과제&amp;amp;실습 코딩</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/564</guid>
      <comments>https://minibcake.tistory.com/564#entry564comment</comments>
      <pubDate>Tue, 20 May 2025 21:58:36 +0900</pubDate>
    </item>
    <item>
      <title>[Tip] 인텔리제이 intellij 세팅</title>
      <link>https://minibcake.tistory.com/563</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byPsFd/btsN414K5wr/oN8B6CGYak1AFJHxVliVkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byPsFd/btsN414K5wr/oN8B6CGYak1AFJHxVliVkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byPsFd/btsN414K5wr/oN8B6CGYak1AFJHxVliVkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyPsFd%2FbtsN414K5wr%2FoN8B6CGYak1AFJHxVliVkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;149&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[Tip] 인텔리제이 intellij 단축키 (window)&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;https://resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdfhttps://www.jetbrains.com/help/idea/mastering-keyboard-shortcuts.html# IntelliJ IDEA keyboard shortcuts | IntelliJ IDEA www.jetbrains.com https://disquiet.io/&quot; data-og-host=&quot;minibcake.tistory.com&quot; data-og-source-url=&quot;https://minibcake.tistory.com/274&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bi69YC/hyY0niucYs/W8UYlY6hlm9eRf7GqnE1qk/img.png?width=581&amp;amp;height=578&amp;amp;face=0_0_581_578,https://scrap.kakaocdn.net/dn/bPCQ7Y/hyY35HcvDu/J5cM2HX0Zswk5EJgI1FUSK/img.png?width=581&amp;amp;height=578&amp;amp;face=0_0_581_578,https://scrap.kakaocdn.net/dn/d1hz5H/hyY48qaoFK/quLOxINKBR403KMFuKkDb0/img.png?width=1169&amp;amp;height=830&amp;amp;face=0_0_1169_830&quot; data-og-url=&quot;https://minibcake.tistory.com/274&quot;&gt;&lt;a href=&quot;https://minibcake.tistory.com/274&quot; target=&quot;_blank&quot; data-source-url=&quot;https://minibcake.tistory.com/274&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bi69YC/hyY0niucYs/W8UYlY6hlm9eRf7GqnE1qk/img.png?width=581&amp;amp;height=578&amp;amp;face=0_0_581_578,https://scrap.kakaocdn.net/dn/bPCQ7Y/hyY35HcvDu/J5cM2HX0Zswk5EJgI1FUSK/img.png?width=581&amp;amp;height=578&amp;amp;face=0_0_581_578,https://scrap.kakaocdn.net/dn/d1hz5H/hyY48qaoFK/quLOxINKBR403KMFuKkDb0/img.png?width=1169&amp;amp;height=830&amp;amp;face=0_0_1169_830')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;[Tip] 인텔리제이 intellij 단축키 (window)&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;https://resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdfhttps://www.jetbrains.com/help/idea/mastering-keyboard-shortcuts.html# IntelliJ IDEA keyboard shortcuts | IntelliJ IDEA www.jetbrains.com https://disquiet.io/&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;minibcake.tistory.com&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;(설정 탭 : File - Settings (Ctrl+alt+S))&lt;/b&gt;&lt;br&gt;&lt;b&gt;인텔리제이 설정에는 IDE 설정과 Project 설정이 있음 &lt;/b&gt;&lt;br&gt;&lt;b&gt;(구분되는 설정은 상단에 설정 드롭다운메뉴가 있으니 상단 체크!)&lt;/b&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤&amp;nbsp;한글 -&amp;gt; 영어 변경&lt;/b&gt;&lt;br&gt;[Settings] Plugins - installed - korean 검색 - 체크해제&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤ SQL no datasource 노란 밑줄 해제&lt;/b&gt;&lt;br&gt; &lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - inspections - No data sources configured 체크해제&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;▤&amp;nbsp;&lt;/b&gt;&lt;b&gt; 코드 작성 화면에서 오른쪽 세로줄 제거&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - General - Apprerance - Show hard wrap and visual guides... 설정 체크 해제&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; ▤&amp;nbsp; 테마 변경&lt;/b&gt;&lt;br&gt;ctrl + `&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤&amp;nbsp; 코드 폴딩 단축키 (properties 값 미리보기, 코드 접기 등)&lt;/b&gt;&lt;br&gt;접기 : ctrl + numpad -&lt;br&gt;풀기:&amp;nbsp; ctrl + numpad +&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; ▤&amp;nbsp; 코드 한 줄 변경 해제&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - General - Code Folding - One-line methods 해제&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤&amp;nbsp;&amp;nbsp;import 자동 접힘 해제&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - General - Code Folding - import 해제&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; ▤&amp;nbsp; 파일 미리보기&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - General - Editor Tabs - Enable preview tab 체크&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; ▤&amp;nbsp; 주석(코멘트) 맞춤법 검사 해제&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - inspections - proofreading - Typo - [option] Process comments 해제&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; ▤&amp;nbsp; import 자동 *(와일드카드) 처리 해제&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - code style - 언어 - import - Class count to use, Names count to use 숫자를 999처리&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; ▤&amp;nbsp; 안 쓰는 import 자동처리&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - General - Auto Import - Optimize imports on the fly&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; ▤&amp;nbsp; 탭, 스페이스바 표시&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - General - Appearance - Show whitespaces&lt;br&gt;- Leading : 줄에서 코드 앞쪽의 공백 표시&lt;br&gt;- Inner : 줄에서 코드 중간의 공백 표시&lt;br&gt;- Trailing : 줄에서 코드 끝의 공백을 표시&lt;br&gt;- Selection :&amp;nbsp; 코드를 선택했을 때 선택된 영역의 공백을 표시&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤ 대소문자를 가리지 않는 자동완성&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - General - Code Completion - Match case 해제&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; ▤&amp;nbsp; hot reload 설정 (only front)&lt;/b&gt;&lt;br&gt;&lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; server edit - Run/Debug Configurations - Modify options&lt;br&gt;- On 'Update' action : Update resources&lt;br&gt;- On frame dectivation : Update resources&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤ UTF-8 설정&lt;/b&gt;&lt;br&gt; &lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - File Encodings&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤ 작업 중인 패키지 경로 보여주기&lt;/b&gt;&lt;br&gt;project 우클릭 - Always Select Opened File&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤ ctrl+휠 에디터 폰트 사이즈 조절 옵션 켜기&lt;/b&gt;&lt;br&gt; &lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Editor - General - Change font size with Ctrl+Mouse Wheel 체크&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤ 설정&amp;nbsp;백업 및 동기화 (intellij 계정)&lt;/b&gt;&lt;br&gt; &lt;span style=&quot;color: #333333;&quot;&gt;[Settings]&amp;nbsp;&lt;/span&gt; Backup and Sync - login (로그인 후 백업 및 동기화 원하는 항목 선택)&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤ 터미널 windows CMD 에서 Git Bash로 변경&lt;/b&gt;&lt;br&gt;Tools - Terminal - shell path - (git/bin/sh.exe가 있는 경로)&lt;/p&gt;&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&quot;C:\Program Files\Git\bin\sh.exe&quot; -login -i&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;--&amp;gt; 이 방식보다는 그냥 git bash 창 여는게 나음&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FFrxT/btsOg5k8YkS/lygeBVcJKuGkaTFOZlSpRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FFrxT/btsOg5k8YkS/lygeBVcJKuGkaTFOZlSpRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FFrxT/btsOg5k8YkS/lygeBVcJKuGkaTFOZlSpRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFFrxT%2FbtsOg5k8YkS%2FlygeBVcJKuGkaTFOZlSpRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;419&quot; height=&quot;335&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;▤&amp;nbsp;스페이스를 탭으로 전환 (관련 설정 해봐야 안 먹힘..)&lt;/b&gt;&lt;br&gt;Search Everywhere (shift 두번) - to tabs&lt;br&gt;최하단 오른쪽에 tab할지 spaces할지 결정하는 설정있음&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;280&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zmhUH/btsOrtrMI3V/nEccdpjfDtUVapKpR8eoc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zmhUH/btsOrtrMI3V/nEccdpjfDtUVapKpR8eoc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zmhUH/btsOrtrMI3V/nEccdpjfDtUVapKpR8eoc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzmhUH%2FbtsOrtrMI3V%2FnEccdpjfDtUVapKpR8eoc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;280&quot; height=&quot;105&quot; data-origin-width=&quot;280&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;246&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mSAsy/btsOrpiNrzE/xLhK6PAuT1VTdcvTvr2Rk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mSAsy/btsOrpiNrzE/xLhK6PAuT1VTdcvTvr2Rk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mSAsy/btsOrpiNrzE/xLhK6PAuT1VTdcvTvr2Rk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmSAsy%2FbtsOrpiNrzE%2FxLhK6PAuT1VTdcvTvr2Rk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;246&quot; height=&quot;68&quot; data-origin-width=&quot;246&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt; ▤&amp;nbsp; TODO&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[Tip] 인텔리제이 intellij TODO 코드 태그 커스텀&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;// TODO, // FIXME 와 같은 코드 태그를 인텔리제이에서도 설정할 수 있다.&amp;nbsp;코드 태그를 사용하면 주석을 하이라이팅하거나 한 눈에 모아볼 수도 있고 스크롤에서 해당 위치에 표시가 되기 때문에 &quot; data-og-host=&quot;minibcake.tistory.com&quot; data-og-source-url=&quot;https://minibcake.tistory.com/309&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sUuof/hyYYx4nt2T/VoGy7qUpY3bG1Uv3pGRtlK/img.jpg?width=225&amp;amp;height=225&amp;amp;face=0_0_225_225,https://scrap.kakaocdn.net/dn/bCdavK/hyYTcnIC8M/x77Gf2Y56F0p0g7SfTuIkk/img.jpg?width=225&amp;amp;height=225&amp;amp;face=0_0_225_225,https://scrap.kakaocdn.net/dn/bE3glw/hyYYHsn68A/UO6ObwoABkTRi7C5Od63F1/img.png?width=989&amp;amp;height=739&amp;amp;face=0_0_989_739&quot; data-og-url=&quot;https://minibcake.tistory.com/309&quot;&gt;&lt;a href=&quot;https://minibcake.tistory.com/309&quot; target=&quot;_blank&quot; data-source-url=&quot;https://minibcake.tistory.com/309&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sUuof/hyYYx4nt2T/VoGy7qUpY3bG1Uv3pGRtlK/img.jpg?width=225&amp;amp;height=225&amp;amp;face=0_0_225_225,https://scrap.kakaocdn.net/dn/bCdavK/hyYTcnIC8M/x77Gf2Y56F0p0g7SfTuIkk/img.jpg?width=225&amp;amp;height=225&amp;amp;face=0_0_225_225,https://scrap.kakaocdn.net/dn/bE3glw/hyYYHsn68A/UO6ObwoABkTRi7C5Od63F1/img.png?width=989&amp;amp;height=739&amp;amp;face=0_0_989_739')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;[Tip] 인텔리제이 intellij TODO 코드 태그 커스텀&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;// TODO, // FIXME 와 같은 코드 태그를 인텔리제이에서도 설정할 수 있다.&amp;nbsp;코드 태그를 사용하면 주석을 하이라이팅하거나 한 눈에 모아볼 수도 있고 스크롤에서 해당 위치에 표시가 되기 때문에 &lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;minibcake.tistory.com&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;가장 많이 사용되는 IntelliJ IDEA 단축키 15개 | Post Blog&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;IntelliJ IDEA는 편집, 탐색, 리팩토링, 디버깅 등 일상적으로 수행하는 대부분의 작업에 대하여 해당 명령어의 키보드 단축키를 제공합니다. 이러한 단축키를 배우고 연습하여 기억해 두면 작업 흐&quot; data-og-host=&quot;blog.jetbrains.com&quot; data-og-source-url=&quot;https://blog.jetbrains.com/ko/2020/03/11/top-15-intellij-idea-shortcuts_ko/#&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AFU83/hyY70kX7zW/3JKu4oZkBRZl7RzHnctYKk/img.png?width=1280&amp;amp;height=648&amp;amp;face=0_0_1280_648,https://scrap.kakaocdn.net/dn/pl1D6/hyY5bOUhBC/pnyty5Ucsfek7V9AfXrGV0/img.png?width=1280&amp;amp;height=648&amp;amp;face=0_0_1280_648,https://scrap.kakaocdn.net/dn/cqgdcG/hyY49Q48wU/6rqDLBxZxsu7sBJ6Zjgfk0/img.png?width=1280&amp;amp;height=648&amp;amp;face=0_0_1280_648&quot; data-og-url=&quot;https://blog.jetbrains.com/ko/2020/03/11/top-15-intellij-idea-shortcuts_ko/&quot;&gt;&lt;a href=&quot;https://blog.jetbrains.com/ko/2020/03/11/top-15-intellij-idea-shortcuts_ko/&quot; target=&quot;_blank&quot; data-source-url=&quot;https://blog.jetbrains.com/ko/2020/03/11/top-15-intellij-idea-shortcuts_ko/#&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AFU83/hyY70kX7zW/3JKu4oZkBRZl7RzHnctYKk/img.png?width=1280&amp;amp;height=648&amp;amp;face=0_0_1280_648,https://scrap.kakaocdn.net/dn/pl1D6/hyY5bOUhBC/pnyty5Ucsfek7V9AfXrGV0/img.png?width=1280&amp;amp;height=648&amp;amp;face=0_0_1280_648,https://scrap.kakaocdn.net/dn/cqgdcG/hyY49Q48wU/6rqDLBxZxsu7sBJ6Zjgfk0/img.png?width=1280&amp;amp;height=648&amp;amp;face=0_0_1280_648')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;가장 많이 사용되는 IntelliJ IDEA 단축키 15개 | Post Blog&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;IntelliJ IDEA는 편집, 탐색, 리팩토링, 디버깅 등 일상적으로 수행하는 대부분의 작업에 대하여 해당 명령어의 키보드 단축키를 제공합니다. 이러한 단축키를 배우고 연습하여 기억해 두면 작업 흐&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;blog.jetbrains.com&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br&gt;&lt;br&gt;전체 최상위 폴더에서 &quot;Optimize Imports&quot; 실행&lt;br&gt;프로젝트 패널에서 루트 폴더(프로젝트 전체)를 선택합니다.&lt;br&gt;&lt;br&gt;우측 클릭 → Code → Optimize Imports 선택&lt;br&gt;&lt;br&gt;또는 단축키 Ctrl + Alt + O (Windows/Linux), ⌃ + ⌥ + O (macOS)&lt;br&gt;→ 이 단축키는 선택한 폴더 하위의 모든 파일에 적용되어, 전체 소스의 unused import를 한 번에 정리할 수 있습니다.&lt;br&gt;&lt;br&gt;&lt;br&gt;커밋 시 자동 import 정리&lt;br&gt;커밋 창 우측의 옵션에서 **&quot;Optimize imports&quot;**를 체크&lt;br&gt;→ 커밋할 때마다 자동으로 import가 정리됩니다.&lt;br&gt;&lt;br&gt;참고&lt;br&gt;각 단축키 및 메뉴는 [Code &amp;gt; Optimize Imports] 메뉴에서 확인 가능합니다.&lt;br&gt;&lt;br&gt;방법 1의 폴더 전체 선택 후 Optimize Imports 실행이 가장 확실하게 프로젝트 전체에 적용됩니다.&lt;br&gt;&lt;br&gt;자동 정리 옵션을 켜면 커밋이나 저장 시 별도 작업 없이 import가 항상 깨끗하게 정리됩니다.&lt;br&gt;&lt;br&gt;추가로,&lt;br&gt;정렬 기준도 설정:&lt;br&gt;Settings &amp;gt; Editor &amp;gt; Code Style &amp;gt; Java &amp;gt; Imports 에서 import 그룹 순서 및 사용 기준도 세부적으로 지정할 수 있습니다&amp;nbsp;&lt;/p&gt;</description>
      <category>기타/Tip</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/563</guid>
      <comments>https://minibcake.tistory.com/563#entry563comment</comments>
      <pubDate>Tue, 20 May 2025 19:58:52 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] flutter dependencies version check &amp;amp; update</title>
      <link>https://minibcake.tistory.com/562</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vHr39/btsN2NeYh2e/HU5mXnLlSCXoY66xZsmJo0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vHr39/btsN2NeYh2e/HU5mXnLlSCXoY66xZsmJo0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vHr39/btsN2NeYh2e/HU5mXnLlSCXoY66xZsmJo0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvHr39%2FbtsN2NeYh2e%2FHU5mXnLlSCXoY66xZsmJo0%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&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;flutter는 의존 버전을 확인하고 업그레이드 할 수 있는 기능을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 버전 확인&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;flutter pub outdated&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에 해당 명령어를 입력하면 현재 주입된 dependency의 버전을 체크해 알려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yqgi6/btsN2KP5ElW/IkpcASJnihP9iAAb5ZLQdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yqgi6/btsN2KP5ElW/IkpcASJnihP9iAAb5ZLQdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yqgi6/btsN2KP5ElW/IkpcASJnihP9iAAb5ZLQdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyqgi6%2FbtsN2KP5ElW%2FIkpcASJnihP9iAAb5ZLQdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;614&quot; height=&quot;484&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;484&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. 업데이트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 업데이트가 필요할 경우 하단의 명령어를 터미널에 입력한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;flutter pub upgrade&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;373&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sU31S/btsN3LgAcOa/qMp5t9ZDnGL2MB1cNGLTB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sU31S/btsN3LgAcOa/qMp5t9ZDnGL2MB1cNGLTB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sU31S/btsN3LgAcOa/qMp5t9ZDnGL2MB1cNGLTB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsU31S%2FbtsN3LgAcOa%2FqMp5t9ZDnGL2MB1cNGLTB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;611&quot; height=&quot;373&quot; data-origin-width=&quot;611&quot; data-origin-height=&quot;373&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. pub get&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pub이 변경되었으니 반영해준다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;flutter pub get&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rRwQY/btsN2StPTU1/OGAOfTqP0KeJ5rQl5JRF10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rRwQY/btsN2StPTU1/OGAOfTqP0KeJ5rQl5JRF10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rRwQY/btsN2StPTU1/OGAOfTqP0KeJ5rQl5JRF10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrRwQY%2FbtsN2StPTU1%2FOGAOfTqP0KeJ5rQl5JRF10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;371&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Front/Flutter</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/562</guid>
      <comments>https://minibcake.tistory.com/562#entry562comment</comments>
      <pubDate>Tue, 20 May 2025 10:15:52 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] dependencies &amp;amp; dev_dependencies</title>
      <link>https://minibcake.tistory.com/561</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czFsep/btsN4okszb3/80dBuQB7sxpz4NX3KAVREk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czFsep/btsN4okszb3/80dBuQB7sxpz4NX3KAVREk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czFsep/btsN4okszb3/80dBuQB7sxpz4NX3KAVREk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczFsep%2FbtsN4okszb3%2F80dBuQB7sxpz4NX3KAVREk%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&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;Flutter에서 pubspec.yaml에서 dependencies를 보면 두 가지가 있는 것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747701786881&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Dependencies specify other packages that your package needs in order to work.
# (의존성은 현재 패키지가 작동하기 위해 필요한 외부 패키지들을 명시합니다.)
# To automatically upgrade your package dependencies to the latest versions
# consider running `flutter pub upgrade --major-versions`.
# (패키지 의존성을 최신 버전으로 자동 업데이트하려면 `flutter pub upgrade --major-versions` 명령을 실행하세요.)
# Alternatively, dependencies can be manually updated by changing the version numbers below to
# the latest version available on pub.dev.
# (또는 아래의 버전 번호를 pub.dev에 공개된 최신 버전으로 수동 변경할 수 있습니다.)
# To see which dependencies have newer versions available, run `flutter pub outdated`.
# (사용 중인 의존성 중에서 더 최신 버전이 있는지 확인하려면 `flutter pub outdated`를 실행하세요.)

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons fonts to your application.
  # (다음은 애플 스타일의 아이콘을 제공하는 Cupertino Icons 폰트를 앱에 추가합니다.)
  # Use with the CupertinoIcons class for iOS style icons.
  # (iOS 스타일 아이콘을 사용하려면 CupertinoIcons 클래스를 함께 사용하세요.)
  cupertino_icons: ^1.0.8

  # Flutter 공식 WebView 플러그인입니다.
  # Android, iOS, macOS에서 웹 콘텐츠를 렌더링할 수 있습니다.
  # 최신 버전(4.12.0) 사용 중이며, Flutter 3.0 이상과 호환됩니다.
  webview_flutter: ^4.12.0

dev_dependencies:
  flutter_test:
    sdk: flutter

  # The &quot;flutter_lints&quot; package below contains a set of recommended lints to
  # encourage good coding practices.
  # (아래의 &quot;flutter_lints&quot; 패키지는 좋은 코딩 습관을 유도하기 위한 권장 린트 규칙들을 포함합니다.)
  # The lint set provided by the package is activated in the `analysis_options.yaml` file located at the root of your
  # package.
  # (이 패키지가 제공하는 린트 세트는 루트 디렉토리에 위치한 `analysis_options.yaml` 파일에서 활성화됩니다.)
  # See that file for information about deactivating specific lint rules and activating additional ones.
  # (특정 린트 규칙을 비활성화하거나 추가 규칙을 활성화하는 방법은 해당 파일을 참고하세요.)
  flutter_lints: ^5.0.0&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;이때 dependencies는 개발 완료 후 앱을 배포할 때 포함해야하는 플러그인 목록으로 컴파일 할 때 필요한 의존 목록이다.&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;dev_dependencies는 개발 단계에서 앱을 테스트하기 위해 필요한 플러그인 목록으로 개발할 때만 필요해서 컴파일할 때는 필요없는 의존 목록이다. 린트가 대표적인 예인데, 린트는 개발할 때 코드 스타일을 통일하기 위한 것이므로 배포할 때는 필요가 없어 dev_dependencies에 들어가 있는 것을 볼 수 있다. 그 외에도 테스트나 디버깅을 위한 도구들이 여기에 들어가게 된다.&lt;/p&gt;</description>
      <category>Front/Flutter</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/561</guid>
      <comments>https://minibcake.tistory.com/561#entry561comment</comments>
      <pubDate>Tue, 20 May 2025 09:50:36 +0900</pubDate>
    </item>
    <item>
      <title>[Error/Flutter] Assertion failed : Cannot provide both...</title>
      <link>https://minibcake.tistory.com/560</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D5pR7/btsN37Xhsbj/0hYKhpJ6ZkZy1hRfXwZ770/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D5pR7/btsN37Xhsbj/0hYKhpJ6ZkZy1hRfXwZ770/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D5pR7/btsN37Xhsbj/0hYKhpJ6ZkZy1hRfXwZ770/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD5pR7%2FbtsN37Xhsbj%2F0hYKhpJ6ZkZy1hRfXwZ770%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chPXyx/btsN3Kg0ckV/YzA1WSwWxjYiklL84bE5F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chPXyx/btsN3Kg0ckV/YzA1WSwWxjYiklL84bE5F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chPXyx/btsN3Kg0ckV/YzA1WSwWxjYiklL84bE5F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchPXyx%2FbtsN3Kg0ckV%2FYzA1WSwWxjYiklL84bE5F1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;609&quot; height=&quot;152&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747633976032&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Container(
  width: double.infinity, height: 300, 
  color: Colors.white, margin: EdgeInsets.all(20), 
  decoration: BoxDecoration(borderRadius: BorderRadius.all(Radius.circular(10))),
  child: const Text('1', textAlign: TextAlign.center),
),&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;borderRadius 주는 방법을 찾아보기 전에 여러가지 시도하다가 decoration과 color가 겹쳐서 생긴 문제이다.&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;flutter 경고는 너무 살벌하게 뜨는 것 같다... ㄷㄷ... 아무튼 color와 decoration은 동시에 사용할 수 없고, decoration을 사용할 때는 color가 decoration 안으로 들어가야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747634139108&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Container(
  width: double.infinity, height: 300, margin: EdgeInsets.all(20), 
  decoration: BoxDecoration(
    color: Colors.white, 
    borderRadius: BorderRadius.all(Radius.circular(10))),
  child: const Text('1', textAlign: TextAlign.center),
),&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;이렇게 수정하면 정상적으로 color와 borderRadius가 적용된다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Error solution</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/560</guid>
      <comments>https://minibcake.tistory.com/560#entry560comment</comments>
      <pubDate>Mon, 19 May 2025 14:56:06 +0900</pubDate>
    </item>
    <item>
      <title>[Error/Flutter] Unable to load asset</title>
      <link>https://minibcake.tistory.com/559</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhowcq/btsN1izk7tN/VoUxhk5GgJ7AYKKvXpTbMK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhowcq/btsN1izk7tN/VoUxhk5GgJ7AYKKvXpTbMK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhowcq/btsN1izk7tN/VoUxhk5GgJ7AYKKvXpTbMK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdhowcq%2FbtsN1izk7tN%2FVoUxhk5GgJ7AYKKvXpTbMK%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&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;blockquote data-ke-style=&quot;style3&quot;&gt;Unable to load asset: &quot;assets/test.png&quot;,The asset does not exist or has empty data&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Image.asset() 위젯을 사용하니 이미지 위치에 해당 문구가 떴다.&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;Image.asset()을 사용하기 위해서는 먼저 해당 경로에 파일이 있어야 하며, pubspec.yaml 파일에 assets가 정의되어있어야한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;230&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l90jd/btsN27P9TJt/ssMPRQMX69EtIYpwamvswK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l90jd/btsN27P9TJt/ssMPRQMX69EtIYpwamvswK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l90jd/btsN27P9TJt/ssMPRQMX69EtIYpwamvswK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl90jd%2FbtsN27P9TJt%2FssMPRQMX69EtIYpwamvswK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;230&quot; height=&quot;54&quot; data-origin-width=&quot;230&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYbbcf/btsN1yO64Dd/CcaGKk02hFvO2kpvackSGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYbbcf/btsN1yO64Dd/CcaGKk02hFvO2kpvackSGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYbbcf/btsN1yO64Dd/CcaGKk02hFvO2kpvackSGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYbbcf%2FbtsN1yO64Dd%2FCcaGKk02hFvO2kpvackSGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;662&quot; height=&quot;180&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;180&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;근데 파일도 잘 있고, 정의도 해놔서... 원인을 알기 어려웠는데 pub get이 제대로 안되면 그럴 수도 있다고 해서 pub get도 다시 해봤는데 되지 않아 그냥 IDE 다시 껐다가 켜니까 정상적으로 로딩 되는 것을 확인할 수 있었다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㅠㅠ&amp;nbsp;&lt;/p&gt;</description>
      <category>Error solution</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/559</guid>
      <comments>https://minibcake.tistory.com/559#entry559comment</comments>
      <pubDate>Sun, 18 May 2025 23:19:50 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] 기초 위젯 사용</title>
      <link>https://minibcake.tistory.com/558</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7SOvT/btsN3g7ktY2/Paf59g4N9KbH9pEt729TA1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7SOvT/btsN3g7ktY2/Paf59g4N9KbH9pEt729TA1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7SOvT/btsN3g7ktY2/Paf59g4N9KbH9pEt729TA1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7SOvT%2FbtsN3g7ktY2%2FPaf59g4N9KbH9pEt729TA1%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&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;pre id=&quot;code_1747577670873&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp()); //MyApp class 실행
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold( //상단 바(appBar), 메인(body), 하단 바(bottomNavigationBar) 3개로 분할해주는 위젯
        appBar: AppBar( title: Text('제목 테스트', style: TextStyle(fontWeight: FontWeight.w900),), //큰 스타일이 아니라면 style에서 지정
                        leading: Icon(Icons.icecream_outlined), actions: [ //title은 제목, leading은 title 앞 icon 쓸 때 사용됨, actions는 오른쪽 버튼들
          Icon(Icons.cake), //icon은 Icon 위젯을 활용해 작성
          Icon(Icons.cake)
        ],),

        body: Align( //정렬 상세 단순 센터 정렬은 Center() 위젯도 있음
          alignment: Alignment.topLeft,
          child: SizedBox(
            child: Row(
                children: [
                  Image.asset('assets/test.png'), //pubspec.yaml에서 assets에 대한 사전 설정이 필요하고 get을 통해 update 적용 후 사용
                  SizedBox(
                    child: Column(
                      children: [
                        Text('1'),
                        Text('2'),
                        Text('3'),
                      ],
                    ),
                  )
                ]
            )
          ),
        ),

        bottomNavigationBar: SizedBox(//Container로 감쌀 수도 있지만 높이 너비 child 정도만 할 때는 가벼운 SizedBox
          width: double.infinity, height: 50, //기본단위 LP
          child: Row( //가로로 정렬, column은 세로로 정렬
              mainAxisAlignment: MainAxisAlignment.spaceEvenly, //메인 축 요소 aligin 설정
              crossAxisAlignment: CrossAxisAlignment.center, //반대 축 요소 aligin 설정
              children : [ //row 처리할 요소들
                Icon(Icons.cake),
                Icon(Icons.cake),
                Icon(Icons.cake),
              ]),
        ),
      ),
    );
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Front/Flutter</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/558</guid>
      <comments>https://minibcake.tistory.com/558#entry558comment</comments>
      <pubDate>Sun, 18 May 2025 23:14:39 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] flutter PowerShell 명령어 정리</title>
      <link>https://minibcake.tistory.com/557</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IRZ0O/btsN1Zr7bRK/vCQzjbA2qNREQ5gA5FRz1K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IRZ0O/btsN1Zr7bRK/vCQzjbA2qNREQ5gA5FRz1K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IRZ0O/btsN1Zr7bRK/vCQzjbA2qNREQ5gA5FRz1K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIRZ0O%2FbtsN1Zr7bRK%2FvCQzjbA2qNREQ5gA5FRz1K%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;126&quot; data-start=&quot;102&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;126&quot; data-start=&quot;102&quot; data-ke-size=&quot;size26&quot;&gt;1. Flutter SDK 관련 명령어&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;698&quot; data-start=&quot;128&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;698&quot; data-start=&quot;245&quot;&gt;
&lt;tr data-end=&quot;306&quot; data-start=&quot;245&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;268&quot; data-start=&quot;245&quot;&gt;flutter channel&lt;/td&gt;
&lt;td data-end=&quot;306&quot; data-start=&quot;268&quot; data-col-size=&quot;sm&quot;&gt;Flutter 채널(버전 트랙) 목록 확인 및 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;373&quot; data-start=&quot;307&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;330&quot; data-start=&quot;307&quot;&gt;flutter config&lt;/td&gt;
&lt;td data-end=&quot;373&quot; data-start=&quot;330&quot; data-col-size=&quot;sm&quot;&gt;Flutter 설정 구성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;437&quot; data-start=&quot;374&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;397&quot; data-start=&quot;374&quot;&gt;flutter doctor&lt;/td&gt;
&lt;td data-end=&quot;437&quot; data-start=&quot;397&quot; data-col-size=&quot;sm&quot;&gt;개발 환경 점검 및 문제 진단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;502&quot; data-start=&quot;438&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;461&quot; data-start=&quot;438&quot;&gt;flutter upgrade&lt;/td&gt;
&lt;td data-end=&quot;502&quot; data-start=&quot;461&quot; data-col-size=&quot;sm&quot;&gt;Flutter SDK 최신 버전으로 업데이트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;566&quot; data-start=&quot;503&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;526&quot; data-start=&quot;503&quot;&gt;flutter downgrade&lt;/td&gt;
&lt;td data-end=&quot;566&quot; data-start=&quot;526&quot; data-col-size=&quot;sm&quot;&gt;Flutter SDK 이전 버전으로 다운그레이드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;629&quot; data-start=&quot;567&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;590&quot; data-start=&quot;567&quot;&gt;flutter precache&lt;/td&gt;
&lt;td data-end=&quot;629&quot; data-start=&quot;590&quot; data-col-size=&quot;sm&quot;&gt;Flutter 도구가 필요한 바이너리 캐시 미리 받기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;698&quot; data-start=&quot;630&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;658&quot; data-start=&quot;630&quot;&gt;flutter bash-completion&lt;/td&gt;
&lt;td data-end=&quot;698&quot; data-start=&quot;658&quot; data-col-size=&quot;sm&quot;&gt;쉘 자동완성 스크립트 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;703&quot; data-start=&quot;700&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;722&quot; data-start=&quot;705&quot; data-ke-size=&quot;size26&quot;&gt;2. 프로젝트 관련 명령어&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1671&quot; data-start=&quot;724&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1671&quot; data-start=&quot;875&quot;&gt;
&lt;tr data-end=&quot;953&quot; data-start=&quot;875&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;901&quot; data-start=&quot;875&quot;&gt;flutter create &amp;lt;디렉토리&amp;gt;&lt;/td&gt;
&lt;td data-end=&quot;953&quot; data-start=&quot;901&quot; data-col-size=&quot;sm&quot;&gt;새 Flutter 프로젝트 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1029&quot; data-start=&quot;954&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;981&quot; data-start=&quot;954&quot;&gt;flutter run [옵션]&lt;/td&gt;
&lt;td data-end=&quot;1029&quot; data-start=&quot;981&quot; data-col-size=&quot;sm&quot;&gt;연결된 디바이스나 에뮬레이터에서 앱 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1107&quot; data-start=&quot;1030&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1057&quot; data-start=&quot;1030&quot;&gt;flutter build &amp;lt;타겟&amp;gt;&lt;/td&gt;
&lt;td data-end=&quot;1107&quot; data-start=&quot;1057&quot; data-col-size=&quot;sm&quot;&gt;앱 빌드 (apk, ios, web 등 플랫폼 지정 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1185&quot; data-start=&quot;1108&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1137&quot; data-start=&quot;1108&quot;&gt;flutter clean&lt;/td&gt;
&lt;td data-end=&quot;1185&quot; data-start=&quot;1137&quot; data-col-size=&quot;sm&quot;&gt;빌드 캐시 및 생성 파일 삭제 (빌드 초기화)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1269&quot; data-start=&quot;1186&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1215&quot; data-start=&quot;1186&quot;&gt;flutter analyze&lt;/td&gt;
&lt;td data-end=&quot;1269&quot; data-start=&quot;1215&quot; data-col-size=&quot;sm&quot;&gt;Dart 코드 정적 분석 수행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1351&quot; data-start=&quot;1270&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1299&quot; data-start=&quot;1270&quot;&gt;flutter test&lt;/td&gt;
&lt;td data-end=&quot;1351&quot; data-start=&quot;1299&quot; data-col-size=&quot;sm&quot;&gt;단위 테스트 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1433&quot; data-start=&quot;1352&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1381&quot; data-start=&quot;1352&quot;&gt;flutter assemble&lt;/td&gt;
&lt;td data-end=&quot;1433&quot; data-start=&quot;1381&quot; data-col-size=&quot;sm&quot;&gt;Flutter 리소스 및 바이너리 빌드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1514&quot; data-start=&quot;1434&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1463&quot; data-start=&quot;1434&quot;&gt;flutter drive&lt;/td&gt;
&lt;td data-end=&quot;1514&quot; data-start=&quot;1463&quot; data-col-size=&quot;sm&quot;&gt;통합 테스트 자동화 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1597&quot; data-start=&quot;1515&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1544&quot; data-start=&quot;1515&quot;&gt;flutter gen-l10n&lt;/td&gt;
&lt;td data-end=&quot;1597&quot; data-start=&quot;1544&quot; data-col-size=&quot;sm&quot;&gt;로컬라이제이션(localization) 파일 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1671&quot; data-start=&quot;1598&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1622&quot; data-start=&quot;1598&quot;&gt;flutter pub &amp;lt;서브명령어&amp;gt;&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1671&quot; data-start=&quot;1622&quot;&gt;Flutter 프로젝트 의존성 관리 및 패키지 관련 명령어 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1676&quot; data-start=&quot;1673&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1700&quot; data-start=&quot;1678&quot; data-ke-size=&quot;size26&quot;&gt;3. 도구 및 디바이스 관련 명령어&lt;/h2&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2471&quot; data-start=&quot;1702&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;2471&quot; data-start=&quot;1853&quot;&gt;
&lt;tr data-end=&quot;1927&quot; data-start=&quot;1853&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1879&quot; data-start=&quot;1853&quot;&gt;flutter devices&lt;/td&gt;
&lt;td data-end=&quot;1927&quot; data-start=&quot;1879&quot; data-col-size=&quot;md&quot;&gt;연결된 디바이스(에뮬레이터 포함) 목록 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2005&quot; data-start=&quot;1928&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1954&quot; data-start=&quot;1928&quot;&gt;flutter emulators&lt;/td&gt;
&lt;td data-end=&quot;2005&quot; data-start=&quot;1954&quot; data-col-size=&quot;md&quot;&gt;에뮬레이터 목록 확인, 실행, 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2083&quot; data-start=&quot;2006&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2032&quot; data-start=&quot;2006&quot;&gt;flutter install&lt;/td&gt;
&lt;td data-end=&quot;2083&quot; data-start=&quot;2032&quot; data-col-size=&quot;md&quot;&gt;연결된 디바이스에 앱 설치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2161&quot; data-start=&quot;2084&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2110&quot; data-start=&quot;2084&quot;&gt;flutter logs&lt;/td&gt;
&lt;td data-end=&quot;2161&quot; data-start=&quot;2110&quot; data-col-size=&quot;md&quot;&gt;실행 중인 앱의 로그 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2236&quot; data-start=&quot;2162&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2188&quot; data-start=&quot;2162&quot;&gt;flutter screenshot&lt;/td&gt;
&lt;td data-end=&quot;2236&quot; data-start=&quot;2188&quot; data-col-size=&quot;md&quot;&gt;연결된 디바이스에서 스크린샷 촬영&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2314&quot; data-start=&quot;2237&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2263&quot; data-start=&quot;2237&quot;&gt;flutter symbolize&lt;/td&gt;
&lt;td data-end=&quot;2314&quot; data-start=&quot;2263&quot; data-col-size=&quot;md&quot;&gt;AOT(미리 컴파일)된 Flutter 앱의 스택 트레이스 심볼리케이션 수행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2393&quot; data-start=&quot;2315&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2341&quot; data-start=&quot;2315&quot;&gt;flutter attach&lt;/td&gt;
&lt;td data-end=&quot;2393&quot; data-start=&quot;2341&quot; data-col-size=&quot;md&quot;&gt;이미 실행 중인 앱에 연결하여 디버깅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2471&quot; data-start=&quot;2394&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2420&quot; data-start=&quot;2394&quot;&gt;flutter custom-devices&lt;/td&gt;
&lt;td data-end=&quot;2471&quot; data-start=&quot;2420&quot; data-col-size=&quot;md&quot;&gt;사용자 정의 디바이스 관리 (등록, 삭제, 초기화 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;</description>
      <category>Front/Flutter</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/557</guid>
      <comments>https://minibcake.tistory.com/557#entry557comment</comments>
      <pubDate>Sun, 18 May 2025 14:38:13 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] VSCode 세팅하기</title>
      <link>https://minibcake.tistory.com/556</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFtBUm/btsN2nFVGlY/vPl09e5pSvkossVkw0FIek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFtBUm/btsN2nFVGlY/vPl09e5pSvkossVkw0FIek/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFtBUm/btsN2nFVGlY/vPl09e5pSvkossVkw0FIek/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFtBUm%2FbtsN2nFVGlY%2FvPl09e5pSvkossVkw0FIek%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;150&quot; height=&quot;150&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Dart, Flutter Extention(플러그인) 설치&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uXznp/btsN1audILJ/44zVfKG97zbfxhyuMf1S2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uXznp/btsN1audILJ/44zVfKG97zbfxhyuMf1S2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uXznp/btsN1audILJ/44zVfKG97zbfxhyuMf1S2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuXznp%2FbtsN1audILJ%2F44zVfKG97zbfxhyuMf1S2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;773&quot; height=&quot;397&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNnl1N/btsN2kPWtIh/JL8gkMYPHPHF4NKdNkTfl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNnl1N/btsN2kPWtIh/JL8gkMYPHPHF4NKdNkTfl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNnl1N/btsN2kPWtIh/JL8gkMYPHPHF4NKdNkTfl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNnl1N%2FbtsN2kPWtIh%2FJL8gkMYPHPHF4NKdNkTfl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;773&quot; height=&quot;460&quot; data-origin-width=&quot;773&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Flutter SDK download&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TKHVx/btsN1nUoKPo/Vgvt5P6bFktuBTLMIFUOFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TKHVx/btsN1nUoKPo/Vgvt5P6bFktuBTLMIFUOFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TKHVx/btsN1nUoKPo/Vgvt5P6bFktuBTLMIFUOFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTKHVx%2FbtsN1nUoKPo%2FVgvt5P6bFktuBTLMIFUOFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;827&quot; height=&quot;516&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MXcYD/btsN24FTedd/TJVSkdS6xvJSYL0dzK2kTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MXcYD/btsN24FTedd/TJVSkdS6xvJSYL0dzK2kTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MXcYD/btsN24FTedd/TJVSkdS6xvJSYL0dzK2kTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMXcYD%2FbtsN24FTedd%2FTJVSkdS6xvJSYL0dzK2kTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;837&quot; height=&quot;409&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;409&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;플러그인을 다운로드한 뒤에는 Control+Shift+P를 눌러 커멘드창에 flutter를 입력해 New Project를 고르면 SDK 폴더를 지정해주거나 다운로드 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.flutter.dev/get-started/install/windows/mobile&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1747543890958&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Start building Flutter Android apps on Windows&quot; data-og-description=&quot;Configure your system to develop Flutter mobile apps on Windows.&quot; data-og-host=&quot;docs.flutter.dev&quot; data-og-source-url=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot; data-og-url=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bW0Hrl/hyYTerS0Jz/DEekU9AvxSVvVaPhf3LR61/img.png?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320&quot;&gt;&lt;a href=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bW0Hrl/hyYTerS0Jz/DEekU9AvxSVvVaPhf3LR61/img.png?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Start building Flutter Android apps on Windows&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Configure your system to develop Flutter mobile apps on Windows.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.flutter.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;447&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWBjTg/btsN1Zr6zBo/M3vDyTQOP98R0ynPiOYU10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWBjTg/btsN1Zr6zBo/M3vDyTQOP98R0ynPiOYU10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWBjTg/btsN1Zr6zBo/M3vDyTQOP98R0ynPiOYU10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWBjTg%2FbtsN1Zr6zBo%2FM3vDyTQOP98R0ynPiOYU10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;447&quot; height=&quot;80&quot; data-origin-width=&quot;447&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R9GjA/btsN2YMujpg/3are5qvU5po2N9tZ5MSHl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R9GjA/btsN2YMujpg/3are5qvU5po2N9tZ5MSHl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R9GjA/btsN2YMujpg/3are5qvU5po2N9tZ5MSHl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR9GjA%2FbtsN2YMujpg%2F3are5qvU5po2N9tZ5MSHl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;446&quot; height=&quot;107&quot; data-origin-width=&quot;446&quot; data-origin-height=&quot;107&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;다운로드 한 뒤에 바로 SDK 패스 추가를 물어보는데 바로 세팅되지 않아서.. 다시 New Project를 통해 SDK 폴더를 지정해줬다.&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. VSCode Terminal 에서 확인하기&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;flutter doctor -v&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 명령어를 통해 상태를 확인할 수 있는데 당연히 일부 기능에서 문제가 생길 것이다. Android SDK 및&amp;nbsp; Android Studio가 없기 때문인데 Android Studio를 설치하면 SDK까지 설치가 완료되므로 Android Studio를 설치한다.&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;4. Android Studio 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.android.com/studio?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.android.com/studio?hl=ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1747544219514&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Android 스튜디오 및 앱 도구 다운로드 - Android 개발자 &amp;nbsp;|&amp;nbsp; Android Studio &amp;nbsp;|&amp;nbsp; Android Developers&quot; data-og-description=&quot;Android Studio provides app builders with an integrated development environment (IDE) optimized for Android apps. Download Android Studio today.&quot; data-og-host=&quot;developer.android.com&quot; data-og-source-url=&quot;https://developer.android.com/studio?hl=ko&quot; data-og-url=&quot;https://developer.android.com/studio?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bEvrVS/hyYU49YoAW/Kk6rrR4a51KkQ57FcyMgd1/img.png?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676,https://scrap.kakaocdn.net/dn/eQGm6/hyYVfcAZgL/jP8YBmcvBbalAEUd9eI2Mk/img.png?width=3060&amp;amp;height=2018&amp;amp;face=0_0_3060_2018,https://scrap.kakaocdn.net/dn/meVhc/hyYVc1eKqI/OYIkPnkLKF9AOplwuXrytK/img.png?width=1832&amp;amp;height=1082&amp;amp;face=0_0_1832_1082&quot;&gt;&lt;a href=&quot;https://developer.android.com/studio?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.android.com/studio?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bEvrVS/hyYU49YoAW/Kk6rrR4a51KkQ57FcyMgd1/img.png?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676,https://scrap.kakaocdn.net/dn/eQGm6/hyYVfcAZgL/jP8YBmcvBbalAEUd9eI2Mk/img.png?width=3060&amp;amp;height=2018&amp;amp;face=0_0_3060_2018,https://scrap.kakaocdn.net/dn/meVhc/hyYVc1eKqI/OYIkPnkLKF9AOplwuXrytK/img.png?width=1832&amp;amp;height=1082&amp;amp;face=0_0_1832_1082');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Android 스튜디오 및 앱 도구 다운로드 - Android 개발자 &amp;nbsp;|&amp;nbsp; Android Studio &amp;nbsp;|&amp;nbsp; Android Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Android Studio provides app builders with an integrated development environment (IDE) optimized for Android apps. Download Android Studio today.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.android.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. Android toolchain 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Android Studio가 설치가 완료되면 Android Studio를 통해 필요한 툴들을 설치한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccsh1u/btsN1YUbDYo/ObVMNCBHTHTK9BQTaQPDW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccsh1u/btsN1YUbDYo/ObVMNCBHTHTK9BQTaQPDW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccsh1u/btsN1YUbDYo/ObVMNCBHTHTK9BQTaQPDW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fccsh1u%2FbtsN1YUbDYo%2FObVMNCBHTHTK9BQTaQPDW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;553&quot; height=&quot;276&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GIr2t/btsN2nlDEdp/hwUKY7zZXdubkfn0QkFDEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GIr2t/btsN2nlDEdp/hwUKY7zZXdubkfn0QkFDEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GIr2t/btsN2nlDEdp/hwUKY7zZXdubkfn0QkFDEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGIr2t%2FbtsN2nlDEdp%2FhwUKY7zZXdubkfn0QkFDEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1153&quot; height=&quot;703&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;703&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;More Actions에서 SDK Manager를 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;726&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KTHla/btsN1pEDCTr/nVFowgOphow0o7kmAOlquk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KTHla/btsN1pEDCTr/nVFowgOphow0o7kmAOlquk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KTHla/btsN1pEDCTr/nVFowgOphow0o7kmAOlquk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKTHla%2FbtsN1pEDCTr%2FnVFowgOphow0o7kmAOlquk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;976&quot; height=&quot;726&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;726&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;여기서 SDK tools에 들어가 부족한 툴을 선택해 다운로드 받아주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;726&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdiS0F/btsN2qCGX11/jrmEVI1fEEfR5UaaOtRV51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdiS0F/btsN2qCGX11/jrmEVI1fEEfR5UaaOtRV51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdiS0F/btsN2qCGX11/jrmEVI1fEEfR5UaaOtRV51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdiS0F%2FbtsN2qCGX11%2FjrmEVI1fEEfR5UaaOtRV51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;977&quot; height=&quot;726&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;726&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LhLXg/btsN2rO8VBO/HEClCgLc81rnPUg2dLcJJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LhLXg/btsN2rO8VBO/HEClCgLc81rnPUg2dLcJJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LhLXg/btsN2rO8VBO/HEClCgLc81rnPUg2dLcJJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLhLXg%2FbtsN2rO8VBO%2FHEClCgLc81rnPUg2dLcJJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;898&quot; height=&quot;648&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 라이센스 허용&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 flutter doctor를 VSCode Terminal에서 해보면 licenses가 accepted 되지 않았다고 뜰텐데 아래의 명령어로 라이센스를 허용한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;flutter doctor --android-licenses&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 Accept?를 물어보면 y를 입력하면 동의가 완료된다. 모두 동의가 완료되면 하단의 문구가 나온다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;All SDK package licenses accepted&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 flutter doctor -v를 해보면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;899&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csWUXc/btsN1Azc430/pFgYnISBqk68cs7TjVKBY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csWUXc/btsN1Azc430/pFgYnISBqk68cs7TjVKBY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csWUXc/btsN1Azc430/pFgYnISBqk68cs7TjVKBY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsWUXc%2FbtsN1Azc430%2FpFgYnISBqk68cs7TjVKBY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;945&quot; height=&quot;899&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;899&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;Visual Studio 빼고는 완료된 것을 확인할 수 있다. Android 개발을 연습할 예정이라 일단 뒀으며 필요할 경우 install을 통해 해당 환경을 갖춰주면 된다.&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;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=usE9IKaogDU&amp;amp;list=PLfLgtT94nNq1izG4R2WDN517iPX4WXH3C&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/i6d02/hyYTd0QLG7/MrZDjW3UhBMQjPKouPTqe0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/b7ovZT/hyYVbONtJz/HSF1VzKkBUAxF5hNjiCVQ0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;쉬운 플러터 0강 : 플러터 설치 4-step (맥/윈도우)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/usE9IKaogDU&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front/Flutter</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/556</guid>
      <comments>https://minibcake.tistory.com/556#entry556comment</comments>
      <pubDate>Sun, 18 May 2025 14:19:07 +0900</pubDate>
    </item>
    <item>
      <title>[Linux/우분투] Docker 설치</title>
      <link>https://minibcake.tistory.com/554</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGbvWt/dJMcafL79PT/pe6z3mX5bY9nZrpoGth2Sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGbvWt/dJMcafL79PT/pe6z3mX5bY9nZrpoGth2Sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGbvWt/dJMcafL79PT/pe6z3mX5bY9nZrpoGth2Sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGbvWt%2FdJMcafL79PT%2Fpe6z3mX5bY9nZrpoGth2Sk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;147&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1 id=&quot;실행환경&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;실행환경&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Ubuntu 22.04&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;docker-설치방법&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;Docker 설치방법&lt;/h1&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;1-우분투-시스템-패키지-업데이트&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. 우분투 시스템 패키지 업데이트&lt;/h3&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-필요한-패키지-설치&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 필요한 패키지 설치&lt;/h3&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;3-docker의-공식-gpg키를-추가&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. Docker의 공식 GPG키를 추가&lt;/h3&gt;
&lt;pre class=&quot;vim&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;4-docker의-공식-apt-저장소를-추가&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4. Docker의 공식 apt 저장소를 추가&lt;/h3&gt;
&lt;pre class=&quot;smali&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;5-시스템-패키지-업데이트&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5. 시스템 패키지 업데이트&lt;/h3&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;6-docker-설치&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;6. Docker 설치&lt;/h3&gt;
&lt;pre class=&quot;vim&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;sudo apt-get install docker-ce docker-ce-cli containerd.io&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;7-docker가-설치-확인&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;7. Docker가 설치 확인&lt;/h3&gt;
&lt;h4 id=&quot;7-1-도커-실행상태-확인&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;7-1 도커 실행상태 확인&lt;/h4&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;sudo systemctl status docker&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;7-2-도커-실행&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;7-2 도커 실행&lt;/h4&gt;
&lt;pre class=&quot;dockerfile&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;sudo docker run hello-world&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;출처&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://velog.io/@osk3856/Docker-Ubuntu-22.04-Docker-Installation&quot;&gt;https://velog.io/@osk3856/Docker-Ubuntu-22.04-Docker-Installation&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744273746774&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Docker] Ubuntu 22.04 Docker 설치&quot; data-og-description=&quot;Ubuntu 22.04 에 Docker 설치하기&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@osk3856/Docker-Ubuntu-22.04-Docker-Installation&quot; data-og-url=&quot;https://velog.io/@osk3856/Docker-Ubuntu-22.04-Docker-Installation&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hZbrV/hyYBbvM9Ln/q1EJr27hsKpgkdr6qQJZ91/img.jpg?width=850&amp;amp;height=400&amp;amp;face=0_0_850_400,https://scrap.kakaocdn.net/dn/U9GPs/hyYCd7JTpu/h49Efr17nxtaX7GyjHCNFk/img.jpg?width=850&amp;amp;height=400&amp;amp;face=0_0_850_400,https://scrap.kakaocdn.net/dn/btjy1Z/hyYFzg3rjw/sAPgcNL8NRYNy0OmOsPJ40/img.jpg?width=2560&amp;amp;height=2560&amp;amp;face=0_0_2560_2560&quot;&gt;&lt;a href=&quot;https://velog.io/@osk3856/Docker-Ubuntu-22.04-Docker-Installation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@osk3856/Docker-Ubuntu-22.04-Docker-Installation&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hZbrV/hyYBbvM9Ln/q1EJr27hsKpgkdr6qQJZ91/img.jpg?width=850&amp;amp;height=400&amp;amp;face=0_0_850_400,https://scrap.kakaocdn.net/dn/U9GPs/hyYCd7JTpu/h49Efr17nxtaX7GyjHCNFk/img.jpg?width=850&amp;amp;height=400&amp;amp;face=0_0_850_400,https://scrap.kakaocdn.net/dn/btjy1Z/hyYFzg3rjw/sAPgcNL8NRYNy0OmOsPJ40/img.jpg?width=2560&amp;amp;height=2560&amp;amp;face=0_0_2560_2560');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Docker] Ubuntu 22.04 Docker 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu 22.04 에 Docker 설치하기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;실행환경&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;실행환경&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ubuntu 22.04&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;docker-설치방법&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;Docker 설치방법&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;1-우분투-시스템-패키지-업데이트&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. 우분투 시스템 패키지 업데이트&lt;/h3&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-필요한-패키지-설치&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 필요한 패키지 설치&lt;/h3&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;3-docker의-공식-gpg키를-추가&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. Docker의 공식 GPG키를 추가&lt;/h3&gt;
&lt;pre class=&quot;vim&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;4-docker의-공식-apt-저장소를-추가&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4. Docker의 공식 apt 저장소를 추가&lt;/h3&gt;
&lt;pre class=&quot;smali&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;5-시스템-패키지-업데이트&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5. 시스템 패키지 업데이트&lt;/h3&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;6-docker-설치&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;6. Docker 설치&lt;/h3&gt;
&lt;pre class=&quot;vim&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;sudo apt-get install docker-ce docker-ce-cli containerd.io&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;7-docker가-설치-확인&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;7. Docker가 설치 확인&lt;/h3&gt;
&lt;h4 id=&quot;7-1-도커-실행상태-확인&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;7-1 도커 실행상태 확인&lt;/h4&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;sudo systemctl status docker&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;7-2-도커-실행&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;7-2 도커 실행&lt;/h4&gt;
&lt;pre class=&quot;dockerfile&quot; style=&quot;background-color: #fbfcfd; color: #24292e; text-align: left;&quot;&gt;&lt;code&gt;sudo docker run hello-world&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;reference&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;REFERENCE&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #12b886;&quot; href=&quot;https://chat.openai.com/chat&quot;&gt;ChatGPT&lt;/a&gt;&lt;/p&gt;</description>
      <category>Linux</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/554</guid>
      <comments>https://minibcake.tistory.com/554#entry554comment</comments>
      <pubDate>Thu, 10 Apr 2025 17:20:23 +0900</pubDate>
    </item>
    <item>
      <title>[Linux/우분투] 공장초기화</title>
      <link>https://minibcake.tistory.com/553</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oGOBQ/dJMcaioxeTu/7isFIeQbjJVAj2aQ4wdXQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oGOBQ/dJMcaioxeTu/7isFIeQbjJVAj2aQ4wdXQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oGOBQ/dJMcaioxeTu/7isFIeQbjJVAj2aQ4wdXQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoGOBQ%2FdJMcaioxeTu%2F7isFIeQbjJVAj2aQ4wdXQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;147&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하단 명령어를 차례로 입력해 초기화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744272093456&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 모든 패키지 제거
sudo apt-get purge -y $(dpkg --get-selections | grep -v deinstall | grep -v &quot;apt&quot; | grep -v &quot;dpkg&quot; | grep -v &quot;grub&quot; | grep -v &quot;sudo&quot; | grep -v &quot;login&quot; | grep -v &quot;libc6&quot; | grep -v &quot;init&quot; | awk '{print $1}')
 
# 필수 패키지 재설치
sudo apt-get install --reinstall ubuntu-server
 
# 설정 파일 재설정
sudo cp -r /etc/skel/. /etc/
 
# 시스템 업데이트 및 업그레이드
sudo apt-get update
sudo apt-get upgrade -y
 
# 시스템 재부팅
sudo reboot&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 style=&quot;background-color: #fefefe; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;환경 설정이되지 않은 패키지들을 환경에 설정합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744272802091&quot; class=&quot;ada&quot; style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dpkg --configure -a&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #fefefe; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;레포지토리들의 내용을 업데이트합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744272802091&quot; class=&quot;pgsql&quot; style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #fefefe; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;의존성을 빠뜨린 걸 고치기 위해 아래의 install 명령어를 실행합니다.&lt;br /&gt;(Try to fix missing dependencies:)&lt;/p&gt;
&lt;pre id=&quot;code_1744272802092&quot; class=&quot;routeros&quot; style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get -f install&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #fefefe; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;가능한 새로운 버전으로 모든 패키지들을 업데이트 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744272802092&quot; class=&quot;pgsql&quot; style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get full-upgrade&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #fefefe; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Ubuntu desktop을 재설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744272802092&quot; class=&quot;applescript&quot; style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install --reinstall ubuntu-desktop&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #fefefe; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;불필요한 패키지들을 제거합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744272802092&quot; class=&quot;routeros&quot; style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get autoremove&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #fefefe; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이미 설치된 다운로드한 패키지들을 삭제합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744272802092&quot; class=&quot;routeros&quot; style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get clean&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #fefefe; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이슈가 해결되었는지 보기 위해 시스템 재시작합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744272802093&quot; class=&quot;ebnf&quot; style=&quot;background-color: #fafafa; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo reboot&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Linux</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/553</guid>
      <comments>https://minibcake.tistory.com/553#entry553comment</comments>
      <pubDate>Thu, 10 Apr 2025 17:01:37 +0900</pubDate>
    </item>
    <item>
      <title>[ES5] Babel과 Polyfill</title>
      <link>https://minibcake.tistory.com/552</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn3kPZ/btsNbNFzmkt/TCn04PQaZoWFkkKT0eqk3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn3kPZ/btsNbNFzmkt/TCn04PQaZoWFkkKT0eqk3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn3kPZ/btsNbNFzmkt/TCn04PQaZoWFkkKT0eqk3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn3kPZ%2FbtsNbNFzmkt%2FTCn04PQaZoWFkkKT0eqk3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;150&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;트랜스파일러 Transpiler&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 버전의 자바스크립트(ES6/ES2015)를 구형 버전인 ES5로 변환해주는 Babel이 대표적인 예이다. 변환을 통해 구형 브라우저에서도 동작할 수 있도록 지원하고, 변환된 코드는 호환성을 확보하면서 최신 기능을 사용할 수 있는 이점을 제공한다.&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;트랜스파일러는 언어 간의 문법 차이나 기능 지원 차이를 극복하여 크로스플랫폼 개발이나 호환성을 향상시키는데 사용된다. TypeScript의 컴파일러나 CoffeeScript의 컴파일러 등이 트랜스파일러 예시이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트랜스파일러를 사용하면 개발자는 최신 언어의 기능과 문법을 사용할 수 있으면서도 호환성을 유지할 수 있어 개발 효율성이 높아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;자바스크립트 트랜스파일러&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바벨이 가장 인기 있는 트랜스파일러이며, 그 외에도 TypeScript, Buble, SWC, Closure Compiler 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;바벨 Babel&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바벨은 자바스크립트 트랜스파일러로 최신 버전의 자바스크립트 코드를 구형으로 변환해주는 역할을 수행한다. 바벨은 다양한 빌드 도구와 통합하여 사용할 수 있으며, Webpack과 함께 사용해 모듈 번들링과 트랜스파일링을 한 번에 처리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 추가적인 빌드 단계를 필요로 하고, 성능 문제를 일으킬 수 있다. 특히 큰 규모의 프로젝트에서는 트랜스파일링 속도가 느려질 수 있다. 그 외에도 오래된 환경 지원에 한계가 있을 수 있다. 일부 기능이 완벽하지 않을 수 있고, 크로스브라우징 이슈의 완벽한 대안이 되지 못하는 점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뿐만아니라 브라우저나 실행 환경에 존재하지 않는 내장기능이나 API는 변환하지 못한다는 점이 있다. fetch나 Promise의 경우와 같은 예이다. &lt;b&gt;이 경우 폴리필을 사용해 문제를 해결할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;바벨, 폴리필 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;바벨&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744002031038&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 변환 전: 최신 자바스크립트 문법 사용
const greet = (name) =&amp;gt; `Hello, ${name}!`;
 
export default greet;
 
 
// 변환 후: ES5 이하의 자바스크립트로 변환됨
var greet = function greet(name) {
  return &quot;Hello, &quot; + name + &quot;!&quot;;
};
 
module.exports = greet;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;폴리필&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744002167635&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 변환 전: 최신 기능을 사용한 코드
const hasValue = [1, 2, 3].includes(2); // includes 메서드는 ES6 기능
 
// 변환 후: 폴리필을 추가한 코드
var hasValue = [1, 2, 3].indexOf(2) &amp;gt; -1; // includes를 지원하지 않는 브라우저에서 대체 구현&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;section-6&quot; style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Babel 사용하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Web버전&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744003235114&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Babel &amp;middot; Babel&quot; data-og-description=&quot;The compiler for next generation JavaScript&quot; data-og-host=&quot;babeljs.io&quot; data-og-source-url=&quot;https://babeljs.io/repl#?browsers=defaults%2C%20not%20ie%2011%2C%20not%20ie_mob%2011&amp;amp;build=&amp;amp;builtIns=false&amp;amp;corejs=3.21&amp;amp;spec=false&amp;amp;loose=false&amp;amp;code_lz=Q&amp;amp;debug=false&amp;amp;forceAllTransforms=false&amp;amp;modules=false&amp;amp;shippedProposals=false&amp;amp;evaluate=false&amp;amp;fileSize=false&amp;amp;timeTravel=false&amp;amp;sourceType=module&amp;amp;lineWrap=true&amp;amp;presets=env%2Creact%2Cstage-2&amp;amp;prettier=false&amp;amp;targets=&amp;amp;version=7.27.0&amp;amp;externalPlugins=&amp;amp;assumptions=%7B%7D&quot; data-og-url=&quot;https://babeljs.io/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://babeljs.io/repl#?browsers=defaults%2C%20not%20ie%2011%2C%20not%20ie_mob%2011&amp;amp;build=&amp;amp;builtIns=false&amp;amp;corejs=3.21&amp;amp;spec=false&amp;amp;loose=false&amp;amp;code_lz=Q&amp;amp;debug=false&amp;amp;forceAllTransforms=false&amp;amp;modules=false&amp;amp;shippedProposals=false&amp;amp;evaluate=false&amp;amp;fileSize=false&amp;amp;timeTravel=false&amp;amp;sourceType=module&amp;amp;lineWrap=true&amp;amp;presets=env%2Creact%2Cstage-2&amp;amp;prettier=false&amp;amp;targets=&amp;amp;version=7.27.0&amp;amp;externalPlugins=&amp;amp;assumptions=%7B%7D&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://babeljs.io/repl#?browsers=defaults%2C%20not%20ie%2011%2C%20not%20ie_mob%2011&amp;amp;build=&amp;amp;builtIns=false&amp;amp;corejs=3.21&amp;amp;spec=false&amp;amp;loose=false&amp;amp;code_lz=Q&amp;amp;debug=false&amp;amp;forceAllTransforms=false&amp;amp;modules=false&amp;amp;shippedProposals=false&amp;amp;evaluate=false&amp;amp;fileSize=false&amp;amp;timeTravel=false&amp;amp;sourceType=module&amp;amp;lineWrap=true&amp;amp;presets=env%2Creact%2Cstage-2&amp;amp;prettier=false&amp;amp;targets=&amp;amp;version=7.27.0&amp;amp;externalPlugins=&amp;amp;assumptions=%7B%7D&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Babel &amp;middot; Babel&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The compiler for next generation JavaScript&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;babeljs.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2549&quot; data-origin-height=&quot;1382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/90eyK/btsNbMtl3Cz/ym7O0zV0bI8jhdGgTbwOPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/90eyK/btsNbMtl3Cz/ym7O0zV0bI8jhdGgTbwOPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/90eyK/btsNbMtl3Cz/ym7O0zV0bI8jhdGgTbwOPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F90eyK%2FbtsNbMtl3Cz%2Fym7O0zV0bI8jhdGgTbwOPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2549&quot; height=&quot;1382&quot; data-origin-width=&quot;2549&quot; data-origin-height=&quot;1382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;*FORCE ALL TRANSFORMS 옵션 체크&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설치버전&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Babel을 프로젝트에 적용하는 방법은 여러 가지가 있지만, 보편적이고 효율적인 방법은&lt;span&gt;&amp;nbsp;&lt;/span&gt;npm을 이용해&lt;span&gt;&amp;nbsp;&lt;/span&gt;@babel/cli, @babel/preset-env, @babel/core와 같은 필수 패키지를 설치하고, 이를&lt;span&gt;&amp;nbsp;&lt;/span&gt;.babelrc&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일로 설정하는 것이다. 이렇게 하면 최신 자바스크립트 코드를 쉽게 ES5 이하로 변환할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Babel 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744002229869&quot; class=&quot;coffeescript&quot; style=&quot;color: #3a4954; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;npm install --save-dev @babel/core @babel/cli @babel/preset-env&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Babel 설정 파일 생성&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;프로젝트 루트 디렉토리에&lt;span&gt;&amp;nbsp;&lt;/span&gt;.babelrc&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 생성하고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;@babel/preset-env를 사용하여 변환할 JavaScript의 범위를 설정한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;@babel/preset-env는 현재 실행 환경을 기준으로 필요한 변환만 수행할 수 있어 매우 효율적이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744002264991&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;presets&quot;: [
    [
      &quot;@babel/preset-env&quot;,
      {
        &quot;targets&quot;: &quot;&amp;gt; 0.25%, not dead&quot;  // 구형 브라우저를 지원하기 위한 설정
      }
    ]
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Babel 실행&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 Babel을 실행하여 최신 자바스크립트 파일을 ES5 이하로 변환할 수 있다. 예를 들어, src 폴더에 있는 JavaScript 파일을 dist 폴더로 변환하려면 아래와 같은 명령어를 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744002229871&quot; class=&quot;mipsasm&quot; style=&quot;color: #3a4954; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;npx babel src --out-dir dist&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 id=&quot;section-7&quot; style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Polyfill 적용하기&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Babel은 문법을 변환할 수 있지만,&lt;span&gt;&amp;nbsp;&lt;/span&gt;내장 함수나 API는 변환하지 않는다. 이때 필요한 것이 바로&lt;span&gt;&amp;nbsp;&lt;/span&gt;폴리필(polyfill)이다. 최신 자바스크립트 기능을 구형 브라우저에서 사용할 수 있도록 폴리필을 추가하는 방법은 크게 두 가지가 있다.&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;core-js&lt;/b&gt;&lt;b&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;regenerator-runtime&lt;span&gt;&amp;nbsp;&lt;/span&gt;설치&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;가장 널리 사용되는 폴리필 라이브러리는&lt;span&gt;&amp;nbsp;&lt;/span&gt;core-js와&lt;span&gt;&amp;nbsp;&lt;/span&gt;regenerator-runtime이다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;core-js는 ES6 이상에서 추가된 기능들을 폴리필해주고&lt;span&gt;&amp;nbsp;&lt;/span&gt;regenerator-runtime은&lt;span&gt;&amp;nbsp;&lt;/span&gt;async/await와 같은 비동기 기능을 폴리필해준다.&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744002298632&quot; class=&quot;mipsasm&quot; style=&quot;color: #3a4954; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;npm install --save core-js regenerator-runtime&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Polyfill을 Babel 설정에 포함시키기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;@babel/preset-env에서는 자동으로 필요한 폴리필을 추가해주는 기능이 있다. 이때&lt;span&gt;&amp;nbsp;&lt;/span&gt;useBuiltIns와&lt;span&gt;&amp;nbsp;&lt;/span&gt;corejs&lt;span&gt;&amp;nbsp;&lt;/span&gt;옵션을 설정하여 어떤 방식으로 폴리필을 적용할지를 결정할 수 있다. useBuiltIns 옵션을&lt;span&gt;&amp;nbsp;&lt;/span&gt;entry로 설정하면, 프로젝트 진입점에서 사용되는 기능에 맞춰 폴리필을 자동으로 포함시켜준다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;.babelrc&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 아래와 같이 수정한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744002381875&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;presets&quot;: [
    [
      &quot;@babel/preset-env&quot;,
      {
        &quot;targets&quot;: &quot;&amp;gt; 0.25%, not dead&quot;,  // 구형 브라우저를 지원하기 위한 설정
        &quot;useBuiltIns&quot;: &quot;entry&quot;,         // 진입점에서 폴리필 자동 삽입
        &quot;corejs&quot;: 3                     // core-js 3 버전 사용
      }
    ]
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 진입점 파일(예: index.js)에서 core-js와 regenerator-runtime을 임포트한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744002362395&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import &quot;core-js/stable&quot;;       // 최신 자바스크립트 기능에 대한 폴리필
import &quot;regenerator-runtime/runtime&quot;;  // async/await 폴리필
 
// 이제 ES6+ 코드가 구형 브라우저에서도 정상 동작함&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Polyfill을 선택적으로 적용하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전체 프로젝트에서 모든 폴리필을 적용할 필요가 없고, 특정 기능만 필요한 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;useBuiltIns: 'usage'를 설정하여 필요한 폴리필만 자동으로 적용할 수 있다. 이 경우는 프로젝트에서 사용한 기능에 따라 필요한 폴리필만 포함되므로 코드가 더 경량화된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744002337007&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;presets&quot;: [
    [
      &quot;@babel/preset-env&quot;,
      {
        &quot;targets&quot;: &quot;&amp;gt; 0.25%, not dead&quot;,  // 구형 브라우저를 지원하기 위한 설정
        &quot;useBuiltIns&quot;: &quot;usage&quot;,         // 사용된 기능에 맞는 폴리필만 삽입
        &quot;corejs&quot;: 3                     // core-js 3 버전 사용
      }
    ]
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;최적화와 효율성 고려하기&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;폴리필과 Babel 설정을 프로젝트에 통합하면, 최신 자바스크립트 기능을 구형 브라우저에서도 사용할 수 있지만 아래와 같은 최적화를 고려해야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #3a4954; text-align: start;&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;트리 쉐이킹(Tree Shaking)&lt;br /&gt;&lt;/b&gt;불필요한 코드가 포함되지 않도록, Babel의 변환과 폴리필 적용이 끝난 후 불필요한 부분을 제거하는 트리 쉐이킹을 적용할 수 있다. 이를 위해 Webpack이나 Rollup과 같은 번들러에서 설정을 추가해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;선택적 폴리필&lt;br /&gt;&lt;/b&gt;모든 폴리필을 적용하지 않고, 필요한 것만 적용하는 방식(useBuiltIns: 'usage')을 사용하는 것이 성능 측면에서 더 유리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;브라우저 지원 범위 설정&lt;br /&gt;&lt;/b&gt;@babel/preset-env의targets옵션을 통해 필요한 브라우저만 지원하도록 설정하면, 불필요한 코드 변환을 방지할 수 있다.&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;a href=&quot;https://fabric0de.tistory.com/86&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://fabric0de.tistory.com/86&lt;/a&gt;&lt;/p&gt;</description>
      <category>Front/JS ECMAScript5</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/552</guid>
      <comments>https://minibcake.tistory.com/552#entry552comment</comments>
      <pubDate>Mon, 7 Apr 2025 14:07:45 +0900</pubDate>
    </item>
    <item>
      <title>[ES5] ECMAScript5 주요 특징 및 현재 사용 시 주의점</title>
      <link>https://minibcake.tistory.com/551</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oHcVV/btsNajrUaYh/mwfjr2M7UV7zEd79HlCcc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oHcVV/btsNajrUaYh/mwfjr2M7UV7zEd79HlCcc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oHcVV/btsNajrUaYh/mwfjr2M7UV7zEd79HlCcc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoHcVV%2FbtsNajrUaYh%2Fmwfjr2M7UV7zEd79HlCcc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;150&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ECMAScript5 주요특징&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;엄격 모드 Strict Mode&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ES5에서 추가된 기능 중 엄격모드가 있으며, 지시어로 활성화 할 수 있는 이 모드는 JavaScript 문법의 제약을 강화하고 불완전한 작업을 방지한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743985275157&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;use strict&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;선언되지 않은 변수를 사용하거나, 읽기 전용 속성에 할당하거나, 매개변수 이름이 중복될 경우, 삭제할 수 없는 속성을 삭제할 경우 오류가 발생하며, with문 사용과 eval, argument를 함수명으로 사용하는 것이 금지된다. this의 기본값이 전역 객체 대신 undefined로 설정된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신의 자바스크립트에서는 이 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Strict&lt;span&gt; &lt;/span&gt;&lt;/span&gt;모드가 기본처럼 사용되고 있다. 특히 이후 버전인 ES6부터 도입된 클래스와 모듈은 기본이 Strict Mode, 엄격 모드 상태이다. 바벨과 타입스크립트도 Strict 모드를 기본으로 사용하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;JSON 지원&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ES5는 JSON 데이터 형식을 네이티브로 지원한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743985654838&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 객체를 JSON 문자열로 변환
var jsonString = JSON.stringify({name: &quot;John&quot;, age: 30});

// JSON 문자열을 객체로 파싱
var obj = JSON.parse('{&quot;name&quot;:&quot;John&quot;,&quot;age&quot;:30}');&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열 메서드 확장&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 가능&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1052&quot; data-start=&quot;178&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;&lt;b&gt;ES5 도입 배열 메서드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;395&quot; data-start=&quot;319&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;forEach()&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;각 요소에 대해 콜백 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;468&quot; data-start=&quot;396&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;map()&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;요소 변환 후 새 배열 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;545&quot; data-start=&quot;469&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;filter()&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;조건 만족하는 요소만 새 배열 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;608&quot; data-start=&quot;546&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;reduce()&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;누적 계산&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;677&quot; data-start=&quot;609&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;reduceRight()&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;오른쪽부터 누적 계산&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;748&quot; data-start=&quot;678&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;every()&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;모든 요소가 조건 만족?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;819&quot; data-start=&quot;749&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;some()&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;일부 요소가 조건 만족?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;898&quot; data-start=&quot;820&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;indexOf()&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;특정 요소의 인덱스 찾기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;971&quot; data-start=&quot;899&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;lastIndexOf()&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;끝에서부터 요소 인덱스 찾기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1052&quot; data-start=&quot;972&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;isArray() (Array.)*&lt;/td&gt;
&lt;td style=&quot;width: 44.3023%;&quot;&gt;배열 여부 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 불가&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2097&quot; data-start=&quot;1093&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;&lt;b&gt;ES6 이후 도입 배열 메서드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;&lt;b&gt;도입시기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1291&quot; data-start=&quot;1225&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;find()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;조건 만족 첫 요소 반환&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1359&quot; data-start=&quot;1292&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;findIndex()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;조건 만족 첫 인덱스 반환&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1436&quot; data-start=&quot;1360&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;from() (Array.)*&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;유사 배열 &amp;rarr; 배열&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;Array.from()&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1509&quot; data-start=&quot;1437&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;of() (Array.)*&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;인자들을 배열로&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;Array.of()&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1589&quot; data-start=&quot;1510&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;includes()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES2016&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;값 포함 여부 확인&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;indexOf()보다 직관적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1657&quot; data-start=&quot;1590&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;flat()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES2019&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;배열 평탄화&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;다차원 배열 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1726&quot; data-start=&quot;1658&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;flatMap()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES2019&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;map 후 평탄화&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;고급 변환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1800&quot; data-start=&quot;1727&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;at()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES2022&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;음수 인덱스 지원&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;arr.at(-1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1873&quot; data-start=&quot;1801&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;toReversed()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES2023&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;불변 .reverse()&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;원본 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1943&quot; data-start=&quot;1874&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;toSorted()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES2023&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;불변 .sort()&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;원본 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2015&quot; data-start=&quot;1944&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;toSpliced()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES2023&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;불변 .splice()&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;원본 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2097&quot; data-start=&quot;2016&quot;&gt;
&lt;td style=&quot;width: 27.093%;&quot;&gt;with()&lt;/td&gt;
&lt;td style=&quot;width: 12.6744%;&quot;&gt;ES2023&lt;/td&gt;
&lt;td style=&quot;width: 30.2325%;&quot;&gt;특정 인덱스 값 대체&lt;/td&gt;
&lt;td style=&quot;width: 29.8837%;&quot;&gt;arr.with(1, 'x')&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743987917349&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var arr = [1, 2, 3, 4, 5];

// forEach: 배열의 각 요소에 대해 함수 실행
arr.forEach(function(element, index) {
  console.log(element, index);
});

// map: 각 요소를 변환하여 새 배열 생성
var doubled = arr.map(function(element) {
  return element * 2;
}); // [2, 4, 6, 8, 10]

// filter: 조건에 맞는 요소만 포함하는 새 배열 생성
var evens = arr.filter(function(element) {
  return element % 2 === 0;
}); // [2, 4]

// reduce: 배열을 단일 값으로 축소
var sum = arr.reduce(function(accumulator, current) {
  return accumulator + current;
}, 0); // 15

// some: 하나 이상의 요소가 조건을 만족하는지 확인
var hasEven = arr.some(function(element) {
  return element % 2 === 0;
}); // true

// every: 모든 요소가 조건을 만족하는지 확인
var allEven = arr.every(function(element) {
  return element % 2 === 0;
}); // false

// indexOf 및 lastIndexOf: 요소의 인덱스 찾기
var index = arr.indexOf(3); // 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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체 메서드 확장&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 가능&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1634&quot; data-start=&quot;162&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;ES5 도입 메서드&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;477&quot; data-start=&quot;367&quot;&gt;
&lt;td&gt;Object.create(proto, [propertiesObject])&lt;/td&gt;
&lt;td&gt;지정한 프로토타입 객체 및 속성으로 새 객체 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;590&quot; data-start=&quot;478&quot;&gt;
&lt;td&gt;Object.defineProperty(obj, prop, descriptor)&lt;/td&gt;
&lt;td&gt;객체에 새 속성 추가 또는 기존 속성 변경 (세부 설정 포함)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;707&quot; data-start=&quot;591&quot;&gt;
&lt;td&gt;Object.defineProperties(obj, props)&lt;/td&gt;
&lt;td&gt;여러 속성 한 번에 정의&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;823&quot; data-start=&quot;708&quot;&gt;
&lt;td&gt;Object.getOwnPropertyDescriptor(obj, prop)&lt;/td&gt;
&lt;td&gt;주어진 객체의 특정 속성 설명자 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;926&quot; data-start=&quot;824&quot;&gt;
&lt;td&gt;Object.keys(obj)&lt;/td&gt;
&lt;td&gt;객체의 열거 가능한 자체 속성 이름을 배열로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1027&quot; data-start=&quot;927&quot;&gt;
&lt;td&gt;Object.getOwnPropertyNames(obj)&lt;/td&gt;
&lt;td&gt;객체의 모든 자체 속성 이름(열거 가능 여부 무관)을 배열로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1128&quot; data-start=&quot;1028&quot;&gt;
&lt;td&gt;Object.preventExtensions(obj)&lt;/td&gt;
&lt;td&gt;객체 확장 금지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1229&quot; data-start=&quot;1129&quot;&gt;
&lt;td&gt;Object.isExtensible(obj)&lt;/td&gt;
&lt;td&gt;객체가 확장 가능한지 여부 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1331&quot; data-start=&quot;1230&quot;&gt;
&lt;td&gt;Object.seal(obj)&lt;/td&gt;
&lt;td&gt;객체 봉인: 확장 금지 + 속성 삭제 금지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1432&quot; data-start=&quot;1332&quot;&gt;
&lt;td&gt;Object.isSealed(obj)&lt;/td&gt;
&lt;td&gt;객체가 봉인되었는지 여부 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1533&quot; data-start=&quot;1433&quot;&gt;
&lt;td&gt;Object.freeze(obj)&lt;/td&gt;
&lt;td&gt;객체 동결: 확장 금지 + 속성 삭제 금지 + 속성 변경 금지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1634&quot; data-start=&quot;1534&quot;&gt;
&lt;td&gt;Object.isFrozen(obj)&lt;/td&gt;
&lt;td&gt;객체가 동결되었는지 여부 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 불가&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 185px;&quot; border=&quot;1&quot; data-end=&quot;2762&quot; data-start=&quot;1694&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.3023%;&quot;&gt;&lt;b&gt;ES6 이후 도입 메서드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.0233%;&quot;&gt;&lt;b&gt;도입시기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.5581%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;2038&quot; data-start=&quot;1921&quot;&gt;
&lt;td style=&quot;height: 20px; width: 29.3023%;&quot;&gt;Object.assign(target, ...sources)&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 13.0233%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 57.5581%;&quot;&gt;하나 이상의 출처 객체에서 대상 객체로 속성을 복사&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;2155&quot; data-start=&quot;2039&quot;&gt;
&lt;td style=&quot;height: 20px; width: 29.3023%;&quot;&gt;Object.is(value1, value2)&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 13.0233%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 57.5581%;&quot;&gt;두 값이 같은지 비교 (===과 유사하지만 NaN, +0/-0 처리 다름)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;2279&quot; data-start=&quot;2156&quot;&gt;
&lt;td style=&quot;height: 20px; width: 29.3023%;&quot;&gt;Object.entries(obj)&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 13.0233%;&quot;&gt;ES8&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 57.5581%;&quot;&gt;객체를 [key, value] 쌍의 배열로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;2400&quot; data-start=&quot;2280&quot;&gt;
&lt;td style=&quot;height: 20px; width: 29.3023%;&quot;&gt;Object.values(obj)&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 13.0233%;&quot;&gt;ES8&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 57.5581%;&quot;&gt;객체의 값들을 배열로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot; data-end=&quot;2521&quot; data-start=&quot;2401&quot;&gt;
&lt;td style=&quot;height: 35px; width: 29.3023%;&quot;&gt;Object.getOwnPropertyDescriptors(obj)&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 13.0233%;&quot;&gt;ES8&lt;/td&gt;
&lt;td style=&quot;height: 35px; width: 57.5581%;&quot;&gt;모든 자체 속성의 설명자 객체를 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;2648&quot; data-start=&quot;2522&quot;&gt;
&lt;td style=&quot;height: 20px; width: 29.3023%;&quot;&gt;Object.fromEntries(iterable)&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 13.0233%;&quot;&gt;ES10&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 57.5581%;&quot;&gt;[key, value] 쌍의 iterable로부터 객체 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot; data-end=&quot;2762&quot; data-start=&quot;2649&quot;&gt;
&lt;td style=&quot;height: 40px; width: 29.3023%;&quot;&gt;Object.hasOwn(obj, prop)&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 13.0233%;&quot;&gt;ES2022&lt;/td&gt;
&lt;td style=&quot;height: 40px; width: 57.5581%;&quot;&gt;객체가 주어진 속성을 &lt;b&gt;자체적으로&lt;/b&gt; 가지고 있는지 확인 (기존 hasOwnProperty보다 안전)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744000006971&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Object.create: 지정된 프로토타입 및 속성으로 새 객체 생성
var person = {
  isHuman: true,
  printInfo: function() {
    console.log(&quot;Name: &quot; + this.name + &quot;, Human: &quot; + this.isHuman);
  }
};

var john = Object.create(person);
john.name = &quot;John&quot;;

// Object.defineProperty: 객체에 새 속성 추가 또는 기존 속성 수정
Object.defineProperty(john, 'age', {
  value: 30,
  writable: true,
  enumerable: true,
  configurable: true
});

// Object.defineProperties: 여러 속성 한 번에 정의
Object.defineProperties(john, {
  job: {
    value: 'Developer',
    writable: true
  },
  salary: {
    value: 50000,
    writable: false
  }
});

// Object.getOwnPropertyNames: 열거 가능 여부와 관계없이 모든 속성 이름 반환
var propNames = Object.getOwnPropertyNames(john); // [&quot;name&quot;, &quot;age&quot;, &quot;job&quot;, &quot;salary&quot;]

// Object.keys: 열거 가능한 속성의 이름만 반환
var keys = Object.keys(john); // [&quot;name&quot;, &quot;age&quot;, &quot;job&quot;]

// Object.getPrototypeOf: 객체의 프로토타입 반환
var proto = Object.getPrototypeOf(john); // person 객체

// Object.preventExtensions: 객체에 새 속성 추가 방지
Object.preventExtensions(john);

// Object.isExtensible: 객체가 확장 가능한지 확인
var canExtend = Object.isExtensible(john); // false

// Object.seal: 속성 추가/삭제 방지 (값 수정은 가능)
Object.seal(john);

// Object.isSealed: 객체가 봉인되었는지 확인
var isSealed = Object.isSealed(john); // true

// Object.freeze: 속성 추가/삭제/수정 방지 (완전 불변)
Object.freeze(john);

// Object.isFrozen: 객체가 동결되었는지 확인
var isFrozen = Object.isFrozen(john); // true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Function.prototype.bind()&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bind() 메서드는 함수의 this 값을 명시적으로 설정하고 미리 인수를 부분적으로 적용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1744000079794&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var user = {
  name: &quot;John&quot;,
  sayHi: function() {
    console.log(&quot;Hi, &quot; + this.name);
  }
};

var sayHiFunc = user.sayHi;
sayHiFunc(); // &quot;Hi, undefined&quot; (this가 전역 객체 참조)

var boundFunc = user.sayHi.bind(user);
boundFunc(); // &quot;Hi, John&quot; (this가 user 객체 참조)

// 인수를 부분적으로 적용
function multiply(a, b) {
  return a * b;
}

var double = multiply.bind(null, 2);
double(5); // 10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Getter와 Setter&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744000102640&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var person = {
  firstName: &quot;John&quot;,
  lastName: &quot;Doe&quot;,
  
  // getter
  get fullName() {
    return this.firstName + &quot; &quot; + this.lastName;
  },
  
  // setter
  set fullName(name) {
    var parts = name.split(&quot; &quot;);
    this.firstName = parts[0];
    this.lastName = parts[1];
  }
};

console.log(person.fullName); // &quot;John Doe&quot;
person.fullName = &quot;Jane Smith&quot;;
console.log(person.firstName); // &quot;Jane&quot;
console.log(person.lastName); // &quot;Smith&quot;

// Object.defineProperty로도 getter/setter 정의 가능
var counter = {count: 0};
Object.defineProperty(counter, 'increment', {
  get: function() {
    this.count++;
    return this.count;
  }
});

console.log(counter.increment); // 1
console.log(counter.increment); // 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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문자열 메서드&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;trim이 추가되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 불가&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2032&quot; data-start=&quot;559&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;&lt;b&gt;ES6이후 도입 메서드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;&lt;b&gt;도입시기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;913&quot; data-start=&quot;792&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.prototype.startsWith(search, [pos])&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;주어진 문자열이 특정 문자열로 시작하는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1037&quot; data-start=&quot;914&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.prototype.endsWith(search, [length])&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;주어진 문자열이 특정 문자열로 끝나는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1163&quot; data-start=&quot;1038&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.prototype.includes(search, [start])&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;문자열이 특정 문자열을 포함하는지 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1287&quot; data-start=&quot;1164&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.prototype.repeat(count)&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;문자열을 주어진 횟수만큼 반복한 새 문자열 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1411&quot; data-start=&quot;1288&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.prototype.codePointAt(pos)&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;주어진 위치의 UTF-16 코드 포인트 반환 (이모지 등 2바이트 문자에 유용)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1534&quot; data-start=&quot;1412&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.fromCodePoint(...codePoints)&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES6&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;하나 이상의 유니코드 코드 포인트로부터 문자열 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1659&quot; data-start=&quot;1535&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.prototype.padStart(targetLength, padString)&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES8&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;주어진 길이에 도달할 때까지 문자열 시작 부분에 다른 문자열 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1785&quot; data-start=&quot;1660&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.prototype.padEnd(targetLength, padString)&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES8&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;주어진 길이에 도달할 때까지 문자열 끝 부분에 다른 문자열 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1905&quot; data-start=&quot;1786&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.prototype.matchAll(regexp)&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES11&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;정규 표현식과 일치하는 모든 결과의 이터레이터 반환 (반복 가능한 매칭 결과 제공)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2032&quot; data-start=&quot;1906&quot;&gt;
&lt;td style=&quot;width: 35.1163%;&quot;&gt;String.prototype.replaceAll(search, replacement)&lt;/td&gt;
&lt;td style=&quot;width: 11.9767%;&quot;&gt;ES12&lt;/td&gt;
&lt;td style=&quot;width: 52.7907%;&quot;&gt;문자열 내 모든 일치 항목을 교체 (기존 replace는 첫 번째만 교체됨)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744000195143&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// trim: 문자열 앞뒤의 공백 제거
var str = &quot;  Hello World  &quot;;
var trimmed = str.trim(); // &quot;Hello World&quot;

// 부분 문자열 추출 메서드
var text = &quot;JavaScript&quot;;
text.charAt(0); // &quot;J&quot;
text.charCodeAt(0); // 74 (J의 Unicode 값)
text.substring(0, 4); // &quot;Java&quot;
text.substr(4, 6); // &quot;Script&quot;
text.slice(0, 4); // &quot;Java&quot;
text.slice(-6); // &quot;Script&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에도 Date 객체 개선사항 등이 있다.&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;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;var와 let, const 차이에 대해 주의해야한다. var의 경우 함수 스코프를 가지며 같은 이름으로 재선언 및 호이스팅이 가능하다. 블록 스코프 변수 선언이 필요한 경우 즉시 실행 함수로 대체해야하며 호이스팅으로 인해 예상치 못한 동작에 주의해야한다.&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;pre id=&quot;code_1744000497169&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 함수 선언식
function add(a, b) {
  return a + b;
}

// 함수 표현식
var subtract = function(a, b) {
  return a - b;
};

// 즉시 실행 함수 표현식(IIFE)
(function() {
  var private = &quot;비공개 변수&quot;;
  console.log(private);
})();&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;Promise가 네이티브로 지원되지 않는다. 콜백지옥이 발생할 수 있고, async, await 구문을 사용할 수 없다. Promise 폴리필 또는 라이브러리를 필요로 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744000538780&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 콜백 패턴
function getData(callback) {
  setTimeout(function() {
    callback(&quot;데이터&quot;);
  }, 1000);
}

getData(function(data) {
  console.log(data); // &quot;데이터&quot;
});

// Promise는 라이브러리(예: Bluebird, Q)를 통해 구현해야 함&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;네이티브 모듈 시스템이 없다. import, export 문법을 사용할 수 없으며 모듈 로더 또는 번들러를 필요로 한ㄷ. 전역 네임스페이스 오염에 주의하여야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1744000682693&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// ES5에서는 전역 네임스페이스를 사용한 패턴
var MyModule = (function() {
  var privateVar = &quot;비공개&quot;;
  
  function privateFunc() {
    console.log(privateVar);
  }
  
  return {
    publicVar: &quot;공개&quot;,
    publicFunc: function() {
      privateFunc();
    }
  };
})();

// 또는 CommonJS(Node.js 스타일)
var module = require('./module');
module.doSomething();

// 또는 AMD(RequireJS 스타일)
define(['dependency'], function(dependency) {
  return {
    doSomething: function() {}
  };
});&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;객체 및 배열을 조작할 때 구조 분해 할당 및 스프레드 연산자가 없다. 스프레드 연산자 대신 concat(), apply() 사용이 필요하다. assign()의 경우 후기 버전에서만 사용 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1744000716662&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 객체에서 값 추출
var person = { name: &quot;John&quot;, age: 30 };
var name = person.name;
var age = person.age;

// 객체 복사/병합
var original = { a: 1, b: 2 };
var copy = {};

Object.keys(original).forEach(function(key) {
  copy[key] = original[key];
});

// ES5 후기에 추가된 Object.assign 사용
var merged = Object.assign({}, original, { c: 3 });

// 배열 복사
var arr = [1, 2, 3];
var arrCopy = arr.slice();

// 배열 병합
var arr1 = [1, 2];
var arr2 = [3, 4];
var merged = arr1.concat(arr2);&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;클래스 상속 시에는 프로토타입 기반 상속을 해야한다. ES6 클래스 문법은 당연히 사용 불가하며 super 키워드가 없다.&lt;/p&gt;
&lt;pre id=&quot;code_1744000773772&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 생성자 함수
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// 프로토타입에 메서드 추가
Person.prototype.sayHello = function() {
  return &quot;Hi, I'm &quot; + this.name;
};

// 상속
function Employee(name, age, job) {
  // 상위 생성자 호출
  Person.call(this, name, age);
  this.job = job;
}

// 프로토타입 체인 설정
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

// 하위 클래스에 메서드 추가
Employee.prototype.getJob = function() {
  return this.job;
};

var john = new Employee(&quot;John&quot;, 30, &quot;Developer&quot;);
john.sayHello(); // &quot;Hi, I'm John&quot;
john.getJob(); // &quot;Developer&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 연결 시 + 연산자를 사용해야한다. 템플릿 리터럴``(백틱)은 사용불가하다.&lt;/p&gt;
&lt;pre id=&quot;code_1744000842278&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var name = &quot;John&quot;;
var age = 30;

// 문자열 연결
var message = &quot;My name is &quot; + name + &quot; and I am &quot; + age + &quot; years old.&quot;;

// 여러 줄 문자열
var multiline = &quot;This is a\n&quot; +
                &quot;multiline\n&quot; +
                &quot;string.&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front/JS ECMAScript5</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/551</guid>
      <comments>https://minibcake.tistory.com/551#entry551comment</comments>
      <pubDate>Mon, 7 Apr 2025 13:41:28 +0900</pubDate>
    </item>
    <item>
      <title>[ES5] JavaScript ECMAScript5</title>
      <link>https://minibcake.tistory.com/550</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bumCXT/btsNaxiLXbL/mITikGysaOx5sosIPASDsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bumCXT/btsNaxiLXbL/mITikGysaOx5sosIPASDsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bumCXT/btsNaxiLXbL/mITikGysaOx5sosIPASDsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbumCXT%2FbtsNaxiLXbL%2FmITikGysaOx5sosIPASDsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;150&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ECMAScript&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트는 1995년 Brendan Eich라는 사람이 발명했다. 그리고 1997년에 ECMA 표준이 되었다. ECMA Script는 Ecma 인터내셔널 ECMA-262 기술 규격에 정의된 표준화된 스크립트 프로그래밍 언어이다. 자바스크립트를 표준화하기 위해 만들어졌으며, 액션스크립트, J스크립트 등 다른 스크립트 언어도 포함한다.&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;ES5&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ECMAScript5를 줄여서 ES5라고 하며 새로운 표준이 발표될 때마다 숫자가 늘어난다. ES5는 2009년에 발표된 버전이며 대부분의 브라우저에서 지원한다. 아직 var를 사용하는 버전이다.&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;ES6부터는 let, const를 지원하며 그 외에도 다른 기능들이 많이 추가되었다. 유독 ES5와 ES6를 구분짓는데, 그 이유는 var let const처럼 버전 차이에 따른 기능 추가가 뚜렷했기 때문이다. (그 외에도 Arrow function, Default parameter, Template literal, Multi-line string, 클래스, 모듈, 프로미스 등 다양한 기능이 추가됐다.)&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;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넥사크로를 사용해야하는데, 투비소프트에서는 그냥 JS 사용하면된다고 쉽게 말하는데 내가 배운 JS와 너무 달라서 계속 찾아보니 기반 버전이 완벽하게 ES5는 아닌 것 같지만 대체로 ES5에 가까운 것 같았기 때문이다. 예제 코드, 교육에서도 var만 사용하는 부분도, await나 async 개념이 없고 콜백 함수로 전부 처리하는 부분도, replaceAll()을 지원하지 않는 부분도 전부 구버전 JS로 느껴졌기 때문이다.&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;물론 최신 버전도 계속 공부할 예정이지만 당장 써야하는 JS가 구버전이라면 기왕 하는 거 구버전 알아서 하면 도움이 될 거라고 생각한다. 마침 집에 부모님이 예전에 공부하던 JS책이 있었는데, ES5였다.. 어릴 때 첨 접했던 개발인 플래시가 죽은 뒤로 개발책도 물려받을 수 있을 거라곤 생각하지 못했는데 넥사크로가 많은 길을 열어주는 것 같다^^&lt;/p&gt;</description>
      <category>Front/JS ECMAScript5</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/550</guid>
      <comments>https://minibcake.tistory.com/550#entry550comment</comments>
      <pubDate>Sat, 5 Apr 2025 21:57:35 +0900</pubDate>
    </item>
    <item>
      <title>[Nexacro] 넥사크로 N v24</title>
      <link>https://minibcake.tistory.com/549</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pTpzy/btsNaLgFRqg/mfoLB8LAoEmJCr7t7VT9LK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pTpzy/btsNaLgFRqg/mfoLB8LAoEmJCr7t7VT9LK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pTpzy/btsNaLgFRqg/mfoLB8LAoEmJCr7t7VT9LK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpTpzy%2FbtsNaLgFRqg%2FmfoLB8LAoEmJCr7t7VT9LK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;150&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;226&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;넥사크로 N v24&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넥사크로 N의 24버전은 2023년 11월 투비소프트에서 출시된 UIUX 통합개발 플랫폼이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로우코드를 지원하고 있으며 기업용 솔루션을 제공하는데 초점이 맞춰져 있다. 고성능의 UI 및 애플리케이션 개발을 지원하는 다양한 기능을 제공하고 있다.&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;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;크로스 플랫폼 지원&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넥사크로 N v24는 웹, 모바일(Android, iOS), 데스크탑(Windows, macOS)을 아우르는 다양한 플랫폼을 지원하며, 한번의 개발로 여러 플랫폼에서 실행 가능한 애플리케이션을 만들 수 있다.&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;강력한 UI 컴포넌트&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 UI 컴포넌트와 스타일을 제공하여, 고급 UI/UX를 개발할 수 있게 한다. 그리드, 차트, 리스트, 다이얼로그 등 기업용 애플리케이션에서 자주 사용하는 UI 요소들을 쉽게 구현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;넥사크로 엔진&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넥사크로는 자체적인 넥사크로 엔진을 기반으로 작동한다. 이 엔진은 크로미움(Chromium) 엔진을 활용하여 웹 애플리케이션을 실행하며, 자바스크립트 엔진인 V8을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트 코드 실행, HTML5, CSS3 지원을 통해 다양한 웹 기술을 활용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자바스크립트 기반의 로직 처리&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넥사크로 N v24는 자바스크립트를 기반으로 로직을 처리하며, 강력한 비동기 처리와 데이터 바인딩 기능을 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;고성능 비즈니스 로직 처리&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대규모 기업용 애플리케이션에서 발생하는 복잡한 비즈니스 로직을 효율적으로 처리할 수 있는 구조를 제공하며, 고속의 데이터 처리 성능을 자랑한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;RESTful API 통합&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;REST API 기반으로 서버와의 통합을 쉽게 할 수 있으며, 클라이언트와 서버 간 데이터 통신을 효율적으로 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다양한 템플릿 제공&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 템플릿을 제공하여 개발자가 애플리케이션을 빠르게 시작할 수 있게 해주며, 다양한 비즈니스 요구에 맞춘 커스터마이징이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;디버깅 및 테스트 도구&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발 중에 디버깅을 지원하는 도구와 테스트를 위한 기능들을 제공하여, 안정성 있는 애플리케이션을 쉽게 개발할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;보안 기능&lt;/b&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기업용 애플리케이션의 특성상 보안이 매우 중요하므로, 넥사크로 N v24는 암호화, 인증, 권한 관리 등 다양한 보안 기능을 제공하여 안전한 애플리케이션 개발을 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;장단점&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넥사크로 N v24는 기업용 크로스 플랫폼 애플리케이션 개발에 강점을 가지며, 특히 모바일, 웹, 데스크탑에서 동시에 작동할 수 있는 애플리케이션을 제공해야 하는 기업들에서 높은 사용 추세를 보이고 있다. 하지만 최신 자바스크립트 기능 지원이 약하고, 커스터마이징에 한계가 있다. 뿐만아니라 크로미움 엔진에 의존하므로 일부 기능이 제한될 수 있다. 비용 문제도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 단점은 하단 글을 참조 바란다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://grast.tistory.com/3#google_vignette&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://grast.tistory.com/3#google_vignette&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1743856064293&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;어째서 도대체 왜 넥사크로를 배워야 하는가&quot; data-og-description=&quot;제목 그대로다. 어째서 도대체 왜 넥사크로를 배워야 하는가를 분석하는 글이다. 필자 왈왈, 현존하는 프로그래밍 툴 중 정말 최악의 쓰레기인데도 왜 써야 하는가를 논하는 글이다. 이 글은 투&quot; data-og-host=&quot;grast.tistory.com&quot; data-og-source-url=&quot;https://grast.tistory.com/3#google_vignette&quot; data-og-url=&quot;https://grast.tistory.com/3&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WXx36/hyYyThAfZR/YH7jbyInRewd43tNHfyMPK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hYp0n/hyYyLw2EQb/fDmCkyj5iaUIRW1zZXzlwk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://grast.tistory.com/3#google_vignette&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://grast.tistory.com/3#google_vignette&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WXx36/hyYyThAfZR/YH7jbyInRewd43tNHfyMPK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hYp0n/hyYyLw2EQb/fDmCkyj5iaUIRW1zZXzlwk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;어째서 도대체 왜 넥사크로를 배워야 하는가&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;제목 그대로다. 어째서 도대체 왜 넥사크로를 배워야 하는가를 분석하는 글이다. 필자 왈왈, 현존하는 프로그래밍 툴 중 정말 최악의 쓰레기인데도 왜 써야 하는가를 논하는 글이다. 이 글은 투&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;grast.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국내 SI에서만 사용되는 툴이며, 개발자 커뮤니티에 들어가보면 넥사크로를 걷어내는 프로젝트에 참여했다는 말이 제법 많다. 물론 넥사크로 교육을 투비소프트에서 직접 지원해주고, 다양한 부분에서 지원을 해주려는 노력은 많이 보이는데... 난 솔직히 왜 이걸 써야하는지 잘 모르겠다...&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;화면을 빠르게 찍어내는데는 도움이 될지 모르겠지만 비용도 계속해서 발생하는데다가 라이센스도 번거로운 측면이 있고(라이센스 기간 기준은 도무지 납득되지 않음), 데이터 바인딩은 좀 쉬울지 몰...라도? 그로인해 새롭게 도입된 통신이.. 그다지 편해보이지도 좋아보이지도 않는다.... JSP로 화면 구성 배울 때는 DB고 뭐고 알바 아닌 느낌으로 할 수 있었는데 (Controller에서 넘어오는 데이터가 중요하니) 넥사는 DB까지 알고 있어야하는 느낌이다. 데이터셋이라는걸로 DB테이블 같은 걸 구성해둔다. 넥사 쓰면 MVC 분리 가능할지.. 어케 해야할지 좀 어렵게 느껴졌다..&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;그리고 사용하는 JS가 굉장히 구버전으로, 모든 예제가 var로 되어있고, JS 최신버전에 replaceAll()이 있는데도 불구하고 JS에는 없어서 넥사크로 자체 메서드로 구현했다는 말을 자랑처럼한다...;; 배우면서 왜 이걸 이렇게 해야하는지 의문이 든 순간이 엄청 많았다... 기본 HTML CSS JS 보다 번거로워지고 귀찮아지기만한 느낌..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 일을 해야하니 공부과 탐구는 더 해야겠지만...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;넥사 스튜디오 자체도 진짜 와 너무너무 구려서 제발 회사에서 넥사 안 쓰겠다고하고 조만간 접었으면 좋겠다... 이제 프론트 소홀히 하지 않구 공부 열심히 할게요...ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front/Nexacro</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/549</guid>
      <comments>https://minibcake.tistory.com/549#entry549comment</comments>
      <pubDate>Sat, 5 Apr 2025 21:40:54 +0900</pubDate>
    </item>
    <item>
      <title>[DBMS/PLSQL] 블록 BLOCK</title>
      <link>https://minibcake.tistory.com/548</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biUP7I/btsMz5ATlSo/VvvRVyNDoD4WO3zF8YzmO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biUP7I/btsMz5ATlSo/VvvRVyNDoD4WO3zF8YzmO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biUP7I/btsMz5ATlSo/VvvRVyNDoD4WO3zF8YzmO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiUP7I%2FbtsMz5ATlSo%2FVvvRVyNDoD4WO3zF8YzmO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;106&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;705&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;블록&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PL/SQL 소스 프로그램의 기본 단위로 선언부, 실행부, 예외처리부로 구성된다. 블록은 이름이 있는 블록과 익명 블록으로 구분되며, 함수, 프로시저, 패키지 등이 익명 블록에 속한다.&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;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;이름부 (없을 시 익명함수)&lt;br /&gt;IS (AS)&lt;br /&gt;선언부 (DECLARE Optional)&lt;br /&gt;&lt;b&gt;BEGIN&lt;/b&gt;&lt;br /&gt;실행부 (BEGIN END mandatory)&lt;br /&gt;EXCEPTION&lt;br /&gt;예외 처리부 (Optional)&lt;br /&gt;&lt;b&gt;END;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PL/SQL 블록 내에서는 한 문장이 종료될 때마다 세미콜론을 통해 구분하며, END 뒤에 세미콜론을 통해 블록이 끝났다는 것을 명시한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Declarative Section (선언부)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수, 상수, CURSOR, USER_DEFINE Exception 등을 선언한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Executable Section (실행부)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL, 반복분, 조건문을 작성한다.. 실행부는 BEGIN으로 시작하고 END로 종료되며, 실행문은 프로그램 내용이 들어가는 부분으로서 필수적으로 사용되어야 한다. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Exception Handling Section (예외처리)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예외에 대한 처리를 진행한다.. 일반적으로 오류를 정의하고 처리하는 부분으로 선택 사항이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1741067266181&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DECLARE
	vi_num NUMBER; --선언
BEGIN
	vi_num := 100; --100 할당
	DBMS_OUTPUT.PUT_LINE(vi_num); --vi_num 변수 출력
END;&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;DBMS_OUTPUT 패키지를 사용하기 위해서는 SET SERVEROUTPUT ON 명령어가 필요하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.gurubee.net/lecture/1342&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://www.gurubee.net/lecture/1342&lt;/a&gt;&lt;/p&gt;</description>
      <category>DB/Oracle PLSQL</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/548</guid>
      <comments>https://minibcake.tistory.com/548#entry548comment</comments>
      <pubDate>Tue, 4 Mar 2025 14:38:20 +0900</pubDate>
    </item>
    <item>
      <title>[기초] CMDB와 KEDB (KMDB)</title>
      <link>https://minibcake.tistory.com/547</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tl3B0/btsMxH8fhYs/vSmqTDGw9zYyJjxkJZDDM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tl3B0/btsMxH8fhYs/vSmqTDGw9zYyJjxkJZDDM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tl3B0/btsMxH8fhYs/vSmqTDGw9zYyJjxkJZDDM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftl3B0%2FbtsMxH8fhYs%2FvSmqTDGw9zYyJjxkJZDDM1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;150&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;구성 관리 데이터베이스 CMDB&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IT조직에서 IT 자산에 대한 정보를 저장하는 데이터베이스이다. 사용하는 하드웨어, 소프트웨어, 네트워크 간 관계를 명확히하는 파일이다.&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;하드웨어, 소프트웨어, 시스템, 시설, 직원과 같은 항목 구성에 대한 정보를 저장한다. 구성 데이터에는 항목 간의 상호 종속성, 각 항목의 변경 기록, 클래스 및 특성이 포함될 수도 있다. 이러한 추적 항목을 CI(구성 항목)이라고 하며 CI는 IT 서비스를 제공하기 위해 관리해야하는 모든 컴포넌트를 의미한다. 라우터, 서버, 애플리케이션, 가상 머신 등이 있다.&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;CMDB의 목표는 더 나은 비즈니스 의사 결정을 내리고 효율적인 ITSM(조직이 IT 서비스를 계획, 설계, 구축, 운영, 유지 관리하는데 필요한 프로세스) 프로세스를 실행하는데 필요한 정보를 제공하는 것에 있다. 모든 구성 정보를 중앙 집중식으로 유지하면 CI의 관계를 더 잘 파악할 수 있다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.atlassian.com/ko/itsm/it-asset-management/asset-tracking&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.atlassian.com/ko/itsm/it-asset-management/asset-tracking&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740715341862&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;구성 관리 데이터베이스(CMDB)란? | Atlassian&quot; data-og-description=&quot;CMDB는 수명 주기 전반에 걸쳐 구성 기록을 저장합니다. CMDB의 특징 및 이점과 이것이 자산 관리와 연결되는 방식을 알아보세요.&quot; data-og-host=&quot;www.atlassian.com&quot; data-og-source-url=&quot;https://www.atlassian.com/ko/itsm/it-asset-management/asset-tracking&quot; data-og-url=&quot;https://www.atlassian.com/ko/itsm/it-asset-management/asset-tracking&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.atlassian.com/ko/itsm/it-asset-management/asset-tracking&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.atlassian.com/ko/itsm/it-asset-management/asset-tracking&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;구성 관리 데이터베이스(CMDB)란? | Atlassian&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;CMDB는 수명 주기 전반에 걸쳐 구성 기록을 저장합니다. CMDB의 특징 및 이점과 이것이 자산 관리와 연결되는 방식을 알아보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.atlassian.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;알려진 오류 데이터베이스 KEDB&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Known Error DataBase로, 알려진 오류의 데이터베이스이다. 알려진 오류란 원인과 해결방안이 알려진 오류를 의미한다. 다시 말하면 KEDB는 오류의 원인과 해결 방안에 대한 DB라고 할 수 있다. KEDB가 있다면 관리자가 오류의 원인을 분석하고, 해결 방안을 찾을 필요없이 바로 조치할 수 있기 때문에 인프라 장애 시간을 줄이는 효과를 얻을 수 있다.&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;장애를 인지하고 문제를 정의하고, 문제의 원인 규명 및 임시 해결방안을 도출하면 KEDB에 넣을 데이터 한 개를 확보하게 된다. 이러한 모든 단계를 Knowledge Management DataBase KMDB개념으로 관리하기도 한다.&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;IT 업계에서 장애, 에러에 관한 정보는 중요한 지식 자산이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/watch_all/221840673527&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://m.blog.naver.com/watch_all/221840673527&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740715619294&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Known Error DataBase(KEDB) 개념과 활용법&quot; data-og-description=&quot;IT 인프라 관리자라면, 장애 관리를 위한 Known Error DataBase(KEDB)를 관리를 빼놓을 수 없습...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/watch_all/221840673527&quot; data-og-url=&quot;https://blog.naver.com/watch_all/221840673527&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WwLpU/hyYjMpgPtM/8En9G6Qjb8eAG16YafaqqK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/watch_all/221840673527&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/watch_all/221840673527&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WwLpU/hyYjMpgPtM/8En9G6Qjb8eAG16YafaqqK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Known Error DataBase(KEDB) 개념과 활용법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;IT 인프라 관리자라면, 장애 관리를 위한 Known Error DataBase(KEDB)를 관리를 빼놓을 수 없습...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타/기초 지식</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/547</guid>
      <comments>https://minibcake.tistory.com/547#entry547comment</comments>
      <pubDate>Fri, 28 Feb 2025 13:07:32 +0900</pubDate>
    </item>
    <item>
      <title>[DBMS] SQL과 PL/SQL 차이</title>
      <link>https://minibcake.tistory.com/546</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKhbsv/btsMwrYTF4a/3qgqy9KXE3Zy2y7a1K6jkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKhbsv/btsMwrYTF4a/3qgqy9KXE3Zy2y7a1K6jkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKhbsv/btsMwrYTF4a/3qgqy9KXE3Zy2y7a1K6jkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKhbsv%2FbtsMwrYTF4a%2F3qgqy9KXE3Zy2y7a1K6jkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;131&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SQL&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관계형 DB에 저장된 데이터에 접근하기 위해 사용하는 표준 언어이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(SELECT, UPDATE, INSERT와 같은 데이터 조작 쿼리)&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;PL/SQL&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Oracle&amp;rsquo;s Procedural Language extension to SQL의 약자로, SQL문을 사용하여 프로그램을 작성할 수 있도록 확장해놓은 오라클의 절차적 언어이다. PL/SQL문은&amp;nbsp;블록&amp;nbsp;구조로&amp;nbsp;되어&amp;nbsp;있고,&amp;nbsp;PL/SQL&amp;nbsp;자신이&amp;nbsp;컴파일&amp;nbsp;엔진이&amp;nbsp;가지고&amp;nbsp;있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(DECLARE, EXCEPTION, LOOP 등 절차적 프로그래밍)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SQL*PLUS&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL, PL/SQL을 실행할 수 있는 환경을 제공하는 오라클의 툴이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL*PLUS의 명령어는 SQL 명령어와 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;정리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL은 데이터를 조작하는데 주로 사용되는 쿼리언어이고 PL/SQL은 응용 프로그램을 설계하는 절차언어이며, SQL에서는 할수없는 조건,반복문, 등 DB중심의 응용프로그램을 설계하기위한 오라클의 원시 프로그래밍 언어이다. PL/SQL은 명령문 블록을 서버로 전달하기에 속도가 빠르고, SQL은 한번에 하나의 명령만 가능하기에 느리다.&lt;/p&gt;</description>
      <category>DB/DBMS</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/546</guid>
      <comments>https://minibcake.tistory.com/546#entry546comment</comments>
      <pubDate>Thu, 27 Feb 2025 09:25:37 +0900</pubDate>
    </item>
    <item>
      <title>[기타] 웹사이트 참고용 사이트</title>
      <link>https://minibcake.tistory.com/544</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnqXVI/btsMxEWBOcc/SkmYZouDbuYpeEK48PgJgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnqXVI/btsMxEWBOcc/SkmYZouDbuYpeEK48PgJgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnqXVI/btsMxEWBOcc/SkmYZouDbuYpeEK48PgJgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnqXVI%2FbtsMxEWBOcc%2FSkmYZouDbuYpeEK48PgJgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;150&quot; height=&quot;150&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&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;a href=&quot;https://webjangi.com/artwork&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://webjangi.com/artwork&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740528986771&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;웹쟁이 | 모든 웹 작품과 리소스가 한 곳에&quot; data-og-description=&quot;웹쟁이 | 모든 웹 작품과 리소스가 한 곳에&quot; data-og-host=&quot;webjangi.com&quot; data-og-source-url=&quot;https://webjangi.com/artwork&quot; data-og-url=&quot;https://webjangi.com/artwork&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b6Odpu/hyYjGIYVX2/xcCnNazlOLfoc4e6znShP0/img.jpg?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/m8WEj/hyYjAII4ZK/keLArxN8KJ808KnPrsQ85K/img.jpg?width=1630&amp;amp;height=545&amp;amp;face=0_0_1630_545,https://scrap.kakaocdn.net/dn/gKgE8/hyYjyEaHp8/H7F2VNtc7gKAFAGk5k3oq1/img.jpg?width=690&amp;amp;height=900&amp;amp;face=0_0_690_900&quot;&gt;&lt;a href=&quot;https://webjangi.com/artwork&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webjangi.com/artwork&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b6Odpu/hyYjGIYVX2/xcCnNazlOLfoc4e6znShP0/img.jpg?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/m8WEj/hyYjAII4ZK/keLArxN8KJ808KnPrsQ85K/img.jpg?width=1630&amp;amp;height=545&amp;amp;face=0_0_1630_545,https://scrap.kakaocdn.net/dn/gKgE8/hyYjyEaHp8/H7F2VNtc7gKAFAGk5k3oq1/img.jpg?width=690&amp;amp;height=900&amp;amp;face=0_0_690_900');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;웹쟁이 | 모든 웹 작품과 리소스가 한 곳에&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;웹쟁이 | 모든 웹 작품과 리소스가 한 곳에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;webjangi.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wwit.design/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wwit.design/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740529006820&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;What Was IT&quot; data-og-description=&quot;한국의 UI/UX 모바일 패턴을 수집합니다.&quot; data-og-host=&quot;wwit.design&quot; data-og-source-url=&quot;https://wwit.design/&quot; data-og-url=&quot;https://wwit.design//2021/02/16/lifeplus/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dEnYKL/hyYjKdvYgB/buWdyqR9krz6KmtyRPURz1/img.png?width=1600&amp;amp;height=840&amp;amp;face=0_0_1600_840,https://scrap.kakaocdn.net/dn/gR8Ba/hyYjDSYr1A/bR0Q91YrvTCZtqLGlELIdk/img.png?width=1600&amp;amp;height=840&amp;amp;face=0_0_1600_840,https://scrap.kakaocdn.net/dn/NLnkT/hyYjh3yMnz/8gRfkBSPQNrEHuC7VG79jk/img.png?width=1125&amp;amp;height=2436&amp;amp;face=0_0_1125_2436&quot;&gt;&lt;a href=&quot;https://wwit.design/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wwit.design/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dEnYKL/hyYjKdvYgB/buWdyqR9krz6KmtyRPURz1/img.png?width=1600&amp;amp;height=840&amp;amp;face=0_0_1600_840,https://scrap.kakaocdn.net/dn/gR8Ba/hyYjDSYr1A/bR0Q91YrvTCZtqLGlELIdk/img.png?width=1600&amp;amp;height=840&amp;amp;face=0_0_1600_840,https://scrap.kakaocdn.net/dn/NLnkT/hyYjh3yMnz/8gRfkBSPQNrEHuC7VG79jk/img.png?width=1125&amp;amp;height=2436&amp;amp;face=0_0_1125_2436');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;What Was IT&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;한국의 UI/UX 모바일 패턴을 수집합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wwit.design&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://uibowl.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://uibowl.io/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740529018509&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;유아이볼 | 매일 하루에 한개씩 업데이트 되는 패턴과 친해져요!&quot; data-og-description=&quot;국내 UI/UX 패턴을 담은 공간, 유아이볼&quot; data-og-host=&quot;uibowl.io&quot; data-og-source-url=&quot;https://uibowl.io/&quot; data-og-url=&quot;https://uibowl.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mDHw6/hyYjxrH5Ys/GGw0NuRYg0J73kB9fGFCG1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://uibowl.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://uibowl.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mDHw6/hyYjxrH5Ys/GGw0NuRYg0J73kB9fGFCG1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;유아이볼 | 매일 하루에 한개씩 업데이트 되는 패턴과 친해져요!&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;국내 UI/UX 패턴을 담은 공간, 유아이볼&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;uibowl.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cssdesignawards.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cssdesignawards.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740529109850&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CSS Design Awards - Website Awards - Best Web Design Inspiration - CSS Awards&quot; data-og-description=&quot;AWARDED 2025 FEB 25 Distinctive website solutions for leading and rising companies. Salva Carlino Head of Design UI 9 UX 9 INN 9 9 Gabriel Contassot Design Director UI 9 UX 9 INN 9 9 Ana Jesus Founder and Creative Head UI 8.5 UX 8.5 INN 8.5 8.5 Mayra Metax&quot; data-og-host=&quot;cssdesignawards.com&quot; data-og-source-url=&quot;https://cssdesignawards.com/&quot; data-og-url=&quot;https://cssdesignawards.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://cssdesignawards.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cssdesignawards.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CSS Design Awards - Website Awards - Best Web Design Inspiration - CSS Awards&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;AWARDED 2025 FEB 25 Distinctive website solutions for leading and rising companies. Salva Carlino Head of Design UI 9 UX 9 INN 9 9 Gabriel Contassot Design Director UI 9 UX 9 INN 9 9 Ana Jesus Founder and Creative Head UI 8.5 UX 8.5 INN 8.5 8.5 Mayra Metax&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cssdesignawards.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.gdweb.co.kr/main/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.gdweb.co.kr/main/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740529167906&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;http://www.gdweb.co.kr&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.gdweb.co.kr&quot; data-og-source-url=&quot;https://www.gdweb.co.kr/main/&quot; data-og-url=&quot;http://www.gdweb.co.kr&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cAehd0/hyYjL4Bx24/NjiL4MWTPRVJPpfEnmweU0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://www.gdweb.co.kr/main/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.gdweb.co.kr/main/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cAehd0/hyYjL4Bx24/NjiL4MWTPRVJPpfEnmweU0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;http://www.gdweb.co.kr&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.gdweb.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.awwwards.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.awwwards.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740529208873&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Awwwards - Website Awards - Best Web Design Trends&quot; data-og-description=&quot;Awwwards are the Website Awards that recognize and promote the talent and effort of the best developers, designers and web agencies in the world.&quot; data-og-host=&quot;www.awwwards.com&quot; data-og-source-url=&quot;https://www.awwwards.com/&quot; data-og-url=&quot;https://www.awwwards.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oZNWD/hyYjvndQfr/JKco6pKnDEVLj7iNv2Vzo1/img.jpg?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200&quot;&gt;&lt;a href=&quot;https://www.awwwards.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.awwwards.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oZNWD/hyYjvndQfr/JKco6pKnDEVLj7iNv2Vzo1/img.jpg?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Awwwards - Website Awards - Best Web Design Trends&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Awwwards are the Website Awards that recognize and promote the talent and effort of the best developers, designers and web agencies in the world.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.awwwards.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타/Tip</category>
      <author>miniBcake</author>
      <guid isPermaLink="true">https://minibcake.tistory.com/544</guid>
      <comments>https://minibcake.tistory.com/544#entry544comment</comments>
      <pubDate>Wed, 26 Feb 2025 19:26:28 +0900</pubDate>
    </item>
  </channel>
</rss>