<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발하는남자</title>
    <link>https://sudarlife.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 16 Apr 2026 13:58:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>수달e</managingEditor>
    <image>
      <title>개발하는남자</title>
      <url>https://tistory1.daumcdn.net/tistory/2928094/attach/02513c14b5de4434b4b4b1b529d33291</url>
      <link>https://sudarlife.tistory.com</link>
    </image>
    <item>
      <title>[ 플러터 개발 환경설정 ] 내 컴퓨터 이름 한글 사용자명으로 인한 Windows 개발 환경 설정 문제 해결법</title>
      <link>https://sudarlife.tistory.com/entry/%ED%94%8C%EB%9F%AC%ED%84%B0-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EB%82%B4-%EC%BB%B4%ED%93%A8%ED%84%B0-%EC%9D%B4%EB%A6%84-%ED%95%9C%EA%B8%80-%EC%82%AC%EC%9A%A9%EC%9E%90%EB%AA%85%EC%9C%BC%EB%A1%9C-%EC%9D%B8%ED%95%9C-Windows-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 개발하는남자 개남입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 개발하는남자의 핸즈온 플러터에서 개발환경설정 파트에서 언급하고 싶은 부분이 있어서 이렇게 준비하게 되었습니다. 개발자로 일하시는 분들중 앱 개발자분들 중에는 맥에서 개발을 하는 경우가 많습니다. 이유는 iOS 대응 때문입니다. 저 역시 맥에서만 개발을 하다보니 윈도우 환경에서의 발생될 수 있는 문제에 대해서 크게 인지를 하지 못했었습니다. 그래서 책에도 개발환경 설정에 대한 가이드만 있었고 이슈에 대한 내용은 추가하지 못했습니다. 하지만 윈도우로 개발환경 설정하는 분들중 많은 분들이 윈도우 PC를 사용하시면서 사용자 이름을 한글로 설정하시는 분들이 많다는 것을 느꼈습니다. 그런경우 개발공부를 호기롭게 시작했는데 시작하기도전에 개발환경 세팅하면서 진을 다 빼시는 분들에게 이 포스팅이 도움이 되었으면 좋겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;error.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Zknsl/btsJIsEuD6Z/vLUghpJ5AvuHPvo8KkD4AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Zknsl/btsJIsEuD6Z/vLUghpJ5AvuHPvo8KkD4AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Zknsl/btsJIsEuD6Z/vLUghpJ5AvuHPvo8KkD4AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZknsl%2FbtsJIsEuD6Z%2FvLUghpJ5AvuHPvo8KkD4AK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;error.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Q : PC에 한글을 사용한 경우 왜 개발에서 문제가 발생될까?&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;A : 여러 가지 IDE나 개발 sdk의 경우 대부분이 영문 기반으로 설계되어 있어서 비 ASCII 문제들이 경로에 있을 경우 해석하는 데에 문제가 발생되곤 합니다. 특히 Android SDK나 Gradle과 같은 Java 기반의 툴들은 비 ASCII 문자가 있는 경우 파일을 찾지 못하는 문제가 있습니다&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해결방안&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;PC 포멧 후 재 설치&amp;nbsp;&lt;/li&gt;
&lt;li&gt;PC에 사용자이름을 영문으로 변경하여 처리하는 방법&lt;/li&gt;
&lt;li&gt;개발환경의 위치를 한글이 포함되지 않는 경로로 새로 세팅하는 방법&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 포스팅에서는 해결방안 3번째 방식으로 문제를 풀어가보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;개발 환경 설정 시 마주할 수 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;오류를 해결하기 위한 절차&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Flutter SDK 설치 경로&lt;/li&gt;
&lt;li&gt;안드로이드 스튜디오 설치시 sdk 위치&lt;/li&gt;
&lt;li&gt;vsCode 설치 위치&lt;/li&gt;
&lt;li&gt;Flutter doctor 명령 실행시 android sdk 찾을 수 없는 문제&lt;/li&gt;
&lt;li&gt;안드로이드 애뮬레이터 문제&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;1. Flutter SDK 설치 경로&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 플러터 SDK 다운로드 받기 [&lt;a href=&quot;https://docs.flutter.dev/get-started/install/windows/desktop&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.22.22.png&quot; data-origin-width=&quot;1670&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cb124L/btsJIj15QqX/FhOhNpYckZJJFSZZRKcl0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cb124L/btsJIj15QqX/FhOhNpYckZJJFSZZRKcl0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cb124L/btsJIj15QqX/FhOhNpYckZJJFSZZRKcl0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcb124L%2FbtsJIj15QqX%2FFhOhNpYckZJJFSZZRKcl0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1670&quot; height=&quot;842&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.22.22.png&quot; data-origin-width=&quot;1670&quot; data-origin-height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. zip파일 압축 풀기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.24.17.png&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;978&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJXHnk/btsJION8izE/3Vfv6KwIwhwa35ESUlKHM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJXHnk/btsJION8izE/3Vfv6KwIwhwa35ESUlKHM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJXHnk/btsJION8izE/3Vfv6KwIwhwa35ESUlKHM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJXHnk%2FbtsJION8izE%2F3Vfv6KwIwhwa35ESUlKHM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1306&quot; height=&quot;978&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.24.17.png&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;978&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 압축푼 파일 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;C:\&lt;/span&gt; 경로의 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;3&quot;&gt;sdk&lt;/span&gt; 폴더를 생성하고 그곳에 위치 하도록 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.26.28.png&quot; data-origin-width=&quot;1856&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MUxMV/btsJHOBsrlM/mz89eASnSW24qkauDCtb0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MUxMV/btsJHOBsrlM/mz89eASnSW24qkauDCtb0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MUxMV/btsJHOBsrlM/mz89eASnSW24qkauDCtb0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMUxMV%2FbtsJHOBsrlM%2Fmz89eASnSW24qkauDCtb0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1856&quot; height=&quot;862&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.26.28.png&quot; data-origin-width=&quot;1856&quot; data-origin-height=&quot;862&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. flutter 명령실행파일의 경로를 환경변수에 등록합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C:\\경로의 sdk 폴더 하위로 위치 시켰다면 다음과 같은 경로를 환경변수에 등록하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로 복사 : C:\\sdk\\flutter\\bin&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.29.32.png&quot; data-origin-width=&quot;1846&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F8R8v/btsJIVzFwhR/CRjkCv8T9KmrSVOw9QIzxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F8R8v/btsJIVzFwhR/CRjkCv8T9KmrSVOw9QIzxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F8R8v/btsJIVzFwhR/CRjkCv8T9KmrSVOw9QIzxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF8R8v%2FbtsJIVzFwhR%2FCRjkCv8T9KmrSVOw9QIzxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1846&quot; height=&quot;846&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.29.32.png&quot; data-origin-width=&quot;1846&quot; data-origin-height=&quot;846&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.30.07.png&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b97ps1/btsJG2NOH3h/g3EdsAgk50sHZLFwckKRU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b97ps1/btsJG2NOH3h/g3EdsAgk50sHZLFwckKRU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b97ps1/btsJG2NOH3h/g3EdsAgk50sHZLFwckKRU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb97ps1%2FbtsJG2NOH3h%2Fg3EdsAgk50sHZLFwckKRU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1320&quot; height=&quot;1170&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.30.07.png&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.30.23.png&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;1104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DafzD/btsJGKNmepm/pSemjCwCUkAwwH1OHbEwp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DafzD/btsJGKNmepm/pSemjCwCUkAwwH1OHbEwp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DafzD/btsJGKNmepm/pSemjCwCUkAwwH1OHbEwp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDafzD%2FbtsJGKNmepm%2FpSemjCwCUkAwwH1OHbEwp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1126&quot; height=&quot;1104&quot; data-filename=&quot;%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-09-17_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4.30.23.png&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;1104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. terminal 을 열어 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;flutter &amp;mdash;version&lt;/span&gt; 명령어를 실행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 12.26.32.png&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kCdKc/btsJImqY8t0/utaMDgTMBKJK76OBeyPs10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kCdKc/btsJImqY8t0/utaMDgTMBKJK76OBeyPs10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kCdKc/btsJImqY8t0/utaMDgTMBKJK76OBeyPs10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCdKc%2FbtsJImqY8t0%2FutaMDgTMBKJK76OBeyPs10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1424&quot; height=&quot;300&quot; data-filename=&quot;스크린샷 2024-09-18 오후 12.26.32.png&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플러터 버전이 정상적으로 표시되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;2. 안드로이드 스튜디오 설치&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1. 안드로이드 스튜디오 설치 프로그램 다운로드 받습니다.&amp;nbsp; [&lt;a href=&quot;https://developer.android.com/studio&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-22 오후 4.55.00.png&quot; data-origin-width=&quot;1555&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cslJrj/btsJGIhX8lb/OYtPa9FMad14Sv3wDCXXl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cslJrj/btsJGIhX8lb/OYtPa9FMad14Sv3wDCXXl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cslJrj/btsJGIhX8lb/OYtPa9FMad14Sv3wDCXXl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcslJrj%2FbtsJGIhX8lb%2FOYtPa9FMad14Sv3wDCXXl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1555&quot; height=&quot;760&quot; data-filename=&quot;스크린샷 2024-09-22 오후 4.55.00.png&quot; data-origin-width=&quot;1555&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 안드로이드 슈튜디오 설치를 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 12.31.00.png&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;806&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pGRc6/btsJIhpFZyY/0ACXyfAatxQX3pMKzRxRa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pGRc6/btsJIhpFZyY/0ACXyfAatxQX3pMKzRxRa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pGRc6/btsJIhpFZyY/0ACXyfAatxQX3pMKzRxRa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpGRc6%2FbtsJIhpFZyY%2F0ACXyfAatxQX3pMKzRxRa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;984&quot; height=&quot;806&quot; data-filename=&quot;스크린샷 2024-09-18 오후 12.31.00.png&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별도의 설정없이 Next버튼으로 설치를 완료합니다.&lt;/p&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;3. 안드로이드 스튜디오 위저드 설정 창이 활성화가 자동으로 되며 Next버튼으로 설치를 이어서 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 12.33.51.png&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;1228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GsUZ3/btsJHob2iiH/dUNcKT2b3koTj6LGquTuH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GsUZ3/btsJHob2iiH/dUNcKT2b3koTj6LGquTuH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GsUZ3/btsJHob2iiH/dUNcKT2b3koTj6LGquTuH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGsUZ3%2FbtsJHob2iiH%2FdUNcKT2b3koTj6LGquTuH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1630&quot; height=&quot;1228&quot; data-filename=&quot;스크린샷 2024-09-18 오후 12.33.51.png&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;1228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Android SDK 설치 위치를 설정하는 창에서 오류가 발생하게 됩니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;이유는 Android에서 기본적으로 default SDK 설치 위치를 &lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;C:\Users\[컴퓨터 사용자이름]\AppData\Local\Android\Sdk&lt;/span&gt;&lt;br /&gt;로 설정되어있기 때문입니다. 이때 컴퓨터의 설정한 사용자 이름을 한글로 지정한 경우 ASCII 문자오류로 인해 설치를 할 수 없다고 오류를 발생시키고 있는 것입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 1.51.47.png&quot; data-origin-width=&quot;1644&quot; data-origin-height=&quot;1244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1cY8K/btsJHnRYfeW/WkIwTufRHJrVpkAcwBKsj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1cY8K/btsJHnRYfeW/WkIwTufRHJrVpkAcwBKsj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1cY8K/btsJHnRYfeW/WkIwTufRHJrVpkAcwBKsj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1cY8K%2FbtsJHnRYfeW%2FWkIwTufRHJrVpkAcwBKsj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1644&quot; height=&quot;1244&quot; data-filename=&quot;스크린샷 2024-09-18 오후 1.51.47.png&quot; data-origin-width=&quot;1644&quot; data-origin-height=&quot;1244&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;android sdk 설치 경로를 C:\하위에 sdk 폴더를 플러터 sdk 설치했던 대로 위치를 변경해주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3-1. Android SDK Location 경로 우측 폴더 아이콘 클릭&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-21 오후 3.33.38.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxhwGL/btsJHxz0j5N/epfBU3Z7TXI1YgWzD3dpp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxhwGL/btsJHxz0j5N/epfBU3Z7TXI1YgWzD3dpp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxhwGL/btsJHxz0j5N/epfBU3Z7TXI1YgWzD3dpp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxhwGL%2FbtsJHxz0j5N%2FepfBU3Z7TXI1YgWzD3dpp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1092&quot; height=&quot;823&quot; data-filename=&quot;스크린샷 2024-09-21 오후 3.33.38.png&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;823&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;3-2. C:\의 sdk 폴더를 선택한 뒤 상단의 폴더 생성 아이콘 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-21 오후 3.35.32.png&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qOflL/btsJIjHLNNr/MUFPJSQBzyKXqRuEIVYom0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qOflL/btsJIjHLNNr/MUFPJSQBzyKXqRuEIVYom0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qOflL/btsJIjHLNNr/MUFPJSQBzyKXqRuEIVYom0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqOflL%2FbtsJIjHLNNr%2FMUFPJSQBzyKXqRuEIVYom0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;981&quot; height=&quot;740&quot; data-filename=&quot;스크린샷 2024-09-21 오후 3.35.32.png&quot; data-origin-width=&quot;981&quot; data-origin-height=&quot;740&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;3-3. 폴더 생성창에 android 라는 이름을 입력하고 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;OK&lt;/span&gt;버튼을 눌러줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.08.13.png&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;1090&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lMOjg/btsJHw17sCL/qnmTFzUj1EylF4Lx0Lazuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lMOjg/btsJHw17sCL/qnmTFzUj1EylF4Lx0Lazuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lMOjg/btsJHw17sCL/qnmTFzUj1EylF4Lx0Lazuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlMOjg%2FbtsJHw17sCL%2FqnmTFzUj1EylF4Lx0Lazuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;872&quot; height=&quot;1090&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.08.13.png&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;1090&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;3-4. 생성된 android폴더가 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;C:\sdk\&lt;/span&gt; 폴더 내부에 생성되었는지 확인하고 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;3&quot;&gt;android&lt;/span&gt; 폴더를 선택하고 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;5&quot;&gt;OK&lt;/span&gt; 버튼을 눌러줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.09.19.png&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;1096&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctC4ql/btsJHZpey74/GDVCLL7y3QYJ6z95RYcV21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctC4ql/btsJHZpey74/GDVCLL7y3QYJ6z95RYcV21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctC4ql/btsJHZpey74/GDVCLL7y3QYJ6z95RYcV21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctC4ql%2FbtsJHZpey74%2FGDVCLL7y3QYJ6z95RYcV21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;876&quot; height=&quot;1096&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.09.19.png&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;1096&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;3-5. 이전과 달리 새로운 경로에는 한글이 포함되어있지 않아 오류가 없어진 모습을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.10.56.png&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;1234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1smUO/btsJIkNqKp6/KtiGgEL4u5cVEdMbfvXKY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1smUO/btsJIkNqKp6/KtiGgEL4u5cVEdMbfvXKY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1smUO/btsJIkNqKp6/KtiGgEL4u5cVEdMbfvXKY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1smUO%2FbtsJIkNqKp6%2FKtiGgEL4u5cVEdMbfvXKY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1636&quot; height=&quot;1234&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.10.56.png&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;1234&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;4. 라이선스 동의&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.20.16.png&quot; data-origin-width=&quot;1634&quot; data-origin-height=&quot;1234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu2ICb/btsJHXLJt0X/hiu75PbtGXUyCQu3vv7YOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu2ICb/btsJHXLJt0X/hiu75PbtGXUyCQu3vv7YOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu2ICb/btsJHXLJt0X/hiu75PbtGXUyCQu3vv7YOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu2ICb%2FbtsJHXLJt0X%2Fhiu75PbtGXUyCQu3vv7YOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1634&quot; height=&quot;1234&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.20.16.png&quot; data-origin-width=&quot;1634&quot; data-origin-height=&quot;1234&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;5. 설치가 진행됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.21.57.png&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;1230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XPmjL/btsJIuWBB47/tCbXxk86WxhvXln8KX5HJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XPmjL/btsJIuWBB47/tCbXxk86WxhvXln8KX5HJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XPmjL/btsJIuWBB47/tCbXxk86WxhvXln8KX5HJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXPmjL%2FbtsJIuWBB47%2FtCbXxk86WxhvXln8KX5HJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1632&quot; height=&quot;1230&quot; data-filename=&quot;스크린샷 2024-09-18 오후 2.21.57.png&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;1230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료 되고 나면 안드로이드 스튜디오가 실행되며 안드로이드 스튜디오가 설치가 완료 된 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;3.&lt;span&gt; vsCode 설치&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. vsCode 사이트에 접속하여 다운로드 파일을 받아줍니다. [&lt;a href=&quot;https://code.visualstudio.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.01.19.png&quot; data-origin-width=&quot;2186&quot; data-origin-height=&quot;1338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgxCeX/btsJHElmcxV/BLLgVdnyOHKVvDvHIGR2fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgxCeX/btsJHElmcxV/BLLgVdnyOHKVvDvHIGR2fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgxCeX/btsJHElmcxV/BLLgVdnyOHKVvDvHIGR2fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgxCeX%2FbtsJHElmcxV%2FBLLgVdnyOHKVvDvHIGR2fK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2186&quot; height=&quot;1338&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.01.19.png&quot; data-origin-width=&quot;2186&quot; data-origin-height=&quot;1338&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;2. 설치 프로그램 실행하여 약관동의 후 설치를 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.01.56.png&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OC3Th/btsJIsYLJob/ywZWQxHooDTprLXmqbAnIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OC3Th/btsJIsYLJob/ywZWQxHooDTprLXmqbAnIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OC3Th/btsJIsYLJob/ywZWQxHooDTprLXmqbAnIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOC3Th%2FbtsJIsYLJob%2FywZWQxHooDTprLXmqbAnIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1172&quot; height=&quot;944&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.01.56.png&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;944&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 설치 경로에 한글이 포함되어있어서 우측 찾아보기 메뉴를 통해 경로를 변경해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.02.32.png&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;946&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkvHu2/btsJGzrMkzm/FRtHivs1YM6YaHh9a3FxK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkvHu2/btsJGzrMkzm/FRtHivs1YM6YaHh9a3FxK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkvHu2/btsJGzrMkzm/FRtHivs1YM6YaHh9a3FxK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkvHu2%2FbtsJGzrMkzm%2FFRtHivs1YM6YaHh9a3FxK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1156&quot; height=&quot;946&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.02.32.png&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;946&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 다른 sdk 경로와 마찬가지로 C:\의 sdk 폴더를 선택해주고 확인 버튼눌러줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.03.15.png&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L0SNp/btsJG6vYSCQ/WDOXxKZFgZvp8kiDcjhZF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L0SNp/btsJG6vYSCQ/WDOXxKZFgZvp8kiDcjhZF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L0SNp/btsJG6vYSCQ/WDOXxKZFgZvp8kiDcjhZF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL0SNp%2FbtsJG6vYSCQ%2FWDOXxKZFgZvp8kiDcjhZF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;896&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.03.15.png&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;896&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 다음과 같이 경로가 설정되었다면 다음버튼틀 통해 설치를 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.03.30.png&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;950&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tOX7j/btsJIooCR0B/hxybhpKkDfkpCKwfXisJt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tOX7j/btsJIooCR0B/hxybhpKkDfkpCKwfXisJt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tOX7j/btsJIooCR0B/hxybhpKkDfkpCKwfXisJt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtOX7j%2FbtsJIooCR0B%2FhxybhpKkDfkpCKwfXisJt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1158&quot; height=&quot;950&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.03.30.png&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;950&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;6. 설치가 정상적으로 되는 것을 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.03.53.png&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;952&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SqvJL/btsJG2G3vxa/rgcrME5isMdFG8RZVELvsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SqvJL/btsJG2G3vxa/rgcrME5isMdFG8RZVELvsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SqvJL/btsJG2G3vxa/rgcrME5isMdFG8RZVELvsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSqvJL%2FbtsJG2G3vxa%2FrgcrME5isMdFG8RZVELvsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1158&quot; height=&quot;952&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.03.53.png&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;952&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4 . Flutter Doctor 이슈 대응&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.08.23.png&quot; data-origin-width=&quot;1682&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRxsZY/btsJGyGslB6/oAJLyzFntKKxdKjU9GbkCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRxsZY/btsJGyGslB6/oAJLyzFntKKxdKjU9GbkCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRxsZY/btsJGyGslB6/oAJLyzFntKKxdKjU9GbkCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRxsZY%2FbtsJGyGslB6%2FoAJLyzFntKKxdKjU9GbkCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1682&quot; height=&quot;864&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.08.23.png&quot; data-origin-width=&quot;1682&quot; data-origin-height=&quot;864&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;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;안드로이드 SDK를 찾을 수 없는 문제 &lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;flutter에서 android sdk를 통해 명령실행을 수행하게 되는데 기본적으로 flutter에서 android sdk 위치를 &lt;span style=&quot;color: #ee2323;&quot;&gt;C:\\Users\\[컴퓨터 사용자 이름]&lt;/span&gt; 하위에서 sdk를 찾기 때문에 발생되는 문제로 우리는 한글 폴더가 포함되어있어서 android sdk의 설치 위치를 변경해줬기 때문에 flutter에서는 찾을 수 없는 현상입니다.&lt;br /&gt;&lt;br /&gt;친절하게 android-sdk 경로를 새로 지정하는 방법에대해서 가이드를 해주고 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;flutter config &amp;mdash;android-sdk&lt;/span&gt; 명령어를 사용하라고 flutter doctor가 알려주고 있습니다.&lt;br /&gt;&lt;br /&gt;android sdk를 &lt;span style=&quot;color: #ee2323;&quot;&gt;C:\\sdk\\android&lt;/span&gt; 위치로 설정한 사실을 기억하기 때문에 위 명령어를 다음과 같이 실행하면 문제가 해결이됩니다.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;flutter config &amp;mdash;android-sdk=&quot;C:\\sdk\\android&quot;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.15.16.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doPcxr/btsJHDz0APL/8p3q4oPK5QxDKeyF1UR4f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doPcxr/btsJHDz0APL/8p3q4oPK5QxDKeyF1UR4f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doPcxr/btsJHDz0APL/8p3q4oPK5QxDKeyF1UR4f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoPcxr%2FbtsJHDz0APL%2F8p3q4oPK5QxDKeyF1UR4f0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1476&quot; height=&quot;106&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.15.16.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;실행 이후 다시 flutter doctor를 사용하면 android sdk 경로를 찾지 못한다는 경고 메세지는 없어진것을 확인 할 수 있습니다.&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.16.46.png&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;610&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZwU30/btsJGyGsnyj/8Ie97yqmXHbb4uG6P4eBvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZwU30/btsJGyGsnyj/8Ie97yqmXHbb4uG6P4eBvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZwU30/btsJGyGsnyj/8Ie97yqmXHbb4uG6P4eBvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZwU30%2FbtsJGyGsnyj%2F8Ie97yqmXHbb4uG6P4eBvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1194&quot; height=&quot;610&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.16.46.png&quot; data-origin-width=&quot;1194&quot; data-origin-height=&quot;610&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;flutter doctor&lt;/span&gt;라고&lt;span&gt; &lt;/span&gt;입력하시면&lt;span&gt; &lt;/span&gt;다음과&lt;span&gt; &lt;/span&gt;같이&lt;span&gt; &lt;/span&gt;문제가&lt;span&gt; &lt;/span&gt;해결된&lt;span&gt; &lt;/span&gt;것을&lt;span&gt; &lt;/span&gt;확인&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론&lt;span&gt; &lt;/span&gt;다른&lt;span&gt; &lt;/span&gt;문제가&lt;span&gt; &lt;/span&gt;있다고&lt;span&gt; &lt;/span&gt;가이드&lt;span&gt; &lt;/span&gt;하고&lt;span&gt; &lt;/span&gt;있지만&lt;span&gt; &lt;/span&gt;그것은&lt;span&gt; &lt;/span&gt;오류가&lt;span&gt; &lt;/span&gt;아닌&lt;span&gt; &lt;/span&gt;경고로&lt;span&gt; &lt;/span&gt;해결하지&lt;span&gt; &lt;/span&gt;않아도&lt;span&gt; &lt;/span&gt;되지만&lt;span&gt; &lt;/span&gt;해결하는&lt;span&gt; &lt;/span&gt;방법은&lt;span&gt; &lt;/span&gt;간단합니다&lt;span&gt;. &lt;/span&gt;그&lt;span&gt; &lt;/span&gt;방법은&lt;span&gt; &lt;/span&gt;제&lt;span&gt; &lt;/span&gt;책[&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000213880372&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;개발하는남자 핸즈온 플러터&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;]&lt;span&gt; 64&lt;/span&gt;페이지&lt;span&gt; ~ 67&lt;/span&gt;페이지&lt;span&gt; &lt;/span&gt;를&lt;span&gt; &lt;/span&gt;참조&lt;span&gt; &lt;/span&gt;하시면&lt;span&gt; &lt;/span&gt;문제를&lt;span&gt; &lt;/span&gt;쉽게&lt;span&gt; &lt;/span&gt;해결할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5 .&lt;span&gt; Android 애뮬레이터 이슈&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 안드로이드 애뮬레이터를 설치를 하기 위해 안드로이드 스튜디오를 실행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.20.50.png&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;1330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boa3g0/btsJGVOXtay/Jc8HN2k7bFIhQ1t7qX4HUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boa3g0/btsJGVOXtay/Jc8HN2k7bFIhQ1t7qX4HUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boa3g0/btsJGVOXtay/Jc8HN2k7bFIhQ1t7qX4HUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fboa3g0%2FbtsJGVOXtay%2FJc8HN2k7bFIhQ1t7qX4HUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1630&quot; height=&quot;1330&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.20.50.png&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;1330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;more Actions 메뉴 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.22.11.png&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;1316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cknKTU/btsJHETf2cb/03u7N47xeuOS8jKIWbXoKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cknKTU/btsJHETf2cb/03u7N47xeuOS8jKIWbXoKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cknKTU/btsJHETf2cb/03u7N47xeuOS8jKIWbXoKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcknKTU%2FbtsJHETf2cb%2F03u7N47xeuOS8jKIWbXoKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1628&quot; height=&quot;1316&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.22.11.png&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;1316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Virtual Device Manager 실행합니다.&lt;/p&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;2. Device Manager 창에서 좌측 상단 + 버튼을 통해 생성단계로 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.22.55.png&quot; data-origin-width=&quot;1634&quot; data-origin-height=&quot;1492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ci5U4T/btsJGIWxGib/qtlZLMcqlhSPHOiyLFOzXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ci5U4T/btsJGIWxGib/qtlZLMcqlhSPHOiyLFOzXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ci5U4T/btsJGIWxGib/qtlZLMcqlhSPHOiyLFOzXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fci5U4T%2FbtsJGIWxGib%2FqtlZLMcqlhSPHOiyLFOzXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1634&quot; height=&quot;1492&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.22.55.png&quot; data-origin-width=&quot;1634&quot; data-origin-height=&quot;1492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 디바이스를 선택해서 Next 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.23.45.png&quot; data-origin-width=&quot;2278&quot; data-origin-height=&quot;1436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yIrvT/btsJHTii0mb/7zo0pzxGBaFLEL6KMX4550/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yIrvT/btsJHTii0mb/7zo0pzxGBaFLEL6KMX4550/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yIrvT/btsJHTii0mb/7zo0pzxGBaFLEL6KMX4550/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyIrvT%2FbtsJHTii0mb%2F7zo0pzxGBaFLEL6KMX4550%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2278&quot; height=&quot;1436&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.23.45.png&quot; data-origin-width=&quot;2278&quot; data-origin-height=&quot;1436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애뮬레이터 이름을 설정하거나 별도의 애뮬레이터의 설정을 진행하고 Finish 버튼을 눌러줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.25.45.png&quot; data-origin-width=&quot;2288&quot; data-origin-height=&quot;1438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfg1XG/btsJIrr60b3/BR3Gq0MOTKm9iJh3k1JFq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfg1XG/btsJIrr60b3/BR3Gq0MOTKm9iJh3k1JFq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfg1XG/btsJIrr60b3/BR3Gq0MOTKm9iJh3k1JFq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdfg1XG%2FbtsJIrr60b3%2FBR3Gq0MOTKm9iJh3k1JFq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2288&quot; height=&quot;1438&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.25.45.png&quot; data-origin-width=&quot;2288&quot; data-origin-height=&quot;1438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Device Manager 창에 방금전에 만들었던 애뮬레이터가 리스트에 추가된 것을 확인 할 수 있습니다.우측 Play 아이콘 버튼을 눌러 애뮬레이터를 실행해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.27.34.png&quot; data-origin-width=&quot;1622&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNfyXS/btsJHETf29W/dKhtZbTZ28Pp35NnQIe9kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNfyXS/btsJHETf29W/dKhtZbTZ28Pp35NnQIe9kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNfyXS/btsJHETf29W/dKhtZbTZ28Pp35NnQIe9kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNfyXS%2FbtsJHETf29W%2FdKhtZbTZ28Pp35NnQIe9kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1622&quot; height=&quot;590&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.27.34.png&quot; data-origin-width=&quot;1622&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행이 되려다 다음과 같은 알 수 없는 오류가 발생되고 있음을 확인 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.29.05.png&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;1474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqvbSE/btsJHq10DX4/LzKi0FE3B4Obgklxn8vXW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqvbSE/btsJHq10DX4/LzKi0FE3B4Obgklxn8vXW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqvbSE/btsJHq10DX4/LzKi0FE3B4Obgklxn8vXW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqvbSE%2FbtsJHq10DX4%2FLzKi0FE3B4Obgklxn8vXW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1636&quot; height=&quot;1474&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.29.05.png&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;1474&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;이번 역시 애뮬레이터 설치 경로에 한글이 포함되어있어서 발생된 문제 입니다. 그 이유를 살펴보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 sdk 설치 위치는 변경했지만 애뮬레이터 설치 위치는 바꿔주지 않아서 디폴트 위치인&lt;span style=&quot;color: #ee2323;&quot;&gt; C:\\사용자\\[컴퓨터 사용자 이름]&lt;/span&gt; 하위로 .android 라는 폴더가 생성되어 있는 것을 확인 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.30.56.png&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;756&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNl8Dl/btsJHQlOt2r/CZDpkKB1aJIjgkGHn85vgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNl8Dl/btsJHQlOt2r/CZDpkKB1aJIjgkGHn85vgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNl8Dl/btsJHQlOt2r/CZDpkKB1aJIjgkGHn85vgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNl8Dl%2FbtsJHQlOt2r%2FCZDpkKB1aJIjgkGHn85vgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2272&quot; height=&quot;756&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.30.56.png&quot; data-origin-width=&quot;2272&quot; data-origin-height=&quot;756&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 .android 폴더 내부에 avd 폴더가 있으며 해당 폴더 내부에는 좀 전에 만들어줬던 애뮬레이터 이름으로 폴더가 생성되어있는 것을 확이 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.32.59.png&quot; data-origin-width=&quot;2274&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1zXPf/btsJHnj7yMV/jKC31XAfywldtSJleSKuYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1zXPf/btsJHnj7yMV/jKC31XAfywldtSJleSKuYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1zXPf/btsJHnj7yMV/jKC31XAfywldtSJleSKuYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1zXPf%2FbtsJHnj7yMV%2FjKC31XAfywldtSJleSKuYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2274&quot; height=&quot;668&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.32.59.png&quot; data-origin-width=&quot;2274&quot; data-origin-height=&quot;668&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;환경 변수를 추가 하기 위해서 환경변수 설정창을 실행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.38.28.png&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;1298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDDmaJ/btsJIkzVPWt/vKqMJI9KhSA2723N995I10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDDmaJ/btsJIkzVPWt/vKqMJI9KhSA2723N995I10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDDmaJ/btsJIkzVPWt/vKqMJI9KhSA2723N995I10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDDmaJ%2FbtsJIkzVPWt%2FvKqMJI9KhSA2723N995I10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1326&quot; height=&quot;1298&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.38.28.png&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;1298&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;환경변수 창에서 하단 시스템 변수(S) 영역의 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;새로만들기&lt;/span&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;변수 이름 : &lt;b&gt;ANDROID_HOME&lt;/b&gt; 이라고 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수 값 : 새로 설정한 경로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;C:\\sdk&lt;/b&gt;&lt;/span&gt; 입력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.45.22.png&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CzZFq/btsJGz6qIEY/LlQsKh50kJipvVied21ls1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CzZFq/btsJGz6qIEY/LlQsKh50kJipvVied21ls1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CzZFq/btsJGz6qIEY/LlQsKh50kJipvVied21ls1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCzZFq%2FbtsJGz6qIEY%2FLlQsKh50kJipvVied21ls1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1388&quot; height=&quot;352&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.45.22.png&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인 버튼 후 다시 새로 만들기 버튼을 눌러 하나의 변수와 값을 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수 이름 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ANDROID_SDK_HOME&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&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;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;C:\\sdk&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;입력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.47.58.png&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dy9nX8/btsJItKbjgC/05Ksu8MtT1gXG7CBRgK2a1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dy9nX8/btsJItKbjgC/05Ksu8MtT1gXG7CBRgK2a1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dy9nX8/btsJItKbjgC/05Ksu8MtT1gXG7CBRgK2a1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdy9nX8%2FbtsJItKbjgC%2F05Ksu8MtT1gXG7CBRgK2a1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1394&quot; height=&quot;360&quot; data-filename=&quot;스크린샷 2024-09-18 오후 3.47.58.png&quot; data-origin-width=&quot;1394&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;이제 다시 애뮬레이터 생성부터 실행과정을 새로 진행해주면 정상적으로 실행되는 것을 확인 할 수 있습니다.&lt;/p&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;</description>
      <category>개발일지/flutter</category>
      <category>android studio 문제 해결</category>
      <category>android 에뮬레이터 설정</category>
      <category>flutter 개발환경</category>
      <category>windows 개발환경</category>
      <category>windows 한글 경로 문제</category>
      <category>개남</category>
      <category>개발 환경 오류 해결</category>
      <category>개발하는남자</category>
      <category>플러터 개발</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/251</guid>
      <comments>https://sudarlife.tistory.com/entry/%ED%94%8C%EB%9F%AC%ED%84%B0-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%EB%82%B4-%EC%BB%B4%ED%93%A8%ED%84%B0-%EC%9D%B4%EB%A6%84-%ED%95%9C%EA%B8%80-%EC%82%AC%EC%9A%A9%EC%9E%90%EB%AA%85%EC%9C%BC%EB%A1%9C-%EC%9D%B8%ED%95%9C-Windows-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0%EB%B2%95#entry251comment</comments>
      <pubDate>Sun, 22 Sep 2024 17:19:00 +0900</pubDate>
    </item>
    <item>
      <title>[개발하는남자의 핸즈온 플러터] 플러터 최신 버전 소스코드 android build.gradle migration 책의 잘못 표기된 내용 정정 및 소통 채널 공지</title>
      <link>https://sudarlife.tistory.com/entry/%EA%B0%9C%EB%B0%9C%ED%95%98%EB%8A%94%EB%82%A8%EC%9E%90%EC%9D%98-%ED%95%B8%EC%A6%88%EC%98%A8-%ED%94%8C%EB%9F%AC%ED%84%B0-%ED%94%8C%EB%9F%AC%ED%84%B0-%EC%B5%9C%EC%8B%A0-%EB%B2%84%EC%A0%84-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C-android-buildgradle-migration-%EC%B1%85%EC%9D%98-%EC%9E%98%EB%AA%BB-%ED%91%9C%EA%B8%B0%EB%90%9C-%EB%82%B4%EC%9A%A9-%EC%A0%95%EC%A0%95-%EB%B0%8F-%EC%86%8C%ED%86%B5-%EC%B1%84%EB%84%90-%EA%B3%B5%EC%A7%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;내 여러분 안녕하세요 개발하는남자 개남입니다. 핸즈온 플러터 책이 출간된 지 어느덧 한 달이라는 시간이 흘렀습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(시간이 참 빠른것 같습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 달이라는 시간이 흐르는 동안 독자분들의 문의 이메일도 주시고 계시는데 생각해 보니 소통 채널이 있으면 좋겠다 싶어서 관련 내용도 공유드릴 겸 책에 잘못 기재된 내용에 대한 정정 사항도 안내해 드리고 그리고 무엇보다 중요한 당근마켓 클론코딩을 위한 플러터 버전 최신화 대응 방안에 대해서 가이드를 드려야 할 것 같아 이렇게 포스팅을 쓰게 되었습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;책에 잘못 표기된 내용 (타입추론) 기본 개념&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 타입추론에 대해서 간단하게 설명드리고 잘못된 내용에 대해서 공유 드리겠습니다.&lt;/p&gt;
&lt;aside&gt;❓ Dart 언어의 타입추론은?&lt;/aside&gt;
&lt;aside&gt;  컴파일러가 변수나 함수의 타입을 명시적으로 지정하지 않더라도, 자동으로 그 타입을 추론하여 결정하는 기능을 타입추론이라고 한다.&lt;/aside&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 다음과 같이 변수를 선언 시 명시적으로 타입을 정의하는 것과 타입추론을 사용하는 것의 차이입니다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;String data = &quot;개발하는남자&quot;;
var dataTypeInference = &quot;개발하는남자&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일러는 둘 다 String 타입으로 인식하여 프로세스를 처리하게 됩니다. 하지만 위의 경우 String타입이 아닌 다른 타입으로 변경해야 하는 요구사항이 생겨서 수정을 하게 된다면 명시적 타입을 사용한 경우는 오류를 범하지만 아래의 타입추론으로 사용한 경우는 오류가 생기지 않습니다.&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;String data = {&quot;name&quot;: &quot;개발하는남자&quot;}; // type 오류
var dataTypeInference = {&quot;name&quot;: &quot;개발하는남자&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;위의 변수 data의 경우 Type 오류가 발생하는 반면 아래 dataTypeInference의 경우 자동적으로 Map타입으로 인식하고 정상적으로 프로세스를 진행할 수 있음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 타입추론을 활용하면 코드를 유연성 있게 대응할 수 있다는 장점이 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;핸즈온 플러터에서 타입추론 잘못 표기된 내용 공유&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핸즈온 플러터 96페이지에 기록된 Map 타입의 타입추론 관련 잘못 표기된 내용이 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-19 오후 10.33.58.png&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0B6lS/btsJeCaXvWg/K4Q7zQ3KV8FdG6mk9FeS7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0B6lS/btsJeCaXvWg/K4Q7zQ3KV8FdG6mk9FeS7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0B6lS/btsJeCaXvWg/K4Q7zQ3KV8FdG6mk9FeS7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0B6lS%2FbtsJeCaXvWg%2FK4Q7zQ3KV8FdG6mk9FeS7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1340&quot; height=&quot;404&quot; data-filename=&quot;스크린샷 2024-08-19 오후 10.33.58.png&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 글에서 var blankUserInfo = {};라고 변수를 선언하면 타입추론으로 자동적으로 Map으로 처리하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 글에서는 Map이 아닌 Set타입으로 선언된다고 잘못 기재되어있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만일 Set타입을 타입추론으로 하기원 할 때는 다음과 같이 사용해야 합니다.&lt;/p&gt;
&lt;pre class=&quot;dart&quot;&gt;&lt;code&gt;var setTypeInference = &amp;lt;String&amp;gt;{};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관련된 내용은 93페이지에서 이미 다루고 있는 내용입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 한번 혼란을 드려서 죄송합니다. 이 부분은 만약 다음 2판 인쇄를 할 수 있게 된다면 정정해서 올리도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;당근마켓 클론코딩 플러터 3.24.0 버전 대응&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책을 집필할 당시 플러터 버전은 3.13.x 버전대였던 것으로 기억합니다. 플러터의 버전이 3.16.x 버전부터 안드로이드 build.gradle 방식이 변경되었습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;To build a Flutter app for Android, Flutter's Gradle plugins must be applied. Historically, this was done imperatively with Gradle's &lt;a href=&quot;https://docs.gradle.org/8.5/userguide/plugins.html#sec:script_plugins&quot;&gt;legacy, imperative apply script method&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;In Flutter 3.16, support was added for applying these plugins with Gradle's &lt;a href=&quot;https://docs.gradle.org/8.5/userguide/plugins.html#sec:plugins_block&quot;&gt;declarative plugins {} block&lt;/a&gt; (also called the Plugin DSL) and it is now the recommended approach. Since Flutter 3.16, projects generated with &lt;code&gt;flutter create&lt;/code&gt; use the Plugin DSL to apply Gradle plugins. Projects created with versions of Flutter prior to 3.16 need to be migrated manually.&lt;/p&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;한마디로 3.16 버전이전에 생성된 플러터 프로젝트와 그 이후의 플러터 프로젝트는 Gradle처리방식이 변경되었다고 보시면 됩니다. 그래서 제가 제공드리는 플러터 프로젝트는 이전 버전이기 때문에 마이그레이션을 수동으로 해줘야 하는 상황이 발생하게 되었습니다. 관련해서 플러터 공식문서에서 자세하게 다루고 있기 때문에 해당 내용을 따라서 수행하시면 큰 문제없이 migration을 할 수 있을 것입니다.&lt;/p&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://github.com/sudar-life/bamtol_market_clone_coding&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;개발하는 남자 Github에 제공된 당근마켓 클론 코딩 소스코드&lt;/a&gt;에&amp;nbsp;&lt;code&gt;flutter-version/3.24.0&lt;/code&gt; 브런치로 최신 버전 대응된 소스코드를 공유드렸으니 필요하신 분들은 그 소스코들 참조하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Android Build Gradle 마이그레이션 하는 방법&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1️⃣ `/android/settings.gradle` 대응&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e6f5ff; color: #333333; text-align: start;&quot;&gt;&amp;lt;app-src&amp;gt;/android/settings.gradle &lt;/span&gt;파일을 다음과 같이 수정합니다.&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;pluginManagement {
    def flutterSdkPath = {
        def properties = new Properties()
        file(&quot;local.properties&quot;).withInputStream { properties.load(it) }
        def flutterSdkPath = properties.getProperty(&quot;flutter.sdk&quot;)
        assert flutterSdkPath != null, &quot;flutter.sdk not set in local.properties&quot;
        return flutterSdkPath
    }()

    includeBuild(&quot;$flutterSdkPath/packages/flutter_tools/gradle&quot;)

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

plugins {
    id &quot;dev.flutter.flutter-plugin-loader&quot; version &quot;1.0.0&quot;
    id &quot;com.android.application&quot; version &quot;{agpVersion}&quot; apply false
    id &quot;org.jetbrains.kotlin.android&quot; version &quot;{kotlinVersion}&quot; apply false
}

include &quot;:app&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서&lt;span&gt; &lt;/span&gt;중요한&lt;span&gt; &lt;/span&gt;점은&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;id &quot;com.android.application&quot; version &quot;{agpVersion}&quot; apply false
id &quot;org.jetbrains.kotlin.android&quot; version &quot;{kotlinVersion}&quot; apply false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;{agpVersion}&lt;/code&gt; 과 &lt;code&gt;{kotlinVersion}&lt;/code&gt; 이 부분을 그대로 두는 게 아닌 해당하는 버전을 넣어줘야 합니다. &lt;code&gt;{agpVersion}&lt;/code&gt; 과 &lt;code&gt;{kotlinVersion}&lt;/code&gt; 두 개의 버전을 어디서 참조해서 넣어야 하는지는 &lt;code&gt;&amp;lt;app-src&amp;gt;/android/build.gradle&lt;/code&gt; 파일을 열어보면 나와있습니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;buildscript {
    **ext.kotlin_version = '1.7.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:**7.3.0'
        classpath &quot;org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version&quot;
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = &quot;${rootProject.buildDir}/${project.name}&quot;
}
subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register(&quot;clean&quot;, Delete) {
    delete rootProject.buildDir
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;붉은색 코드의 버전이 각각 &lt;code&gt;{agpVersion}&lt;/code&gt; 과 &lt;code&gt;{kotlinVersion}&lt;/code&gt; 에 해당되는 버전입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;{kotlinVersion}&lt;/code&gt;이 &lt;code&gt;1.7.10&lt;/code&gt; 이며 &lt;code&gt;{agpVersion}&lt;/code&gt;이 &lt;code&gt;7.3.0&lt;/code&gt;으로 적용하면 되겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 당근마켓 클론코딩 프로젝트에서는 google-services 플러그인도 사용하고 있기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 &lt;code&gt;&amp;lt;app-src&amp;gt;/android/settings.gradle&lt;/code&gt; 파일을 수정하면 되겠습니다.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;pluginManagement {
    def flutterSdkPath = {
        def properties = new Properties()
        file(&quot;local.properties&quot;).withInputStream { properties.load(it) }
        def flutterSdkPath = properties.getProperty(&quot;flutter.sdk&quot;)
        assert flutterSdkPath != null, &quot;flutter.sdk not set in local.properties&quot;
        return flutterSdkPath
    }()

    includeBuild(&quot;$flutterSdkPath/packages/flutter_tools/gradle&quot;)

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

plugins {
    id &quot;dev.flutter.flutter-plugin-loader&quot; version &quot;1.0.0&quot;
    id &quot;com.android.application&quot; version &quot;7.3.0&quot; apply false
    id &quot;org.jetbrains.kotlin.android&quot; version &quot;1.7.10&quot; apply false
    id &quot;com.google.gms.google-services&quot; version &quot;4.3.14&quot; apply false
}

include &quot;:app&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2️⃣ 기존 `/android/build.gradle` 소스코드 수정 &lt;/b&gt;&lt;/h4&gt;
&lt;aside&gt;해당 파일에서 대응하던 `buildscript` 이부분이 `/android/settings.gradle` 이곳으로 옮겨져서 관리 되고 있기 때문에 `/android/build.gradle` 파일의 `buildscript` 부분을 제거합니다.
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = &quot;${rootProject.buildDir}/${project.name}&quot;
}
subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register(&quot;clean&quot;, Delete) {
    delete rootProject.buildDir
}&lt;/code&gt;&lt;/pre&gt;
&lt;/aside&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3️⃣ `/android/app/build.gradle` 소스코드 수정 &lt;/b&gt;&lt;/h4&gt;
&lt;aside&gt;공식문서에 다음 3가지 부분을 제거 하라고 안내 하고 있습니다.&lt;/aside&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-19 오후 11.01.35.png&quot; data-origin-width=&quot;1862&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2u0sL/btsJd195Gxh/Oetw7ZwEAJE8DFd3TYeGi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2u0sL/btsJd195Gxh/Oetw7ZwEAJE8DFd3TYeGi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2u0sL/btsJd195Gxh/Oetw7ZwEAJE8DFd3TYeGi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2u0sL%2FbtsJd195Gxh%2FOetw7ZwEAJE8DFd3TYeGi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1862&quot; height=&quot;620&quot; data-filename=&quot;스크린샷 2024-08-19 오후 11.01.35.png&quot; data-origin-width=&quot;1862&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-08-19 오후 11.03.57.png&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3kHub/btsJeOozn0U/ZZ2rsuiqJyaGhEkFntrpqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3kHub/btsJeOozn0U/ZZ2rsuiqJyaGhEkFntrpqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3kHub/btsJeOozn0U/ZZ2rsuiqJyaGhEkFntrpqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3kHub%2FbtsJeOozn0U%2FZZ2rsuiqJyaGhEkFntrpqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1868&quot; height=&quot;300&quot; data-filename=&quot;스크린샷 2024-08-19 오후 11.03.57.png&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;aside&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 가장 최상단에 다음과 같이 소스코드를 추가하라고 소개하고 있습니다.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;plugins {
    id &quot;com.android.application&quot;
    id &quot;kotlin-android&quot;
    id &quot;dev.flutter.flutter-gradle-plugin&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;&amp;lt;app-src&amp;gt;/android/app/build.gradle&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;gradle&quot;&gt;&lt;code&gt;plugins {
    id &quot;com.android.application&quot;
    id &quot;kotlin-android&quot;
    id &quot;dev.flutter.flutter-gradle-plugin&quot;
    id &quot;com.google.gms.google-services&quot;
}

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader -&amp;gt;
        localProperties.load(reader)
    }
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

android {
    namespace &quot;com.devman.cloneapp.bamtol_market_app&quot;
    compileSdkVersion flutter.compileSdkVersion
    ndkVersion flutter.ndkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId &quot;com.devman.cloneapp.bamtol_market_app&quot;
        // You can update the following values to match your application needs.
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
        minSdkVersion 23
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }
}

flutter {
    source '../..'
}

dependencies {
}&lt;/code&gt;&lt;/pre&gt;
&lt;/aside&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 안드로이드 마이그레이션은 끝이 납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 프로젝트의 라이브러리를 최신 버전으로 올려줘야 합니다. 특히 파이어베이스 관련 라이브러리는 최신 버전으로 반드시 올려줘야 문제없이 사용이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 flutter pubspec.yaml 파일에 사용된 최신버전 라이브러리 목록입니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;  cupertino_icons: ^1.0.2
  get: ^4.6.5
  flutter_svg: ^2.0.7
  equatable: ^2.0.5
  google_fonts: ^4.0.4
  firebase_core: ^3.3.0
  firebase_auth: ^5.1.4
  cloud_firestore: ^5.2.1
  firebase_storage: ^12.1.3
  shared_preferences: ^2.1.2
  google_sign_in: ^6.2.1
  sign_in_with_apple: ^6.1.1
  crypto: ^3.0.3
  photo_manager: ^3.2.3
  flutter_map: ^5.0.0
  geolocator: ^9.0.2
  latlong2: ^0.9.0
  uuid: ^3.0.7
  carousel_slider: ^5.0.0
  cached_network_image: ^3.2.3
  timeago: ^3.5.0
  flutter_keyboard_visibility: ^5.4.1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 라이브러리를 최신버전화 하지 않았습니다. 문제가 되는 라이브러리들만 버전을 최신화했으며 문제없는 라이브러리는 그대로 유지하였습니다. 이것으로 플러터 최신버전 대응에 대한 내용을 가이드해드렸습니다. 따라 하시다 문제가 생기셨다고 한다면 github에 &lt;code&gt;flutter-version/3.24.0&lt;/code&gt; 브런치를 참조해주시면 되겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;소통 채널 소개&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 유튜브 구독자들이나 책을 읽으면서 공부하시는 독자분들 모두 소통채널이 있으면 좋겠다고 생각이 되었습니다. 지금까지는 별도의 채널이 없었어서 메일로 문의하시는 분들에 한에서 답변을 드리고 있었는데 공부하시는 분들끼리도 서로 소통하면서 문제를 해결할 수 있지 않을까?라는 생각으로 소통채널을 만들었습니다. 물론 라이브 방송을통해 직접적인 소통도 하고 싶긴한데 아직 둘째가 어려서 아이가 통잠을 자기 시작하면 늦은 밤에는 가능하지 않을까? 라는 생각도 들기도 하고요 그것은 차차 계획해 보도록 하고 소통채널 디스코드를 만들었습니다. 참여는 자유고 함께 공부하면서 궁금한 사항들에 대해서 서로 공유하고 같이 문제를 해결해 나가는 취지로다가 만든 것이니 부담 없이 자유롭게 소통하면 좋을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 채널이 활성화될지도 의문이고 참여자가 있을지도 의문이긴 한데 제가 성실하게 답변을 드릴 수 있을지도 솔직히 의문입니다. 제가 유튜브 채널만 운영한다면 가능하겠지만 제가 회사를 다니고 있다 보니 주중 업무시간에는 답변드릴 수 없다는 것과 퇴근 후에는 육아를 하게 되기 때문에 늦은 시간에만 답변을 드릴 수 있어서 과연 어느 정도 운영이 될지 모르겠지만 그래도 고민만 하기보다는 시도해 보는 게 좋겠다는 생각이 들어서 만들게 되었습니다.&lt;/p&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://discord.gg/Xd7W7WTM&quot;&gt;https://discord.gg/Xd7W7WTM&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1724594759276&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;개발하는남자 Discord 서버에 가입하세요!&quot; data-og-description=&quot;Discord에서 개발하는남자 커뮤니티를 확인하세요. 3명과 어울리며 무료 음성 및 텍스트 채팅을 즐기세요.&quot; data-og-host=&quot;discord.com&quot; data-og-source-url=&quot;https://discord.gg/Xd7W7WTM&quot; data-og-url=&quot;https://discord.com/invite/Xd7W7WTM&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://discord.gg/Xd7W7WTM&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://discord.gg/Xd7W7WTM&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;개발하는남자 Discord 서버에 가입하세요!&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Discord에서 개발하는남자 커뮤니티를 확인하세요. 3명과 어울리며 무료 음성 및 텍스트 채팅을 즐기세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;discord.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;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발일지/flutter</category>
      <category>개발하는남자 소통 채널</category>
      <category>개발하는남자 핸즈온 플러터</category>
      <category>디스코드 채널</category>
      <category>플러터 책 추천</category>
      <category>플러터 최신 버전 대응</category>
      <category>핸즈온 플러터 책</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/250</guid>
      <comments>https://sudarlife.tistory.com/entry/%EA%B0%9C%EB%B0%9C%ED%95%98%EB%8A%94%EB%82%A8%EC%9E%90%EC%9D%98-%ED%95%B8%EC%A6%88%EC%98%A8-%ED%94%8C%EB%9F%AC%ED%84%B0-%ED%94%8C%EB%9F%AC%ED%84%B0-%EC%B5%9C%EC%8B%A0-%EB%B2%84%EC%A0%84-%EC%86%8C%EC%8A%A4%EC%BD%94%EB%93%9C-android-buildgradle-migration-%EC%B1%85%EC%9D%98-%EC%9E%98%EB%AA%BB-%ED%91%9C%EA%B8%B0%EB%90%9C-%EB%82%B4%EC%9A%A9-%EC%A0%95%EC%A0%95-%EB%B0%8F-%EC%86%8C%ED%86%B5-%EC%B1%84%EB%84%90-%EA%B3%B5%EC%A7%80#entry250comment</comments>
      <pubDate>Sun, 25 Aug 2024 23:10:25 +0900</pubDate>
    </item>
    <item>
      <title>[플러터 책] 개발하는남자의 핸즈온 플러터 출시되었습니다. , 책소개 , 이벤트</title>
      <link>https://sudarlife.tistory.com/entry/%ED%94%8C%EB%9F%AC%ED%84%B0-%EC%B1%85-%EA%B0%9C%EB%B0%9C%ED%95%98%EB%8A%94%EB%82%A8%EC%9E%90%EC%9D%98-%ED%95%B8%EC%A6%88%EC%98%A8-%ED%94%8C%EB%9F%AC%ED%84%B0-%EC%B6%9C%EC%8B%9C%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EC%B1%85%EC%86%8C%EA%B0%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;내 여러분 안녕하세요 개발하는남자 개남입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23년 초 제 스스로 새로운 도전을 시작하게 되었습니다. 바로 책을 집필해 보는 것이었습니다. 책을 집필해 보면서 많은 과정이 있었고 많은 분들이 책 한 권을 펴내는데 수고하신다는 것 또한 알게 되었습니다. 마침내 준비해 오던 책이 드디어 출간되어 책에 대한 내용은 간단하게 기록하고자 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;플러터-책-소개-thumbnail.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c44jJc/btsINadt6JK/DrCQ9KeWCASX9szXns2pfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c44jJc/btsINadt6JK/DrCQ9KeWCASX9szXns2pfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c44jJc/btsINadt6JK/DrCQ9KeWCASX9szXns2pfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc44jJc%2FbtsINadt6JK%2FDrCQ9KeWCASX9szXns2pfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;플러터-책-소개-thumbnail.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 책에 대한 간단한 소개를 드릴텐데 그것만 있으면 아쉬우니 출판사로부터 책을 여럿 받았습니다. 그래서 이벤트를 통해 책을 발송드리고자 합니다. 이 글을 읽으시는 시점이 24년 7월 29일 이전이라면 이벤트를 참여하실 수 있습니다. 관련 내용은 유튜브 영상을 참고해 주세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=DGyIv7Lgr94&quot;&gt;https://www.youtube.com/watch?v=DGyIv7Lgr94&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;이 책의 구성&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 책은 총 2파트로 나뉘어져있습니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-20 오후 7.25.48.png&quot; data-origin-width=&quot;1542&quot; data-origin-height=&quot;1018&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lZrMC/btsIK89hz3E/vK5a9KWWKiMBOelZjYQPvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lZrMC/btsIK89hz3E/vK5a9KWWKiMBOelZjYQPvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lZrMC/btsIK89hz3E/vK5a9KWWKiMBOelZjYQPvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlZrMC%2FbtsIK89hz3E%2FvK5a9KWWKiMBOelZjYQPvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1542&quot; height=&quot;1018&quot; data-filename=&quot;스크린샷 2024-07-20 오후 7.25.48.png&quot; data-origin-width=&quot;1542&quot; data-origin-height=&quot;1018&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 파트는 초심자들도 쉽게 보실 수 있도록 dart 기본 문법부터 dart 3.0에서 새롭게 생긴 record나 패턴매칭 등 신규 기능들도 정리해 놓고 있으며 상태관리 bloc과 getx에 대해서 심도 있게 다루고 있습니다. 그리고 API의 기본 개념부터 직접 간단한 API를 사용해서 화면을 그려보는 것을 통해 API를 설명하고 있으며 파이어베이스 연동까지 다루고 있습니다. 1부의 마지막은 앱을 배포하는 과정을 android / iOS 모두 소개하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;두 번째 파트&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-20 오후 7.29.09.png&quot; data-origin-width=&quot;2446&quot; data-origin-height=&quot;1376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddrFJO/btsIMxAgMEs/CSQVCJX3NULBiKEKVF0z5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddrFJO/btsIMxAgMEs/CSQVCJX3NULBiKEKVF0z5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddrFJO/btsIMxAgMEs/CSQVCJX3NULBiKEKVF0z5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddrFJO%2FbtsIMxAgMEs%2FCSQVCJX3NULBiKEKVF0z5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2446&quot; height=&quot;1376&quot; data-filename=&quot;스크린샷 2024-07-20 오후 7.29.09.png&quot; data-origin-width=&quot;2446&quot; data-origin-height=&quot;1376&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 파트는 앞에서 다루고 학습을 토대로 응용앱을 만들어 보는 과정을 다루고 있는데 쉬운 앱들을 만들어보는 과정으로 할지 아니면 클론코딩을 할지 고민을 했는데 클론코딩을 통해 현업에서 서비스되는 기능을 구현해 보면서 노하우들을 같이 설명하는 것이 좋을 것 같다고 생각했습니다 그래서 제 유튜브 채널 중에 가장 많은 조회수를 기록하고 지금도 시청하고 계시는 분들이 계셔서 당근마켓 클론코딩을 만들어가는 과정을 담게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 제 채널에 구독중이신부들은 한번 정도는 보셨을 것 같은데 아마 공감하실 부분이 영상이 오래되었다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; contenteditable=&quot;false&quot; href=&quot;https://www.youtube.com/watch?v=aYeBFDnPbkY&amp;amp;list=PLgRxBCVPaZ_3R0h7mCkLJ1RKh7XRvoZdF&quot; data-token-index=&quot;0&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발하는남자&lt;/span&gt;&lt;span&gt;[ Flutter / 플러터 ] 당근마켓 홈 화면을 플러터로 만들어보자 #1&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;​&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=aYeBFDnPbkY&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cPxHrA/hyWCDAIje3/ADhTx9ssxN4WsOr6O5zLUk/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;[ Flutter / 플러터 ] 당근마켓 홈 화면을 플러터로 만들어보자 #1&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/aYeBFDnPbkY&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;24년 기준으로 3년 된 영상이고 플러터 버전도 지금은 3이지만 그 당시의 버전은 1로 만들어지다 보니 따라서 학습하기에 다소 어려움이 있었으리라 생각됩니다. 그래서 책에서는 플러터 버전 3으로 개발을 할 수 있도록 최신화를 했으며 당근마켓의 클론코딩인 만큼 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;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앱소개 및 초기 시스템 로드를 위한 스플레시 페이지 기능&lt;/li&gt;
&lt;li&gt;SNS 로그인(구글/apple) 회원 인증 기능&lt;/li&gt;
&lt;li&gt;상품을 등록하기 위한 이미지 업로드 기능&lt;/li&gt;
&lt;li&gt;거래 희망지역을 설정할 수 있는 지도 연동 기능&lt;/li&gt;
&lt;li&gt;상품이 마음에 들어 관심상품으로 관리하기 위한 좋아요 기능&lt;/li&gt;
&lt;li&gt;상품 판매자와의 거래 조율을 위한 채팅 기능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 이번 책에서 개발될 화면 결과물입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1862&quot; data-origin-height=&quot;1154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/co0uqe/btsIKW8Uxtm/8Xz9ki3BtNW76OlA789B50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/co0uqe/btsIKW8Uxtm/8Xz9ki3BtNW76OlA789B50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/co0uqe/btsIKW8Uxtm/8Xz9ki3BtNW76OlA789B50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fco0uqe%2FbtsIKW8Uxtm%2F8Xz9ki3BtNW76OlA789B50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1862&quot; height=&quot;1154&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1862&quot; data-origin-height=&quot;1154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;1192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwsbSI/btsIK7id6dV/1n2441fxTxSskArKVa1Ad0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwsbSI/btsIK7id6dV/1n2441fxTxSskArKVa1Ad0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwsbSI/btsIK7id6dV/1n2441fxTxSskArKVa1Ad0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwsbSI%2FbtsIK7id6dV%2F1n2441fxTxSskArKVa1Ad0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1982&quot; height=&quot;1192&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;1192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;1170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqHHfx/btsIKbeoy6p/d5GV4UeWmYxjm0TGkj6aSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqHHfx/btsIKbeoy6p/d5GV4UeWmYxjm0TGkj6aSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqHHfx/btsIKbeoy6p/d5GV4UeWmYxjm0TGkj6aSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqHHfx%2FbtsIKbeoy6p%2Fd5GV4UeWmYxjm0TGkj6aSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1906&quot; height=&quot;1170&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;1170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1886&quot; data-origin-height=&quot;1160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ICzK9/btsINbpWJ1T/PUFapCajYxsH4y4mUoQkJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ICzK9/btsINbpWJ1T/PUFapCajYxsH4y4mUoQkJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ICzK9/btsINbpWJ1T/PUFapCajYxsH4y4mUoQkJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FICzK9%2FbtsINbpWJ1T%2FPUFapCajYxsH4y4mUoQkJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1886&quot; height=&quot;1160&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1886&quot; data-origin-height=&quot;1160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 말씀드리자면 2부 당근마켓 파트는 초심자 분들에겐 다소 어려운 파트일 것입니다. 왜냐하면 현업에서 유지보수를 목적으로 파일관리라던지 의존성분리라던지 여러 가지 많은 기능들을 고려해 설계된 프로젝트라서 따라오기 어려울 수 있습니다만 최대한 문제없이 책에 기술하려고 노력했으니 도전해 보시는 것도 좋은 공부 방법이 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 총 2개의 파트로 나눠 구성을 했습니다. 많은 내용을 자세히 다루고 싶다 보니 초기에 출판사 측과 500page를 계획하였지만 어쩔 수 없이 800page이상으로 가야 할 것 같다고 협의하여 책의 분량이 다소 길다는 점 참고해 주세요 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발하는 남자의 핸즈온 플러터 책으로 재미있게 공부하길 기원하며&amp;hellip;&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;a href=&quot;https://bit.ly/3WjeEEC&quot;&gt;https://bit.ly/3WjeEEC&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예스 24 : &lt;a href=&quot;https://bit.ly/3Wz4UaU&quot;&gt;https://bit.ly/3Wz4UaU&lt;/a&gt;&lt;/p&gt;</description>
      <category>개발일지/flutter</category>
      <category>개남</category>
      <category>개발서적</category>
      <category>개발하는남자</category>
      <category>개발하는남자의 핸즈온 플러터</category>
      <category>플러터</category>
      <category>플러터 도서</category>
      <category>플러터책</category>
      <category>핸즈온 플러터</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/249</guid>
      <comments>https://sudarlife.tistory.com/entry/%ED%94%8C%EB%9F%AC%ED%84%B0-%EC%B1%85-%EA%B0%9C%EB%B0%9C%ED%95%98%EB%8A%94%EB%82%A8%EC%9E%90%EC%9D%98-%ED%95%B8%EC%A6%88%EC%98%A8-%ED%94%8C%EB%9F%AC%ED%84%B0-%EC%B6%9C%EC%8B%9C%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4-%EC%B1%85%EC%86%8C%EA%B0%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8#entry249comment</comments>
      <pubDate>Wed, 24 Jul 2024 19:07:32 +0900</pubDate>
    </item>
    <item>
      <title>[영성온도] 말씀묵상 기록 앱 만들기</title>
      <link>https://sudarlife.tistory.com/entry/%EC%98%81%EC%84%B1%EC%98%A8%EB%8F%84-%EB%A7%90%EC%94%80%EB%AC%B5%EC%83%81-%EA%B8%B0%EB%A1%9D-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1200x630wa.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7pmQl/btsIkMYoImY/asMT7wFFRc0KAHkN1vEaEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7pmQl/btsIkMYoImY/asMT7wFFRc0KAHkN1vEaEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7pmQl/btsIkMYoImY/asMT7wFFRc0KAHkN1vEaEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7pmQl%2FbtsIkMYoImY%2FasMT7wFFRc0KAHkN1vEaEK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;630&quot; data-filename=&quot;1200x630wa.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다들 묵상을 어떤 식으로 하시나요?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분은 말씀을 읽고 느낀부분을 깊이 묵상하고 기도하고 삶에 적용하는 방식으로 묵상을 하실 것이라 생각됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇몇 분은 자신만의 다이어리에 말씀 묵상 중 느낀 점을 기록하시는 분들도 있을지 모르겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우 말씀묵상을 기록하는 편입니다. 기록한 부분을 언젠가 읽어볼때가 있었는데 그 당시의 힘든점이 무었이었고 그때의 나의 신앙의 상태를 기억할 수 있었던 것이 좋았습니다. 그러던 중 주일 설교말씀에 말씀 묵상을 기록하는것이 좋으며 그 기록이 언젠가 다시 꺼내서 읽게 되었을때 그당시의 나만의 신앙의 역사를 알 수 있을 것이라는 목사님의 설교말씀에 내가 경험하고 추구 하는 부분이 괜찮은 말씀 묵상 방법이라는 것을 알게 되었습니다. 그러면서 그런 방식의 묵상을 도와주는 앱을 만들어서 많은 사람들에게 전하고 싶다는 생각이 들었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;영성온도&lt;/b&gt;&lt;/h2&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-01 오후 10.12.38.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BJFiU/btsIjK8etly/D0k09KgPRaCdfh02G9XSFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BJFiU/btsIjK8etly/D0k09KgPRaCdfh02G9XSFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BJFiU/btsIjK8etly/D0k09KgPRaCdfh02G9XSFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBJFiU%2FbtsIjK8etly%2FD0k09KgPRaCdfh02G9XSFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1448&quot; height=&quot;660&quot; data-filename=&quot;스크린샷 2024-07-01 오후 10.12.38.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;660&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 style=&quot;color: #000000; text-align: start;&quot; 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;span&gt; &lt;/span&gt;언제기록했는지&lt;span&gt; &lt;/span&gt;히스토리를&lt;span&gt; &lt;/span&gt;리스트&lt;span&gt; &lt;/span&gt;별&lt;span&gt; &lt;/span&gt;혹은&lt;span&gt; &lt;/span&gt;달력뷰로&lt;span&gt; &lt;/span&gt;한눈에&lt;span&gt; &lt;/span&gt;확인&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있도록&lt;span&gt; &lt;/span&gt;제작하였습니다&lt;span&gt;. &lt;/span&gt;그리고&lt;span&gt; &lt;/span&gt;아직&lt;span&gt; &lt;/span&gt;계획일&lt;span&gt; &lt;/span&gt;뿐이지만&lt;span&gt; &lt;/span&gt;연말에&lt;span&gt; &lt;/span&gt;희망하시는&lt;span&gt; &lt;/span&gt;분을&lt;span&gt; &lt;/span&gt;받아서&lt;span&gt; &lt;/span&gt;책으로&lt;span&gt; &lt;/span&gt;만들어&lt;span&gt; &lt;/span&gt;발송을&lt;span&gt; &lt;/span&gt;드릴&lt;span&gt; &lt;/span&gt;예정입니다&lt;span&gt;. 1&lt;/span&gt;년간&lt;span&gt; &lt;/span&gt;묵상한&lt;span&gt; &lt;/span&gt;내용을&lt;span&gt; &lt;/span&gt;책으로&lt;span&gt; &lt;/span&gt;받아볼&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있다니&lt;span&gt; &lt;/span&gt;정말&lt;span&gt; &lt;/span&gt;기대되지&lt;span&gt; &lt;/span&gt;않나요&lt;span&gt;??&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-02 오전 10.35.56.png&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;1196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cklRRs/btsIkbkiX9j/hg2WECDZ9BEpOJIvQmC170/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cklRRs/btsIkbkiX9j/hg2WECDZ9BEpOJIvQmC170/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cklRRs/btsIkbkiX9j/hg2WECDZ9BEpOJIvQmC170/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcklRRs%2FbtsIkbkiX9j%2Fhg2WECDZ9BEpOJIvQmC170%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1504&quot; height=&quot;1196&quot; data-filename=&quot;스크린샷 2024-07-02 오전 10.35.56.png&quot; data-origin-width=&quot;1504&quot; data-origin-height=&quot;1196&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;처음에는&lt;span&gt; &lt;/span&gt;개인&lt;span&gt; &lt;/span&gt;묵상으로만&lt;span&gt; &lt;/span&gt;개발&lt;span&gt; &lt;/span&gt;방향성을&lt;span&gt; &lt;/span&gt;잡고&lt;span&gt; &lt;/span&gt;개발을&lt;span&gt; &lt;/span&gt;했는데&lt;span&gt; &lt;/span&gt;와이프와의&lt;span&gt; &lt;/span&gt;공통된&lt;span&gt; &lt;/span&gt;말씀&lt;span&gt; &lt;/span&gt;구절로&lt;span&gt; &lt;/span&gt;각자의&lt;span&gt; &lt;/span&gt;주신&lt;span&gt; &lt;/span&gt;말씀이&lt;span&gt; &lt;/span&gt;무엇일지&lt;span&gt; &lt;/span&gt;서로&lt;span&gt; &lt;/span&gt;나누면&lt;span&gt; &lt;/span&gt;좋을&lt;span&gt; &lt;/span&gt;것&lt;span&gt; &lt;/span&gt;같다는&lt;span&gt; &lt;/span&gt;생각에&lt;span&gt; &lt;/span&gt;그룹&lt;span&gt; &lt;/span&gt;나눔기능을&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있도록&lt;span&gt; &lt;/span&gt;개발을&lt;span&gt; &lt;/span&gt;하게&lt;span&gt; &lt;/span&gt;되었습니다&lt;span&gt;. &lt;/span&gt;그룹&lt;span&gt; &lt;/span&gt;나눔역시&lt;span&gt; &lt;/span&gt;참여율에&lt;span&gt; &lt;/span&gt;따라&lt;span&gt; &lt;/span&gt;그룹의&lt;span&gt; &lt;/span&gt;온도역시&lt;span&gt; &lt;/span&gt;올라가도록&lt;span&gt; &lt;/span&gt;설계&lt;span&gt; &lt;/span&gt;하여&lt;span&gt; &lt;/span&gt;공통된&lt;span&gt; &lt;/span&gt;동기를&lt;span&gt; &lt;/span&gt;주고자&lt;span&gt; &lt;/span&gt;했습니다&lt;span&gt;. &lt;/span&gt;최대&lt;span&gt; 3&lt;/span&gt;개의&lt;span&gt; &lt;/span&gt;그룹을&lt;span&gt; &lt;/span&gt;만들거나&lt;span&gt; &lt;/span&gt;참여&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있도록&lt;span&gt; &lt;/span&gt;개발되었습니다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-02 오후 4.27.12.png&quot; data-origin-width=&quot;1486&quot; data-origin-height=&quot;1176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/USGf4/btsIk90UpxE/FkoK0khJdnQ0Lt52PVAO6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/USGf4/btsIk90UpxE/FkoK0khJdnQ0Lt52PVAO6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/USGf4/btsIk90UpxE/FkoK0khJdnQ0Lt52PVAO6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUSGf4%2FbtsIk90UpxE%2FFkoK0khJdnQ0Lt52PVAO6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1486&quot; height=&quot;1176&quot; data-filename=&quot;스크린샷 2024-07-02 오후 4.27.12.png&quot; data-origin-width=&quot;1486&quot; data-origin-height=&quot;1176&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 앱이 많은 분들에게 말씀 묵상의 기쁨과 주님과의 친밀감을 더욱 깊게 느끼게 해줄 수 있기를 바랍니다. 함께 주님의 말씀을 나누고, 기록하며, 성장해가는 아름다운 여정을 함께 만들어 나가길 소망합니다. 여러분의 묵상이 풍성해지기를 기도합니다. 감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 경로&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iOS : &lt;a href=&quot;https://apps.apple.com/kr/app/%EC%98%81%EC%84%B1%EC%98%A8%EB%8F%84/id6479955038&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://apps.apple.com/kr/app/%EC%98%81%EC%84%B1%EC%98%A8%EB%8F%84/id6479955038&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719905463481&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;&amp;lrm;영성온도&quot; data-og-description=&quot;&amp;lrm;영성 온도는 주님의 말씀을 묵상하며 신앙생활의 깊이를 새롭게 탐색하고자 하는 기독교인들을 위한 앱입니다. 매일매일의 묵상을 기록하고, 그 과정에서 하나님과의 친밀도를 온도 형태로 &quot; data-og-host=&quot;apps.apple.com&quot; data-og-source-url=&quot;https://apps.apple.com/kr/app/%EC%98%81%EC%84%B1%EC%98%A8%EB%8F%84/id6479955038&quot; data-og-url=&quot;https://apps.apple.com/kr/app/%EC%98%81%EC%84%B1%EC%98%A8%EB%8F%84/id6479955038&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/td1UA/hyWrY6jDDk/UKB2g9EoNlxYsaAoAPLNCk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/i8FhT/hyWvOgHahS/pWS9DZBcnkxnCanvzul0Bk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://apps.apple.com/kr/app/%EC%98%81%EC%84%B1%EC%98%A8%EB%8F%84/id6479955038&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://apps.apple.com/kr/app/%EC%98%81%EC%84%B1%EC%98%A8%EB%8F%84/id6479955038&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/td1UA/hyWrY6jDDk/UKB2g9EoNlxYsaAoAPLNCk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/i8FhT/hyWvOgHahS/pWS9DZBcnkxnCanvzul0Bk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lrm;영성온도&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lrm;영성 온도는 주님의 말씀을 묵상하며 신앙생활의 깊이를 새롭게 탐색하고자 하는 기독교인들을 위한 앱입니다. 매일매일의 묵상을 기록하고, 그 과정에서 하나님과의 친밀도를 온도 형태로&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;apps.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;android : &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.sudarlife.spirituality_temperature_diary&amp;amp;hl=ko&amp;amp;gl=US&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://play.google.com/store/apps/details?id=com.sudarlife.spirituality_temperature_diary&amp;amp;hl=ko&amp;amp;gl=US&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719905476074&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;영성온도 : 매일 성경 말씀 묵상 기록 - Google Play 앱&quot; data-og-description=&quot;주님과의 친밀도를 온도로 확인하며 매일의 묵상을 기록하고 성장하세요.&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.sudarlife.spirituality_temperature_diary&amp;amp;hl=ko&amp;amp;gl=US&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.sudarlife.spirituality_temperature_diary&amp;amp;hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/L6EhP/hyWrK1j7PN/DAiKOwrGPjbwPuAlU3oEAK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/MBD6S/hyWrTDXBHS/kGdwSJKbUSloGs092GwGL0/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/Vy8zY/hyWvIgsBLg/qNPCTkKOgKgq3amfdqSTKk/img.png?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.sudarlife.spirituality_temperature_diary&amp;amp;hl=ko&amp;amp;gl=US&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.sudarlife.spirituality_temperature_diary&amp;amp;hl=ko&amp;amp;gl=US&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/L6EhP/hyWrK1j7PN/DAiKOwrGPjbwPuAlU3oEAK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/MBD6S/hyWrTDXBHS/kGdwSJKbUSloGs092GwGL0/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/Vy8zY/hyWvIgsBLg/qNPCTkKOgKgq3amfdqSTKk/img.png?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240');&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;영성온도 : 매일 성경 말씀 묵상 기록 - Google Play 앱&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;play.google.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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>매일 Q.T</category>
      <category>qt</category>
      <category>qt앱</category>
      <category>말씀</category>
      <category>말씀묵상</category>
      <category>묵상앱</category>
      <category>영성온도</category>
      <category>큐티앱</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/248</guid>
      <comments>https://sudarlife.tistory.com/entry/%EC%98%81%EC%84%B1%EC%98%A8%EB%8F%84-%EB%A7%90%EC%94%80%EB%AC%B5%EC%83%81-%EA%B8%B0%EB%A1%9D-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry248comment</comments>
      <pubDate>Tue, 2 Jul 2024 19:00:56 +0900</pubDate>
    </item>
    <item>
      <title>[플러터 Bloc 마스터] 왜 Bloc을 사용하는가?</title>
      <link>https://sudarlife.tistory.com/entry/%ED%94%8C%EB%9F%AC%ED%84%B0-Bloc-%EB%A7%88%EC%8A%A4%ED%84%B0-%EC%99%9C-Bloc%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;내&lt;span&gt; &lt;/span&gt;여러분&lt;span&gt; &lt;/span&gt;안녕하세요&lt;span&gt; &lt;/span&gt;개발하는&lt;span&gt; &lt;/span&gt;남자&lt;span&gt; &lt;/span&gt;개남입니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜&lt;span&gt; Bloc&lt;/span&gt;을&lt;span&gt; &lt;/span&gt;사용해야&lt;span&gt; &lt;/span&gt;하는가&lt;span&gt;? &lt;/span&gt;에&lt;span&gt; 대해서정리해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모든 내용은 Bloc 공식 문서를 바탕으로 정리한 내용입니다.&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675258267051&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;Bloc State Management Library&quot; data-og-description=&quot;Official documentation for the bloc state management library. Support for Dart, Flutter, and AngularDart. Includes examples and tutorials.&quot; data-og-host=&quot;bloclibrary.dev&quot; data-og-source-url=&quot;https://bloclibrary.dev/#/gettingstarted&quot; data-og-url=&quot;https://bloclibrary.dev/#/gettingstarted&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bnkQW8/hyRsubpLLu/0Uh3Ou50BdQx3yAWVxqf8k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://bloclibrary.dev/#/gettingstarted&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bloclibrary.dev/#/gettingstarted&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bnkQW8/hyRsubpLLu/0Uh3Ou50BdQx3yAWVxqf8k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Bloc State Management Library&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Official documentation for the bloc state management library. Support for Dart, Flutter, and AngularDart. Includes examples and tutorials.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bloclibrary.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.31.33.png&quot; data-origin-width=&quot;2230&quot; data-origin-height=&quot;1252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzLQka/btrXLq2PJER/aBftFtuYi92aA22vJScIMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzLQka/btrXLq2PJER/aBftFtuYi92aA22vJScIMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzLQka/btrXLq2PJER/aBftFtuYi92aA22vJScIMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzLQka%2FbtrXLq2PJER%2FaBftFtuYi92aA22vJScIMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2230&quot; height=&quot;1252&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.31.33.png&quot; data-origin-width=&quot;2230&quot; data-origin-height=&quot;1252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bloc은 플러터의 상태관리를 도와주는 패키지로써 Bloc 외에도 Getx, Riverpod, Provider 등 각자의 방식으로 개발자들에게 상태관리를 도와주고 있습니다. 이 시점에서 상태관리를 왜 사용해야 하는지 모르시는 분들의 경우 제가 정리한 영상 오랜 영상이긴 하지만 내용을 들어보시면 도움이 되실 것입니다. 한번 보고 오시는 것을 추천드리겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.34.16.png&quot; data-origin-width=&quot;2730&quot; data-origin-height=&quot;668&quot;&gt;&lt;a href=&quot;https://youtu.be/AY6i0a4BM7o&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ANLzY/btrXM4Fevoe/KKJrM7E4blloH7vyxaHQ91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FANLzY%2FbtrXM4Fevoe%2FKKJrM7E4blloH7vyxaHQ91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;147&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.34.16.png&quot; data-origin-width=&quot;2730&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;Bloc을 사용해야 하는 이유 5가지&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;1. 뷰 영역과 비즈니스 영역을 쉽게 구분할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서&lt;span&gt; &lt;/span&gt;뷰의&lt;span&gt; &lt;/span&gt;영역은&lt;span&gt; &lt;/span&gt;화면&lt;span&gt; UI&lt;/span&gt;부분을&lt;span&gt; &lt;/span&gt;뜻하며&lt;span&gt; &lt;/span&gt;사용자의&lt;span&gt; &lt;/span&gt;액션&lt;span&gt;( 터치, 버튼버튼 &lt;/span&gt;클릭&lt;span&gt;, &lt;/span&gt;텍스트&lt;span&gt; &lt;/span&gt;필드&lt;span&gt; &lt;/span&gt;입력&lt;span&gt; &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;을&lt;span&gt; &lt;/span&gt;받아&lt;span&gt; &lt;/span&gt;이벤트&lt;span&gt; &lt;/span&gt;을&lt;span&gt; &lt;/span&gt;발생시키는&lt;span&gt; 영역을말합니다.&lt;/span&gt; 비즈니스영역은&lt;span&gt; &lt;/span&gt;사용자의&lt;span&gt; &lt;/span&gt;입력에&lt;span&gt; 따라여러&lt;/span&gt; 가지 기능(검색,회원가입&lt;span&gt;, &lt;/span&gt;글&lt;span&gt; &lt;/span&gt;등록&lt;span&gt;, &lt;/span&gt;상품&lt;span&gt; &lt;/span&gt;좋아요&lt;span&gt; &lt;/span&gt;등&lt;span&gt;)&lt;/span&gt;을&lt;span&gt; &lt;/span&gt;수행하게&lt;span&gt; &lt;/span&gt;되는데&lt;span&gt; &lt;/span&gt;사용자들은&lt;span&gt; &lt;/span&gt;대부분&lt;span&gt; &lt;/span&gt;어떤&lt;span&gt; &lt;/span&gt;과정을&lt;span&gt; &lt;/span&gt;통해&lt;span&gt; &lt;/span&gt;기능을&lt;span&gt; &lt;/span&gt;수행하는지&lt;span&gt; &lt;/span&gt;알&lt;span&gt; &lt;/span&gt;필요가&lt;span&gt; &lt;/span&gt;없고&lt;span&gt; &lt;/span&gt;관심도&lt;span&gt; &lt;/span&gt;없습니다&lt;span&gt;. &lt;/span&gt;단지&lt;span&gt; 빠른시간&lt;/span&gt; 내에 응답을받고&lt;span&gt; &lt;/span&gt;원하는&lt;span&gt; &lt;/span&gt;데이터를&lt;span&gt; &lt;/span&gt;보기를&lt;span&gt; &lt;/span&gt;원할&lt;span&gt; &lt;/span&gt;뿐이죠&lt;span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;그러한&lt;span&gt; &lt;/span&gt;사용자의&lt;span&gt; &lt;/span&gt;요청을&lt;span&gt; &lt;/span&gt;빠르게&lt;span&gt; &lt;/span&gt;수행하기&lt;span&gt; &lt;/span&gt;위해&lt;span&gt; &lt;/span&gt;로직을&lt;span&gt; 작성하게작성하게 되는 부분을 비즈니스&lt;/span&gt;영역이라고&lt;span&gt; &lt;/span&gt;말합니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뷰와&lt;span&gt; &lt;/span&gt;비즈니스&lt;span&gt; &lt;/span&gt;영역은&lt;span&gt; &lt;/span&gt;서로&lt;span&gt; &lt;/span&gt;상호작용되어&lt;span&gt; 결과를도출해&lt;/span&gt; 주는 집합체가하나의&lt;span&gt; &lt;/span&gt;서비스가&lt;span&gt; &lt;/span&gt;되는&lt;span&gt; &lt;/span&gt;것이죠&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.39.32.png&quot; data-origin-width=&quot;2278&quot; data-origin-height=&quot;968&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRYNgE/btrXRU1EVpO/RrwM370sbNomAJ0Ev5tcb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRYNgE/btrXRU1EVpO/RrwM370sbNomAJ0Ev5tcb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRYNgE/btrXRU1EVpO/RrwM370sbNomAJ0Ev5tcb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRYNgE%2FbtrXRU1EVpO%2FRrwM370sbNomAJ0Ev5tcb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2278&quot; height=&quot;968&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.39.32.png&quot; data-origin-width=&quot;2278&quot; data-origin-height=&quot;968&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼&lt;span&gt; 뷰와비즈니스가한대뷰와 비즈니스가 한대 어우러져서 개발하는 것이 편하지편하지 &lt;/span&gt;않을까&lt;span&gt;? &lt;/span&gt;사용자의&lt;span&gt; &lt;/span&gt;버튼&lt;span&gt; &lt;/span&gt;입력을&lt;span&gt; &lt;/span&gt;받고&lt;span&gt; &lt;/span&gt;바로&lt;span&gt; &lt;/span&gt;해당되는&lt;span&gt; &lt;/span&gt;로직을&lt;span&gt; &lt;/span&gt;수행하면&lt;span&gt; &lt;/span&gt;관리도&lt;span&gt; &lt;/span&gt;편하고&lt;span&gt; &lt;/span&gt;좋은데&lt;span&gt; &lt;/span&gt;왜&lt;span&gt; 뷰와비즈니스영역을 쉽게구분하는&lt;/span&gt; 것이 장점이되는&lt;span&gt; &lt;/span&gt;것일까요&lt;span&gt;?&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;물론&lt;span&gt; 개발을할&lt;/span&gt; 때 빠르게개발할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있기도&lt;span&gt; &lt;/span&gt;하고&lt;span&gt; &lt;/span&gt;복잡성도&lt;span&gt; &lt;/span&gt;덜할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. &lt;/span&gt;하지만&lt;span&gt; &lt;/span&gt;그런&lt;span&gt; &lt;/span&gt;코드의&lt;span&gt; &lt;/span&gt;경우&lt;span&gt; &lt;/span&gt;유지보수가&lt;span&gt; 매우어려워지게됩니다매우 어려워지게 됩니다. 화면을화면을 수정해야 하는데 비즈니스&lt;/span&gt;로직이&lt;span&gt; 함께버무려져있다&lt;/span&gt; 보니 가독성도어렵고&lt;span&gt; 압박적인라인수로&lt;/span&gt; 인해화면&lt;span&gt; &lt;/span&gt;수정에&lt;span&gt; &lt;/span&gt;시간이&lt;span&gt; &lt;/span&gt;길어지게&lt;span&gt; &lt;/span&gt;되는&lt;span&gt; &lt;/span&gt;문제가&lt;span&gt; &lt;/span&gt;발생할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그래서&lt;span&gt; &lt;/span&gt;이를&lt;span&gt; &lt;/span&gt;해결하기&lt;span&gt; &lt;/span&gt;위해&lt;span&gt; mvc &lt;/span&gt;나&lt;span&gt; mvvm 패턴이패턴이 나온 것이죠. bloc&lt;/span&gt;이나&lt;span&gt; &lt;/span&gt;다른&lt;span&gt; &lt;/span&gt;상태관리&lt;span&gt; &lt;/span&gt;라이브러리들도&lt;span&gt; &lt;/span&gt;기본적으로&lt;span&gt; &lt;/span&gt;뷰&lt;span&gt;/&lt;/span&gt;비즈니스&lt;span&gt; &lt;/span&gt;영역을&lt;span&gt; &lt;/span&gt;구분하는&lt;span&gt; &lt;/span&gt;것이&lt;span&gt; &lt;/span&gt;기본&lt;span&gt; &lt;/span&gt;베이스가&lt;span&gt; &lt;/span&gt;아닐까&lt;span&gt; &lt;/span&gt;생각이&lt;span&gt; &lt;/span&gt;됩니다&lt;span&gt;. &lt;/span&gt;물론&lt;span&gt; &lt;/span&gt;아직&lt;span&gt; riverpod&lt;/span&gt;는&lt;span&gt; &lt;/span&gt;잘&lt;span&gt; &lt;/span&gt;모르겠지만&lt;span&gt; &lt;/span&gt;말이죠&lt;span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;뷰에&lt;span&gt; &lt;/span&gt;문제가&lt;span&gt; &lt;/span&gt;있으면&lt;span&gt; &lt;/span&gt;뷰에&lt;span&gt; &lt;/span&gt;집중할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있고&lt;span&gt; &lt;/span&gt;로직에&lt;span&gt; &lt;/span&gt;문제가&lt;span&gt; &lt;/span&gt;있으면&lt;span&gt; &lt;/span&gt;로직&lt;span&gt; &lt;/span&gt;부분만&lt;span&gt; &lt;/span&gt;집중해서&lt;span&gt; &lt;/span&gt;작업할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있어서&lt;span&gt; &lt;/span&gt;아주&lt;span&gt; &lt;/span&gt;좋은&lt;span&gt; &lt;/span&gt;방식이라고&lt;span&gt; &lt;/span&gt;볼&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;2. 테스트하기 쉽고(TDD), 재사용을 가능하게 해 준다.&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;TDD&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;중점적으로&lt;span&gt; &lt;/span&gt;활용하는&lt;span&gt; &lt;/span&gt;개발자의&lt;span&gt; &lt;/span&gt;경우&lt;span&gt; &lt;/span&gt;장점이&lt;span&gt; &lt;/span&gt;될&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. bloc_test &lt;/span&gt;라이브러리를&lt;span&gt; &lt;/span&gt;제공해주고&lt;span&gt; 있어서비즈니스로직을 &lt;/span&gt;직접&lt;span&gt; UI&lt;/span&gt;로&lt;span&gt; 확인하여테스트하는것보다 &lt;/span&gt;훨씬&lt;span&gt; &lt;/span&gt;빠르게&lt;span&gt; &lt;/span&gt;체크를&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있으며&lt;span&gt; &lt;/span&gt;다양한&lt;span&gt; &lt;/span&gt;상황을&lt;span&gt; 사전에테스트해볼수 &lt;/span&gt;있어서&lt;span&gt; &lt;/span&gt;개발에&lt;span&gt; &lt;/span&gt;큰&lt;span&gt; &lt;/span&gt;도움이&lt;span&gt; &lt;/span&gt;되는&lt;span&gt; &lt;/span&gt;부분이기도&lt;span&gt; &lt;/span&gt;합니다&lt;span&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;예를&lt;span&gt; &lt;/span&gt;들어&lt;span&gt; &lt;/span&gt;회원가입에&lt;span&gt; 관한비즈니스로직을작업했는데 이를테스트하기위해서이를 테스트하기 위해서. TDD&lt;/span&gt;가&lt;span&gt; &lt;/span&gt;없다면&lt;span&gt; &lt;/span&gt;직접&lt;span&gt; 화면에여러&lt;/span&gt; 가지 입력값을넣고&lt;span&gt; &lt;/span&gt;하나하나&lt;span&gt; &lt;/span&gt;다양한&lt;span&gt; &lt;/span&gt;예외&lt;span&gt; &lt;/span&gt;상황을&lt;span&gt; &lt;/span&gt;고려하여&lt;span&gt; &lt;/span&gt;직접&lt;span&gt; &lt;/span&gt;수행을&lt;span&gt; &lt;/span&gt;통해&lt;span&gt; &lt;/span&gt;버그등을&lt;span&gt; &lt;/span&gt;찾아&lt;span&gt; &lt;/span&gt;수정해야&lt;span&gt; &lt;/span&gt;하는&lt;span&gt; &lt;/span&gt;작업이&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. &lt;/span&gt;이러한&lt;span&gt; &lt;/span&gt;작업은&lt;span&gt; &lt;/span&gt;번거롭고&lt;span&gt; &lt;/span&gt;시간도&lt;span&gt; &lt;/span&gt;많이&lt;span&gt; &lt;/span&gt;소요되기도&lt;span&gt; &lt;/span&gt;하고&lt;span&gt; &lt;/span&gt;구멍도&lt;span&gt; &lt;/span&gt;발생할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. &lt;/span&gt;하지만&lt;span&gt; TDD&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;통한&lt;span&gt; &lt;/span&gt;여러&lt;span&gt; &lt;/span&gt;상황의&lt;span&gt; &lt;/span&gt;시나리오를&lt;span&gt; 세우고기댓값을설정해 &lt;/span&gt;놓으면&lt;span&gt; &lt;/span&gt;초반&lt;span&gt; &lt;/span&gt;설정만으로&lt;span&gt; &lt;/span&gt;앞으로&lt;span&gt; &lt;/span&gt;회원가입의&lt;span&gt; &lt;/span&gt;로직에&lt;span&gt; &lt;/span&gt;대해문제 있는지는 원클릭으로확인이&lt;span&gt; &lt;/span&gt;가능해지는&lt;span&gt; &lt;/span&gt;아주&lt;span&gt; &lt;/span&gt;큰&lt;span&gt; &lt;/span&gt;장점이&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. 이러한이러한 좋은 것을 bloc&lt;/span&gt;을&lt;span&gt; &lt;/span&gt;사용한다면&lt;span&gt; &lt;/span&gt;손쉽게&lt;span&gt; &lt;/span&gt;가능하다는&lt;span&gt; &lt;/span&gt;강점이&lt;span&gt; &lt;/span&gt;있는&lt;span&gt; &lt;/span&gt;것입니다&lt;span&gt;.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.42.56.png&quot; data-origin-width=&quot;2390&quot; data-origin-height=&quot;1070&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coPOSm/btrXN6iuewq/dlMZNWcgW08dTiY33mRl20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coPOSm/btrXN6iuewq/dlMZNWcgW08dTiY33mRl20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coPOSm/btrXN6iuewq/dlMZNWcgW08dTiY33mRl20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoPOSm%2FbtrXN6iuewq%2FdlMZNWcgW08dTiY33mRl20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2390&quot; height=&quot;1070&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.42.56.png&quot; data-origin-width=&quot;2390&quot; data-origin-height=&quot;1070&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드&lt;span&gt; &lt;/span&gt;재사용의&lt;span&gt; &lt;/span&gt;경우는&lt;span&gt; &lt;/span&gt;동일&lt;span&gt; &lt;/span&gt;프로젝트&lt;span&gt; &lt;/span&gt;내의&lt;span&gt; &lt;/span&gt;코드&lt;span&gt; &lt;/span&gt;재사용도&lt;span&gt; &lt;/span&gt;중요하지만&lt;span&gt; &lt;/span&gt;다른&lt;span&gt; &lt;/span&gt;프로젝트에서도&lt;span&gt; &lt;/span&gt;필요한&lt;span&gt; &lt;/span&gt;기능을&lt;span&gt; &lt;/span&gt;가져다가&lt;span&gt; &lt;/span&gt;사용할&lt;span&gt; &lt;/span&gt;수도&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. &lt;/span&gt;그렇다면&lt;span&gt; &lt;/span&gt;개발기간을&lt;span&gt; &lt;/span&gt;단축할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있기&lt;span&gt; &lt;/span&gt;때문에&lt;span&gt; &lt;/span&gt;아주&lt;span&gt; &lt;/span&gt;큰&lt;span&gt; &lt;/span&gt;장점이라고&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;대신&lt;span&gt; &lt;/span&gt;코드&lt;span&gt; 재사용을잘하기위해서는 &lt;/span&gt;기능을&lt;span&gt; &lt;/span&gt;잘&lt;span&gt; &lt;/span&gt;나누고&lt;span&gt; &lt;/span&gt;정말&lt;span&gt; &lt;/span&gt;필요한&lt;span&gt; &lt;/span&gt;부분끼리만&lt;span&gt; &lt;/span&gt;의존성을&lt;span&gt; 맺게해&lt;/span&gt; 주는 게 중요합니다.개발&lt;span&gt; &lt;/span&gt;편의만을&lt;span&gt; &lt;/span&gt;생각하고&lt;span&gt; &lt;/span&gt;기능을&lt;span&gt; &lt;/span&gt;이곳저곳에서&lt;span&gt; &lt;/span&gt;연결해서&lt;span&gt; &lt;/span&gt;사용한다면&lt;span&gt; &lt;/span&gt;나중에&lt;span&gt; &lt;/span&gt;코드&lt;span&gt; &lt;/span&gt;재사용을&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;없게&lt;span&gt; &lt;/span&gt;되는&lt;span&gt; &lt;/span&gt;상황이&lt;span&gt; &lt;/span&gt;발생하게&lt;span&gt; &lt;/span&gt;됩니다&lt;span&gt;. &lt;/span&gt;이러한&lt;span&gt; &lt;/span&gt;강점이&lt;span&gt; &lt;/span&gt;있는&lt;span&gt; &lt;/span&gt;것이&lt;span&gt; Bloc&lt;/span&gt;입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;3. 이벤트 트레킹을 통합적으로 관리할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.44.31.png&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d16Xmr/btrXOuQFp9J/MK0966fD8uqKjzuqSBkAmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d16Xmr/btrXOuQFp9J/MK0966fD8uqKjzuqSBkAmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d16Xmr/btrXOuQFp9J/MK0966fD8uqKjzuqSBkAmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd16Xmr%2FbtrXOuQFp9J%2FMK0966fD8uqKjzuqSBkAmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2012&quot; height=&quot;820&quot; data-filename=&quot;스크린샷 2023-02-01 오후 10.44.31.png&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BlocObserver라는 게 있어서&lt;span&gt; &lt;/span&gt;이를&lt;span&gt; &lt;/span&gt;통하여&lt;span&gt; &lt;/span&gt;이벤트&lt;span&gt; &lt;/span&gt;트레킹을&lt;span&gt; &lt;/span&gt;통합적으로&lt;span&gt; &lt;/span&gt;관리할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있게&lt;span&gt; &lt;/span&gt;됩니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;다른&lt;span&gt; &lt;/span&gt;상태관리의&lt;span&gt; &lt;/span&gt;경우는&lt;span&gt; &lt;/span&gt;어떤지&lt;span&gt; &lt;/span&gt;모르겠지만&lt;span&gt; Getx&lt;/span&gt;의&lt;span&gt; &lt;/span&gt;경우는&lt;span&gt; &lt;/span&gt;통합적인&lt;span&gt; &lt;/span&gt;이벤트&lt;span&gt; &lt;/span&gt;확인&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있는&lt;span&gt; &lt;/span&gt;기능은&lt;span&gt; &lt;/span&gt;없었던&lt;span&gt; &lt;/span&gt;걸로&lt;span&gt; 기억하고그런&lt;/span&gt; 것을 구현하기위해서는&lt;span&gt; &lt;/span&gt;추가적인&lt;span&gt; &lt;/span&gt;개발을&lt;span&gt; &lt;/span&gt;해야&lt;span&gt; &lt;/span&gt;가능한&lt;span&gt; &lt;/span&gt;부분입니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Bloc&lt;span&gt;은&lt;/span&gt; &lt;span&gt;정말&lt;/span&gt; &lt;span&gt;간단하게&lt;/span&gt; BlocObserver&lt;span&gt;를&lt;/span&gt; &lt;span&gt;등록해주기만&lt;/span&gt; &lt;span&gt;하면&lt;/span&gt; &lt;span&gt;처리가&lt;/span&gt; &lt;span&gt;됩니다&lt;/span&gt;.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;4. 통일된 코드 베이스로 일할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Bloc&lt;/span&gt;은&lt;span&gt; &lt;/span&gt;룰이&lt;span&gt; &lt;/span&gt;정해져&lt;span&gt; &lt;/span&gt;있기&lt;span&gt; &lt;/span&gt;때문에&lt;span&gt; &lt;/span&gt;개발자들끼리&lt;span&gt; &lt;/span&gt;따로&lt;span&gt; &lt;/span&gt;규칙을&lt;span&gt; &lt;/span&gt;정하지&lt;span&gt; &lt;/span&gt;않고도&lt;span&gt; &lt;/span&gt;동일한&lt;span&gt; &lt;/span&gt;개발&lt;span&gt; &lt;/span&gt;패턴을&lt;span&gt; &lt;/span&gt;따르게&lt;span&gt; &lt;/span&gt;되게&lt;span&gt; &lt;/span&gt;되어있습니다&lt;span&gt;. &lt;/span&gt;그러한&lt;span&gt; &lt;/span&gt;장점은&lt;span&gt; &lt;/span&gt;바로&lt;span&gt; &lt;/span&gt;업무의&lt;span&gt; &lt;/span&gt;효율로&lt;span&gt; &lt;/span&gt;드러나게&lt;span&gt; &lt;/span&gt;되죠&lt;span&gt;. &lt;/span&gt;대신&lt;span&gt; &lt;/span&gt;자유롭게&lt;span&gt; &lt;/span&gt;개발하는&lt;span&gt; &lt;/span&gt;사람들에게는&lt;span&gt; &lt;/span&gt;룰을&lt;span&gt; &lt;/span&gt;따르는&lt;span&gt; &lt;/span&gt;것이&lt;span&gt; &lt;/span&gt;귀찮게&lt;span&gt; &lt;/span&gt;다가올&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있는&lt;span&gt; &lt;/span&gt;부분입니다&lt;span&gt;. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;5. Github에서 가장 높은 Star 수&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 Bloc을&lt;span&gt; &lt;/span&gt;사용해야&lt;span&gt; &lt;/span&gt;할&lt;span&gt; &lt;/span&gt;이유라고&lt;span&gt; &lt;/span&gt;보기는&lt;span&gt; &lt;/span&gt;어려울&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있지만&lt;span&gt; &lt;/span&gt;많은&lt;span&gt; &lt;/span&gt;개발자분들이&lt;span&gt; Star&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;많이&lt;span&gt; &lt;/span&gt;줬다는&lt;span&gt; &lt;/span&gt;것은&lt;span&gt; &lt;/span&gt;그만큼&lt;span&gt; &lt;/span&gt;신뢰와&lt;span&gt; &lt;/span&gt;장점이&lt;span&gt; &lt;/span&gt;있다는&lt;span&gt; 것으로생각해&lt;/span&gt; 볼 수있는&lt;span&gt; &lt;/span&gt;부분입니다&lt;span&gt;. pub.dev&lt;/span&gt;에서의 like 수는 상태관리 중 getx가&lt;span&gt; &lt;/span&gt;가장&lt;span&gt; &lt;/span&gt;높지만&lt;span&gt; github&lt;/span&gt;의&lt;span&gt; Star&lt;/span&gt;수로는&lt;span&gt; Bloc&lt;/span&gt;이&lt;span&gt; &lt;/span&gt;가장&lt;span&gt; &lt;/span&gt;높습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 Bloc을 사용하는 이유에 대한 5가지 이유를 알아봤습니다. 다음번 포스팅에서는 Bloc의 기본이 되는 Stream에 대해서 정리해 보겠습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발일지/flutter</category>
      <category>BLoC</category>
      <category>bloc 사용하는이유</category>
      <category>bloc 상태관리</category>
      <category>bloc공부</category>
      <category>Flutter</category>
      <category>플러터</category>
      <category>플러터 개발</category>
      <category>플러터 상태관리</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/247</guid>
      <comments>https://sudarlife.tistory.com/entry/%ED%94%8C%EB%9F%AC%ED%84%B0-Bloc-%EB%A7%88%EC%8A%A4%ED%84%B0-%EC%99%9C-Bloc%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80#entry247comment</comments>
      <pubDate>Wed, 1 Feb 2023 22:52:24 +0900</pubDate>
    </item>
    <item>
      <title>[플러터] 2022년 12월 현시점의 Getx는 어떤가...</title>
      <link>https://sudarlife.tistory.com/entry/%ED%94%8C%EB%9F%AC%ED%84%B0-2022%EB%85%84-12%EC%9B%94-%ED%98%84%EC%8B%9C%EC%A0%90%EC%9D%98-Getx%EB%8A%94-%EC%96%B4%EB%96%A4%EA%B0%80</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Desktop - 1.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Ac7d/btrSDGBd0cr/LeUKKCl7U86EEt65A14f1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Ac7d/btrSDGBd0cr/LeUKKCl7U86EEt65A14f1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Ac7d/btrSDGBd0cr/LeUKKCl7U86EEt65A14f1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Ac7d%2FbtrSDGBd0cr%2FLeUKKCl7U86EEt65A14f1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;1024&quot; data-filename=&quot;Desktop - 1.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네&lt;span&gt; &lt;/span&gt;여러분&lt;span&gt; &lt;/span&gt;안녕하세요&lt;span&gt; 개발하는남자 &lt;/span&gt;개남입니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘&lt;span&gt; &lt;/span&gt;다뤄볼&lt;span&gt; &lt;/span&gt;주제는&lt;span&gt; 현 시점의 Getx&lt;/span&gt;라는&lt;span&gt; 주제 입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다들&lt;span&gt; &lt;/span&gt;플러터&lt;span&gt; &lt;/span&gt;개발에&lt;span&gt; &lt;/span&gt;빠질&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;없는&lt;span&gt; &lt;/span&gt;것&lt;span&gt; &lt;/span&gt;중에&lt;span&gt; &lt;/span&gt;하나가&lt;span&gt; 상태관리 라이브러리일텐데요&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플러터에는&lt;span&gt; &lt;/span&gt;다양한&lt;span&gt; 상태관리가 &lt;/span&gt;있습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Desktop - 2.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRMGMK/btrSCKc4Yfs/MExOtOKuubHG4cDrXNORwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRMGMK/btrSCKc4Yfs/MExOtOKuubHG4cDrXNORwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRMGMK/btrSCKc4Yfs/MExOtOKuubHG4cDrXNORwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRMGMK%2FbtrSCKc4Yfs%2FMExOtOKuubHG4cDrXNORwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;1024&quot; data-filename=&quot;Desktop - 2.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그중에&lt;span&gt; &lt;/span&gt;대표적으로&lt;span&gt; getx&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;포함해서&lt;span&gt; provider bloc riverbed&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;등이&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt; &lt;/span&gt;이&lt;span&gt; &lt;/span&gt;외에도&lt;span&gt; 여러가지가 &lt;/span&gt;더&lt;span&gt; &lt;/span&gt;있는&lt;span&gt; &lt;/span&gt;걸로&lt;span&gt; &lt;/span&gt;알고&lt;span&gt; &lt;/span&gt;있는데&lt;span&gt; &lt;/span&gt;가장&lt;span&gt; &lt;/span&gt;많이&lt;span&gt; &lt;/span&gt;사용하는&lt;span&gt; &lt;/span&gt;것으로&lt;span&gt; &lt;/span&gt;정리해보니&lt;span&gt; &lt;/span&gt;이렇게&lt;span&gt; 4&lt;/span&gt;가지로&lt;span&gt; &lt;/span&gt;추려졌습니다&lt;span&gt;. &lt;/span&gt;&lt;span&gt;Pub.dev &lt;/span&gt;에서&lt;span&gt; &lt;/span&gt;검색하여&lt;span&gt; &lt;/span&gt;좋아요&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;와&lt;span&gt; &lt;/span&gt;언제&lt;span&gt; 출시 되었는지를 정리 해보았습니다 &lt;/span&gt;단연&lt;span&gt; getx&lt;/span&gt;가&lt;span&gt; &lt;/span&gt;가장&lt;span&gt; &lt;/span&gt;많은&lt;span&gt; &lt;/span&gt;사랑을&lt;span&gt; &lt;/span&gt;받고&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;저&lt;span&gt; &lt;/span&gt;역시&lt;span&gt; Getx&lt;/span&gt;로&lt;span&gt; &lt;/span&gt;대부분의&lt;span&gt; &lt;/span&gt;프로젝트에서&lt;span&gt; &lt;/span&gt;사용하고&lt;span&gt; &lt;/span&gt;있습니다만 &lt;span&gt;&lt;span&gt;&lt;/span&gt;어딜가도 &lt;/span&gt;인기가&lt;span&gt; &lt;/span&gt;있는&lt;span&gt; &lt;/span&gt;사람이나&lt;span&gt; &lt;/span&gt;제품의&lt;span&gt; &lt;/span&gt;경우&lt;span&gt; &lt;/span&gt;반드시&lt;span&gt; &lt;/span&gt;그&lt;span&gt; &lt;/span&gt;반대편에&lt;span&gt; &lt;/span&gt;서는&lt;span&gt; &lt;/span&gt;사람들이&lt;span&gt; &lt;/span&gt;있기&lt;span&gt; &lt;/span&gt;마련입니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;인기가&lt;span&gt; 없을때는 &lt;/span&gt;사람들이&lt;span&gt; &lt;/span&gt;관심을&lt;span&gt; &lt;/span&gt;두지&lt;span&gt; 않기때문에 &lt;/span&gt;반기를&lt;span&gt; &lt;/span&gt;드는&lt;span&gt; &lt;/span&gt;쪽이&lt;span&gt; &lt;/span&gt;없는&lt;span&gt; &lt;/span&gt;것이죠.&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Getx&lt;/span&gt;도&lt;span&gt; 마찮가지입니다. &lt;/span&gt;많은&lt;span&gt; &lt;/span&gt;사랑을&lt;span&gt; 받는 다는 &lt;/span&gt;것은&lt;span&gt; &lt;/span&gt;반대편에&lt;span&gt; &lt;/span&gt;서는&lt;span&gt; &lt;/span&gt;사람이&lt;span&gt; &lt;/span&gt;생길&lt;span&gt; 수 밖에 &lt;/span&gt;없습니다&lt;span&gt;. &lt;/span&gt;그렇다고&lt;span&gt; &lt;/span&gt;반대&lt;span&gt; &lt;/span&gt;편에&lt;span&gt; &lt;/span&gt;있는&lt;span&gt; &lt;/span&gt;사람이&lt;span&gt; 잘못되었다는것은 &lt;/span&gt;아니고&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그들의&lt;span&gt; &lt;/span&gt;시각에서&lt;span&gt; &lt;/span&gt;보면&lt;span&gt; 어느정도 &lt;/span&gt;납득이&lt;span&gt; &lt;/span&gt;되는&lt;span&gt; &lt;/span&gt;타당한&lt;span&gt; &lt;/span&gt;근거가&lt;span&gt; &lt;/span&gt;있다는&lt;span&gt; &lt;/span&gt;것입니다&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자&lt;span&gt; &lt;/span&gt;그럼&lt;span&gt; &lt;/span&gt;그들의&lt;span&gt; &lt;/span&gt;시각에서&lt;span&gt; &lt;/span&gt;보는&lt;span&gt; Getx&lt;/span&gt;의&lt;span&gt; &lt;/span&gt;문제점들을&lt;span&gt; &lt;/span&gt;한번&lt;span&gt; &lt;/span&gt;같이&lt;span&gt; 살펴 보도록 &lt;/span&gt;하겠습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;첫 번째. 도큐먼트가 불편하다&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Desktop - 5.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmtAAL/btrSAwNDXXu/VFoWGfCIkaR552qNzb76A0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmtAAL/btrSAwNDXXu/VFoWGfCIkaR552qNzb76A0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmtAAL/btrSAwNDXXu/VFoWGfCIkaR552qNzb76A0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmtAAL%2FbtrSAwNDXXu%2FVFoWGfCIkaR552qNzb76A0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;1024&quot; data-filename=&quot;Desktop - 5.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은저&lt;span&gt; &lt;/span&gt;역시&lt;span&gt; &lt;/span&gt;공감하는&lt;span&gt; 바 입니다. &lt;/span&gt;요즘&lt;span&gt; &lt;/span&gt;도큐먼트들은&lt;span&gt; &lt;/span&gt;친절하고&lt;span&gt; &lt;/span&gt;가독성이&lt;span&gt; &lt;/span&gt;좋게&lt;span&gt; &lt;/span&gt;잘&lt;span&gt; 정리 되어 &lt;/span&gt;많은&lt;span&gt; &lt;/span&gt;개발자들이&lt;span&gt; &lt;/span&gt;학습하기&lt;span&gt; &lt;/span&gt;편리하게&lt;span&gt; &lt;/span&gt;되어있습니다&lt;span&gt;.&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;좋은&lt;span&gt; &lt;/span&gt;가이드를&lt;span&gt; &lt;/span&gt;제시하면서&lt;span&gt; &lt;/span&gt;말이죠&lt;span&gt;, &lt;/span&gt;그에&lt;span&gt; &lt;/span&gt;비해&lt;span&gt; Getx&lt;/span&gt;는&lt;span&gt; &lt;/span&gt;구리다고&lt;span&gt; &lt;/span&gt;볼&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. &lt;/span&gt;아마&lt;span&gt; &lt;/span&gt;공감하시는&lt;span&gt; &lt;/span&gt;분들이&lt;span&gt; &lt;/span&gt;계실&lt;span&gt; &lt;/span&gt;것이라&lt;span&gt; &lt;/span&gt;생각됩니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자 중에는도큐먼트를&lt;span&gt; &lt;/span&gt;보고&lt;span&gt; &lt;/span&gt;개발하는&lt;span&gt; &lt;/span&gt;사람들이&lt;span&gt; &lt;/span&gt;많은데&lt;span&gt; Getx&lt;/span&gt;의&lt;span&gt; document&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;보면&lt;span&gt; &lt;/span&gt;학습하고&lt;span&gt; &lt;/span&gt;싶지&lt;span&gt; &lt;/span&gt;않아&lt;span&gt; &lt;/span&gt;질&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있겠다&lt;span&gt; &lt;/span&gt;싶습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저&lt;span&gt; &lt;/span&gt;역시&lt;span&gt; &lt;/span&gt;처음&lt;span&gt; Getx&lt;/span&gt;가&lt;span&gt; &lt;/span&gt;좋다고&lt;span&gt; &lt;/span&gt;하니까&lt;span&gt; &lt;/span&gt;한번&lt;span&gt; &lt;/span&gt;학습해볼까&lt;span&gt; &lt;/span&gt;싶어&lt;span&gt; &lt;/span&gt;도큐먼트를&lt;span&gt; &lt;/span&gt;열어봤는데&lt;span&gt; &lt;/span&gt;쉽게&lt;span&gt; 읽혀지지 &lt;/span&gt;않더라고요&lt;span&gt; ;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Desktop - 6.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3roHl/btrSCsDJH9x/OnkmMBjbw9AemHDwKZjlh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3roHl/btrSCsDJH9x/OnkmMBjbw9AemHDwKZjlh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3roHl/btrSCsDJH9x/OnkmMBjbw9AemHDwKZjlh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3roHl%2FbtrSCsDJH9x%2FOnkmMBjbw9AemHDwKZjlh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;1024&quot; data-filename=&quot;Desktop - 6.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Github&lt;/span&gt;만&lt;span&gt; &lt;/span&gt;가서&lt;span&gt; &lt;/span&gt;봐도&lt;span&gt; &lt;/span&gt;이슈가&lt;span&gt; &lt;/span&gt;다른&lt;span&gt; &lt;/span&gt;라이브러리에&lt;span&gt; &lt;/span&gt;비해&lt;span&gt; &lt;/span&gt;상당히&lt;span&gt; &lt;/span&gt;많다고&lt;span&gt; &lt;/span&gt;볼&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. 이부분은 &lt;/span&gt;사실&lt;span&gt; &lt;/span&gt;많은&lt;span&gt; &lt;/span&gt;관심을&lt;span&gt; &lt;/span&gt;받고&lt;span&gt; &lt;/span&gt;있고&lt;span&gt; &lt;/span&gt;많이들&lt;span&gt; &lt;/span&gt;사용하기&lt;span&gt; &lt;/span&gt;때문일&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있는데요&lt;span&gt;. &lt;/span&gt;등록된&lt;span&gt; &lt;/span&gt;이슈를&lt;span&gt; &lt;/span&gt;다&lt;span&gt; 살펴 볼 &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;없어&lt;span&gt; &lt;/span&gt;추측하겠지만&lt;span&gt;, &lt;/span&gt;크리티컬&lt;span&gt; &lt;/span&gt;이슈도&lt;span&gt; &lt;/span&gt;있겠고&lt;span&gt;, &lt;/span&gt;사용방법을&lt;span&gt; &lt;/span&gt;잘&lt;span&gt; &lt;/span&gt;몰라&lt;span&gt; &lt;/span&gt;질문을&lt;span&gt; &lt;/span&gt;남기거나&lt;span&gt; , &lt;/span&gt;개발자&lt;span&gt; &lt;/span&gt;개개인의&lt;span&gt; 개발철학이 &lt;/span&gt;맞지&lt;span&gt; &lt;/span&gt;않아&lt;span&gt; &lt;/span&gt;개선하고&lt;span&gt; &lt;/span&gt;싶은&lt;span&gt; &lt;/span&gt;마음에&lt;span&gt; &lt;/span&gt;요청을&lt;span&gt; &lt;/span&gt;하는&lt;span&gt; &lt;/span&gt;분들도&lt;span&gt; &lt;/span&gt;있을&lt;span&gt; &lt;/span&gt;것입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Getx&lt;/span&gt;를&lt;span&gt; 만든게 &lt;/span&gt;회사나&lt;span&gt; &lt;/span&gt;팀이&lt;span&gt; &lt;/span&gt;아닌&lt;span&gt; &lt;/span&gt;개인으로&lt;span&gt; &lt;/span&gt;알고&lt;span&gt; &lt;/span&gt;있는데&lt;span&gt;, &lt;/span&gt;아무래도&lt;span&gt; &lt;/span&gt;많은&lt;span&gt; &lt;/span&gt;개발자분들의&lt;span&gt; &lt;/span&gt;이슈를&lt;span&gt; &lt;/span&gt;대응하기란&lt;span&gt; &lt;/span&gt;쉽지&lt;span&gt; &lt;/span&gt;않겠다는&lt;span&gt; &lt;/span&gt;생각이&lt;span&gt; &lt;/span&gt;듭니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고&lt;span&gt; jonataslaw &lt;/span&gt;이분은&lt;span&gt; &lt;/span&gt;변호사&lt;span&gt; &lt;/span&gt;이자&lt;span&gt; &lt;/span&gt;개발자라고&lt;span&gt; github&lt;/span&gt;에서&lt;span&gt; &lt;/span&gt;소개하고&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. &lt;/span&gt;물론&lt;span&gt; &lt;/span&gt;지금은&lt;span&gt; &lt;/span&gt;아이리스&lt;span&gt; &lt;/span&gt;개발&lt;span&gt; &lt;/span&gt;부사장으로&lt;span&gt; &lt;/span&gt;있다고&lt;span&gt; &lt;/span&gt;합니다&lt;span&gt;. Getx&lt;/span&gt;는&lt;span&gt; &lt;/span&gt;메인&lt;span&gt; &lt;/span&gt;업무가&lt;span&gt; &lt;/span&gt;아닐&lt;span&gt; &lt;/span&gt;수&lt;span&gt; 있기때문에 이슈대응이 &lt;/span&gt;느릴&lt;span&gt; 수 밖에 &lt;/span&gt;없는&lt;span&gt; &lt;/span&gt;것이죠&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;그런점에서 &lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;큰 단점&lt;/b&gt;&lt;/span&gt;이라고&lt;span&gt; &lt;/span&gt;볼&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있겠습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;세 번째.&amp;nbsp; Getx가 상태 관리 외에 많은 부분을 담당하고 있다&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Desktop - 7.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwPBhB/btrSCrY5Wsr/uBXF84RLTkr81trV279YO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwPBhB/btrSCrY5Wsr/uBXF84RLTkr81trV279YO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwPBhB/btrSCrY5Wsr/uBXF84RLTkr81trV279YO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwPBhB%2FbtrSCrY5Wsr%2FuBXF84RLTkr81trV279YO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;1024&quot; data-filename=&quot;Desktop - 7.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은공감되는&lt;span&gt; &lt;/span&gt;부분이지만&lt;span&gt; &lt;/span&gt;한편으로는&lt;span&gt; &lt;/span&gt;공감하지&lt;span&gt; &lt;/span&gt;않는&lt;span&gt; &lt;/span&gt;부분이기도&lt;span&gt; &lt;/span&gt;합니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Getx&lt;span&gt;를 상태관리 라이브러리라고&lt;/span&gt; &lt;span&gt;생각한다면&lt;/span&gt; &lt;span&gt;문제가&lt;/span&gt; &lt;span&gt;됩니다&lt;/span&gt;. &lt;span&gt;하지만&lt;/span&gt; Getx&lt;span&gt;는 상태관리 라이브러리가&lt;/span&gt; &lt;span&gt;아닙니다&lt;/span&gt;.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Getx is an extra-light and powerful solution for Flutter&lt;br /&gt;&amp;nbsp;- Github 소개 중.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉&lt;span&gt;, Getx&lt;/span&gt;는&lt;span&gt; 플러터개발을 &lt;/span&gt;위한&lt;span&gt; &lt;/span&gt;매우&lt;span&gt; &lt;/span&gt;경량화된&lt;span&gt; &lt;/span&gt;강력한&lt;span&gt; 솔루션이라는&lt;/span&gt; 것이죠. 그런 점에서 본다면 많은&lt;span&gt; &lt;/span&gt;부분을&lt;span&gt; 담당하는것이&lt;/span&gt; 당연한 부분입니다. 실제로도 기존 flutter 코드에 비해 경량 하면서도 편리한 유틸도 존재하지요. 근데&lt;span&gt; Getx&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;단순히&lt;span&gt; 상태관리를 &lt;/span&gt;하는&lt;span&gt; &lt;/span&gt;라이브러리라고&lt;span&gt; &lt;/span&gt;생각하는&lt;span&gt; &lt;/span&gt;분들에게는&lt;span&gt; &lt;/span&gt;이 부분도&lt;span&gt;&amp;nbsp;&lt;/span&gt;단점으로&lt;span&gt; &lt;/span&gt;생각될&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;네 번째.&amp;nbsp; 특정 패턴 없이 자유롭게 개발이 가능하다&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Desktop - 8.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BEUqm/btrSBCUnRNo/sZ7KyzAePrEsfW9tO3tby0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BEUqm/btrSBCUnRNo/sZ7KyzAePrEsfW9tO3tby0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BEUqm/btrSBCUnRNo/sZ7KyzAePrEsfW9tO3tby0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBEUqm%2FbtrSBCUnRNo%2FsZ7KyzAePrEsfW9tO3tby0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;1024&quot; data-filename=&quot;Desktop - 8.png&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠른&lt;span&gt; &lt;/span&gt;개발을&lt;span&gt; &lt;/span&gt;위해서는&lt;span&gt; &lt;/span&gt;손쉽고&lt;span&gt; &lt;/span&gt;빠르게&lt;span&gt; &lt;/span&gt;접근할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; 있는게 &lt;/span&gt;최고라고&lt;span&gt; &lt;/span&gt;볼&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;. &lt;/span&gt;하지만&lt;span&gt;, &lt;/span&gt;그것은&lt;span&gt; &lt;/span&gt;어디까지나&lt;span&gt; &lt;/span&gt;프로토&lt;span&gt; &lt;/span&gt;타입을&lt;span&gt; 만들때의 &lt;/span&gt;상황일&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;지속적으로&lt;span&gt; &lt;/span&gt;관리를&lt;span&gt; &lt;/span&gt;해야&lt;span&gt; &lt;/span&gt;하고&lt;span&gt; &lt;/span&gt;규모가&lt;span&gt; &lt;/span&gt;큰&lt;span&gt; &lt;/span&gt;프로젝트에서는&lt;span&gt; &lt;/span&gt;자유롭게&lt;span&gt; &lt;/span&gt;개발이&lt;span&gt; &lt;/span&gt;가능한&lt;span&gt; &lt;/span&gt;것은&lt;span&gt; &lt;/span&gt;다양한&lt;span&gt; &lt;/span&gt;방식이&lt;span&gt; &lt;/span&gt;산재되어&lt;span&gt; &lt;/span&gt;유지보수가&lt;span&gt; &lt;/span&gt;어렵게&lt;span&gt; &lt;/span&gt;되는&lt;span&gt; &lt;/span&gt;상황을&lt;span&gt; &lt;/span&gt;만들어낼&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그래서&lt;span&gt; &lt;/span&gt;어렵지만&lt;span&gt; &lt;/span&gt;개발&lt;span&gt; &lt;/span&gt;패턴이&lt;span&gt; &lt;/span&gt;존재하는&lt;span&gt; &lt;/span&gt;것이고&lt;span&gt; &lt;/span&gt;그&lt;span&gt; &lt;/span&gt;룰&lt;span&gt; &lt;/span&gt;베이스로&lt;span&gt; &lt;/span&gt;개발되면&lt;span&gt; &lt;/span&gt;장기적으로&lt;span&gt; &lt;/span&gt;관리하는&lt;span&gt; &lt;/span&gt;측면으로도&lt;span&gt; &lt;/span&gt;좋다고&lt;span&gt; &lt;/span&gt;볼&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있습니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;그런점에서 Getx&lt;/span&gt;는&lt;span&gt; &lt;/span&gt;공식적인&lt;span&gt; &lt;/span&gt;규칙&lt;span&gt;? &lt;/span&gt;패턴이&lt;span&gt; &lt;/span&gt;존재하지&lt;span&gt; &lt;/span&gt;않아서&lt;span&gt; Getx&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;사용하는&lt;span&gt; &lt;/span&gt;사람마다&lt;span&gt; &lt;/span&gt;저마다의&lt;span&gt; &lt;/span&gt;방식으로&lt;span&gt; Getx&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;사용하고&lt;span&gt; &lt;/span&gt;있을&lt;span&gt; &lt;/span&gt;것입니다&lt;span&gt;.&amp;nbsp;이부분은 &lt;/span&gt;장점이자&lt;span&gt; &lt;/span&gt;단점이&lt;span&gt; &lt;/span&gt;되는&lt;span&gt; &lt;/span&gt;부분입니다&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;개발하는 남자가 생각하는 Getx&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태 관리 라이브러리를 Getx 외에 하나 정도는 더 알아두는 게 좋을 것 같습니다. 대표적으로 bloc이라던지 요즘 뜨고 있는 riverpod 등 프로젝트에 맞게 적절하게 사용하면 좋을 것 같다는 생각이 듭니다. Getx는 정말 강력한 것은 빠르고 경량화하게 개발을 할 수 있다는 점에서 정말 강점이 있고 유지보스 측면에서는 bloc이나 타 라이브러리가 좋을 수 있습니다.&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;댓글로 알려주세요 ~!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발일지/flutter</category>
      <category>Flutter</category>
      <category>getX</category>
      <category>Getx단점</category>
      <category>Getx에 대한 나의 생각</category>
      <category>개남</category>
      <category>개발하는남자</category>
      <category>상태관리</category>
      <category>플러터</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/246</guid>
      <comments>https://sudarlife.tistory.com/entry/%ED%94%8C%EB%9F%AC%ED%84%B0-2022%EB%85%84-12%EC%9B%94-%ED%98%84%EC%8B%9C%EC%A0%90%EC%9D%98-Getx%EB%8A%94-%EC%96%B4%EB%96%A4%EA%B0%80#entry246comment</comments>
      <pubDate>Fri, 2 Dec 2022 00:12:12 +0900</pubDate>
    </item>
    <item>
      <title>[ Flutter / 플러터 ] SQFlite 문서 정리 및 예제로 마스터해보자.</title>
      <link>https://sudarlife.tistory.com/entry/Flutter-%ED%94%8C%EB%9F%AC%ED%84%B0-SQFlite-%EB%AC%B8%EC%84%9C-%EC%A0%95%EB%A6%AC-%EB%B0%8F-%EC%98%88%EC%A0%9C%EB%A1%9C-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%B4%EB%B3%B4%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;네 여러분 안녕하세요 개발하는남자 개남입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 다뤄 볼 내용은 SQFlite에 대해 정리해보려고 합니다. pub.dev에 문서가 정리되어있지만 sqflite사용에 필수적인 내용만을 추려서 간략하게 정리하면 좋을 것 같다는 생각에 이렇게 포스팅하게 되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumb.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLrQG5/btrOr9Oq2mZ/Bs9RhvwkHM1II3Tv284Yk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLrQG5/btrOr9Oq2mZ/Bs9RhvwkHM1II3Tv284Yk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLrQG5/btrOr9Oq2mZ/Bs9RhvwkHM1II3Tv284Yk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLrQG5%2FbtrOr9Oq2mZ%2FBs9RhvwkHM1II3Tv284Yk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;thumb.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;살펴볼 내용&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;sqflite란?&lt;/li&gt;
&lt;li&gt;&amp;nbsp;sqflite 장점 / 단점&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;sqflite 사용 + 열고 / 닫고&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;sqflite 테이블 생성 스키마&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;sqflite 테이블 버전 관리&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;sqflite CRUD 사용&lt;/li&gt;
&lt;li&gt;&amp;nbsp;sqflite transaction 관리&lt;/li&gt;
&lt;li&gt;&amp;nbsp;sqflite batch&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;sqflite 지원되는 Type종류&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;SQFlite란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQFlite는 SQlite를 플러터에서도 사용할 수 있도록 지원하는 플러그인입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;SQLite는 MySQL이나 PostgreSQL과 같은 관계형 데이터베이스 관리 시스템입니다. 하지만 다른 것이 있다면 서버용이 아닌 클라이언트 사이드 데이터 관리 시스템입니다. 클라이언트 사이드 시스템이기 때문에 비교적 가벼운 형태로 관리되고 있습니다.&amp;nbsp;&lt;br /&gt;&amp;lt;위키백과&amp;gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지원되는 플렛폼은 Android , iOS , MacOS만 지원되고 있으며 Linux와 Window의 경우 SQflite_common_ffi 라이브러리를 통해 지원되고 있다고 합니다. Web의 경우 아쉽지만 지원되지 않습니다.&lt;/p&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;SQFlite 장점/단점&lt;/b&gt;&lt;/h3&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;&amp;nbsp;- 로컬 파일 기반 DB로 네트워크 사용이 필요없이 개발이 가능하기 때문에 서버 비용이나 네트워크 비용을 걱정할 필요가 없다.&lt;/p&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;- 쿼리를 지원하여 좀더 복잡한 데이터를 조회 sort 등을 할 수 있다.&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;&amp;nbsp;- 다른 로컬 기반의 데이터 저장 라이브러리에 비해 속도가 떨어진다.( Hive , Shared Preference ... )&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&lt;span&gt; Schema , rawQuery 사용시 문자 형태로 작성해야 하는 불편함이 있다. (오탈자 조심)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sqflite 사용 + 열고 / 닫고&lt;/b&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* sqflite는 Android / iOS에 별도의 환경설정이 필요 없이 바로 라이브러리만 Import 만 해주면 사용할 수 있습니다.&lt;/p&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;플러터 cli 명령어로 sqflite 라이브러리 설치&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1665553006866&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ flutter pub add sqflite&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 특정 버전을 pubspec.yaml 파일의 dependencies 항목에 추가하셔도 상관없습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1665553121404&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies:
  flutter:
    sdk: flutter

  sqflite: ^2.0.3+1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Database 열기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sqflite는 파일 기반의 데이터베이스이기 때문에 데이터 베이스 파일을 만들어야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일이 존재하지 않아도 괜찮습니다. 없으면 자동으로 만들어줍니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665558209109&quot; class=&quot;reasonml&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var db = await openDatabase('my_db.db');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Database 닫기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식문서에 따르면 열린 Database를 닫을 필요는 없다고 합니다. 이유는 앱이 종료되는 시점에 같이 종료되기 때문이라고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼에도 데이터 접근을 해제하려고 한다면 close함수를 통해 해제할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665558578164&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;await db.close();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;존재하는 DB를 사용하고 싶을 때&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB초기화 시점에 존재하는 DB가 있다면 해당 db파일로 초기화를 진행할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. assets폴더 하위로 원하는 위치에 db파일을 위치시킨다.&lt;/p&gt;
&lt;pre id=&quot;code_1665559247655&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;assets/examples.db
또는
assets/dbs/examples.db&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. pubspec.yaml파일에 assets 사용할 수 있도록 경로 설정&lt;/p&gt;
&lt;pre id=&quot;code_1665559307219&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flutter:
  assets:
    - assets/example.db
    또는
    - assets/dbs/example.db&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. database 위치시킬 경로 확인&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665559389836&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var databasesPath = await getDatabasesPath();
var path = join(databasesPath, &quot;demo_asset_example.db&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. database 파일이 존재 여부 확인 후 존재하지 않는 최초 초기화 시점에서만 assets에 위치시킨 db파일을 카피한다.&lt;/p&gt;
&lt;pre id=&quot;code_1665559592750&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var exists = await databaseExists(path);

if (!exists) {
	try {
        await Directory(dirname(path)).create(recursive: true);
	} catch (_) {}
    ByteData data = await rootBundle.load(join(&quot;assets&quot;, &quot;example.db&quot;));
    List&amp;lt;int&amp;gt; bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
    await File(path).writeAsBytes(bytes, flush: true);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. database 열기&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665559611114&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var db = await openDatabase(path, readOnly: 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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sqflite 테이블 생성 스키마&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;openDatabase를 할 때에 option값으로 &lt;span style=&quot;background-color: #f3c000;&quot;&gt;onCreate&lt;/span&gt; 함수를 사용할 수 있습니다. onCreate 함수 외에도 &lt;span style=&quot;background-color: #f3c000;&quot;&gt;version&lt;/span&gt;, &lt;span style=&quot;background-color: #f3c000;&quot;&gt;onConfigure&lt;/span&gt;, &lt;span style=&quot;background-color: #f3c000;&quot;&gt;onUpgrade&lt;/span&gt;, &lt;span style=&quot;background-color: #f3c000;&quot;&gt;onDowngrade를&lt;/span&gt; 사용할 수 있습니다. (version 관리 항목에서 살펴보겠습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;openDatabase시 데이터베이스가 존재하지 않으면 onCreate함수가 호출됩니다. 이때에 원하는 DB table들을 만들어주면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1665560239130&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'sample.db');
var db = await openDatabase(path,
  version: 1,
  onCreate: _onCreate);
  
_onCreate(Database db, int version) async {
  await db.execute(
    &quot;CREATE TABLE Sample (id INTEGER PRIMARY KEY AUTOINCREMENT, value TEXT NOT NULL)&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;db.excute 함수로 String 작성한 Schema로 테이블이 생성되며, sql Schema작성법을 따르면 됩니다. (대문자 소문자 상관은 없지만 대게 Schema작성 시 대문자로 사용합니다. 단, 테이블명과 칼럼 명의 경우 원하는 방식으로 작성하셔도 됩니다.&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;앱이 정상적으로 실행되면 문제없이 테이블 세팅이 되었다고 생각하면 되지만 직접 눈으로 확인하고 싶을 때는 만들어진 db파일을 직접 열어보는 것입니다.&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;&amp;nbsp;- 에뮬레이터 사용한 경우 db파일 체크 하기 @developerelen 님 블로그 참조&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1665561818199&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;[Flutter] sqflite database file 찾기&quot; data-og-description=&quot;sqflite 라이브러리를 사용하여 database를 CRUD 한 후, 터미널로 .db 파일을 읽어서 정말 파일에 저장이 되었는지 확인하는 방법입니다.openDatabase 메소드로 DB를 오픈할 때 사용한 주소를 로그에 찍습&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@developerelen/Flutter-sqflite-database-file-%EC%B0%BE%EA%B8%B0&quot; data-og-url=&quot;https://velog.io/@developerelen/Flutter-sqflite-database-file-찾기&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/i4BQ4/hyP8es1g34/xrSr9bP8S6As2fwmGEkPeK/img.png?width=376&amp;amp;height=114&amp;amp;face=0_0_376_114,https://scrap.kakaocdn.net/dn/c1VDs3/hyP771JQw1/hmO9Fsl8VoFrte37AARkj1/img.png?width=376&amp;amp;height=114&amp;amp;face=0_0_376_114,https://scrap.kakaocdn.net/dn/gxAHn/hyP8efunlT/HVI3M11KCYLzXVUzR212TK/img.jpg?width=1440&amp;amp;height=1435&amp;amp;face=409_616_973_1232&quot;&gt;&lt;a href=&quot;https://velog.io/@developerelen/Flutter-sqflite-database-file-%EC%B0%BE%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@developerelen/Flutter-sqflite-database-file-%EC%B0%BE%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/i4BQ4/hyP8es1g34/xrSr9bP8S6As2fwmGEkPeK/img.png?width=376&amp;amp;height=114&amp;amp;face=0_0_376_114,https://scrap.kakaocdn.net/dn/c1VDs3/hyP771JQw1/hmO9Fsl8VoFrte37AARkj1/img.png?width=376&amp;amp;height=114&amp;amp;face=0_0_376_114,https://scrap.kakaocdn.net/dn/gxAHn/hyP8efunlT/HVI3M11KCYLzXVUzR212TK/img.jpg?width=1440&amp;amp;height=1435&amp;amp;face=409_616_973_1232');&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;[Flutter] sqflite database file 찾기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;sqflite 라이브러리를 사용하여 database를 CRUD 한 후, 터미널로 .db 파일을 읽어서 정말 파일에 저장이 되었는지 확인하는 방법입니다.openDatabase 메소드로 DB를 오픈할 때 사용한 주소를 로그에 찍습&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;&lt;b&gt;&amp;nbsp;- 물리 디바이스를 사용한 경우 db파일 체크 하기 @developerelen 님 블로그 참조&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1665561874209&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;[Flutter] 앱에서 다운받은 파일 adb로 복사하기&quot; data-og-description=&quot;adb(Android Debug Bridge)는 기기와 통신할 수 있는 다목적 명령줄 도구입니다. adb 명령어는 앱의 설치 및 디버깅과 같은 다양한 기기 작업에 도움이 되며, 기기에서 다양한 명령어를 실행하는 데 사용&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@developerelen/Flutter-%EC%95%B1%EC%97%90%EC%84%9C-%EB%8B%A4%EC%9A%B4%EB%B0%9B%EC%9D%80-%ED%8C%8C%EC%9D%BC-adb%EB%A1%9C-%EB%B3%B5%EC%82%AC%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://velog.io/@developerelen/Flutter-앱에서-다운받은-파일-adb로-복사하기&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cxUg4m/hyP8cPwoIa/0mKTiERLI2SMDRh6xJiHK0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/q7Myp/hyP78zzBbN/pxR6ZmytD6RtcrZjxAiqz1/img.jpg?width=1440&amp;amp;height=1435&amp;amp;face=409_616_973_1232&quot;&gt;&lt;a href=&quot;https://velog.io/@developerelen/Flutter-%EC%95%B1%EC%97%90%EC%84%9C-%EB%8B%A4%EC%9A%B4%EB%B0%9B%EC%9D%80-%ED%8C%8C%EC%9D%BC-adb%EB%A1%9C-%EB%B3%B5%EC%82%AC%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@developerelen/Flutter-%EC%95%B1%EC%97%90%EC%84%9C-%EB%8B%A4%EC%9A%B4%EB%B0%9B%EC%9D%80-%ED%8C%8C%EC%9D%BC-adb%EB%A1%9C-%EB%B3%B5%EC%82%AC%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cxUg4m/hyP8cPwoIa/0mKTiERLI2SMDRh6xJiHK0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/q7Myp/hyP78zzBbN/pxR6ZmytD6RtcrZjxAiqz1/img.jpg?width=1440&amp;amp;height=1435&amp;amp;face=409_616_973_1232');&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;[Flutter] 앱에서 다운받은 파일 adb로 복사하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;adb(Android Debug Bridge)는 기기와 통신할 수 있는 다목적 명령줄 도구입니다. adb 명령어는 앱의 설치 및 디버깅과 같은 다양한 기기 작업에 도움이 되며, 기기에서 다양한 명령어를 실행하는 데 사용&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;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sqflite 테이블 버전 관리&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 관리가 필요한 이유는 서버를 통해 데이터를 받는 방식이 아닌 로컬 파일 기반의 데이터이기 때문에 앱의 버전에 따라 데이터 구조가 변화될 텐데 그럴 때 DB Schema도 업그래드가 필요합니다. 때로는 다운그래드도 필요할테고요, 그럴때 사용하는 것이 버전입니다. 버전에 따라 onUpgrade 또는 onDowngrade가 호출되게 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1665562472075&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var db = await openDatabase(
	path, 
    version: 1, 
    onCreate: _onCreate ,
    onUpgrade: _onUpgrade , 
    onDowngrade: _onDowngrade
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현 version 숫자가 이전 버전보다 높으면 onUpgrade가 호출되고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현 version 숫자가 이전 버전보다 낮으면 onDowngrade가 호출됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서에 따르면 웬만하면, 버전을 높이면서 작업하라고 합니다. 즉, downgrade는 웬만해서 사용하지 말아야 한다는 뜻으로 이해했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;테이블 버전 관리 테스트를 위해 시나리오를 준비했습니다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;User 정보를 저장할 table을 만들어줍니다. 유저에 정보로는 처음에는 이름과, 나이, id 이 정도만 저장합니다.&lt;/li&gt;
&lt;li&gt;앱을 실행하여 임의의 User정보를 저장합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;시간이 지났다고 가정하고, User정보에 닉네임 데이터를 추가적으로 넣는 것으로 기획이 변경되었습니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;onUpgrade 함수를 사용하지 않고 데이터를 넣으려고 했을 때 어떤 현상이 발생되는지 확인.&lt;/li&gt;
&lt;li&gt;onUpgrade 함수를 추가했지만 version을 변경하지 않고 사용한 경우&lt;/li&gt;
&lt;li&gt;onUpgrade 함수를 통해 Schema 업데이트 후 데이터를 넣었을 때 현상 확인.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&lt;/p&gt;
&lt;pre id=&quot;code_1665563539514&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'user.db');
var db = await openDatabase(path, version: 1, onCreate: _onCreate);
  
  
_onCreate(Database db, int version) async {
  await db.execute('''
  	CREATE TABLE user (
    	id INTEGER PRIMARY KEY AUTOINCREMENT, 
    	name TEXT NOT NULL UNIQUE, 
        age INTEGER NOT NULL)
    '''
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;name에 unique 옵션을 넣어 실행할 때마다 중복 저장되지 않도록 테이블을 생성했습니다.&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;2.&lt;/p&gt;
&lt;pre id=&quot;code_1665563646883&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  await Future.delayed(const Duration(milliseconds: 3000));
  var id = await db.insert('user', {'name': '김성덕', 'age': 19});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딜레이 3초 후에 사용자를 insert 해줬습니다.&amp;nbsp; 정상적으로 앱이 실행이 되었고 , Unique 가 정상적으로 되는지 확인하기 위해&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부로 동일 데이터를 insert 해봤습니다. 다음과 같은 오류 메시지를 받았습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1665563742465&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: DatabaseException(UNIQUE constraint failed: user.name (code 2067 SQLITE_CONSTRAINT_UNIQUE[2067])) sql 'INSERT INTO user (name, age) VALUES (?, ?)' args [김성덕, 19]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665564071304&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;await Future.delayed(const Duration(milliseconds: 3000));
// var id = await db.insert('user', {'name': '김성덕', 'age': 19});
var id = await db.update(
    'user',
    {'nickname': '개발하는남자'},
    where: 'name = ?',
    whereArgs: ['김성덕'],
);
print(id);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;insert문을 주석처리하고 update 문으로 변경했습니다. 이때, 아직 Schema 변경 전으로 sql db에는 nickname 칼럼이 존재하지 않는 상태입니다.&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;4.&lt;/p&gt;
&lt;pre id=&quot;code_1665564211372&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;no such column: nickname (code 1 SQLITE_ERROR[1]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행결과 no such column 오류로 인해 데이터 업데이트가 실패되었습니다. (원하는 결과를 얻었습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5.&lt;/p&gt;
&lt;pre id=&quot;code_1665564652674&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var db = await openDatabase(
    path,
    version: 1,
    onCreate: _onCreate,
    onUpgrade: _onUpgrade,
);
  
  
_onUpgrade(Database db, int oldVersion, int newVersion) async {
  var batch = db.batch();
  if (oldVersion == 1) {
    batch.execute('ALTER TABLE user ADD nickname TEXT');
  }
  await batch.commit();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업그래드함수를 추가했지만 버전이 바꾸지 않았습니다 결과는 4번과 같이 오류 메시지를 받았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6.&lt;/p&gt;
&lt;pre id=&quot;code_1665564910364&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  var db = await openDatabase(
    path,
    version: 2,
    onCreate: _onCreate,
    onUpgrade: _onUpgrade,
  );&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 이상 없이 업데이트됨을 확인하였습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-10-12 오후 5.57.57.png&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o1iAm/btrOqFAA48i/gHVVVDxoWLnNgNbsfBSTK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o1iAm/btrOqFAA48i/gHVVVDxoWLnNgNbsfBSTK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o1iAm/btrOqFAA48i/gHVVVDxoWLnNgNbsfBSTK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo1iAm%2FbtrOqFAA48i%2FgHVVVDxoWLnNgNbsfBSTK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;518&quot; height=&quot;446&quot; data-filename=&quot;스크린샷 2022-10-12 오후 5.57.57.png&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 더 디테일한 version관리 예제는 &lt;a href=&quot;https://github.com/tekartik/sqflite/blob/master/sqflite/doc/migration_example.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;링크&lt;/b&gt;&lt;/a&gt;를 통해서 확인해보세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sqflite CRUD 사용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단 sqflite CRUD이며 별도의 ui와 model 설계 없이 사용방법만 정리하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;model과 ui를 통해 crud를 활용하는 것은 제 유튜브에&lt;a href=&quot;https://www.youtube.com/watch?v=DZ2ecTxPB7o&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; [Flutter] 로컬 데이터 관리 sqflite로 손쉽게 처리 하자&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;- Create&lt;/p&gt;
&lt;pre id=&quot;code_1665582421999&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// var &amp;lt;생성후 ID값&amp;gt; = await db.insert( &amp;lt;테이블명&amp;gt; , &amp;lt;저장시킬 데이터 (Map&amp;lt;String,Object&amp;gt; 타입)&amp;gt; );
// 방식 1
var id = await db.insert('user', {'name': '김성덕', 'age': 19});

// 방식 2
var rawId = await db.rawInsert(
      'INSERT INTO user(name, age, nickname) VALUES(&quot;개남&quot;, 22, &quot;개발하는사람&quot;)'
);

// 방식 3
var rawId1 = await db.rawInsert(
      'INSERT INTO user(name, age, nickname) VALUES(?,?,?)',
      [&quot;개남1&quot;, 24, &quot;개발하는사람2&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;- Read&lt;/p&gt;
&lt;pre id=&quot;code_1665582661445&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// var &amp;lt;조회된 데이터&amp;gt; = await db.query(&amp;lt;테이블명&amp;gt; , where : &amp;lt;조건식&amp;gt; , whereArgs : &amp;lt;조건식에 비교할 값(Array)&amp;gt;)
// 방식 1
var user = await db.query('user', where: 'name = ?', whereArgs: ['김성덕']);

// 방식 2
var rawUser = await db.rawQuery('SELECT * FROM user WHERE name=&quot;개남&quot;');

// 방식 3
var rawUser1 = await db.rawQuery('SELECT * FROM user WHERE name=?', ['개남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;- Update&lt;/p&gt;
&lt;pre id=&quot;code_1665583665414&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 방식 1
var id = await db.update(
    'user',
    {'nickname': '개발하는남자'},
    where: 'name = ?',
    whereArgs: ['김성덕'],
);

// 방식 2
var updateID = await db.rawUpdate(
      'UPDATE user SET name = &quot;개남개남&quot;, age = 34 WHERE name = &quot;개남&quot;'
);

// 방식 3
var updateID = await db.rawUpdate(
      'UPDATE user SET name = ?, age = ? WHERE name = ?', ['개남개남', 34, '개남']
);&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;- Delete&lt;/p&gt;
&lt;pre id=&quot;code_1665583935692&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 방식 1
var isDeleted = await db.delete('user', where: 'name = ?', whereArgs: ['개남개남']);

// 방식 2
var isDeleted1 = await db.rawDelete('DELETE FROM user WHERE name = &quot;김성덕&quot;');

// 방식 3
var isDeleted2 = await db.rawDelete('DELETE FROM user WHERE name = ?', ['김성덕']);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제 완료 시 return으로 1 값을 값이 없어 삭제가 안되거나 삭제될 수 없을 때 0 값을 return 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sqflite transaction 관리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transaction 은 sql 데이터 베이스뿐 아니라 모든 데이터를 관리하는 시스템에서는 transaction&amp;nbsp; 관리를 해줘야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transaction 은 쉽게 말해 정합성이 깨지는 것을 방지하기 위한 방법? 기능?이라고 생각하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 사용자가 가입 시 포인트를 지급하는 로직이 있다고 가정한다면 사용자 가입과 포인트 등록이라는 두 가지 테이블에 저장을 시켜야 합니다. 사용자 저장 후 포인트 등록을 하려는데 포인트 등록에서 문제가 발생하여 오류가 발생했다고 가정한다면 사용자 가입이 되지 말아야 합니다(물론 이 부분은 서비스의 규칙이 어떠한지에 따라 다르겠지만 여기에서는 가정하겠습니다.)&amp;nbsp; 이럴 때 필요한 것이 Transaction입니다.&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;size18&quot;&gt;&lt;b&gt;시나리오&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;회원 가입으로 데이터 insert&amp;nbsp;&lt;/li&gt;
&lt;li&gt;1초 정도 Delay를 주고 조금 전 저장한 데이터가 잘 들어가 있는지 확인&lt;/li&gt;
&lt;li&gt;강제로 오류를 발생시킴 ( name 값은 unique 값이기 때문에 일부로 동일한 값을 insert 시켜 오류를 발생시킴 )&lt;/li&gt;
&lt;li&gt;오류 후에 2. 번에서 했던 것처럼 조회하여 트렌젝션 처리가 잘 되었는지 확인.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1665584903517&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  try {
    await db.transaction((txn) async {
      await txn.insert('user', {'name': '개남', 'age': 22, 'nickname': '개발하는남자'});
      await Future.delayed(const Duration(milliseconds: 1000));
      var data = await txn.query('user', where: 'name = ?', whereArgs: ['개남']);
      print(data); // 1번 print
      await txn.insert('user', {'name': '개남', 'age': 25, 'nickname': '개남형'});
    });
  } catch (e) {
    print(e);
  }
  var user = await db.query('user', where: 'name = ?', whereArgs: ['개남']);
  print(user); // 2번 print&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 시나리오처럼 진행 시 1번 print에서는 저장된 '개남' 사용자를 찾을 수 있었지만&amp;nbsp; 2번 print에서는 트렌젝션의 결과로 '개남' 사용자를 찾을 수 없었습니다. 정상적으로 처리됨을 확인했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sqflite batch 사용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Batch는 여러 가지 작업들을 그룹화시켜 한 번에 실행 시켜주는 기능을 말합니다. insert / update / delete 등등 한번에 실행하고 싶을때 사용할 수 있으며 commit 과정중 오류가 발생하면 성공된 데이터까지 원복 시켜버립니다. 위에서 다뤄본 transaction과도 유사하다고 볼 수 있는데 다른점이 있다면 transaction의 경우 같은 transaction 영역 안에서는 insert후 조회 및 별도의 작업등을 수행할 수 있는 반면 batch의 경우 작업목록을 정의만 할뿐 commit 전에 데이터를 조회하여 어떤 작업을 하거나 데이터를 변경하거나 할 수 없습니다. 말그대로 Queue와 같이 작업을 쌓아놓고 한번에 처리하되 순차적으로 작업되는 것을 확인하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665621199463&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  var batch = db.batch();
  batch.insert('user', {'name': '배치작업자', 'age': 31, 'nickname': 'batchwWrker'}); //1번
  batch.insert('user', {'name': '배치', 'age': 22, 'nickname': 'batch'});//2번
  batch.delete('user', where: 'name =?', whereArgs: ['배치']);//3번
  batch.update('user', {'name': '배치'}, where: 'name =?', whereArgs: ['배치작업자']);//4번
  await batch.commit();//5번
  
  var rawUser = await db.rawQuery('SELECT * FROM user WHERE name=?', ['배치']);
  print(rawUser);//6번&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;batch가 순차적 실행이라는 것을 확인하기 위해 위 와 같은 시나리오를 만들어봤습니다.&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;size18&quot;&gt;&lt;b&gt;시나리오&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;'1번'과 '2번'으로 사용자 두 명을 저장시킵니다.&lt;/li&gt;
&lt;li&gt;'4번' 작업을 실행하면 배치 작업자 &amp;gt; 배치로 변경되기 때문에 동일 name이 발생하여 오류가 발생될 것입니다. 그 오류를 방지하고자 '3번'작업을 통해 원래 '배치'유저를 제거시켰습니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;'5번'작업이 완료되는 시점에 오류가 발생되지 않음을 확인합니다.&lt;/li&gt;
&lt;li&gt;'6번'작업으로 조회된 '배치'사용자가 기존 '배치 작업자' user임을 확인합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 결과는 예상했던 결과를 얻을 수 있었으며 추가적으로 시나리오 2번의 오류 방지 부분을 빼고 작업할 시 update에서 오류가 발생됨을 확인하였습니다. 즉, 순차적 실행임을 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sqflite 지원되는 Type종류&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sqflite의 경우 지원되는 종류를 알아보기 전에 Table과 Column의 이름으로 사용하면 안 되는 이름을 살펴보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1665622014611&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[
	&quot;add&quot;,&quot;all&quot;,&quot;alter&quot;,&quot;and&quot;,&quot;as&quot;,
    &quot;autoincrement&quot;,&quot;between&quot;,&quot;case&quot;,
    &quot;check&quot;,&quot;collate&quot;,&quot;commit&quot;,&quot;constraint&quot;,
    &quot;create&quot;,&quot;default&quot;,&quot;deferrable&quot;,&quot;delete&quot;,
    &quot;distinct&quot;,&quot;drop&quot;,&quot;else&quot;,&quot;escape&quot;,&quot;except&quot;,
    &quot;exists&quot;,&quot;foreign&quot;,&quot;from&quot;,&quot;group&quot;,&quot;having&quot;,
    &quot;if&quot;,&quot;in&quot;,&quot;index&quot;,&quot;insert&quot;,&quot;intersect&quot;,&quot;into&quot;,
    &quot;is&quot;,&quot;isnull&quot;,&quot;join&quot;,&quot;limit&quot;,&quot;not&quot;,&quot;notnull&quot;,
    &quot;null&quot;,&quot;on&quot;,&quot;or&quot;,&quot;order&quot;,&quot;primary&quot;,&quot;references&quot;,
    &quot;select&quot;,&quot;set&quot;,&quot;table&quot;,&quot;then&quot;,&quot;to&quot;,&quot;transaction&quot;,
    &quot;union&quot;,&quot;unique&quot;,&quot;update&quot;,&quot;using&quot;,&quot;values&quot;,&quot;when&quot;,&quot;where&quot;
]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 이름으로 테이블명이나 칼럼명을 사용하게 될 경우 문제가 발생할 수 있습니다. 하여 이름을 작명하실 때에 위 사항을 유의하시기 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Sqflite 지원되는 Type&lt;/b&gt;&lt;/h4&gt;
&lt;p id=&quot;text&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Integer (dart : int), Real(dart : num) , Text(dart : String ), Blob (dart : Unit8List ) 이렇게 지원이 되고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;추가적으로 DateTime과 , bool 타입의 경우 형변환을 통해 저장시킬 수 있습니다.&amp;nbsp; (우회하는 방안)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DateTime의 경우 millisSinceEpoch (int) 형태로 저장시킬 수 있고 추가적으로 String 값으로도 저장할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;bool의 경우 true를 1로 false를 0으로 저장하여 관리할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DateTime의 경우는 많은 상황에서 쿼리 질의를 사용하기 때문에 DateTime을 조건으로 쿼리 질의를 사용해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;millisSinceEpoch을 사용해 int로 저장도 하고 String으로 저장해서 둘 다 쿼리 질의가 되는지 확인해 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1665625716529&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  var batch = db.batch();
  List.generate(
      100,
      (index) =&amp;gt; batch.insert('user', {
            'name': '배치작업자$index',
            'age': index,
            'createdAt': DateTime(2022, 10, 01, 10, 20)
                .add(Duration(days: index))
                .millisecondsSinceEpoch,
            'updatedAt': DateTime(2022, 10, 01, 10, 20)
                .add(Duration(days: index))
                .toIso8601String(),
          }));

  await batch.commit();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 10월 1일부터 하루에 한 명씩 가입한 데이터를 저장시켰습니다. 위 batch로 얻은 결과 데이터는 아래와 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-10-13 오전 10.51.40.png&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;992&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/naKJx/btrOtG6dLWg/5uun9KfHPuboKXTEzkXBa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/naKJx/btrOtG6dLWg/5uun9KfHPuboKXTEzkXBa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/naKJx/btrOtG6dLWg/5uun9KfHPuboKXTEzkXBa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnaKJx%2FbtrOtG6dLWg%2F5uun9KfHPuboKXTEzkXBa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;385&quot; data-filename=&quot;스크린샷 2022-10-13 오전 10.51.40.png&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;992&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1665626263371&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  var users = await db.query('user',
      where: 'createdAt &amp;gt; ?',
      whereArgs: [DateTime(2023, 01, 01, 0, 0).millisecondsSinceEpoch]);
  for (var user in users) {
    print(user);
  }

  var updateUsers = await db
      .query('user', where: 'updatedAt &amp;gt; ? and updatedAt &amp;lt; ?', whereArgs: [
    DateTime(2023, 01, 01, 0, 0).toIso8601String(),
    DateTime(2023, 01, 04, 0, 0).toIso8601String()
  ]);
  for (var user in updateUsers) {
    print(user);
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행해본 결과 아래와 같이 잘 출력되는 것을 확인할 수 있었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-10-13 오전 10.58.11.png&quot; data-origin-width=&quot;1654&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKnnrQ/btrOq2vWcog/rly9rNt8yu9tNcYIIfjhk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKnnrQ/btrOq2vWcog/rly9rNt8yu9tNcYIIfjhk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKnnrQ/btrOq2vWcog/rly9rNt8yu9tNcYIIfjhk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKnnrQ%2FbtrOq2vWcog%2Frly9rNt8yu9tNcYIIfjhk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1654&quot; height=&quot;430&quot; data-filename=&quot;스크린샷 2022-10-13 오전 10.58.11.png&quot; data-origin-width=&quot;1654&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 플러터의 Sqflite에 대한 전반적인 기능을 예제로 살펴보면서 문서를 정리해보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도움이 되셨길 바라면서 도움이 되셨다면? 좋아요 / 구독 부탁드리고 앞으로도 좋은 포스팅을 공유하도록 노력하겠습니다~!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>개발일지/flutter</category>
      <category>sqflite</category>
      <category>sqflite 문서</category>
      <category>sqflite공부</category>
      <category>sqflite정리</category>
      <category>개남</category>
      <category>개발하는남자</category>
      <category>플러터</category>
      <category>플러터 sqflite</category>
      <category>플러터개발</category>
      <category>플러터공부</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/245</guid>
      <comments>https://sudarlife.tistory.com/entry/Flutter-%ED%94%8C%EB%9F%AC%ED%84%B0-SQFlite-%EB%AC%B8%EC%84%9C-%EC%A0%95%EB%A6%AC-%EB%B0%8F-%EC%98%88%EC%A0%9C%EB%A1%9C-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%B4%EB%B3%B4%EC%9E%90#entry245comment</comments>
      <pubDate>Thu, 13 Oct 2022 12:30:34 +0900</pubDate>
    </item>
    <item>
      <title>[개발생각] 개발강좌나 클론코딩 많이 봐도 실력이 빨리 늘지 않아요... 무엇이 문제일까..</title>
      <link>https://sudarlife.tistory.com/entry/%EA%B0%9C%EB%B0%9C%EC%83%9D%EA%B0%81-%EA%B0%9C%EB%B0%9C%EA%B0%95%EC%A2%8C%EB%82%98-%ED%81%B4%EB%A1%A0%EC%BD%94%EB%94%A9-%EB%A7%8E%EC%9D%B4-%EB%B4%90%EB%8F%84-%EC%8B%A4%EB%A0%A5%EC%9D%B4-%EB%B9%A8%EB%A6%AC-%EB%8A%98%EC%A7%80-%EC%95%8A%EC%95%84%EC%9A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%AC%B8%EC%A0%9C%EC%9D%BC%EA%B9%8C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;내&amp;nbsp;여러분&amp;nbsp;안녕하세요&amp;nbsp;개발하는남자&amp;nbsp;개남입니다.&amp;nbsp; &lt;br /&gt;오늘 다뤄볼 주제는 개발언어에 대해서 이야기해보려고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇몇 분들과 1:1로 대화를 해보거나 문의 메일을 받았는데요 공통적인 고민이 있더라고요 그래서 그 부분을 공유해보면 좋을 것 같다고 생각되어 이렇게 포스팅을 하게 되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;썸네일.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lTd4j/btrNPASXThy/qI3TAicMTLmc4T3vCPY3Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lTd4j/btrNPASXThy/qI3TAicMTLmc4T3vCPY3Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lTd4j/btrNPASXThy/qI3TAicMTLmc4T3vCPY3Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlTd4j%2FbtrNPASXThy%2FqI3TAicMTLmc4T3vCPY3Kk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;썸네일.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&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;1. 강의 영상을 보다보면 이해가 되고 내 것이 된 것 같은데 직접 만들고 싶은 프로젝트를 시작하면 막막해진다.&lt;br /&gt;2. 어떻게 하면 실력을 빨리 성장할 수 있는가?&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt;강의 영상을 보다보면 이해가 되고 내 것이 된 것 같은데 직접 만들고 싶은 프로젝트를 시작하면 막막해진다&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 고민에 대한 제 생각은 2가시 유형의 사람으로 나눠질 것 같습니다.&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;&amp;nbsp;- 첫번째 유형의 사람&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의 내용을 이해하고 개발까지 할 수 있는 능력을 갖췄지만 내가 만들고 싶은 프로젝트를 시작하면 아무것도 할 수 없는 사람.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f89009; color: #ffffff;&quot;&gt;첫 번째 유형&lt;/span&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;기획 , 디자인 , 개발 , QA 등등 많은 사람들이 필요로 하게 됩니다. (물론 혼자서도 가능하긴 하겠지만)&lt;/p&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;size18&quot;&gt;&lt;span style=&quot;background-color: #ef5369;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;해결 방안&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매우 매우 작은 단위의 기능을 갖는 서비스를 기획하여 결과물을 만들어 보자입니다.&amp;nbsp;&lt;/p&gt;
&lt;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;그리고 작은 단위라도 서비스 흐름도나 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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f89009; color: #ffffff;&quot;&gt;두 번째&amp;nbsp;유형&lt;/span&gt;의&amp;nbsp;경우&amp;nbsp;정말&amp;nbsp;열심히&amp;nbsp;학습은&amp;nbsp;했지만&amp;nbsp;개발&amp;nbsp;학습이&amp;nbsp;부족한 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열심히 반복해서 봐도 개발 실력이 늘지 않는다면 자신을 돌아봐야 합니다. 영상을 집중해서 보는지 , 그리고 가장 중요한 영상을 시청하면서 직접 따라 작성해보는지, 처음에는 따라 작성했을 수는 있습니다. 하지만 두번째 볼 때부터는 이미 한번 해본 내용이기 때문에 눈으로만 보고 넘길 가능성이 있습니다. 심지어 새로 배우는 부분에서도 직접 작성해보는 게 아닌 강좌에서 제공되는 소스를 받아서 돌려보는&amp;nbsp; 식으로 학습했을 가능 성이 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;아무리&amp;nbsp;많이&amp;nbsp;보고&amp;nbsp;다양한&amp;nbsp;기능들을&amp;nbsp;지속해서&amp;nbsp;본다고&amp;nbsp;해도&amp;nbsp;직접&amp;nbsp;작성해보고&amp;nbsp;&amp;nbsp;삽질도&amp;nbsp;해보지&amp;nbsp;않으면&amp;nbsp;내 것이&amp;nbsp;되지&amp;nbsp;못합니다.&amp;nbsp;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 개발 입문 당시에 이런 경험을 한 적이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선임 개발자가 말하길 &lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;모르는 것이 있어도 물어보지 말고 혼자 해결하라고 그리고 찾다 찾다 정... 못 찾겠으면 그때 도움을 청해라&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그 당시 아무것도 모르는데 문제 해결을 위해 몇 날을 붙잡고 낑낑거리면서 삽질의 삽질을 하고 있을 때 선임 개발자가 그제야 아직도 못했냐면서 문제를 풀 수 있는 힌트를 줬습니다. &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그 힌트 덕분에 바로 문제를 해결할 수 있었는데요 처음부터 물어봐서 해결했으면 고생도 덜하고 스트레스도 덜했을 텐데... 그 당시엔 선임 개발자분이 왜 그랬을지... 원망 아닌 원망을 한적도 있고, 바빠서 그랬겠지.. 하면서 넘겼는데요.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;지금 생각해보면 그 선임 개발자는 제가 성장할 수 있도록 도와준 것이었습니다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모르는 것이 있을 때 바로 문제를 해결해주는 사람이 있으면 편할지 몰라도 직접 삽질이나 노력 없이 얻은 기능의 경우 그때는 알고 넘어갈지 몰라도 시간이 지나면 잊게 됩니다. &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만&amp;nbsp;혼자&amp;nbsp;낑낑거리고&amp;nbsp;삽질을&amp;nbsp;통해&amp;nbsp;얻게&amp;nbsp;된&amp;nbsp;기능의&amp;nbsp;경우&amp;nbsp;시간이&amp;nbsp;지나도&amp;nbsp;잊지&amp;nbsp;못합니다.&amp;nbsp;머리는&amp;nbsp;잊어도&amp;nbsp;몸이&amp;nbsp;기억해서&amp;nbsp;문제를&amp;nbsp;해결할&amp;nbsp;수는&amp;nbsp;있게&amp;nbsp;되죠&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ee2323;&quot;&gt;해결&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;방안&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;개발 강좌의 경우는 쉽게 얻을 수 있는 것들입니다. 눈으로 보고 여러 번 반복해서 보더라도 시간이 지나면 잊어버리게 될 수 있습니다. &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그래서 직접 영상을 보면서 작성해보는 것, 그것보다 더 좋은 것은 응용을 해보는 것입니다. 그런 방법이 일종의 노력이고 그 노력이 여러 번 반복된다면 장기 기억으로 남게 될 것입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;빨리 개발실력을 향상하기 위해서는 어떻게 해야 하나요?&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨리 실력을 향상하려는 마음을 내려두고 개발의 흥미를 느낄만한 나만의 방법을 찾아서 포기하지 않고 지속적인 공부만이 방법입니다.&lt;br /&gt;&lt;br /&gt;너무 식상한 말이죠? 키포인트는 '빨리'라는 조급함을 버려야 한다입니다.&amp;nbsp; &lt;br /&gt;빨리라는 조급함이 오히려 자신에게 독이 되어 개발을 포기하게 만들 수 있습니다.&amp;nbsp; &lt;br /&gt;개발은 컴퓨터 언어를 학습하는 것은 영어를 학습하는 것과 같다고 저는 생각합니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;우리가&amp;nbsp;영어를&amp;nbsp;빨리&amp;nbsp;향상할&amp;nbsp;수가&amp;nbsp;있던가요?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론, 몇몇 분들은, 나는 빨리 늘었는데 하는 분들이 있을 수는 있지만 그분은 언어 습득에 탁월한 이해도가 있어서 가능했을 수 있습니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;아무튼, 영어는 수학이나 역사를 학습하는 것과 같은 암기의 영역이 아닙니다. 운동을 학습하는 것과 같은 영역이라고 하는데 개발도&amp;nbsp;마찬가지라고&amp;nbsp;생각합니다.&amp;nbsp;빨리&amp;nbsp;향상하는&amp;nbsp;방법은&amp;nbsp;없다고&amp;nbsp;생각합니다.&amp;nbsp; &lt;br /&gt;빨리라는 조급함을 버리고 나만의 개발 방식을 찾는 것이 개발 실력을 향상하는데 도움을 줄 것입니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;영어도 다양한 공부방법이 있잖아요? 미드를 본다거나, 1:1 원어민과 통화 수업을 한다거나, 학원을 다닌다거나, 독학을 한다거나 등등, 성공사례가 정말 다양하죠 , 하지만 나에게 맞는 공부 방식을 찾지 못한다면 금방 지쳐서 포기하게 되죠,&amp;nbsp; &lt;br /&gt;&lt;br /&gt;나만의 공부방식이 있다면 포기하지 않고 재미있게 영어를 학습하게 되고 그 꾸준함의 결과로 새로운 언어를 학습에 성공하게 되는 것처럼 개발도&amp;nbsp;다양한&amp;nbsp;방식의&amp;nbsp;학습방법이&amp;nbsp;있습니다.&amp;nbsp;책을&amp;nbsp;보고&amp;nbsp;학습하거나,&amp;nbsp;온라인 강좌를&amp;nbsp;본다거나,&amp;nbsp;1:1&amp;nbsp;과외를&amp;nbsp;받는다거나,&amp;nbsp;독학을&amp;nbsp;한다거나&amp;nbsp;다양한&amp;nbsp;방법이&amp;nbsp;있을&amp;nbsp;것입니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;다양하게&amp;nbsp;경험해보시고&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;&lt;br /&gt;개발&amp;nbsp;학습에&amp;nbsp;재미를&amp;nbsp;느꼈다면&amp;nbsp;꾸준하게&amp;nbsp;지속하십시오&amp;nbsp;그럼&amp;nbsp;분명&amp;nbsp;어느 순간&amp;nbsp;개발언어를&amp;nbsp;이해하게&amp;nbsp;되고&amp;nbsp;바로&amp;nbsp;그&amp;nbsp;언어를&amp;nbsp;통해&amp;nbsp;개발을&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있는 날이&amp;nbsp;도레&amp;nbsp;할&amp;nbsp;것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자&amp;nbsp;오늘은&amp;nbsp;이렇게&amp;nbsp;개발언어 학습&amp;nbsp;대해&amp;nbsp;제&amp;nbsp;생각을&amp;nbsp;공유해보았습니다. &lt;br /&gt;제 생각이 100% 정답이라고 할 수 없지만 짧지 않은 시간 동안 개발을 해오며 느낀 부분을 정리해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 이번 영상에 공감이 되거나 도움이 되신다면 좋아요 부탁드리고 각자의 의견이 있다면 댓글로 알려주시면 서로 소통하고 좋을 것 같습니다.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;감사합니다&amp;nbsp;&lt;/p&gt;</description>
      <category>개발일지/개발생각</category>
      <category>개남생각</category>
      <category>개남이야기</category>
      <category>개발</category>
      <category>개발공부</category>
      <category>개발생각</category>
      <category>개발언어</category>
      <category>개발언어학습</category>
      <category>개발이야기</category>
      <category>개발자</category>
      <category>클론코딩</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/244</guid>
      <comments>https://sudarlife.tistory.com/entry/%EA%B0%9C%EB%B0%9C%EC%83%9D%EA%B0%81-%EA%B0%9C%EB%B0%9C%EA%B0%95%EC%A2%8C%EB%82%98-%ED%81%B4%EB%A1%A0%EC%BD%94%EB%94%A9-%EB%A7%8E%EC%9D%B4-%EB%B4%90%EB%8F%84-%EC%8B%A4%EB%A0%A5%EC%9D%B4-%EB%B9%A8%EB%A6%AC-%EB%8A%98%EC%A7%80-%EC%95%8A%EC%95%84%EC%9A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%AC%B8%EC%A0%9C%EC%9D%BC%EA%B9%8C#entry244comment</comments>
      <pubDate>Tue, 11 Oct 2022 09:29:10 +0900</pubDate>
    </item>
    <item>
      <title>[개발 생각] 개발하는데 꼭 디자인 패턴이 필요할까?</title>
      <link>https://sudarlife.tistory.com/entry/%EA%B0%9C%EB%B0%9C-%EC%83%9D%EA%B0%81-%EA%B0%9C%EB%B0%9C%ED%95%98%EB%8A%94%EB%8D%B0-%EA%BC%AD-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4%EC%9D%B4-%ED%95%84%EC%9A%94%ED%95%A0%EA%B9%8C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;내&amp;nbsp;여러분&amp;nbsp;안녕하세요&amp;nbsp;개발하는남자&amp;nbsp;개남입니다.&amp;nbsp; &lt;br /&gt;오늘 다뤄볼 주제는 개발하는데 꼭 디자인 패턴이 필요할까? 에 대해서 포스팅하려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bokgxe/btrH2oKNGUz/U7fbQP5ZM2OHo3kxP5zbwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bokgxe/btrH2oKNGUz/U7fbQP5ZM2OHo3kxP5zbwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bokgxe/btrH2oKNGUz/U7fbQP5ZM2OHo3kxP5zbwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbokgxe%2FbtrH2oKNGUz%2FU7fbQP5ZM2OHo3kxP5zbwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;디자인 패턴이란?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;디자인 (설계하다,디자인하다) + 패턴 (되풀이되는 사건이나 물체의 형태를 가리킨다.)&lt;br /&gt;되풀이되는&amp;nbsp;사건이나&amp;nbsp;형태를&amp;nbsp;설계하는 것을&amp;nbsp;디자인&amp;nbsp;패턴이라고&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있겠습니다.&lt;br /&gt;개발 쪽으로 적용하여 정의를 내리자면?&amp;nbsp; &lt;u&gt;반복되는&amp;nbsp;소스코드&amp;nbsp;혹은&amp;nbsp;반복되는&amp;nbsp;구조등을&amp;nbsp;설계하여&amp;nbsp;정의&amp;nbsp;내린&amp;nbsp;것&lt;/u&gt;을&amp;nbsp;디자인&amp;nbsp;패턴이라고&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있겠습니다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디자인 패턴 이름부터가 어려워...&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8eDfe/btrH2gGbvsM/RVKXDQFl0tWYOsAJmuPz4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8eDfe/btrH2gGbvsM/RVKXDQFl0tWYOsAJmuPz4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8eDfe/btrH2gGbvsM/RVKXDQFl0tWYOsAJmuPz4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8eDfe%2FbtrH2gGbvsM%2FRVKXDQFl0tWYOsAJmuPz4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;디자인 패턴 하면 뭔가 거창한 것 같고 듣기만 해도 어려운 것처럼 느껴질 수 있습니다. &lt;/span&gt;하지만 어려울 것이 하나도 없습니다 왜냐면 디자인 패턴은 말그대로 누군가 정의 내린 개발 방식일 뿐입니다.&amp;nbsp;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;유명한&amp;nbsp;디자인&amp;nbsp;패턴&amp;nbsp;말고도&amp;nbsp;우리들도&amp;nbsp;어찌보면&amp;nbsp;자신만의&amp;nbsp;혹은&amp;nbsp;팀 간의&amp;nbsp;디자인&amp;nbsp;패턴을&amp;nbsp;지속적으로&amp;nbsp;사용하고&amp;nbsp;있을&amp;nbsp;수도&amp;nbsp;있습니다.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;br /&gt;예를 들어 디자인 패턴을 하나도 모르는 A씨가 있습니다. A 씨는 회원 가입 기능을 담당하게 되었고&amp;nbsp;요구&amp;nbsp;사항에&amp;nbsp;맞게&amp;nbsp;기능을&amp;nbsp;만들었다고&amp;nbsp;가정하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7-2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2pCbi/btrHZDQFL9w/hVZUSMPB5c8U4b061txxw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2pCbi/btrHZDQFL9w/hVZUSMPB5c8U4b061txxw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2pCbi/btrHZDQFL9w/hVZUSMPB5c8U4b061txxw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2pCbi%2FbtrHZDQFL9w%2FhVZUSMPB5c8U4b061txxw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;7-2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;처음에는 문제가 너무 많아 문제를 해결하기위해 소스코드를 지속적으로 수정을 했을 것입니다. 문제를 점차 해결해 나아가면서 결국 기능 개발이 완료되었습니다. 해당 회원가입 기능을 라이브로 배포하여 사용자들이 이상 없이 회원가입을 하게 되었습니다.&amp;nbsp;그럼&amp;nbsp;A 씨에게는&amp;nbsp;회원가입 기능을&amp;nbsp;하는&amp;nbsp;소스코드를&amp;nbsp;만들었고&amp;nbsp;사용자들이&amp;nbsp;이상 없이&amp;nbsp;사용을&amp;nbsp;하기 때문에&amp;nbsp;자신의&amp;nbsp;소스가&amp;nbsp;검증된&amp;nbsp;소스라고&amp;nbsp;생각하게&amp;nbsp;됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mxMhN/btrH0STDjT1/aW418cXNJIgla2lyKeg9C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mxMhN/btrH0STDjT1/aW418cXNJIgla2lyKeg9C0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mxMhN/btrH0STDjT1/aW418cXNJIgla2lyKeg9C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmxMhN%2FbtrH0STDjT1%2FaW418cXNJIgla2lyKeg9C0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;br /&gt;시간이 지나 A씨는 다른 프로젝트에서 동일한 회원가입 기능을 만들어야 하는 상황이 되었습니다. 자신이 지난번 만들었던 회원가입 기능하는 소스코드를 가져와 적용해봅니다.&amp;nbsp;하지만 그 기능은 이전 프로젝트에 너무 많은 의존성으로 당장 바로 사용하지 못하게 되었습니다.&amp;nbsp;소스코드를&amp;nbsp;이번&amp;nbsp;프로젝트에서도&amp;nbsp;사용 가능하도록&amp;nbsp;수정을&amp;nbsp;하게&amp;nbsp;됩니다.&amp;nbsp;그러면서&amp;nbsp;확장성을&amp;nbsp;고려하여&amp;nbsp;다시&amp;nbsp;수정을&amp;nbsp;하게&amp;nbsp;됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8-2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rWfFc/btrHZQ2736C/e5aW84tHQck8UolkbbQoGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rWfFc/btrHZQ2736C/e5aW84tHQck8UolkbbQoGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rWfFc/btrHZQ2736C/e5aW84tHQck8UolkbbQoGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrWfFc%2FbtrHZQ2736C%2Fe5aW84tHQck8UolkbbQoGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;8-2.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이번에도 해당 소스코드가 정상동작을 하게 되었기에 검증이 된 것이라고 생각하게 됩니다.&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;br /&gt;또다시 시간이 지나 다른 프로젝트에서 동일한 회원가입을 또 만들어야 하는 상황이 생겼습니다.&amp;nbsp;지난번에 확장성을 고려해 설계를 했던 소스코드를 가져와 적용해보니 딱히 건들 부분이 많이 줄어들어 몇 가지만 손보고 바로 적용할 수 있었습니다.&amp;nbsp;A&amp;nbsp;개발자는&amp;nbsp;1번째&amp;nbsp;프로젝트 때와&amp;nbsp;2번째&amp;nbsp;프로젝트 때와&amp;nbsp;달리&amp;nbsp;지금&amp;nbsp;프로젝트에서&amp;nbsp;회원가입&amp;nbsp;기능을&amp;nbsp;만드는데&amp;nbsp;시간을&amp;nbsp;많이&amp;nbsp;단축시킬&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;되었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CaEMQ/btrHZUxSFWc/sfq0oguu0DKES3wmkgHnn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CaEMQ/btrHZUxSFWc/sfq0oguu0DKES3wmkgHnn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CaEMQ/btrHZUxSFWc/sfq0oguu0DKES3wmkgHnn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCaEMQ%2FbtrHZUxSFWc%2Fsfq0oguu0DKES3wmkgHnn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이러한 경험을 바탕으로 앞으로 만들어질 회원 가입에 사용할 소스코드를 자신의 소스 코드를 넣으면 개발시간을 단축할 수 있겠구나 하는 예상을 하게 되고 이것을 혼자만 알기보다 회원가입 기능을 만들어야 하는 많은 개발자들에게 알려주게 되어 많은 사람들이 해당 소스 코드 혹은 짜는 방식을 고대로 차용해 사용하게 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PYJiI/btrH0wXz9uW/XqpzHQFtQyqfuy6kGl22qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PYJiI/btrH0wXz9uW/XqpzHQFtQyqfuy6kGl22qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PYJiI/btrH0wXz9uW/XqpzHQFtQyqfuy6kGl22qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPYJiI%2FbtrH0wXz9uW%2FXqpzHQFtQyqfuy6kGl22qk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 많은 사람들의 입소문을 통해 회원가입기능을 만들 때는 A개발자가 만든 회원가입 코드를 사용하면 매우 좋더라 가 되게 됩니다.&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이것이 바로 디자인 패턴이 만들어지고 전파되는 과정이 아닐까? 생각됩니다. 물론 이해를 돕기 위해 제가 만들어낸 예시의 경우는 디자인 패턴보다 기능 단위의 모듈을 전파하는 것에 더 가까울 수 있으나 디자인 패턴도 이와 같은 이유(개발 시간 단축, 유지보수 편의성)에서 만들어지고 입소문(도서 등..)을 통해 전파해 나가는 것이라 생각합니다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;br /&gt;&lt;br /&gt;그럼 왜 패턴을 학습하는데 어려움을 느낄까?&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아마 이런 경험을 한적이 있을 것입니다. 내가 짠 소스코드는 읽기 쉬운데 남이 짜 놓은 소스는 눈에 들어오지 않고 해석하는데 오랜 시간이 걸려본 경험. 나는&amp;nbsp;분명&amp;nbsp;내&amp;nbsp;소스는&amp;nbsp;사용하기&amp;nbsp;편리해서&amp;nbsp;소개했는데&amp;nbsp;다른&amp;nbsp;개발자는&amp;nbsp;왜&amp;nbsp;그렇게&amp;nbsp;어렵게&amp;nbsp;하냐는&amp;nbsp;말을&amp;nbsp;들어본&amp;nbsp;경험.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlSecK/btrH3Q1nbjI/IkcHgkXIKfsxGsDlwd8WNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlSecK/btrH3Q1nbjI/IkcHgkXIKfsxGsDlwd8WNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlSecK/btrH3Q1nbjI/IkcHgkXIKfsxGsDlwd8WNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlSecK%2FbtrH3Q1nbjI%2FIkcHgkXIKfsxGsDlwd8WNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저마다 개발 실력이 다를 뿐 아니라 사람들은 저마다 자신의 스타일, 또는 철학이 존재하기 때문에 자신의 스타일이 아닌 소스코드를 보게 되면&amp;nbsp;자신의 스타일로 소스 코드를 해석하려고 하게 됩니다. 자신의 스타일대로 작성된 소스코드라면 손쉽게 읽힐 것이고 그게 아닌 소스코드라면&amp;nbsp;이해하는데&amp;nbsp;어려움을&amp;nbsp;느끼게&amp;nbsp;됩니다.&amp;nbsp;여러움을&amp;nbsp;해소하기&amp;nbsp;위해서는&amp;nbsp;새로운&amp;nbsp;스타일을&amp;nbsp;배워야&amp;nbsp;합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이처럼 디자인 패턴의 경우 수십년에 걸쳐진 검증된 소스 코드라 할지라도 그 개발자의 개발 철학이나 스타일에 익숙하지 않기 때문에 학습에 어려움을 느끼게 되는 것입니다.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;그럼 왜 나와 다른 스타일의 디자인 패턴을 배워서 사용해야 할까요?&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것은 이미 수십년에 시간이 흐르면서 수행 착오를 거쳐 만들어져 온 검증된 패턴이기에 이 패턴을 익히면 익힌 사람들끼리의 커뮤니케이션이나 이 패턴을 익힌 사람의 소스코드를 이해하는 데에 쉬워지기 때문입니다. &lt;b&gt;물론&amp;nbsp;필수는&amp;nbsp;아닙니다&lt;/b&gt;. 위에 예를 들어 소개했던 개발자A씨처럼 하나부터 열까지 자신이 개발하고 만들 수 있습니다.&amp;nbsp;전혀 상관이 없죠. 왜냐면 기능만 동작되면 되기 때문입니다.&amp;nbsp;하지만&amp;nbsp;그렇게&amp;nbsp;되면&amp;nbsp;수행 착오를&amp;nbsp;많이&amp;nbsp;거칠&amp;nbsp;수밖에&amp;nbsp;없게&amp;nbsp;됩니다.&amp;nbsp;어디서&amp;nbsp;어떤&amp;nbsp;버그가&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;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;17.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daihhV/btrH0u6ymAN/2JS7qLd6EpWxfjX9N9be9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daihhV/btrH0u6ymAN/2JS7qLd6EpWxfjX9N9be9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daihhV/btrH0u6ymAN/2JS7qLd6EpWxfjX9N9be9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaihhV%2FbtrH0u6ymAN%2F2JS7qLd6EpWxfjX9N9be9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;17.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&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;디자인패턴에 목숨 걸고 이 패턴 저 패턴 적용하려고 하게 되면 오히려 독이 될 수 있습니다.&amp;nbsp;패턴이&amp;nbsp;필요한&amp;nbsp;부분에&amp;nbsp;적용하고&amp;nbsp;간단히&amp;nbsp;처리할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;부분은&amp;nbsp;그냥&amp;nbsp;개발하는&amp;nbsp;편이&amp;nbsp;오히려&amp;nbsp;좋을&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&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;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;패턴 사용의 장점&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;개발 속도가 빨라진다.&lt;/li&gt;
&lt;li&gt;새로&amp;nbsp;접하는&amp;nbsp;소스코드라&amp;nbsp;하더라도&amp;nbsp;내가&amp;nbsp;알고&amp;nbsp;있는&amp;nbsp;패턴대로&amp;nbsp;설계되어있다면&amp;nbsp;소스&amp;nbsp;구조를&amp;nbsp;쉽게&amp;nbsp;파악할&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;li&gt;이미&amp;nbsp;검증된&amp;nbsp;방식이라&amp;nbsp;믿고&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;li&gt;개발자들 간의 커뮤니케이션이 쉬워질 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;패턴&amp;nbsp;사용의&amp;nbsp;단점&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;학습&amp;nbsp;시간이&amp;nbsp;필요하다.&lt;/li&gt;
&lt;li&gt;잘못된&amp;nbsp;이해로&amp;nbsp;작성된&amp;nbsp;패턴은&amp;nbsp;오히려&amp;nbsp;좋지&amp;nbsp;못한&amp;nbsp;소스코드를&amp;nbsp;야기할&amp;nbsp;&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;/ol&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;blockquote data-ke-style=&quot;style2&quot;&gt;&amp;nbsp; 개발은 경험이 중요한 것 같습니다. 경험 없이 디자인 패턴만 배워 적용하려고 하면 분명 어려움을 느끼게 됩니다.&amp;nbsp;어느 때에 이 패턴을 사용해야 하는지 모르기 때문입니다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;만일 자신이 속한 회사 소스 코드에 디자인 패턴이 사용되었다면 그 디자인 패턴을 학습하고 익혀 사용하는 것은 좋다고 생각합니다. &lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;하지만 자신이 속한 회사 소스코드에 디자인 패턴이 없거나 혹은 나 혼자 개발하는 상황이라면 디자인 패턴에 시간을 쓰기보다 개발을 먼저 해서 경험을&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;쌓는&amp;nbsp;것을&amp;nbsp;추천드립니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;물론 무슨 소리냐! 디자인 패턴을 선행으로 학습하고 보다 좋은 소스코드를 짜는 것이 좋은 것이 아니냐 할 수 있는데 &lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;잠깐 말했듯 어떤 패턴을 어느 때에 사용해야 하는지 그리고 이 패턴을 써서 얻는 이점이 무엇인지 모른 채 그냥 패턴을 사용하는 것은 좋지 못하다고 생각합니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;게다가 시간이 지나 내가 짠 소스코드를 이해하지 못하는 경험을 하게 될 수 있습니다. 그렇게 되면 유지 보수가 더 어려워지는 상황이 발생할 수 있다는 것입니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;디자인&amp;nbsp;패턴에&amp;nbsp;대해&amp;nbsp;관심을&amp;nbsp;갖고&amp;nbsp;공부하는&amp;nbsp;것은&amp;nbsp;좋지만&amp;nbsp;소스코드&amp;nbsp;적용에는&amp;nbsp;신중하게&amp;nbsp;하자&amp;nbsp;필요함을&amp;nbsp;느낄 때에&amp;nbsp;적용하자가&amp;nbsp;제&amp;nbsp;생각입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;여러분들의&amp;nbsp;생각은&amp;nbsp;어떠신가요?&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;각자의&amp;nbsp;생각을&amp;nbsp;댓글로&amp;nbsp;공유해주신다면&amp;nbsp;개발 공부하는&amp;nbsp;분들이나&amp;nbsp;제게도&amp;nbsp;큰&amp;nbsp;도움이&amp;nbsp;될&amp;nbsp;것&amp;nbsp;같습니다&amp;nbsp;^^&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;감사합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발일지/개발생각</category>
      <category>Design Pattern</category>
      <category>개남</category>
      <category>개발</category>
      <category>개발공부</category>
      <category>개발생각</category>
      <category>개발하는남자</category>
      <category>공부하는 개발자</category>
      <category>디자인 패턴 필요한가?</category>
      <category>디자인패턴</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/243</guid>
      <comments>https://sudarlife.tistory.com/entry/%EA%B0%9C%EB%B0%9C-%EC%83%9D%EA%B0%81-%EA%B0%9C%EB%B0%9C%ED%95%98%EB%8A%94%EB%8D%B0-%EA%BC%AD-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4%EC%9D%B4-%ED%95%84%EC%9A%94%ED%95%A0%EA%B9%8C#entry243comment</comments>
      <pubDate>Sat, 23 Jul 2022 12:20:18 +0900</pubDate>
    </item>
    <item>
      <title>기가막힌 아이디어를 개발부터 서비스 출시까지 필요한 기술은?</title>
      <link>https://sudarlife.tistory.com/entry/%EA%B8%B0%EA%B0%80%EB%A7%89%ED%9E%8C-%EC%95%84%EC%9D%B4%EB%94%94%EC%96%B4%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EB%B6%80%ED%84%B0-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%B6%9C%EC%8B%9C%EA%B9%8C%EC%A7%80-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B8%B0%EC%88%A0%EC%9D%80</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thumb.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EFmLj/btrGZMnAREl/zmoP60xgfTYoSfyu2DrltK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EFmLj/btrGZMnAREl/zmoP60xgfTYoSfyu2DrltK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EFmLj/btrGZMnAREl/zmoP60xgfTYoSfyu2DrltK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEFmLj%2FbtrGZMnAREl%2FzmoP60xgfTYoSfyu2DrltK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;thumb.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 살면서 불편을 경험할 때가 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 불편을 느낄 때 나타날 수 있는 반응으로 크게 3가지 가 있을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 유형 아무 생각이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 유형 불평불만하며 누가 이런 거 편리하게 만들어주면 안 될까?라는 불평불만을 토로하는 유형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째 유형 불편한 것을 해소시면 많은 사람들이 사용하겠지? 기회 포착형&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분은 어떤 유형인가요?&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 만일 당신이 세 번째 유형에 속하신 분이라면&lt;span&gt;&amp;nbsp;&lt;/span&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;만들어가는 방법으로도 크게 3가지가 있을 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7-1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blpGB7/btrG2tgxKNx/mHK7MFfsZrfnkEB4jMG5j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blpGB7/btrG2tgxKNx/mHK7MFfsZrfnkEB4jMG5j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blpGB7/btrG2tgxKNx/mHK7MFfsZrfnkEB4jMG5j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblpGB7%2FbtrG2tgxKNx%2FmHK7MFfsZrfnkEB4jMG5j1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;7-1.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 난 돈이 많으니까 그냥 외주 돌려서 만들면 돼 유형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 뜻이 맞는 사람들 불러 모아 만들어내는 유형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 번째 인생은 독고다이야 내가 처음부터 끝까지 다해야지 유형&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 이런 상황에 있다면 어떤 유형에 속하는지 살펴보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째의 경우 아주 심플하고 손쉽게 아이디어를 서비스로 만들 수 있는 방법이라 할 수 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 적지 않는 비용이 발생할 수 있고 여유가 없다면... 패스&amp;hellip;&lt;/p&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;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 세 번째만 남았죠&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 세번째 방법이 현실적일 수 있다고 생각할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&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;스스로 공부해서 출시해보자 하시는 의지의 사나이분들 계실 것입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLtMdh/btrG0CyfTLD/3l1ecaHKUz08asFVsOcjkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLtMdh/btrG0CyfTLD/3l1ecaHKUz08asFVsOcjkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLtMdh/btrG0CyfTLD/3l1ecaHKUz08asFVsOcjkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLtMdh%2FbtrG0CyfTLD%2F3l1ecaHKUz08asFVsOcjkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과연&amp;hellip; 현실적으로 가능할지 ~ 지금부터 개발부터 서비스 출시까지 필요한 기술들을 한번 정리해 보도록 하겠습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스는 다양한 형태로 사용자들에게 제공됩니다.&amp;nbsp; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 형태에 대한 서비스를 제가 다 알 수 있는 것이 아니기에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 경험했던 웹 서비스 분야와 앱 서비스 분야만을 살펴보도록 하겠습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 간단한 유틸성 서비스 말고 회원관리가 필요한 서비스 기준으로 정리해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 서비스를 사용하는 과정으로 하나하나 파 들어가면서 필요한 기술들을 살펴보는 것으로 설명드리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;15.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgCdKm/btrGY1kbaoZ/1bwK1PqhO3JulnyiaGNWOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgCdKm/btrGY1kbaoZ/1bwK1PqhO3JulnyiaGNWOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgCdKm/btrGY1kbaoZ/1bwK1PqhO3JulnyiaGNWOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgCdKm%2FbtrGY1kbaoZ%2F1bwK1PqhO3JulnyiaGNWOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;15.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 웹 사이트에 접속을 했습니다.&lt;span&gt;&amp;nbsp;&lt;/span&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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;photoshop 제플린 피그마 등등 디자인 툴을 통해 원하는 디자인을 만들고 가이드를 만들어 냅니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 디자인의 가이드라인에 맞춰 html/css를 활용해 화면을 퍼블리싱합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분에서 html 마크업 할 수 있어야 하며 css를 통해 원하는 위치에 배치해야 합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 사용자 환경이 전부 다르기 때문에 반응형을 고려해서 코딩해야 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;16.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/el9OtF/btrGTZUK36r/jqkkemqx0T4ThuLbfooNtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/el9OtF/btrGTZUK36r/jqkkemqx0T4ThuLbfooNtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/el9OtF/btrGTZUK36r/jqkkemqx0T4ThuLbfooNtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fel9OtF%2FbtrGTZUK36r%2Fjqkkemqx0T4ThuLbfooNtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;16.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 회원가입 버튼을 통해 회원 가입을 시도합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 사용자의 입력에 따른 이벤트를 시각적으로 가이드해줘야 하며&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자의 입력이 서버에 전달되기 전 필요한 항목들이 올바르게 작성되었는지&lt;span&gt;&amp;nbsp;&lt;/span&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;이 부분에서 javascript 를 통해 사용자의 액션 및 여러 이벤트들을 개발하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;javascript로 개발이 되는데 dom을 직접 작업하는 형태보다는 framework를 사용해 개발합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(vuejs , react, angularjs 등이 있습니다,)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;17.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hq4Sj/btrG4T50P5W/DAB4o31QID6bgyyMefUevK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hq4Sj/btrG4T50P5W/DAB4o31QID6bgyyMefUevK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hq4Sj/btrG4T50P5W/DAB4o31QID6bgyyMefUevK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHq4Sj%2FbtrG4T50P5W%2FDAB4o31QID6bgyyMefUevK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;17.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 입력한 회원 정보를 서버로 전달됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분에서 frontend와 backend의 http/https 통신을 통해 데이터를 전달하게 됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;frontend에서는 보통 axios 나 fetch를 사용하여 서버로 데이터를 전송합니다.&lt;span&gt; &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;예전에는 ajax를 사용했습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;backend에서는 Rest API 서버라고 불러우며 (java , nodejs, php , python 등등 언어로 서버를 구축할 수 있습니다.)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java의 경우 spring 프레임워크가 있으며 nodejs의 경우 express 나 nestjs 가 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Php와 파이선의 경우는 제가 다뤄 보지 않아서 잘 모르겠습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;18.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mnjDs/btrG3DCzJFU/kfyLlCjn5nv6Yjx6VHZFN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mnjDs/btrG3DCzJFU/kfyLlCjn5nv6Yjx6VHZFN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mnjDs/btrG3DCzJFU/kfyLlCjn5nv6Yjx6VHZFN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmnjDs%2FbtrG3DCzJFU%2FkfyLlCjn5nv6Yjx6VHZFN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;18.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버로부터 전달받은 데이터를 데이터베이스에 저장합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 베이스에 저장하기 전 frontend에서 유효성 검사를 했지만 서버에서도 유효성 검사를 해준 뒤 이상 없는 데이터만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스에 저장시킵니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 데이터 베이스를 어떤 것으로 할지도 필요합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관계형 데이터 베이스로(Sql DB) 할지 비 관계형 데이터 베이스로(noSql DB) 할지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관계형 데이터베이스로 대표적으로 오라클 , mysql 이 있습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;noSql로 대표적으로는 mongodb, firebase database , elasticsearch 가 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결정된 db에 따라 Rest API Server에 맞는 라이브러리를 사용해야 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 라이브러리는 Java Spring의 JPA , nodejs&lt;span&gt;&amp;nbsp; &lt;/span&gt;typeorm , 나 mongodb의 경우&lt;span&gt;&amp;nbsp; &lt;/span&gt;mongoose가 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;19.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TVHKk/btrG0CdYdw2/eJ3rpgAzYxdNCM5dUugbGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TVHKk/btrG0CdYdw2/eJ3rpgAzYxdNCM5dUugbGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TVHKk/btrG0CdYdw2/eJ3rpgAzYxdNCM5dUugbGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTVHKk%2FbtrG0CdYdw2%2FeJ3rpgAzYxdNCM5dUugbGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;19.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일련의 과정이 서버 로그로 저장됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 인프라의 경우 Rest Server와 DB서버가 있을 수 있으며 초기에는 한대의 서버에서 관리해도 무관합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버의 경우 물리 서버를 이용하거나 클라우드 서버를 이용할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물리서버를 임대해서 사용할 경우 월 사용료를 지불하는 방식이지만 클라우드 서버의 경우 사용한 양만큼 지불하는 방식입니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라우드 서버가 구성만 잘하면 정말 안전하고 많은 트래픽에 두려워할 필요 없이 서비스를 운영할 수 있겠지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비용이 생각보다 많이 발생될 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다고 물리 서버를 임대해서 진행하게 될 때에는 항시 모니터링을 통해 서버 상태를 체크해줘야 하며 사용자의 몰려 서버 장애에 대한 대응이&lt;span&gt;&amp;nbsp;&lt;/span&gt;늦을 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프라를 물리 서버로 하던 클라우드 서버로 하던 서버 구축에 필요한 기술로는 단연 docker 가 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker swarm이나 쿠버네티스를 통해 자동적으로 클러스터링을 도와주는 툴도 알아야 합니다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹은 aws 만 잘 학습하면 인프라 구축 및 운영은 걱정 없을 것입니다.&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;앱의 경우&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGEcH7/btrG2sPtpyP/AuUTsQF3T4eaxyH49yaMIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGEcH7/btrG2sPtpyP/AuUTsQF3T4eaxyH49yaMIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGEcH7/btrG2sPtpyP/AuUTsQF3T4eaxyH49yaMIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGEcH7%2FbtrG2sPtpyP%2FAuUTsQF3T4eaxyH49yaMIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;20.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Step2 만 다르고 나머지는 동일하다고 생각하시면 됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Native app으로 개발할지&lt;span&gt;&amp;nbsp; &lt;/span&gt;크로스 플랫폼 GUI 애플리케이션 프레임워크로 개발할지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Native app 으로 개발할 경우 안드로이드 : Java 나 Kotlin을 알아야 하며&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iOS : Objective-c 나 Swift를 알아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크로스 플랫폼 프레임워크로 개발할 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reactive native를 사용하거나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Flutter를 사용하거나 합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 서비스를 만들기 위해 필요한 기술 스펙에 대해 살펴봤는데요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심플하게 한 표로 정리해보자면 다음과 같습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;21.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckzOC7/btrG4U4UUFj/KXO8jctkfQx4NRlB3wNZTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckzOC7/btrG4U4UUFj/KXO8jctkfQx4NRlB3wNZTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckzOC7/btrG4U4UUFj/KXO8jctkfQx4NRlB3wNZTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckzOC7%2FbtrG4U4UUFj%2FKXO8jctkfQx4NRlB3wNZTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;21.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백엔드와 프론트엔트로 구분되어 정리하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대략적으로 이 내용을 알고 계시는 분들도 계시겠지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각보다 많은 부분을 고려해야 하고 학습해야 하는구나 하면서 아이디어를 서비스로 만들지 못하겠구나&amp;hellip;&lt;span&gt;&amp;nbsp;&lt;/span&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;제가 열거한 기술 스펙의 경우는 서비스 규모가 있거나 팀 단위 혹은 회사에서 진행되는 프로젝트에서의 상태를 말씀드린 것이고 만일 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;클라우드 서버를 추천드립니다. AWS 나 파이어 베이스를 추천드리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS , 파이어 베이스의 경우 프론트앤드 개발자들을 위해 고안하여 만들어진 서비스로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어렵지 않게 사용이 가능합니다. 물론&amp;hellip;. AWS는 어렵긴 합니다만 파이어 베이스는 손쉽게 사용할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이어 베이스를 사용하게 된다면 server세팅이 필요 없고 디비 세팅이 필요 없을 뿐 아니라 인프라 구축 또한 필요 없습니다.&lt;span&gt;&amp;nbsp;Step1 과&lt;/span&gt; Step2 만 고려하시면 서비스를 만들 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;202.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAlmE0/btrG0BGahIA/rnKOru2hqXUnjZz9sdKbd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAlmE0/btrG0BGahIA/rnKOru2hqXUnjZz9sdKbd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAlmE0/btrG0BGahIA/rnKOru2hqXUnjZz9sdKbd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAlmE0%2FbtrG0BGahIA%2FrnKOru2hqXUnjZz9sdKbd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;202.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상으로 서비스가 만들어지기 위해 알아야 하는 기술에 대해서 정리해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발일지/개발생각</category>
      <category>FullStack</category>
      <category>개남</category>
      <category>개발기술</category>
      <category>서비스출시</category>
      <category>서비스출시까지 필요한 기술</category>
      <category>앱</category>
      <category>앱개발</category>
      <category>웹</category>
      <category>웹개발</category>
      <category>풀스택개발</category>
      <author>수달e</author>
      <guid isPermaLink="true">https://sudarlife.tistory.com/242</guid>
      <comments>https://sudarlife.tistory.com/entry/%EA%B8%B0%EA%B0%80%EB%A7%89%ED%9E%8C-%EC%95%84%EC%9D%B4%EB%94%94%EC%96%B4%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EB%B6%80%ED%84%B0-%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%B6%9C%EC%8B%9C%EA%B9%8C%EC%A7%80-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B8%B0%EC%88%A0%EC%9D%80#entry242comment</comments>
      <pubDate>Mon, 11 Jul 2022 22:50:45 +0900</pubDate>
    </item>
  </channel>
</rss>