<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발 블로그</title>
    <link>https://program-note.tistory.com/</link>
    <description>개발자의 일상 및 이것저것 !</description>
    <language>ko</language>
    <pubDate>Mon, 11 May 2026 22:58:44 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>daehwan2</managingEditor>
    <image>
      <title>개발 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/3100669/attach/40bb838a7f184703961516f569c6f504</url>
      <link>https://program-note.tistory.com</link>
    </image>
    <item>
      <title>Unity 오브젝트 생성&amp;middot;삭제할 때 자주 쓰는 함수들</title>
      <link>https://program-note.tistory.com/55</link>
      <description>&lt;h3 data-end=&quot;194&quot; data-start=&quot;146&quot; data-ke-size=&quot;size23&quot;&gt;Instantiate부터 Destroy까지, 실제로 가장 많이 쓰는 것들만 정리&lt;/h3&gt;
&lt;p data-end=&quot;239&quot; data-start=&quot;196&quot; data-ke-size=&quot;size16&quot;&gt;Unity로 게임을 만들다 보면&lt;br /&gt;결국 계속 반복하게 되는 작업이 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;282&quot; data-start=&quot;241&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;247&quot; data-start=&quot;241&quot;&gt;적 생성&lt;/li&gt;
&lt;li data-end=&quot;255&quot; data-start=&quot;248&quot;&gt;총알 생성&lt;/li&gt;
&lt;li data-end=&quot;264&quot; data-start=&quot;256&quot;&gt;이펙트 생성&lt;/li&gt;
&lt;li data-end=&quot;274&quot; data-start=&quot;265&quot;&gt;오브젝트 삭제&lt;/li&gt;
&lt;li data-end=&quot;282&quot; data-start=&quot;275&quot;&gt;다시 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;323&quot; data-start=&quot;284&quot; data-ke-size=&quot;size16&quot;&gt;처음엔 그냥 튜토리얼 따라 치다가&lt;br /&gt;어느 순간 이런 고민이 생깁니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;414&quot; data-start=&quot;325&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;414&quot; data-start=&quot;327&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;이거 계속 Instantiate / Destroy 써도 되나?&amp;rdquo;&lt;br /&gt;&amp;ldquo;SetActive랑 뭐가 다른 거지?&amp;rdquo;&lt;br /&gt;&amp;ldquo;왜 프레임이 갑자기 떨어지지&amp;hellip;?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;519&quot; data-start=&quot;416&quot; data-ke-size=&quot;size16&quot;&gt;저도 이 부분에서 꽤 많이 삽질했습니다.&lt;br /&gt;그래서 이 글에서는&lt;br /&gt;&lt;b&gt;Unity에서 오브젝트 생성&amp;middot;삭제할 때 실제로 가장 많이 쓰는 함수들&lt;/b&gt;을&lt;br /&gt;실전 기준으로 정리해보려고 합니다.&lt;/p&gt;
&lt;hr data-end=&quot;524&quot; data-start=&quot;521&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;560&quot; data-start=&quot;526&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ Instantiate() &amp;ndash; 오브젝트 생성의 시작&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;Instantiate(prefab); &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;630&quot; data-start=&quot;598&quot; data-ke-size=&quot;size16&quot;&gt;Unity에서 오브젝트를 만드는 가장 기본적인 방법입니다.&lt;/p&gt;
&lt;p data-end=&quot;643&quot; data-start=&quot;632&quot; data-ke-size=&quot;size16&quot;&gt;보통 이렇게 씁니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;Instantiate(prefab, position, rotation); &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;712&quot; data-start=&quot;701&quot; data-ke-size=&quot;size16&quot;&gt;주로 사용하는 상황:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;747&quot; data-start=&quot;713&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;719&quot; data-start=&quot;713&quot;&gt;적 스폰&lt;/li&gt;
&lt;li data-end=&quot;727&quot; data-start=&quot;720&quot;&gt;총알 발사&lt;/li&gt;
&lt;li data-end=&quot;736&quot; data-start=&quot;728&quot;&gt;이펙트 생성&lt;/li&gt;
&lt;li data-end=&quot;747&quot; data-start=&quot;737&quot;&gt;UI 동적 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;776&quot; data-start=&quot;749&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;프리팹 기반 생성&lt;/b&gt;이 기본 패턴입니다.&lt;/p&gt;
&lt;h3 data-end=&quot;787&quot; data-start=&quot;778&quot; data-ke-size=&quot;size23&quot;&gt;주의할 점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;839&quot; data-start=&quot;788&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;809&quot; data-start=&quot;788&quot;&gt;너무 자주 호출하면 성능 문제 발생&lt;/li&gt;
&lt;li data-end=&quot;839&quot; data-start=&quot;810&quot;&gt;Update에서 무분별하게 쓰면 프레임 드랍 직행&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;844&quot; data-start=&quot;841&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;885&quot; data-start=&quot;846&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ Destroy() &amp;ndash; 가장 쉬운 삭제, 하지만 함정도 많음&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;Destroy(gameObject); &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;939&quot; data-start=&quot;923&quot; data-ke-size=&quot;size16&quot;&gt;오브젝트를 완전히 삭제합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;Destroy(gameObject, &lt;/span&gt;&lt;span&gt;&lt;span&gt;2f&lt;/span&gt;&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;span&gt;&lt;span&gt;// 2초 후 삭제&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1001&quot; data-start=&quot;992&quot; data-ke-size=&quot;size16&quot;&gt;자주 쓰는 경우:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1033&quot; data-start=&quot;1002&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1010&quot; data-start=&quot;1002&quot;&gt;이펙트 정리&lt;/li&gt;
&lt;li data-end=&quot;1020&quot; data-start=&quot;1011&quot;&gt;죽은 적 제거&lt;/li&gt;
&lt;li data-end=&quot;1033&quot; data-start=&quot;1021&quot;&gt;임시 오브젝트 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1051&quot; data-start=&quot;1035&quot; data-ke-size=&quot;size23&quot;&gt;문제는 여기서부터입니다&lt;/h3&gt;
&lt;p data-end=&quot;1143&quot; data-start=&quot;1053&quot; data-ke-size=&quot;size16&quot;&gt;Destroy는 &lt;b&gt;즉시 메모리에서 사라지는 게 아닙니다.&lt;/b&gt;&lt;br /&gt;GC(가비지 컬렉션) 타이밍에 영향을 주고,&lt;br /&gt;많이 쓰면 &lt;b&gt;프레임 드랍의 원인&lt;/b&gt;이 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1180&quot; data-start=&quot;1145&quot; data-ke-size=&quot;size16&quot;&gt;그래서 실무에서는&lt;br /&gt;&amp;ldquo;무조건 Destroy&amp;rdquo;는 잘 안 씁니다.&lt;/p&gt;
&lt;hr data-end=&quot;1185&quot; data-start=&quot;1182&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1229&quot; data-start=&quot;1187&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ SetActive() &amp;ndash; Destroy보다 더 자주 쓰이는 함수&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;gameObject.SetActive(&lt;/span&gt;&lt;span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span&gt;); gameObject.SetActive(&lt;/span&gt;&lt;span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1333&quot; data-start=&quot;1303&quot; data-ke-size=&quot;size16&quot;&gt;오브젝트를 삭제하지 않고&lt;br /&gt;&lt;b&gt;비활성화만&lt;/b&gt; 합니다.&lt;/p&gt;
&lt;p data-end=&quot;1343&quot; data-start=&quot;1335&quot; data-ke-size=&quot;size16&quot;&gt;주 사용 사례:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1375&quot; data-start=&quot;1344&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1355&quot; data-start=&quot;1344&quot;&gt;총알, 적 재사용&lt;/li&gt;
&lt;li data-end=&quot;1366&quot; data-start=&quot;1356&quot;&gt;UI 열고 닫기&lt;/li&gt;
&lt;li data-end=&quot;1375&quot; data-start=&quot;1367&quot;&gt;이펙트 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1436&quot; data-start=&quot;1377&quot; data-ke-size=&quot;size16&quot;&gt;  성능 관점에서는&lt;br /&gt;&lt;b&gt;Destroy보다 SetActive가 훨씬 안전한 선택&lt;/b&gt;인 경우가 많습니다.&lt;/p&gt;
&lt;hr data-end=&quot;1441&quot; data-start=&quot;1438&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1478&quot; data-start=&quot;1443&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ Destroy vs SetActive 차이 (중요)&lt;/h2&gt;
&lt;p data-end=&quot;1501&quot; data-start=&quot;1480&quot; data-ke-size=&quot;size16&quot;&gt;이건 꼭 한 번 정리하고 가야 합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;구분DestroySetActive
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1635&quot; data-start=&quot;1503&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1635&quot; data-start=&quot;1549&quot;&gt;
&lt;tr data-end=&quot;1568&quot; data-start=&quot;1549&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1555&quot; data-start=&quot;1549&quot;&gt;메모리&lt;/td&gt;
&lt;td data-end=&quot;1561&quot; data-start=&quot;1555&quot; data-col-size=&quot;sm&quot;&gt;해제됨&lt;/td&gt;
&lt;td data-end=&quot;1568&quot; data-start=&quot;1561&quot; data-col-size=&quot;sm&quot;&gt;유지됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1590&quot; data-start=&quot;1569&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1574&quot; data-start=&quot;1569&quot;&gt;성능&lt;/td&gt;
&lt;td data-end=&quot;1581&quot; data-start=&quot;1574&quot; data-col-size=&quot;sm&quot;&gt;비용 큼&lt;/td&gt;
&lt;td data-end=&quot;1590&quot; data-start=&quot;1581&quot; data-col-size=&quot;sm&quot;&gt;비용 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1608&quot; data-start=&quot;1591&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1597&quot; data-start=&quot;1591&quot;&gt;재사용&lt;/td&gt;
&lt;td data-end=&quot;1602&quot; data-start=&quot;1597&quot; data-col-size=&quot;sm&quot;&gt;불가&lt;/td&gt;
&lt;td data-end=&quot;1608&quot; data-start=&quot;1602&quot; data-col-size=&quot;sm&quot;&gt;가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1635&quot; data-start=&quot;1609&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1617&quot; data-start=&quot;1609&quot;&gt;사용 용도&lt;/td&gt;
&lt;td data-end=&quot;1625&quot; data-start=&quot;1617&quot; data-col-size=&quot;sm&quot;&gt;완전 제거&lt;/td&gt;
&lt;td data-end=&quot;1635&quot; data-start=&quot;1625&quot; data-col-size=&quot;sm&quot;&gt;임시 비활성&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1701&quot; data-start=&quot;1637&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;반복 생성/삭제되는 오브젝트&lt;/b&gt;라면&lt;br /&gt;Destroy 대신 SetActive를 먼저 고민하는 게 좋습니다.&lt;/p&gt;
&lt;hr data-end=&quot;1706&quot; data-start=&quot;1703&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1743&quot; data-start=&quot;1708&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ 오브젝트 풀링(Object Pooling)과 연결됨&lt;/h2&gt;
&lt;p data-end=&quot;1774&quot; data-start=&quot;1745&quot; data-ke-size=&quot;size16&quot;&gt;여기까지 오면&lt;br /&gt;자연스럽게 이 개념으로 이어집니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;1802&quot; data-start=&quot;1776&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1802&quot; data-start=&quot;1778&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;그럼 미리 만들어두고 켜고 끄면 되겠네?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1845&quot; data-start=&quot;1804&quot; data-ke-size=&quot;size16&quot;&gt;맞습니다.&lt;br /&gt;그래서 Unity에서는 &lt;b&gt;오브젝트 풀링&lt;/b&gt;을 많이 씁니다.&lt;/p&gt;
&lt;p data-end=&quot;1853&quot; data-start=&quot;1847&quot; data-ke-size=&quot;size16&quot;&gt;기본 흐름:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1929&quot; data-start=&quot;1854&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1877&quot; data-start=&quot;1854&quot;&gt;게임 시작 시 오브젝트 여러 개 생성&lt;/li&gt;
&lt;li data-end=&quot;1902&quot; data-start=&quot;1878&quot;&gt;필요할 때 SetActive(true)&lt;/li&gt;
&lt;li data-end=&quot;1929&quot; data-start=&quot;1903&quot;&gt;사용 끝나면 SetActive(false)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;1989&quot; data-start=&quot;1931&quot; data-ke-size=&quot;size16&quot;&gt;  Instantiate / Destroy 남용으로 인한&lt;br /&gt;성능 문제를 해결하는 대표적인 패턴입니다.&lt;/p&gt;
&lt;hr data-end=&quot;1994&quot; data-start=&quot;1991&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2026&quot; data-start=&quot;1996&quot; data-ke-size=&quot;size26&quot;&gt;6️⃣ transform으로 생성 직후 위치 조정&lt;/h2&gt;
&lt;p data-end=&quot;2052&quot; data-start=&quot;2028&quot; data-ke-size=&quot;size16&quot;&gt;오브젝트 생성 후 거의 항상 같이 쓰입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;GameObject obj = Instantiate(prefab); obj.transform.position = spawnPosition; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2155&quot; data-start=&quot;2147&quot; data-ke-size=&quot;size16&quot;&gt;또는 한 줄로:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;Instantiate(prefab, spawnPosition, Quaternion.identity); &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2259&quot; data-start=&quot;2229&quot; data-ke-size=&quot;size16&quot;&gt;  생성 + 위치 지정은 거의 세트라고 봐도 됩니다.&lt;/p&gt;
&lt;hr data-end=&quot;2264&quot; data-start=&quot;2261&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2290&quot; data-start=&quot;2266&quot; data-ke-size=&quot;size26&quot;&gt;7️⃣ 부모 지정 (SetParent)&lt;/h2&gt;
&lt;p data-end=&quot;2312&quot; data-start=&quot;2292&quot; data-ke-size=&quot;size16&quot;&gt;UI나 그룹 관리할 때 자주 씁니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;obj.transform.SetParent(parentTransform); &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2378&quot; data-start=&quot;2371&quot; data-ke-size=&quot;size16&quot;&gt;주 사용 예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2406&quot; data-start=&quot;2379&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2389&quot; data-start=&quot;2379&quot;&gt;UI 동적 생성&lt;/li&gt;
&lt;li data-end=&quot;2406&quot; data-start=&quot;2390&quot;&gt;여러 오브젝트 묶어서 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;2411&quot; data-start=&quot;2408&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2427&quot; data-start=&quot;2413&quot; data-ke-size=&quot;size26&quot;&gt;정리해보면 이렇습니다&lt;/h2&gt;
&lt;p data-end=&quot;2480&quot; data-start=&quot;2429&quot; data-ke-size=&quot;size16&quot;&gt;Unity에서 오브젝트 생성&amp;middot;삭제 관련해서&lt;br /&gt;&lt;b&gt;실제로 손이 가장 많이 가는 함수들&lt;/b&gt;은:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2560&quot; data-start=&quot;2482&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2497&quot; data-start=&quot;2482&quot;&gt;Instantiate&lt;/li&gt;
&lt;li data-end=&quot;2509&quot; data-start=&quot;2498&quot;&gt;Destroy&lt;/li&gt;
&lt;li data-end=&quot;2523&quot; data-start=&quot;2510&quot;&gt;SetActive&lt;/li&gt;
&lt;li data-end=&quot;2546&quot; data-start=&quot;2524&quot;&gt;transform.position&lt;/li&gt;
&lt;li data-end=&quot;2560&quot; data-start=&quot;2547&quot;&gt;SetParent&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2577&quot; data-start=&quot;2562&quot; data-ke-size=&quot;size16&quot;&gt;그리고 중요한 포인트 하나.&lt;/p&gt;
&lt;p data-end=&quot;2616&quot; data-start=&quot;2579&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;Destroy는 최후의 수단처럼 생각하는 게 좋습니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-end=&quot;2621&quot; data-start=&quot;2618&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2629&quot; data-start=&quot;2623&quot; data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-end=&quot;2684&quot; data-start=&quot;2631&quot; data-ke-size=&quot;size16&quot;&gt;처음 Unity 할 때는&lt;br /&gt;Instantiate / Destroy만 알아도 게임은 돌아갑니다.&lt;/p&gt;
&lt;p data-end=&quot;2722&quot; data-start=&quot;2686&quot; data-ke-size=&quot;size16&quot;&gt;하지만&lt;br /&gt;조금만 규모가 커지면&lt;br /&gt;성능 이슈가 바로 드러납니다.&lt;/p&gt;
&lt;p data-end=&quot;2788&quot; data-start=&quot;2724&quot; data-ke-size=&quot;size16&quot;&gt;이 글을 보고&lt;br /&gt;&amp;ldquo;아, 이건 Destroy 말고 SetActive 써야겠네&amp;rdquo;&lt;br /&gt;이 정도만 느껴졌다면 충분합니다.&lt;/p&gt;</description>
      <category>Unity</category>
      <category>Destroy</category>
      <category>gamedev</category>
      <category>instantiate</category>
      <category>Unity</category>
      <category>게임개발</category>
      <category>오브젝트풀링</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/55</guid>
      <comments>https://program-note.tistory.com/55#entry55comment</comments>
      <pubDate>Thu, 5 Feb 2026 11:33:57 +0900</pubDate>
    </item>
    <item>
      <title>Unity 라이프사이클 함수 한 번에 정리 (Awake, Start, Update)</title>
      <link>https://program-note.tistory.com/53</link>
      <description>&lt;h3 data-end=&quot;197&quot; data-start=&quot;168&quot; data-ke-size=&quot;size23&quot;&gt;게임 만들다 보면 자연스럽게 외우게 되는 것들&lt;/h3&gt;
&lt;p data-end=&quot;251&quot; data-start=&quot;199&quot; data-ke-size=&quot;size16&quot;&gt;Unity로 게임을 처음 만들기 시작하면&lt;br /&gt;제일 먼저 마주치는 게 &lt;b&gt;함수 이름들&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;330&quot; data-start=&quot;253&quot; data-ke-size=&quot;size16&quot;&gt;Start, Update, OnCollisionEnter&amp;hellip;&lt;br /&gt;튜토리얼에서는 막 쓰라고 하는데,&lt;br /&gt;막상 보면 이런 생각 들죠.&lt;/p&gt;
&lt;blockquote data-end=&quot;405&quot; data-start=&quot;332&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;405&quot; data-start=&quot;334&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;이 함수는 언제 호출되는 거지?&amp;rdquo;&lt;br /&gt;&amp;ldquo;이걸 왜 여기다 쓰는 거야?&amp;rdquo;&lt;br /&gt;&amp;ldquo;Update에 다 때려 넣으면 안 되나&amp;hellip;?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;493&quot; data-start=&quot;407&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔&lt;br /&gt;&lt;b&gt;일단 돌아가면 OK&lt;/b&gt; 마인드로 개발하다가&lt;br /&gt;프레임 떨어지고, 버그 터지고 나서&lt;br /&gt;그제야 함수 역할을 하나씩 이해하기 시작했습니다.&lt;/p&gt;
&lt;p data-end=&quot;553&quot; data-start=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는&lt;br /&gt;&lt;b&gt;Unity에서 정말 자주 쓰이는 함수들만&lt;/b&gt;&lt;br /&gt;실제 사용 기준으로 정리해보겠습니다.&lt;/p&gt;
&lt;hr data-end=&quot;558&quot; data-start=&quot;555&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;574&quot; data-start=&quot;560&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ Start()&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Start&lt;/span&gt;&lt;/span&gt;&lt;span&gt;() { } &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;652&quot; data-start=&quot;608&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;633&quot; data-start=&quot;608&quot;&gt;&lt;b&gt;스크립트가 활성화될 때 한 번 호출&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;652&quot; data-start=&quot;634&quot;&gt;초기화 용도로 가장 많이 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;666&quot; data-start=&quot;654&quot; data-ke-size=&quot;size16&quot;&gt;보통 여기서 하는 일:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;729&quot; data-start=&quot;667&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;678&quot; data-start=&quot;667&quot;&gt;변수 초기값 세팅&lt;/li&gt;
&lt;li data-end=&quot;710&quot; data-start=&quot;679&quot;&gt;컴포넌트 참조 가져오기 (GetComponent)&lt;/li&gt;
&lt;li data-end=&quot;729&quot; data-start=&quot;711&quot;&gt;시작 시 한 번만 실행될 로직&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;784&quot; data-start=&quot;731&quot; data-ke-size=&quot;size16&quot;&gt;  게임 시작 시 딱 한 번 실행하고 싶은 로직이면&lt;br /&gt;대부분 Start()에 들어갑니다.&lt;/p&gt;
&lt;hr data-end=&quot;789&quot; data-start=&quot;786&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;806&quot; data-start=&quot;791&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ Update()&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Update&lt;/span&gt;&lt;/span&gt;&lt;span&gt;() { } &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;889&quot; data-start=&quot;841&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;857&quot; data-start=&quot;841&quot;&gt;&lt;b&gt;매 프레임마다 호출&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;889&quot; data-start=&quot;858&quot;&gt;Unity에서 제일 많이 쓰이면서, 제일 위험한 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;899&quot; data-start=&quot;891&quot; data-ke-size=&quot;size16&quot;&gt;주 사용 용도:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;930&quot; data-start=&quot;900&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;909&quot; data-start=&quot;900&quot;&gt;키 입력 처리&lt;/li&gt;
&lt;li data-end=&quot;918&quot; data-start=&quot;910&quot;&gt;캐릭터 이동&lt;/li&gt;
&lt;li data-end=&quot;930&quot; data-start=&quot;919&quot;&gt;실시간 상태 체크&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;980&quot; data-start=&quot;932&quot; data-ke-size=&quot;size16&quot;&gt;⚠️ 주의할 점&lt;br /&gt;Update 안에 무거운 로직 넣으면&lt;br /&gt;프레임 드랍 바로 옵니다.&lt;/p&gt;
&lt;hr data-end=&quot;1019&quot; data-start=&quot;1016&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1041&quot; data-start=&quot;1021&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ FixedUpdate()&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;FixedUpdate&lt;/span&gt;&lt;/span&gt;&lt;span&gt;() { } &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1112&quot; data-start=&quot;1081&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1095&quot; data-start=&quot;1081&quot;&gt;&lt;b&gt;물리 연산 전용&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1112&quot; data-start=&quot;1096&quot;&gt;일정한 시간 간격으로 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1123&quot; data-start=&quot;1114&quot; data-ke-size=&quot;size16&quot;&gt;주로 쓰는 경우:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1154&quot; data-start=&quot;1124&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1138&quot; data-start=&quot;1124&quot;&gt;Rigidbody 이동&lt;/li&gt;
&lt;li data-end=&quot;1154&quot; data-start=&quot;1139&quot;&gt;물리 기반 캐릭터 컨트롤&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1223&quot; data-start=&quot;1156&quot; data-ke-size=&quot;size16&quot;&gt;  AddForce, velocity 조작은&lt;br /&gt;Update 말고 &lt;b&gt;FixedUpdate&lt;/b&gt;가 정석입니다.&lt;/p&gt;
&lt;hr data-end=&quot;1228&quot; data-start=&quot;1225&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1249&quot; data-start=&quot;1230&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ LateUpdate()&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;LateUpdate&lt;/span&gt;&lt;/span&gt;&lt;span&gt;() { } &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1329&quot; data-start=&quot;1288&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1308&quot; data-start=&quot;1288&quot;&gt;모든 Update가 끝난 뒤 실행&lt;/li&gt;
&lt;li data-end=&quot;1329&quot; data-start=&quot;1309&quot;&gt;&lt;b&gt;카메라 처리에서 자주 사용&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1338&quot; data-start=&quot;1331&quot; data-ke-size=&quot;size16&quot;&gt;대표적인 예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1377&quot; data-start=&quot;1339&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1353&quot; data-start=&quot;1339&quot;&gt;캐릭터 따라오는 카메라&lt;/li&gt;
&lt;li data-end=&quot;1377&quot; data-start=&quot;1354&quot;&gt;Update에서 변경된 값 기준 후처리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1425&quot; data-start=&quot;1379&quot; data-ke-size=&quot;size16&quot;&gt;  &amp;ldquo;다 끝난 다음에 처리해야 하는 것&amp;rdquo;은&lt;br /&gt;LateUpdate가 딱 맞습니다.&lt;/p&gt;
&lt;hr data-end=&quot;1430&quot; data-start=&quot;1427&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1457&quot; data-start=&quot;1432&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ OnCollisionEnter()&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;OnCollisionEnter&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;Collision collision&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) { } &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1576&quot; data-start=&quot;1521&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1564&quot; data-start=&quot;1521&quot;&gt;&lt;b&gt;Collider + Rigidbody&lt;/b&gt;가 있을 때 충돌 발생 시 호출&lt;/li&gt;
&lt;li data-end=&quot;1576&quot; data-start=&quot;1565&quot;&gt;물리 충돌 처리용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1583&quot; data-start=&quot;1578&quot; data-ke-size=&quot;size16&quot;&gt;사용 예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1611&quot; data-start=&quot;1584&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1598&quot; data-start=&quot;1584&quot;&gt;플레이어가 적과 부딪힘&lt;/li&gt;
&lt;li data-end=&quot;1611&quot; data-start=&quot;1599&quot;&gt;벽에 닿았는지 체크&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1621&quot; data-start=&quot;1613&quot; data-ke-size=&quot;size16&quot;&gt;비슷한 함수들:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1661&quot; data-start=&quot;1622&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1641&quot; data-start=&quot;1622&quot;&gt;OnCollisionStay&lt;/li&gt;
&lt;li data-end=&quot;1661&quot; data-start=&quot;1642&quot;&gt;OnCollisionExit&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1666&quot; data-start=&quot;1663&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1691&quot; data-start=&quot;1668&quot; data-ke-size=&quot;size26&quot;&gt;6️⃣ OnTriggerEnter()&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;OnTriggerEnter&lt;/span&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&lt;span&gt;Collider other&lt;/span&gt;&lt;/span&gt;&lt;span&gt;) { } &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1798&quot; data-start=&quot;1748&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1779&quot; data-start=&quot;1748&quot;&gt;Trigger로 설정된 Collider 충돌 시 호출&lt;/li&gt;
&lt;li data-end=&quot;1798&quot; data-start=&quot;1780&quot;&gt;물리 반응 없이 이벤트만 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1807&quot; data-start=&quot;1800&quot; data-ke-size=&quot;size16&quot;&gt;주 사용 예:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1840&quot; data-start=&quot;1808&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1816&quot; data-start=&quot;1808&quot;&gt;아이템 획득&lt;/li&gt;
&lt;li data-end=&quot;1830&quot; data-start=&quot;1817&quot;&gt;특정 구역 진입 체크&lt;/li&gt;
&lt;li data-end=&quot;1840&quot; data-start=&quot;1831&quot;&gt;이벤트 트리거&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1885&quot; data-start=&quot;1842&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;이벤트용 충돌 = Trigger&lt;/b&gt;&lt;br /&gt;이건 거의 공식처럼 쓰입니다.&lt;/p&gt;
&lt;hr data-end=&quot;1890&quot; data-start=&quot;1887&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1906&quot; data-start=&quot;1892&quot; data-ke-size=&quot;size26&quot;&gt;7️⃣ Awake()&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;Awake&lt;/span&gt;&lt;/span&gt;&lt;span&gt;() { } &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1971&quot; data-start=&quot;1940&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1955&quot; data-start=&quot;1940&quot;&gt;Start보다 먼저 호출&lt;/li&gt;
&lt;li data-end=&quot;1971&quot; data-start=&quot;1956&quot;&gt;오브젝트 생성 직후 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1982&quot; data-start=&quot;1973&quot; data-ke-size=&quot;size16&quot;&gt;주로 쓰는 경우:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2016&quot; data-start=&quot;1983&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1991&quot; data-start=&quot;1983&quot;&gt;싱글톤 패턴&lt;/li&gt;
&lt;li data-end=&quot;2016&quot; data-start=&quot;1992&quot;&gt;다른 오브젝트보다 먼저 초기화해야 할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2043&quot; data-start=&quot;2018&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;초기화 순서가 중요하면 Awake&lt;/b&gt;&lt;/p&gt;
&lt;hr data-end=&quot;2048&quot; data-start=&quot;2045&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2077&quot; data-start=&quot;2050&quot; data-ke-size=&quot;size26&quot;&gt;8️⃣ OnEnable / OnDisable&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;OnEnable&lt;/span&gt;&lt;/span&gt;&lt;span&gt;() { } &lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;OnDisable&lt;/span&gt;&lt;/span&gt;&lt;span&gt;() { } &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2153&quot; data-start=&quot;2135&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2153&quot; data-start=&quot;2135&quot;&gt;오브젝트 활성/비활성 시 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2165&quot; data-start=&quot;2155&quot; data-ke-size=&quot;size16&quot;&gt;자주 쓰이는 상황:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2195&quot; data-start=&quot;2166&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2179&quot; data-start=&quot;2166&quot;&gt;이벤트 구독 / 해제&lt;/li&gt;
&lt;li data-end=&quot;2195&quot; data-start=&quot;2180&quot;&gt;UI 열고 닫을 때 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2225&quot; data-start=&quot;2197&quot; data-ke-size=&quot;size16&quot;&gt;  UI 시스템 만들 때 생각보다 자주 쓰입니다.&lt;/p&gt;
&lt;hr data-end=&quot;2230&quot; data-start=&quot;2227&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2252&quot; data-start=&quot;2232&quot; data-ke-size=&quot;size26&quot;&gt;정리하면 이렇게 외우면 편합니다&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2393&quot; data-start=&quot;2254&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2272&quot; data-start=&quot;2254&quot;&gt;&lt;b&gt;Awake&lt;/b&gt;: 제일 먼저&lt;/li&gt;
&lt;li data-end=&quot;2295&quot; data-start=&quot;2273&quot;&gt;&lt;b&gt;Start&lt;/b&gt;: 시작할 때 한 번&lt;/li&gt;
&lt;li data-end=&quot;2315&quot; data-start=&quot;2296&quot;&gt;&lt;b&gt;Update&lt;/b&gt;: 매 프레임&lt;/li&gt;
&lt;li data-end=&quot;2337&quot; data-start=&quot;2316&quot;&gt;&lt;b&gt;FixedUpdate&lt;/b&gt;: 물리&lt;/li&gt;
&lt;li data-end=&quot;2359&quot; data-start=&quot;2338&quot;&gt;&lt;b&gt;LateUpdate&lt;/b&gt;: 마무리&lt;/li&gt;
&lt;li data-end=&quot;2393&quot; data-start=&quot;2360&quot;&gt;&lt;b&gt;Collision / Trigger&lt;/b&gt;: 충돌 이벤트&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2452&quot; data-start=&quot;2395&quot; data-ke-size=&quot;size16&quot;&gt;처음엔 전부 외우려고 하지 말고&lt;br /&gt;&lt;b&gt;&amp;ldquo;아, 이럴 땐 이 함수구나&amp;rdquo;&lt;/b&gt; 정도만 감 잡아도 충분합니다.&lt;/p&gt;
&lt;hr data-end=&quot;2457&quot; data-start=&quot;2454&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2467&quot; data-start=&quot;2459&quot; data-ke-size=&quot;size26&quot;&gt;마무리하며&lt;/h2&gt;
&lt;p data-end=&quot;2509&quot; data-start=&quot;2469&quot; data-ke-size=&quot;size16&quot;&gt;Unity 개발하다 보면&lt;br /&gt;이 함수들은 결국 &lt;b&gt;몸에 익게 됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2553&quot; data-start=&quot;2511&quot; data-ke-size=&quot;size16&quot;&gt;문제는&lt;br /&gt;아무 생각 없이 쓰면&lt;br /&gt;나중에 디버깅이 지옥이 된다는 점입니다.&lt;/p&gt;
&lt;p data-end=&quot;2615&quot; data-start=&quot;2555&quot; data-ke-size=&quot;size16&quot;&gt;이 글을 보고&lt;br /&gt;&amp;ldquo;아 이건 Update에 넣으면 안 되겠네&amp;rdquo;&lt;br /&gt;이 정도만 느껴져도 충분히 의미 있습니다.&lt;/p&gt;</description>
      <category>Unity</category>
      <category>csharp</category>
      <category>gamedev</category>
      <category>Unity</category>
      <category>Unity초보</category>
      <category>게임개발</category>
      <category>게임프로그래밍</category>
      <category>유니티</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/53</guid>
      <comments>https://program-note.tistory.com/53#entry53comment</comments>
      <pubDate>Wed, 4 Feb 2026 09:15:30 +0900</pubDate>
    </item>
    <item>
      <title>리액트 개발자를 위한 Animated 설명</title>
      <link>https://program-note.tistory.com/52</link>
      <description>&lt;h3 data-end=&quot;191&quot; data-start=&quot;160&quot; data-ke-size=&quot;size23&quot;&gt;&amp;ldquo;왜 써야 하는지부터, 언제 쓰면 안 되는지까지&amp;rdquo;&lt;/h3&gt;
&lt;p data-end=&quot;250&quot; data-start=&quot;193&quot; data-ke-size=&quot;size16&quot;&gt;React Native를 하다 보면&lt;br /&gt;한 번쯤은 Animated를 마주치게 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;298&quot; data-start=&quot;252&quot; data-ke-size=&quot;size16&quot;&gt;공식 문서도 있고 예제도 많은데,&lt;br /&gt;막상 써보려고 하면 이런 생각이 먼저 듭니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;372&quot; data-start=&quot;300&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;372&quot; data-start=&quot;302&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;이거&amp;hellip; 왜 이렇게 어려워?&amp;rdquo;&lt;br /&gt;&amp;ldquo;useState로 opacity 바꾸면 되는 거 아냐?&amp;rdquo;&lt;br /&gt;&amp;ldquo;이걸 꼭 써야 해?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;458&quot; data-start=&quot;374&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔 Animated가 괜히 복잡한 API 같았고,&lt;br /&gt;실제로 몇 번은 &lt;b&gt;안 써도 될 곳에 억지로 쓰다가&lt;/b&gt; 코드만 더 꼬였던 적도 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;536&quot; data-start=&quot;460&quot; data-ke-size=&quot;size16&quot;&gt;이 글에서는&lt;br /&gt;&lt;b&gt;리액트 개발자 기준에서 Animated를 왜 쓰는지, 언제 써야 하는지&lt;/b&gt;&lt;br /&gt;최대한 사람 말로 정리해보려고 합니다.&lt;/p&gt;
&lt;hr data-end=&quot;541&quot; data-start=&quot;538&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;565&quot; data-start=&quot;543&quot; data-ke-size=&quot;size26&quot;&gt;Animated는 뭐 하는 놈인가?&lt;/h2&gt;
&lt;p data-end=&quot;582&quot; data-start=&quot;567&quot; data-ke-size=&quot;size16&quot;&gt;한 줄로 요약하면 이겁니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;623&quot; data-start=&quot;584&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;623&quot; data-start=&quot;586&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;ldquo;부드러운 애니메이션을 성능 저하 없이 처리하기 위한 도구&amp;rdquo;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;691&quot; data-start=&quot;625&quot; data-ke-size=&quot;size16&quot;&gt;일반적인 리액트 상태 변경(useState)으로도&lt;br /&gt;opacity, translate 정도는 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;709&quot; data-start=&quot;693&quot; data-ke-size=&quot;size16&quot;&gt;그런데 문제가 하나 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;724&quot; data-start=&quot;711&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;프레임 드랍&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;810&quot; data-start=&quot;726&quot; data-ke-size=&quot;size16&quot;&gt;특히 React Native에서는&lt;br /&gt;JS 스레드가 바쁠 때 애니메이션까지 같이 돌리면&lt;br /&gt;스크롤이 끊기거나 터치가 먹통이 되는 상황이 자주 나옵니다.&lt;/p&gt;
&lt;p data-end=&quot;843&quot; data-start=&quot;812&quot; data-ke-size=&quot;size16&quot;&gt;Animated는 이걸 해결하려고 만들어진 API입니다.&lt;/p&gt;
&lt;hr data-end=&quot;848&quot; data-start=&quot;845&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;882&quot; data-start=&quot;850&quot; data-ke-size=&quot;size26&quot;&gt;useState 애니메이션 vs Animated 차이&lt;/h2&gt;
&lt;p data-end=&quot;906&quot; data-start=&quot;884&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 이런 코드가 있다고 해봅시다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770009241975&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const [opacity, setOpacity] = useState(0);

setOpacity(1);
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1021&quot; data-start=&quot;979&quot; data-ke-size=&quot;size16&quot;&gt;이건 &lt;b&gt;즉시 값이 바뀌는 것&lt;/b&gt;이지&lt;br /&gt;&amp;ldquo;부드럽게 변화&amp;rdquo;하는 건 아닙니다.&lt;/p&gt;
&lt;p data-end=&quot;1092&quot; data-start=&quot;1023&quot; data-ke-size=&quot;size16&quot;&gt;물론 setInterval이나 setTimeout으로 흉내는 낼 수 있지만&lt;br /&gt;  성능도 안 좋고, 코드도 지옥이 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;1112&quot; data-start=&quot;1094&quot; data-ke-size=&quot;size16&quot;&gt;Animated는 이렇게 씁니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1770009261920&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const opacity = useRef(new Animated.Value(0)).current;

Animated.timing(opacity, {
  toValue: 1,
  duration: 300,
  useNativeDriver: true,
}).start();&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1293&quot; data-start=&quot;1277&quot; data-ke-size=&quot;size16&quot;&gt;여기서 핵심은 이 옵션입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;useNativeDriver&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1353&quot; data-start=&quot;1328&quot; data-ke-size=&quot;size16&quot;&gt;이게 바로 Animated의 존재 이유입니다.&lt;/p&gt;
&lt;hr data-end=&quot;1358&quot; data-start=&quot;1355&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1386&quot; data-start=&quot;1360&quot; data-ke-size=&quot;size26&quot;&gt;useNativeDriver가 중요한 이유&lt;/h2&gt;
&lt;p data-end=&quot;1417&quot; data-start=&quot;1388&quot; data-ke-size=&quot;size16&quot;&gt;React Native 구조를 아주 단순하게 말하면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1465&quot; data-start=&quot;1419&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1441&quot; data-start=&quot;1419&quot;&gt;JS 스레드: 로직, 상태, 네트워크&lt;/li&gt;
&lt;li data-end=&quot;1465&quot; data-start=&quot;1442&quot;&gt;Native 스레드: 실제 화면 그리기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1538&quot; data-start=&quot;1467&quot; data-ke-size=&quot;size16&quot;&gt;useNativeDriver: true를 쓰면&lt;br /&gt;  &lt;b&gt;JS 스레드가 바빠도 애니메이션은 네이티브에서 계속 돌아갑니다&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1544&quot; data-start=&quot;1540&quot; data-ke-size=&quot;size16&quot;&gt;그래서:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1591&quot; data-start=&quot;1546&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1569&quot; data-start=&quot;1546&quot;&gt;스크롤 중에도 애니메이션이 끊기지 않고&lt;/li&gt;
&lt;li data-end=&quot;1591&quot; data-start=&quot;1570&quot;&gt;터치 이벤트도 안정적으로 처리됩니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1613&quot; data-start=&quot;1593&quot; data-ke-size=&quot;size16&quot;&gt;이 차이가 실제 앱에서는 꽤 큽니다.&lt;/p&gt;
&lt;hr data-end=&quot;1618&quot; data-start=&quot;1615&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1646&quot; data-start=&quot;1620&quot; data-ke-size=&quot;size26&quot;&gt;Animated를 써야 하는 대표적인 상황&lt;/h2&gt;
&lt;p data-end=&quot;1673&quot; data-start=&quot;1648&quot; data-ke-size=&quot;size16&quot;&gt;제가 실제로 써보면서 느낀 기준은 이렇습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;1689&quot; data-start=&quot;1675&quot; data-ke-size=&quot;size23&quot;&gt;✅ 써야 하는 경우&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1787&quot; data-start=&quot;1690&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1732&quot; data-start=&quot;1690&quot;&gt;opacity, translate, scale 같은 &lt;b&gt;연속적인 변화&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1747&quot; data-start=&quot;1733&quot;&gt;스크롤 연동 애니메이션&lt;/li&gt;
&lt;li data-end=&quot;1768&quot; data-start=&quot;1748&quot;&gt;모달, 바텀시트, 헤더 숨김/노출&lt;/li&gt;
&lt;li data-end=&quot;1787&quot; data-start=&quot;1769&quot;&gt;사용자 체감이 중요한 인터랙션&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1808&quot; data-start=&quot;1789&quot; data-ke-size=&quot;size23&quot;&gt;❌ 굳이 안 써도 되는 경우&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1859&quot; data-start=&quot;1809&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1825&quot; data-start=&quot;1809&quot;&gt;단순 show / hide&lt;/li&gt;
&lt;li data-end=&quot;1842&quot; data-start=&quot;1826&quot;&gt;한 번만 바뀌는 UI 상태&lt;/li&gt;
&lt;li data-end=&quot;1859&quot; data-start=&quot;1843&quot;&gt;성능 영향 없는 작은 UI&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1917&quot; data-start=&quot;1861&quot; data-ke-size=&quot;size16&quot;&gt;Animated는 &lt;b&gt;만능이 아닙니다.&lt;/b&gt;&lt;br /&gt;필요한 곳에만 쓰는 게 오히려 코드 품질이 좋아집니다.&lt;/p&gt;
&lt;hr data-end=&quot;1922&quot; data-start=&quot;1919&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1948&quot; data-start=&quot;1924&quot; data-ke-size=&quot;size26&quot;&gt;Animated가 어렵게 느껴지는 이유&lt;/h2&gt;
&lt;p data-end=&quot;1963&quot; data-start=&quot;1950&quot; data-ke-size=&quot;size16&quot;&gt;대부분 여기서 막힙니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2035&quot; data-start=&quot;1965&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1983&quot; data-start=&quot;1965&quot;&gt;Animated.Value&lt;/li&gt;
&lt;li data-end=&quot;2003&quot; data-start=&quot;1984&quot;&gt;Animated.timing&lt;/li&gt;
&lt;li data-end=&quot;2019&quot; data-start=&quot;2004&quot;&gt;interpolate&lt;/li&gt;
&lt;li data-end=&quot;2035&quot; data-start=&quot;2020&quot;&gt;addListener&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2072&quot; data-start=&quot;2037&quot; data-ke-size=&quot;size16&quot;&gt;솔직히 말하면&lt;br /&gt;&lt;b&gt;API 설계가 직관적인 편은 아닙니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2082&quot; data-start=&quot;2074&quot; data-ke-size=&quot;size16&quot;&gt;그래서 요즘은:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2121&quot; data-start=&quot;2084&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2096&quot; data-start=&quot;2084&quot;&gt;Reanimated&lt;/li&gt;
&lt;li data-end=&quot;2103&quot; data-start=&quot;2097&quot;&gt;Moti&lt;/li&gt;
&lt;li data-end=&quot;2121&quot; data-start=&quot;2104&quot;&gt;Gesture Handler&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2148&quot; data-start=&quot;2123&quot; data-ke-size=&quot;size16&quot;&gt;같은 라이브러리들이 더 많이 쓰이기도 합니다.&lt;/p&gt;
&lt;p data-end=&quot;2182&quot; data-start=&quot;2150&quot; data-ke-size=&quot;size16&quot;&gt;그럼에도 Animated를 알아야 하는 이유는 명확합니다.&lt;/p&gt;
&lt;p data-end=&quot;2223&quot; data-start=&quot;2184&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;기본 개념은 전부 Animated에서 시작했기 때문입니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-end=&quot;2228&quot; data-start=&quot;2225&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2260&quot; data-start=&quot;2230&quot; data-ke-size=&quot;size26&quot;&gt;결론: Animated를 이렇게 생각하면 편합니다&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2361&quot; data-start=&quot;2262&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2291&quot; data-start=&quot;2262&quot;&gt;Animated는 &amp;ldquo;애니메이션용 상태 관리 도구&amp;rdquo;&lt;/li&gt;
&lt;li data-end=&quot;2309&quot; data-start=&quot;2292&quot;&gt;성능이 중요한 순간에만 사용&lt;/li&gt;
&lt;li data-end=&quot;2329&quot; data-start=&quot;2310&quot;&gt;모든 UI에 쓰려고 하지 말 것&lt;/li&gt;
&lt;li data-end=&quot;2361&quot; data-start=&quot;2330&quot;&gt;이해 안 되면 interpolate부터 건너뛰어도 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2422&quot; data-start=&quot;2363&quot; data-ke-size=&quot;size16&quot;&gt;처음엔 어렵게 느껴져도&lt;br /&gt;한두 번 실제 문제를 해결해보면&lt;br /&gt;&amp;ldquo;아, 이래서 쓰는구나&amp;rdquo; 하고 감이 옵니다.&lt;/p&gt;
&lt;p data-end=&quot;2433&quot; data-start=&quot;2424&quot; data-ke-size=&quot;size16&quot;&gt;저도 그랬습니다.&lt;/p&gt;
&lt;hr data-end=&quot;2438&quot; data-start=&quot;2435&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2446&quot; data-start=&quot;2440&quot; data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-end=&quot;2507&quot; data-start=&quot;2448&quot; data-ke-size=&quot;size16&quot;&gt;Animated는&lt;br /&gt;&lt;b&gt;리액트 개발자가 한 단계 올라갈 때 꼭 한 번은 부딪히는 벽&lt;/b&gt; 같은 존재입니다.&lt;/p&gt;
&lt;p data-end=&quot;2557&quot; data-start=&quot;2509&quot; data-ke-size=&quot;size16&quot;&gt;피할 수 있다면 피하고 싶지만,&lt;br /&gt;한 번 넘어두면 이후 UI 구현이 훨씬 편해집니다.&lt;/p&gt;
&lt;p data-end=&quot;2622&quot; data-start=&quot;2559&quot; data-ke-size=&quot;size16&quot;&gt;이 글이&lt;br /&gt;&amp;ldquo;Animated 써야 하나 말아야 하나&amp;rdquo; 고민하는 분들께&lt;br /&gt;조금이라도 기준이 되었으면 좋겠습니다.&lt;/p&gt;</description>
      <category>React Native</category>
      <category>Animated</category>
      <category>React</category>
      <category>ReactNative</category>
      <category>개발블로그</category>
      <category>리액트네이티브</category>
      <category>삽질기록</category>
      <category>프론트엔드</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/52</guid>
      <comments>https://program-note.tistory.com/52#entry52comment</comments>
      <pubDate>Tue, 3 Feb 2026 09:13:35 +0900</pubDate>
    </item>
    <item>
      <title>Sticky Header 터치 안됨 문제 해결 (React Native, 2026)</title>
      <link>https://program-note.tistory.com/51</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;React Native에서 &lt;b&gt;스크롤 중 Sticky Header&lt;/b&gt;를 만들었는데,&lt;br /&gt;버튼이 눌리지 않는 상황, 한 번쯤 겪으셨죠?&lt;/p&gt;
&lt;p data-end=&quot;338&quot; data-start=&quot;234&quot; data-ke-size=&quot;size16&quot;&gt;저도 한참 삽질했습니다.&lt;br /&gt;화면에 분명히 버튼이 보이는데, 눌러도 반응이 없어요.&lt;br /&gt;&amp;ldquo;코드가 잘못됐나?&amp;rdquo; &amp;rarr; &amp;ldquo;라이브러리 버그인가?&amp;rdquo;&lt;br /&gt;몇 시간 동안 고민한 끝에 원인을 찾았습니다.&lt;/p&gt;
&lt;p data-end=&quot;413&quot; data-start=&quot;340&quot; data-ke-size=&quot;size16&quot;&gt;결론부터 말하면,&lt;br /&gt;&lt;b&gt;Sticky Header 위에 다른 View가 겹치거나, 터치 이벤트를 막고 있는 경우가 대부분&lt;/b&gt;입니다.&lt;/p&gt;
&lt;hr data-end=&quot;418&quot; data-start=&quot;415&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;435&quot; data-start=&quot;420&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ 문제 상황 정리&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;564&quot; data-start=&quot;437&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;479&quot; data-start=&quot;437&quot;&gt;FlatList / SectionList에 Sticky Header 적용&lt;/li&gt;
&lt;li data-end=&quot;505&quot; data-start=&quot;480&quot;&gt;버튼, 아이콘 등 터치 컴포넌트 정상 배치&lt;/li&gt;
&lt;li data-end=&quot;531&quot; data-start=&quot;506&quot;&gt;근데 눌러도 onPress 실행 안 됨&lt;/li&gt;
&lt;li data-end=&quot;564&quot; data-start=&quot;532&quot;&gt;iOS는 되는데 Android에서만 안 되는 경우 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;569&quot; data-start=&quot;566&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;583&quot; data-start=&quot;571&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ 원인 분석&lt;/h2&gt;
&lt;h3 data-end=&quot;609&quot; data-start=&quot;585&quot; data-ke-size=&quot;size23&quot;&gt;1. 다른 View가 위에 겹쳐 있음&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;667&quot; data-start=&quot;610&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;636&quot; data-start=&quot;610&quot;&gt;absolute 포지션 / zIndex 겹침&lt;/li&gt;
&lt;li data-end=&quot;667&quot; data-start=&quot;637&quot;&gt;투명 View라도 터치 이벤트를 먼저 가져가면 막힘&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;709&quot; data-start=&quot;669&quot; data-ke-size=&quot;size23&quot;&gt;2. ScrollView / FlatList 스크롤 이벤트와 충돌&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;775&quot; data-start=&quot;710&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;775&quot; data-start=&quot;710&quot;&gt;FlatList가 Sticky Header를 관리할 때, ScrollView와 중첩되면 터치 이벤트 전달이 안 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;801&quot; data-start=&quot;777&quot; data-ke-size=&quot;size23&quot;&gt;3. Android zIndex 문제&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;866&quot; data-start=&quot;802&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;845&quot; data-start=&quot;802&quot;&gt;iOS는 잘 되는데 Android에서는 &lt;b&gt;elevation&lt;/b&gt;이 필요&lt;/li&gt;
&lt;li data-end=&quot;866&quot; data-start=&quot;846&quot;&gt;zIndex만으로는 충분하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;871&quot; data-start=&quot;868&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;885&quot; data-start=&quot;873&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ 해결 방법&lt;/h2&gt;
&lt;h3 data-end=&quot;909&quot; data-start=&quot;887&quot; data-ke-size=&quot;size23&quot;&gt;① pointerEvents 사용&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;View&lt;/span&gt;&lt;/span&gt;&lt;span&gt; pointerEvents=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;box-none&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;span&gt;StickyHeader&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; /&amp;gt; &amp;lt;/&lt;/span&gt;&lt;span&gt;&lt;span&gt;View&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1062&quot; data-start=&quot;980&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1036&quot; data-start=&quot;980&quot;&gt;Sticky Header 외부 View에 pointerEvents=&quot;box-none&quot; 적용&lt;/li&gt;
&lt;li data-end=&quot;1062&quot; data-start=&quot;1037&quot;&gt;버튼이 눌리는 영역만 이벤트를 받도록 조정&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1067&quot; data-start=&quot;1064&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1095&quot; data-start=&quot;1069&quot; data-ke-size=&quot;size23&quot;&gt;② Android elevation 적용&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;style={{ &lt;/span&gt;&lt;span&gt;&lt;span&gt;zIndex&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&lt;span&gt;elevation&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/span&gt;&lt;span&gt;, }} &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1221&quot; data-start=&quot;1150&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1191&quot; data-start=&quot;1150&quot;&gt;Android에서 Sticky Header 버튼이 눌리지 않는 경우&lt;/li&gt;
&lt;li data-end=&quot;1221&quot; data-start=&quot;1192&quot;&gt;zIndex + elevation 함께 적용 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1226&quot; data-start=&quot;1223&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1261&quot; data-start=&quot;1228&quot; data-ke-size=&quot;size23&quot;&gt;③ ScrollView / FlatList 충돌 해결&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1353&quot; data-start=&quot;1262&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1294&quot; data-start=&quot;1262&quot;&gt;ScrollView 안에 FlatList 넣지 않기&lt;/li&gt;
&lt;li data-end=&quot;1353&quot; data-start=&quot;1295&quot;&gt;꼭 필요하면 FlatList keyboardShouldPersistTaps=&quot;handled&quot; 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1358&quot; data-start=&quot;1355&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1383&quot; data-start=&quot;1360&quot; data-ke-size=&quot;size23&quot;&gt;④ Debug: 투명 View 확인&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1397&quot; data-start=&quot;1384&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1397&quot; data-start=&quot;1384&quot;&gt;배경색 잠깐 넣어보기&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;backgroundColor&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&lt;span&gt;'rgba(255,0,0,0.2)'&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1466&quot; data-start=&quot;1446&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1466&quot; data-start=&quot;1446&quot;&gt;눌러도 반응 없는 영역 확인 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1471&quot; data-start=&quot;1468&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1491&quot; data-start=&quot;1473&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ 제가 보는 체크 순서&lt;/h2&gt;
&lt;p data-end=&quot;1517&quot; data-start=&quot;1493&quot; data-ke-size=&quot;size16&quot;&gt;Sticky Header 버튼 안 눌릴 때:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1647&quot; data-start=&quot;1519&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1557&quot; data-start=&quot;1519&quot;&gt;다른 View가 겹치나? (absolute / zIndex)&lt;/li&gt;
&lt;li data-end=&quot;1587&quot; data-start=&quot;1558&quot;&gt;Android면 elevation 적용했나?&lt;/li&gt;
&lt;li data-end=&quot;1621&quot; data-start=&quot;1588&quot;&gt;ScrollView / FlatList 중첩 문제?&lt;/li&gt;
&lt;li data-end=&quot;1647&quot; data-start=&quot;1622&quot;&gt;pointerEvents 조정 필요?&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;1663&quot; data-start=&quot;1649&quot; data-ke-size=&quot;size16&quot;&gt;대부분 여기서 해결됩니다.&lt;/p&gt;
&lt;hr data-end=&quot;1668&quot; data-start=&quot;1665&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1680&quot; data-start=&quot;1670&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ 마무리&lt;/h2&gt;
&lt;p data-end=&quot;1753&quot; data-start=&quot;1682&quot; data-ke-size=&quot;size16&quot;&gt;Sticky Header 터치 안 되는 문제는&lt;br /&gt;&amp;ldquo;코드 문제&amp;rdquo;보다는 &lt;b&gt;레이아웃/스크롤 이벤트 문제&lt;/b&gt;인 경우가 많습니다.&lt;/p&gt;
&lt;p data-end=&quot;1815&quot; data-start=&quot;1755&quot; data-ke-size=&quot;size16&quot;&gt;저처럼 몇 시간 삽질하지 말고,&lt;br /&gt;위 체크리스트대로 순서대로 확인하면 &lt;b&gt;10분 안에 해결&lt;/b&gt; 가능합니다.&lt;/p&gt;</description>
      <category>React Native</category>
      <category>Flatlist</category>
      <category>onpress</category>
      <category>ReactNative</category>
      <category>StickyHeader</category>
      <category>모바일개발</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/51</guid>
      <comments>https://program-note.tistory.com/51#entry51comment</comments>
      <pubDate>Mon, 2 Feb 2026 10:57:24 +0900</pubDate>
    </item>
    <item>
      <title>React Native onPress 안됨&amp;hellip; 원인 찾느라 시간 날린 기록 (2026)</title>
      <link>https://program-note.tistory.com/50</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;React Native에서 FlatList를 쓰다 보면&lt;br /&gt;&lt;b&gt;스크롤은 되는데 터치가 안 되는 상황&lt;/b&gt;을 한 번쯤은 겪게 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;326&quot; data-start=&quot;264&quot; data-ke-size=&quot;size16&quot;&gt;아이템을 눌러도 onPress가 안 찍히고,&lt;br /&gt;&amp;ldquo;내 코드가 잘못된 건가?&amp;rdquo; 싶어서 한참을 들여다보게 되죠.&lt;/p&gt;
&lt;p data-end=&quot;390&quot; data-start=&quot;328&quot; data-ke-size=&quot;size16&quot;&gt;저도 처음엔&lt;br /&gt;TouchableOpacity 문제인 줄 알았고,&lt;br /&gt;그다음엔 상태값 문제인 줄 알았습니다.&lt;/p&gt;
&lt;p data-end=&quot;447&quot; data-start=&quot;392&quot; data-ke-size=&quot;size16&quot;&gt;근데 결론은 의외로 단순했습니다.&lt;br /&gt;&lt;b&gt;ScrollView랑 FlatList가 겹쳐 있었어요.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-end=&quot;452&quot; data-start=&quot;449&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;467&quot; data-start=&quot;454&quot; data-ke-size=&quot;size26&quot;&gt;증상부터 정리해보면&lt;/h2&gt;
&lt;p data-end=&quot;480&quot; data-start=&quot;469&quot; data-ke-size=&quot;size16&quot;&gt;이런 상황이었습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;543&quot; data-start=&quot;482&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;498&quot; data-start=&quot;482&quot;&gt;FlatList는 잘 보임&lt;/li&gt;
&lt;li data-end=&quot;512&quot; data-start=&quot;499&quot;&gt;위아래 스크롤도 정상&lt;/li&gt;
&lt;li data-end=&quot;529&quot; data-start=&quot;513&quot;&gt;근데 아이템 클릭이 안 됨&lt;/li&gt;
&lt;li data-end=&quot;543&quot; data-start=&quot;530&quot;&gt;콘솔 로그도 안 찍힘&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;621&quot; data-start=&quot;545&quot; data-ke-size=&quot;size16&quot;&gt;특히 &lt;b&gt;화면 끝까지 스크롤했을 때만 안 되는 경우&lt;/b&gt;도 있었고,&lt;br /&gt;iOS에서는 되는데 Android에서만 안 되는 경우도 있었습니다.&lt;/p&gt;
&lt;p data-end=&quot;674&quot; data-start=&quot;623&quot; data-ke-size=&quot;size16&quot;&gt;이때 거의 대부분의 원인이&lt;br /&gt;&lt;b&gt;ScrollView + FlatList 중첩&lt;/b&gt;이었습니다.&lt;/p&gt;
&lt;hr data-end=&quot;679&quot; data-start=&quot;676&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;703&quot; data-start=&quot;681&quot; data-ke-size=&quot;size26&quot;&gt;가장 흔한 구조 (문제 있는 구조)&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1769985087908&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        &amp;lt;ScrollView&amp;gt;
          &amp;lt;View&amp;gt;
            &amp;lt;FlatList data={data} renderItem={renderItem} /&amp;gt;
          &amp;lt;/View&amp;gt;
        &amp;lt;/ScrollView&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;850&quot; data-start=&quot;832&quot; data-ke-size=&quot;size16&quot;&gt;이 구조, 생각보다 많이 씁니다.&lt;/p&gt;
&lt;p data-end=&quot;906&quot; data-start=&quot;852&quot; data-ke-size=&quot;size16&quot;&gt;처음엔&lt;br /&gt;&amp;ldquo;위에 다른 콘텐츠도 있고, 스크롤도 필요하니까&amp;rdquo;&lt;br /&gt;자연스럽게 이렇게 짜게 되는데요.&lt;/p&gt;
&lt;p data-end=&quot;950&quot; data-start=&quot;908&quot; data-ke-size=&quot;size16&quot;&gt;이 상태에서 &lt;b&gt;FlatList 안 터치가 먹통&lt;/b&gt;이 되는 경우가 많습니다.&lt;/p&gt;
&lt;hr data-end=&quot;955&quot; data-start=&quot;952&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;973&quot; data-start=&quot;957&quot; data-ke-size=&quot;size26&quot;&gt;왜 이런 문제가 생기냐면&lt;/h2&gt;
&lt;p data-end=&quot;1029&quot; data-start=&quot;975&quot; data-ke-size=&quot;size16&quot;&gt;ScrollView랑 FlatList는&lt;br /&gt;둘 다 &lt;b&gt;스크롤 제스처를 처리하는 컴포넌트&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;1050&quot; data-start=&quot;1031&quot; data-ke-size=&quot;size16&quot;&gt;ScrollView가 위에 있으면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1111&quot; data-start=&quot;1051&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1068&quot; data-start=&quot;1051&quot;&gt;터치 이벤트를 먼저 가져가고&lt;/li&gt;
&lt;li data-end=&quot;1111&quot; data-start=&quot;1069&quot;&gt;FlatList 안 onPress까지 전달하지 않는 경우가 생깁니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1116&quot; data-start=&quot;1113&quot; data-ke-size=&quot;size16&quot;&gt;특히:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1166&quot; data-start=&quot;1117&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1139&quot; data-start=&quot;1117&quot;&gt;position: absolute&lt;/li&gt;
&lt;li data-end=&quot;1155&quot; data-start=&quot;1140&quot;&gt;sticky header&lt;/li&gt;
&lt;li data-end=&quot;1166&quot; data-start=&quot;1156&quot;&gt;상단 고정 영역&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1186&quot; data-start=&quot;1168&quot; data-ke-size=&quot;size16&quot;&gt;이런 게 섞이면 더 잘 터집니다.&lt;/p&gt;
&lt;hr data-end=&quot;1191&quot; data-start=&quot;1188&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1230&quot; data-start=&quot;1193&quot; data-ke-size=&quot;size26&quot;&gt;해결 방법 1️⃣ FlatList 단독으로 쓰기 (제일 깔끔)&lt;/h2&gt;
&lt;p data-end=&quot;1248&quot; data-start=&quot;1232&quot; data-ke-size=&quot;size16&quot;&gt;가능하면 이게 제일 좋습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1769985151357&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    &amp;lt;FlatList
      ListHeaderComponent={&amp;lt;Header /&amp;gt;}
      data={data}
      renderItem={renderItem}
    /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1387&quot; data-start=&quot;1350&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1365&quot; data-start=&quot;1350&quot;&gt;ScrollView 제거&lt;/li&gt;
&lt;li data-end=&quot;1387&quot; data-start=&quot;1366&quot;&gt;FlatList 하나로 스크롤 통합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1423&quot; data-start=&quot;1389&quot; data-ke-size=&quot;size16&quot;&gt;  구조가 단순해지고&lt;br /&gt;  터치 문제도 같이 사라집니다.&lt;/p&gt;
&lt;hr data-end=&quot;1428&quot; data-start=&quot;1425&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1471&quot; data-start=&quot;1430&quot; data-ke-size=&quot;size26&quot;&gt;해결 방법 2️⃣ keyboardShouldPersistTaps 설정&lt;/h2&gt;
&lt;p data-end=&quot;1516&quot; data-start=&quot;1473&quot; data-ke-size=&quot;size16&quot;&gt;ScrollView를 꼭 써야 하는 상황이라면&lt;br /&gt;이 옵션은 거의 필수입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1769985200857&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ScrollView keyboardShouldPersistTaps=&quot;handled&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1581&quot; data-start=&quot;1579&quot; data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;keyboardShouldPersistTaps=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;always&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1638&quot; data-start=&quot;1630&quot; data-ke-size=&quot;size16&quot;&gt;이걸 안 주면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1687&quot; data-start=&quot;1639&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1655&quot; data-start=&quot;1639&quot;&gt;스크롤이 터치를 먼저 먹고&lt;/li&gt;
&lt;li data-end=&quot;1687&quot; data-start=&quot;1656&quot;&gt;버튼 onPress가 실행 안 되는 경우가 많습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1692&quot; data-start=&quot;1689&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1725&quot; data-start=&quot;1694&quot; data-ke-size=&quot;size26&quot;&gt;해결 방법 3️⃣ FlatList 높이 명확히 주기&lt;/h2&gt;
&lt;p data-end=&quot;1742&quot; data-start=&quot;1727&quot; data-ke-size=&quot;size16&quot;&gt;이건 은근히 많이 놓칩니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1769985214707&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;FlatList style={{ flex: 1 }} /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1791&quot; data-start=&quot;1789&quot; data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1769985245574&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    &amp;lt;View style={{ height: 300 }}&amp;gt;
      &amp;lt;FlatList /&amp;gt;
    &amp;lt;/View&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1903&quot; data-start=&quot;1859&quot; data-ke-size=&quot;size16&quot;&gt;FlatList의 높이가 애매하면&lt;br /&gt;터치 영역 계산이 꼬이는 경우가 있습니다.&lt;/p&gt;
&lt;hr data-end=&quot;1908&quot; data-start=&quot;1905&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1941&quot; data-start=&quot;1910&quot; data-ke-size=&quot;size26&quot;&gt;해결 방법 4️⃣ 투명 View가 덮고 있는지 확인&lt;/h2&gt;
&lt;p data-end=&quot;1957&quot; data-start=&quot;1943&quot; data-ke-size=&quot;size16&quot;&gt;이건 진짜 많이 속습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1997&quot; data-start=&quot;1959&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1974&quot; data-start=&quot;1959&quot;&gt;눈에 안 보이는 View&lt;/li&gt;
&lt;li data-end=&quot;1989&quot; data-start=&quot;1975&quot;&gt;absolute 포지션&lt;/li&gt;
&lt;li data-end=&quot;1997&quot; data-start=&quot;1990&quot;&gt;투명 배경&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2037&quot; data-start=&quot;1999&quot; data-ke-size=&quot;size16&quot;&gt;이런 게 위에 덮고 있으면&lt;br /&gt;FlatList 터치는 전부 막힙니다.&lt;/p&gt;
&lt;h3 data-end=&quot;2054&quot; data-start=&quot;2039&quot; data-ke-size=&quot;size23&quot;&gt;제가 쓰는 확인 방법&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;backgroundColor&lt;/span&gt;&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&lt;span&gt;'rgba(255,0,0,0.2)'&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2144&quot; data-start=&quot;2104&quot; data-ke-size=&quot;size16&quot;&gt;의심되는 View에 잠깐 넣어보면&lt;br /&gt;&amp;ldquo;아 여기 있었네&amp;rdquo; 바로 보입니다.&lt;/p&gt;
&lt;hr data-end=&quot;2149&quot; data-start=&quot;2146&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2177&quot; data-start=&quot;2151&quot; data-ke-size=&quot;size26&quot;&gt;iOS는 되는데 Android만 안 될 때&lt;/h2&gt;
&lt;p data-end=&quot;2221&quot; data-start=&quot;2179&quot; data-ke-size=&quot;size16&quot;&gt;이 경우도 ScrollView 겹침 + zIndex 문제일 가능성이 큽니다.&lt;/p&gt;
&lt;p data-end=&quot;2234&quot; data-start=&quot;2223&quot; data-ke-size=&quot;size16&quot;&gt;Android에서는:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1769985277239&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;style={{
  zIndex: 10,
  elevation: 10,
}}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2325&quot; data-start=&quot;2291&quot; data-ke-size=&quot;size16&quot;&gt;elevation 빠지면&lt;br /&gt;터치 안 되는 경우 많습니다.&lt;/p&gt;
&lt;hr data-end=&quot;2330&quot; data-start=&quot;2327&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2368&quot; data-start=&quot;2332&quot; data-ke-size=&quot;size26&quot;&gt;FlatList 터치 안 될 때 체크 순서 (이거만 봅니다)&lt;/h2&gt;
&lt;p data-end=&quot;2390&quot; data-start=&quot;2370&quot; data-ke-size=&quot;size16&quot;&gt;문제 생기면 저는 이 순서로 봅니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2532&quot; data-start=&quot;2392&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;2423&quot; data-start=&quot;2392&quot;&gt;ScrollView로 FlatList 감싸고 있나?&lt;/li&gt;
&lt;li data-end=&quot;2458&quot; data-start=&quot;2424&quot;&gt;keyboardShouldPersistTaps 설정했나?&lt;/li&gt;
&lt;li data-end=&quot;2483&quot; data-start=&quot;2459&quot;&gt;FlatList 높이가 애매하지 않나?&lt;/li&gt;
&lt;li data-end=&quot;2505&quot; data-start=&quot;2484&quot;&gt;투명 View가 위에 덮고 있나?&lt;/li&gt;
&lt;li data-end=&quot;2532&quot; data-start=&quot;2506&quot;&gt;Android면 elevation 빠졌나?&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;2555&quot; data-start=&quot;2534&quot; data-ke-size=&quot;size16&quot;&gt;이 순서면&lt;br /&gt;대부분 여기서 끝납니다.&lt;/p&gt;
&lt;hr data-end=&quot;2560&quot; data-start=&quot;2557&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2568&quot; data-start=&quot;2562&quot; data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-end=&quot;2626&quot; data-start=&quot;2570&quot; data-ke-size=&quot;size16&quot;&gt;FlatList 터치 안 되는 문제는&lt;br /&gt;&lt;b&gt;코드보다 레이아웃 구조 문제인 경우가 훨씬 많습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2631&quot; data-start=&quot;2628&quot; data-ke-size=&quot;size16&quot;&gt;특히:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2680&quot; data-start=&quot;2632&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2656&quot; data-start=&quot;2632&quot;&gt;ScrollView 안에 FlatList&lt;/li&gt;
&lt;li data-end=&quot;2664&quot; data-start=&quot;2657&quot;&gt;고정 헤더&lt;/li&gt;
&lt;li data-end=&quot;2680&quot; data-start=&quot;2665&quot;&gt;absolute 레이아웃&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2704&quot; data-start=&quot;2682&quot; data-ke-size=&quot;size16&quot;&gt;이 조합이면&lt;br /&gt;한 번쯤은 꼭 터집니다.&lt;/p&gt;
&lt;p data-end=&quot;2777&quot; data-start=&quot;2706&quot; data-ke-size=&quot;size16&quot;&gt;지금도 같은 문제로 헤매고 있다면&lt;br /&gt;ScrollView부터 한 번 의심해보세요.&lt;br /&gt;생각보다 거기서 바로 해결될 수 있습니다.&lt;/p&gt;</description>
      <category>React Native</category>
      <category>Flatlist</category>
      <category>onpress</category>
      <category>ReactNative</category>
      <category>scrollview</category>
      <category>모바일개발</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/50</guid>
      <comments>https://program-note.tistory.com/50#entry50comment</comments>
      <pubDate>Mon, 2 Feb 2026 07:36:58 +0900</pubDate>
    </item>
    <item>
      <title>뇽뇽이 - 66일 챌린지 소개 (습관앱 추천) - 1년 개발 후기</title>
      <link>https://program-note.tistory.com/49</link>
      <description>&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 data-ke-size=&quot;size16&quot;&gt;습관앱, 뇽뇽이 - 66일 챌린지 를 만든지도 벌써 1년이 지났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1년전, 책 &quot;원씽&quot; 을 읽다가 66일의 법칙을 알게되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;66일의 법칙은 &lt;span style=&quot;color: #ee2323;&quot;&gt;새로운 행동을 습관으로 만드는데 대략 66일 정도 걸린다는 이론&lt;/span&gt; 이다. 해당 법칙을 서비스로 만들면 좋겠다고 생각했고 바로 행동으로 옮겼다. 처음에는 가장 기본적인 기능만 구현하고 바로 플레이 스토어 / 앱 스토어에 배포를 진행하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그런 다음 매일 매일 조금씩 생각나는 기능들과 디자인적인 개선을 진행하였고 그러다보니 지금 1년 개발 후기 글을 작성하고 있다.&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;1년전에 간단한 기능만을 구현하여 배포를 진행하였을때도, 포스팅을 진행하였는데 혹시나 초기 앱의 화면이나&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당시의 나의 생각이 궁금하다면 해당 포스팅을 읽어보길 바란다. &lt;a href=&quot;https://program-note.tistory.com/46&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://program-note.tistory.com/46&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;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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWfYik/btsPJhRtpKH/2oXfYjyrt6YK8VtjF2ca7k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWfYik/btsPJhRtpKH/2oXfYjyrt6YK8VtjF2ca7k/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-10-58-55 002.jpeg&quot; width=&quot;575&quot; height=&quot;1246&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWfYik/btsPJhRtpKH/2oXfYjyrt6YK8VtjF2ca7k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWfYik%2FbtsPJhRtpKH%2F2oXfYjyrt6YK8VtjF2ca7k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d4R8Tc/btsPJXE1Otg/XgsGhGMK2a2VS5fVL6T9e1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d4R8Tc/btsPJXE1Otg/XgsGhGMK2a2VS5fVL6T9e1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-10-58-54 001.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d4R8Tc/btsPJXE1Otg/XgsGhGMK2a2VS5fVL6T9e1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd4R8Tc%2FbtsPJXE1Otg%2FXgsGhGMK2a2VS5fVL6T9e1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUsNlo/btsPF0cBKHc/ayoQfF2Ghqon4ThyTITQvK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUsNlo/btsPF0cBKHc/ayoQfF2Ghqon4ThyTITQvK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-10-58-56 008.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUsNlo/btsPF0cBKHc/ayoQfF2Ghqon4ThyTITQvK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUsNlo%2FbtsPF0cBKHc%2FayoQfF2Ghqon4ThyTITQvK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;뇽뇽이 66일 챌린지 습관앱 - 홈, 습관 만들기, 습관 상세&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뇽뇽이는 앞서 말했듯이 습관형성을 도와주는 앱이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;습관을 형성할때는 &lt;span style=&quot;color: #ee2323;&quot;&gt;습관명&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;실패 조건일&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;함께할 친구&lt;/span&gt; 이렇게 세가지를 설정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세가지 지표가 어느정도 이해는 되겠지만, &quot;실패 조건일&quot; 의 경우 처음 접하면&amp;nbsp; 이해하기 어려울 수 있어 예를 들어 보겠다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;실패조건일: 3일 - 마지막 체크로 부터 3일 안에 체크하지 않으면 실패함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;실패조건일: 1일 - 마지막 체크로 부터 1일 안에 체크하지 않으면 실패함. ( 즉 매일매일 실천할 항목일때만 설정해야 한다 ! )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GJ6UR/btsPJUhekkn/0JQWGHvE2W94k9FbQx1mV0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GJ6UR/btsPJUhekkn/0JQWGHvE2W94k9FbQx1mV0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-10-58-55 003.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GJ6UR/btsPJUhekkn/0JQWGHvE2W94k9FbQx1mV0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGJ6UR%2FbtsPJUhekkn%2F0JQWGHvE2W94k9FbQx1mV0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WYVZI/btsPHQmQ9V2/s7TFvR93bKnmUKf643FzGk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WYVZI/btsPHQmQ9V2/s7TFvR93bKnmUKf643FzGk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-10-58-55 004.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WYVZI/btsPHQmQ9V2/s7TFvR93bKnmUKf643FzGk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWYVZI%2FbtsPHQmQ9V2%2Fs7TFvR93bKnmUKf643FzGk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pmqlh/btsPJuJUFQF/mbJ0f5VqonKevkzp58zK40/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pmqlh/btsPJuJUFQF/mbJ0f5VqonKevkzp58zK40/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-10-58-55 005.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pmqlh/btsPJuJUFQF/mbJ0f5VqonKevkzp58zK40/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpmqlh%2FbtsPJuJUFQF%2FmbJ0f5VqonKevkzp58zK40%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;습관앱, 뇽뇽이 - 66일 챌린지 에 커뮤니티 서비스 ( 피드 / 랭킹 / 뇽뇽 )&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;또한 뇽뇽이는 타 다른 습관 형성앱들과 다르게 &lt;span style=&quot;color: #ee2323;&quot;&gt;커뮤니티의 성격&lt;/span&gt;을 가지고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관련된 서비스는 &lt;span style=&quot;color: #ee2323;&quot;&gt;피드&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;랭킹&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;그리고 &lt;span style=&quot;color: #ee2323;&quot;&gt;뇽뇽이 꾸미기&lt;span style=&quot;color: #000000;&quot;&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 랭킹: 완료 습관과 진행 습관의 진행도 데이터로 순위를 매겨 TOP 50 유저를 볼 수 있다.&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 뇽뇽이 꾸미기: 이 기능에 대해서는 설명이 길어질 것 같아 아래에 적는다 !  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfdSNP/btsPIEMZSdJ/7rzvgNMTMA8uGilsDuTlik/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfdSNP/btsPIEMZSdJ/7rzvgNMTMA8uGilsDuTlik/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-11-06-15.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfdSNP/btsPIEMZSdJ/7rzvgNMTMA8uGilsDuTlik/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfdSNP%2FbtsPIEMZSdJ%2F7rzvgNMTMA8uGilsDuTlik%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/maNCV/btsPHY5XT2r/1REKdxdzOX4QYlf5EpDHJK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/maNCV/btsPHY5XT2r/1REKdxdzOX4QYlf5EpDHJK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-10-58-55 006.jpeg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/maNCV/btsPHY5XT2r/1REKdxdzOX4QYlf5EpDHJK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmaNCV%2FbtsPHY5XT2r%2F1REKdxdzOX4QYlf5EpDHJK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;습관앱, 뇽뇽이 66일 챌린지 - 코인 획득 조건&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;우선 &quot;뇽뇽이&quot; 는 앱의 대표 토끼 캐릭터 이다. 하단 메뉴바에서 &quot;뇽뇽&quot; 을 클릭하면 뇽뇽이를 꾸밀 수 있고&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아이템들은 &lt;span style=&quot;color: #ee2323;&quot;&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 출석체크(앱에 접속시 1 코인)&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 습관 21일 완료시 21 코인&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 style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 습관 66일 완료시 66 코인&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;21일은 습관을 뇌에 각인 시키는 단계이고 , 66일은 몸에 각인시키는 과정이라는 이론에 맞춰 획득 조건을 넣어 보았다.&lt;/p&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;( 실패조건일 10일로 설정해서 챌린지를 진행중이다   )&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rrarg/btsPJTWVjg0/8NC4KDwlrGiSVWkuY2Gic0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rrarg/btsPJTWVjg0/8NC4KDwlrGiSVWkuY2Gic0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-11-09-19.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rrarg/btsPJTWVjg0/8NC4KDwlrGiSVWkuY2Gic0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frrarg%2FbtsPJTWVjg0%2F8NC4KDwlrGiSVWkuY2Gic0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBjswl/btsPHl8F9WB/G2Z8pkIzOVte11ZQLvsCVK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBjswl/btsPHl8F9WB/G2Z8pkIzOVte11ZQLvsCVK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2340&quot; data-filename=&quot;KakaoTalk_Photo_2025-08-06-10-58-55 007.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBjswl/btsPHl8F9WB/G2Z8pkIzOVte11ZQLvsCVK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBjswl%2FbtsPHl8F9WB%2FG2Z8pkIzOVte11ZQLvsCVK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2340&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;습관앱, 뇽뇽이 - 66일 챌린지 ( 통계 / 상점 )&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그리고 나머지 기능으로는 &lt;span style=&quot;color: #ee2323;&quot;&gt;통계 &lt;span style=&quot;color: #000000;&quot;&gt;기능과&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ee2323;&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;span style=&quot;color: #ee2323;&quot;&gt;광고 제거&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;실패 습관 살리기&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;닉네임 변경권&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;습관명 변경권&amp;nbsp;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 네가지를 판매 중이고,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;모두 유료 인앱 결제 형태로 되어 있다. 광고 제거와 실패 습관 살리기의 수요가 가장 많다.&lt;/span&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;다운로드 링크&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플레이 스토어: &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1754444386122&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;뇽뇽이 - 습관 만들기, 66일 챌린지 - Google Play 앱&quot; data-og-description=&quot;뇽뇽이로 66일간 도전할 행동을 등록하여 습관을 만들어 보세요.&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&amp;amp;hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dAAcUT/hyZvmVU1yp/sdHhmbAF6AEGUXoR4mhRl0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/c8bVX8/hyZvwYwbGG/rQgXoB37are05Ei8QwcBe1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/dOg634/hyZuK3LKlG/L4TFsVv3ANYakrY9gK86ak/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.sixsixdaylaw&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dAAcUT/hyZvmVU1yp/sdHhmbAF6AEGUXoR4mhRl0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/c8bVX8/hyZvwYwbGG/rQgXoB37are05Ei8QwcBe1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/dOg634/hyZuK3LKlG/L4TFsVv3ANYakrY9gK86ak/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;뇽뇽이 - 습관 만들기, 66일 챌린지 - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;뇽뇽이로 66일간 도전할 행동을 등록하여 습관을 만들어 보세요.&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;앱 스토어: &lt;a href=&quot;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1754444403512&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;습관을 만들려면 얼마만의 시간이 필요할까요? 이와 관련된 연구 중 하나로 영국 런던대학(UCL)의 필리파 랠리 Phillippe Lally 교수 연구팀은 행동이 습관으로 자리 잡는 데는 66일이 걸린다는 &amp;lsquo;66&quot; data-og-host=&quot;apps.apple.com&quot; data-og-source-url=&quot;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&quot; data-og-url=&quot;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bA97YR/hyZvk4Sdw5/dszipc8oVyzm5MYdwJLjL1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bO3Lo6/hyZuvS4wZK/nWVPeZOYSGDzNVxbNVWDoK/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/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bA97YR/hyZvk4Sdw5/dszipc8oVyzm5MYdwJLjL1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bO3Lo6/hyZuvS4wZK/nWVPeZOYSGDzNVxbNVWDoK/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;습관을 만들려면 얼마만의 시간이 필요할까요? 이와 관련된 연구 중 하나로 영국 런던대학(UCL)의 필리파 랠리 Phillippe Lally 교수 연구팀은 행동이 습관으로 자리 잡는 데는 66일이 걸린다는 &amp;lsquo;66&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;br /&gt;사용해주시는 유저분들에게&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1년 동안 뇽뇽이를 사용해주신 모든 분들께 감사합니다.&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;zwj;♂️&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문의 및 연락&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스타: &lt;a href=&quot;https://www.instagram.com/66nyong_nyong&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.instagram.com/66nyong_nyong&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이메일: yournight0482@gmail.com&lt;/p&gt;</description>
      <category>프로젝트</category>
      <category>21일챌린지</category>
      <category>66일챌린지</category>
      <category>뇽뇽이</category>
      <category>습관</category>
      <category>습관앱</category>
      <category>습관앱추천</category>
      <category>앱추천</category>
      <category>자기계발앱</category>
      <category>캐릭터꾸미기</category>
      <category>토끼</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/49</guid>
      <comments>https://program-note.tistory.com/49#entry49comment</comments>
      <pubDate>Wed, 6 Aug 2025 11:13:05 +0900</pubDate>
    </item>
    <item>
      <title>이펙티브 타입스크립트 스터디 - 1장</title>
      <link>https://program-note.tistory.com/48</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 책 &quot;이펙티브 타입스크립트&quot; 스터디를 진행하면서 정리한 글이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;본 글은 &lt;b&gt;1장 타입스크립트 알아보기&lt;/b&gt; 까지를 정리한 글로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 책을 읽기 위해서 사전에 이미 알고있어야 하는 개념 및 용어들을 먼저 정리하겠다.&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;- 덕 타이핑 ( Duck Typing )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;객체의 실제 타입보다는 &lt;b&gt;그 객체가 어떤 메서드나 속성을 가지고 있는지&lt;/b&gt;에 따라 동작을 결정하는 개념&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &quot;새가 오리처럼 걷고, 오리처럼 꽥꽥거리면, 우리는 그것을 오리라고 부른다&quot;&lt;/p&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; 코드를 한 줄씩 읽고 실행하는 방식의 프로그래밍 언어. python, javascript 등&lt;/p&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;- 트랜스파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 한 프로그래밍 언어를 같은 수준(고급 언어) 의 다른 언어로 변환하는 과정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Typescript -&amp;gt; Javascript&lt;/p&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;알고 있어야 하는 Typescript 문법 및 개념&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;interface
&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;extends 로 확장 가능 - 모든 속성과 메서드를 그대로 상속 받음.&lt;/li&gt;
&lt;li&gt;같은 이름의 interface 끼리 자동 병합&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;type&amp;nbsp;&lt;/li&gt;
&lt;li&gt;class&lt;/li&gt;
&lt;li&gt;등등.. 그냥 기본적인 타입스크립트 문법 및 사용법을 숙지한 상태여야지 책 자체가 이해가 될 것 같다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joshua1988.github.io/ts/intro.html#%EC%B1%85%EC%9C%BC%EB%A1%9C-%EB%8D%94-%EC%9E%90%EC%84%B8%ED%9E%88-%EB%B0%B0%EC%9A%B8-%EC%88%98-%EC%9E%88%EC%96%B4%EC%9A%94-%F0%9F%8E%81&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;타입 스크립트 핸드북&lt;/a&gt; 해당 사이트에 있는 개념을 모두 아는 상태로 이펙티브 타입스크립트 책을 읽으면 좋을 것 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1740619309256&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;Introduction | 타입스크립트 핸드북&quot; data-og-description=&quot;타입스크립트 핸드북 타입스크립트를 쉽고 재밌게 배울 수 있는 핸드북입니다   타입스크립트의 기본 개념부터 실전 프로젝트에 적용하는 방법까지 배워보실 수 있습니다. 이 핸드북은 인프&quot; data-og-host=&quot;joshua1988.github.io&quot; data-og-source-url=&quot;https://joshua1988.github.io/ts/intro.html#%EC%B1%85%EC%9C%BC%EB%A1%9C-%EB%8D%94-%EC%9E%90%EC%84%B8%ED%9E%88-%EB%B0%B0%EC%9A%B8-%EC%88%98-%EC%9E%88%EC%96%B4%EC%9A%94-%F0%9F%8E%81&quot; data-og-url=&quot;https://joshua1988.github.io/ts/intro.html#%EC%B1%85%EC%9C%BC%EB%A1%9C-%EB%8D%94-%EC%9E%90%EC%84%B8%ED%9E%88-%EB%B0%B0%EC%9A%B8-%EC%88%98-%EC%9E%88%EC%96%B4%EC%9A%94-%F0%9F%8E%81&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dcFoB4/hyYmNzWejW/ZWukmCpputa5qKou7Zgx7k/img.png?width=1920&amp;amp;height=1280&amp;amp;face=0_0_1920_1280,https://scrap.kakaocdn.net/dn/dyRrLj/hyYmVLvgKb/kwivlakWiAubMWD6g4rXXk/img.png?width=1076&amp;amp;height=1374&amp;amp;face=0_0_1076_1374&quot;&gt;&lt;a href=&quot;https://joshua1988.github.io/ts/intro.html#%EC%B1%85%EC%9C%BC%EB%A1%9C-%EB%8D%94-%EC%9E%90%EC%84%B8%ED%9E%88-%EB%B0%B0%EC%9A%B8-%EC%88%98-%EC%9E%88%EC%96%B4%EC%9A%94-%F0%9F%8E%81&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://joshua1988.github.io/ts/intro.html#%EC%B1%85%EC%9C%BC%EB%A1%9C-%EB%8D%94-%EC%9E%90%EC%84%B8%ED%9E%88-%EB%B0%B0%EC%9A%B8-%EC%88%98-%EC%9E%88%EC%96%B4%EC%9A%94-%F0%9F%8E%81&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dcFoB4/hyYmNzWejW/ZWukmCpputa5qKou7Zgx7k/img.png?width=1920&amp;amp;height=1280&amp;amp;face=0_0_1920_1280,https://scrap.kakaocdn.net/dn/dyRrLj/hyYmVLvgKb/kwivlakWiAubMWD6g4rXXk/img.png?width=1076&amp;amp;height=1374&amp;amp;face=0_0_1076_1374');&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;Introduction | 타입스크립트 핸드북&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;joshua1988.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1장 타입스크립트 알아보기&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;아이템 1 타입스크립트와 자바스크립의 관계 이해하기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타입스크립트는 자바스크립트의 상위결합&lt;/li&gt;
&lt;li&gt;타입스크립트는 타입이 정의된 자바스크립트의 상위집합이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djKzT1/btsMyCknGM8/kbRwc04tdcDmcIqKvWn2W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djKzT1/btsMyCknGM8/kbRwc04tdcDmcIqKvWn2W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djKzT1/btsMyCknGM8/kbRwc04tdcDmcIqKvWn2W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjKzT1%2FbtsMyCknGM8%2FkbRwc04tdcDmcIqKvWn2W1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;456&quot; height=&quot;253&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;710&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 자바스크립트 프로그램은 이미 타입스크립트 프로그램이다.&lt;/li&gt;
&lt;li&gt;타입체커를 통과했다고 해서 런타임 오류가 안나는 것은 아니다.&lt;/li&gt;
&lt;li&gt;타입스크립트의 타입 시스템은 자바스크립트의 런타임 동작을 모델링한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉 자바스크립트에서 문제가 업는 구문은 타입스크립트에서도 문제가 없다. ( 근데 문제가 되는 경우도 있다. )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;아이템 2&amp;nbsp; 타입스크립트 설정 이해하기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타입스크립트가 타입체크를 어떻게 할지는, 설정에 따라 다르다.&lt;/li&gt;
&lt;li&gt;타입스크립트 설정 변경하는법
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;tsc 명령어 동작시 옵션 추가하기&lt;br /&gt;ex) &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;tsc&amp;nbsp;--noImplicitAny&amp;nbsp;program.ts&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;tsconfig.json 파일 이용하기&lt;br /&gt;tsc --init 으로 생성 가능&lt;br /&gt;compilerOptions 에 설정 인자를 추가함으로 변경 가능.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;설정의 종류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;100가지가 넘음.&lt;/li&gt;
&lt;li&gt;noImplicitAny
&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;타입 설정안하면 any 타입으로 간주. -&amp;gt; 암시적 any ( implict any )&lt;/li&gt;
&lt;li&gt;되도록이면 true 로 설정하자. 타입을 명시하는 습관을 들이자.&lt;/li&gt;
&lt;li&gt;설정해제는 언제하는게 좋을까 ? js 에서 ts 로 전환하는 경우 쓰면 유용하다!
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-&amp;gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; 회사 프로젝트를 js 에서 ts 로 전환하였는데, 모든 설정을 켜놓고 전환해서 정말 힘들었던 기억이 있다.. 그 전에 이책을 읽었다면 좋았을텐데.. ㅎㅎ&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;strictNullChecks
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;null 과 undefined 가 모든 타입에서 허용되는지 확인하는 설정&lt;/li&gt;
&lt;li&gt;해제시: 타입을 number 로 선언해도, undefined , null 로 할당이 가능&lt;/li&gt;
&lt;li&gt;이것도 되도록이면 설정을 키자!&lt;/li&gt;
&lt;li&gt;이걸 키려면 noImplicitAny 가 먼저 켜져있어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;strict
&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;그냥 이걸 true 로 하고 프로젝트를 항상 시작하자!
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;회사 프로젝트도 strict: true 로 마이그레이션을 했다..&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;632&quot; data-start=&quot;237&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;632&quot; data-start=&quot;265&quot;&gt;
&lt;tr data-end=&quot;314&quot; data-start=&quot;265&quot;&gt;
&lt;td&gt;noImplicitAny&lt;/td&gt;
&lt;td&gt;any 타입이 암시적으로 지정되지 않도록 강제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;367&quot; data-start=&quot;315&quot;&gt;
&lt;td&gt;strictNullChecks&lt;/td&gt;
&lt;td&gt;null과 undefined를 정확히 체크&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;415&quot; data-start=&quot;368&quot;&gt;
&lt;td&gt;strictFunctionTypes&lt;/td&gt;
&lt;td&gt;함수 타입 검사를 더 엄격하게 수행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;481&quot; data-start=&quot;416&quot;&gt;
&lt;td&gt;strictPropertyInitialization&lt;/td&gt;
&lt;td&gt;클래스의 속성이 생성자에서 반드시 초기화되도록 강제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;557&quot; data-start=&quot;482&quot;&gt;
&lt;td&gt;strictBindCallApply&lt;/td&gt;
&lt;td&gt;.bind(), .call(), .apply() 사용 시 타입 검사를 강화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;632&quot; data-start=&quot;558&quot;&gt;
&lt;td&gt;alwaysStrict&lt;/td&gt;
&lt;td&gt;파일에 자동으로 &quot;use strict&quot;;를 추가하여 엄격한 JavaScript 모드를 활성화&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;* 참고: strict: true 시 켜지는 설정 ( chat gpt 가 정리잘해줬다. )&lt;/span&gt;&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;아이템 3&amp;nbsp; 코드 생성과 타입이 관계없음을 이해하기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타입스크립트의 두가지 역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최신 타입스크립트/자바스크립트를 브라우저에서 동작할 수 있도록 구버전의 자바스크립트로 트랜스파일 한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;tsconfig.json 에서 compilerOptions.target 을 통해 어떤 버젼으로 트랜스파일링 할 것인지 정할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;코드의 타입 오류를 체크한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;위 두가지 역할은 &lt;b&gt;완전히 독립적&lt;/b&gt;으로 행해진다.&lt;/li&gt;
&lt;li&gt;타입 오류가 있는 코드도 컴파일이 가능하다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기서 컴파일 이라는 용어보다는 트랜스파일이란 용어가 더 정확해 보여서, 찾아보았다&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;✔&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;엄밀한 표현&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; &quot;트랜스파일&quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;✔&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;일반적인 표현&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; &quot;컴파일&quot;이라고도 할 수 있음&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;✔&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;공식적인 명칭&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; TypeScript Compiler(tsc)  &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;런타임에는 타입 체크가 불가하다.&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;instance of 는 런타임에 일어나지만, interface 는 타입이기 때문에 아래와 같은 오류가 난다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실제로 tsc 과정에서 모든 인페이스, 타입, 타입구문은 그냥 제거 된다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byMjGE/btsMySN9x5o/A1zrbZkAcpGKjnb9PDybJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byMjGE/btsMySN9x5o/A1zrbZkAcpGKjnb9PDybJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byMjGE/btsMySN9x5o/A1zrbZkAcpGKjnb9PDybJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyMjGE%2FbtsMySN9x5o%2FA1zrbZkAcpGKjnb9PDybJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;661&quot; height=&quot;419&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;class 는 값과 타입이 둘다 가능하다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타입스크립트에서 class 는 &lt;b&gt;런타임에는 값&lt;/b&gt;으로, &lt;b&gt;컴파일 시점에는 타입으로&lt;/b&gt; 동작한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타입 연산은 런타임에 영향을 주지 않는다.&lt;/li&gt;
&lt;li&gt;런타임 타입은 선언된 타입과 다를 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) api 응답값 같은 경우, 미리 interface 로 약속된 타입을 선언해놓고 사용하지만, 실제로 그 응답값이 오는지는 알 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;타입스크립트 타입으로는 함수를 오버로드할 수 없다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수 오버로딩을 지원하지는 하지만 구현체가 하나 이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;타입스크립트 타입은 런타임 성능에 영향을 주지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;아이템 4 구조적 타이핑에 익숙해지기&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자바스크립트는 본질적으로 덕 타이핑 기반.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;값을 할당할 때 정의된 타입에 필요한 속성을 가지고 있다면 호환&lt;/b&gt;된다. ( 구조적 타이핑 )&lt;/li&gt;
&lt;li&gt;타입스크립트의 타입은 열려(open) 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;*봉인된(sealed) 타입: 매개변수의 속성들이 매개변수의 타입에 선언된 속성만을 가지는 것.&lt;/li&gt;
&lt;li&gt;*열린(open) 타입: 위와 반대. 정의되지 않은 다른 매개변수가 있어도 무관.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테스트를 작성할때는 구조적 타이핑이 유리하다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;아이템 5 any 타입 지양하기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;any 타입에는 타입 안정성이 없다.&lt;/li&gt;
&lt;li&gt;any는 함수 시그니처를 무시해 버린다.&lt;/li&gt;
&lt;li&gt;any 타입에는 언어 서비스가 적용되지 않는다.&lt;/li&gt;
&lt;li&gt;any 타입은 코드 리팩토링 때 버그를 감춘다&lt;/li&gt;
&lt;li&gt;any는 타입 설계를 감춘다&lt;/li&gt;
&lt;li&gt;an는 타입 시스템의 신뢰도를 떨어뜨린다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;그냥 쓰지 말자 !&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>typescript</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/48</guid>
      <comments>https://program-note.tistory.com/48#entry48comment</comments>
      <pubDate>Thu, 27 Feb 2025 16:33:43 +0900</pubDate>
    </item>
    <item>
      <title>2024, 3년차 프론트 개발자 회고</title>
      <link>https://program-note.tistory.com/47</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6Vh0h/btsLAcOp5QB/SSkSdTUW2GQjUQmBw02DXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6Vh0h/btsLAcOp5QB/SSkSdTUW2GQjUQmBw02DXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6Vh0h/btsLAcOp5QB/SSkSdTUW2GQjUQmBw02DXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Vh0h%2FbtsLAcOp5QB%2FSSkSdTUW2GQjUQmBw02DXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;543&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;벌써 2024년 이 지나가고 나는 올해 28살이 된다. 2022년 7월 4일에 입사를 한 이후로&lt;br&gt;어쩌다 보니 매년 회고록을 적고 있다. 올해 회고록은 사실 적을 생각이 딱히 없었는데,, 어쩌다가 남이 포스팅한 여러 회고록 글을 보게 되었고 읽으면서 나도 써야겠다는 마음을 먹고 노트북 앞에 앉았다. 글을 쓰기전에 작년 이맘때쯤 작성한 &lt;a href=&quot;https://program-note.tistory.com/32&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;2023년 회고록&lt;/span&gt;&lt;/a&gt; 을 읽어보았다.&lt;br&gt;&amp;nbsp;&lt;br&gt;읽어보니 고민이 꽤나 많은 시기에 글을 작성한 것으로 보인다. 근데 저 당시 작성했던 걱정과 고민이 지금까지 이어져 오고 있다.  &lt;br&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;2024 년에는 개인적으로 많은 것이 바뀐 해다. 우선 이사를 진행해서 형이랑 10월부터 같이 살고 있다.&lt;br&gt;또한 정말 어릴때부터 해결하지 못한 집안일이 있는데 올해 10월에 이사를 하면서 해결이 되었다. 음 이 문제에 대해서는 평생 해결을 못할거라 생각하고 포기하며 살고 있었는데 생각보다 너무 간단하게 일이 끝나서 허무한 감정이 들었다.&lt;br&gt;&amp;nbsp;이 집안일 때문에 옛날부터 많은 것을 포기하고 살았는데 이 문제가 간단하게 해결되고 나니.. 뭔가 공허했고 인생의 목표가 없어진 기분이었다..ㅋㅋ&lt;br&gt;&amp;nbsp;아직까지도 조금 공허하고 마음을 다잡기 위해 노력중이다.&lt;br&gt;&amp;nbsp;&lt;br&gt;아무튼 ! 자세하게 적지는 않지만 거의 20년동안 해결하지 못한 문제가 해결되어 나에게는 정말 의미가 있는 한해였다.&lt;br&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;우선 2023년 회고글을 적을때와 같이 현재도 회사의 개발팀원은 나 포함 총 3명 ( 프론트 1, 백2 ) 이다. 여전히 이전에 사용하던 기술들을 활용하여 회사내 자체 서비스를 개발 및 유지보수하는 업무를 하고 있다. 업무&amp;nbsp;자체는 너무나도 익숙해져서 정말 편하게 진행하고 있다.&lt;br&gt;&amp;nbsp;&lt;br&gt;다만 요즘은 이직에 대한 고민이 있는데, 이직을 고민하는 이유는 다음과 같다.&lt;br&gt;&amp;nbsp;첫번째는 회사 내 서비스( 직접적으로 서비스명을 밝히지는 못하겠다.. ) 가 방향을 잃은 것 같고, 그 방향을 잡아줄 사람이 없다고 느껴진다. PM 직책을 가진 팀장님이 계시지만, 현재 약 2년간 같이 근무를 했지만 앞으로 방향을 잡아서 나갈 수 있을까라는 의문이 든다. 시간이 지날수록 경영관리부의 전산팀의 업무를 더 많이 하고 계시는 것 같이 느껴진다.&amp;nbsp;&lt;br&gt;개인적으로 느끼기에는 획기적인 기능 기획이나, 회사의 이윤을 창출하기 위한 기획, 계획등이 1년간 거의 없었다. 그냥 타 경쟁사가 새로운 기능을 내면 그 기능을 따라서 내는 정도의 기획을 내어 계속해서 그러한 작업만을 맡아 진행하고 있다. 그러다보니, 개발을 하는 입장에서 이게 진짜 필요한 기능인가? 좋은 기능인가? 좋은 기능이라면 이렇게 밖에 사용할 수 없나? 등의 기획 및 방향성에 대한 의문을 계속 가지게 되었다. &lt;b&gt;방향성 및 발전이 없을 것 같은 회사에서 계속 다녀도 되는가?&lt;/b&gt; 가 첫번째 이유다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;두번째는 개발팀 문화 및 프로젝트의 체계가 없어졌기 때문이다. 2022년에는 개발팀 문화 코드 리뷰, 코드 규칙, 컨벤션에 대한 규칙, 브랜치 관리 방법, 프로젝트에 대한 전반적인 매니징 등이 꽤나 체계적으로 잡혀 있었고 더 좋은 방식이 있을까? 모두가 고민하였다. 근데 현재는 그렇지 않다. 그 이유는 우선 기존에 있던 팀원들이 모두 이직을 하셨다. 그리고 기존에 없었던 PM 직책의 비개발자(옛날에 php 로 약간의 개발 경험이 있으신)분이 팀에 들어오셨고, 그 이후로 현재 업무를 진행중이신 백엔드 개발자 두분이 들어오셨다. PM 분은 코드리뷰와 같은 개발팀내 문화를 전혀 경험해 보시지 않으신 분이셨고, 개발 문화에 대해서 굳이 그걸 해야되냐는 마인드를 가지신 분이셨다. 그냥 빠르게 기능을 내는게 중요하다 라는 식의 마인드 셨고 그 분 입장에서는 기능만 충족하면 어떤 코드든 전혀 상관이 없었다. 그렇다고 해서 프로젝트 매니징을 잘하고 계신 것도 아니다. 그러한 영향인지 현재 백엔드 개발자분들은 코드리뷰라거나 코드내 규칙, 커밋 규칙 같은 것이 전혀 없는 상태이다. 그리고 나는 거의 1년 넘게 프론트 프로젝트를 혼자 관리하고 있어, 같이 코드를 공유할 인원이 없다.&amp;nbsp;&lt;br&gt;&amp;nbsp;물론, 현재 신입 프론트 개발자 채용을 하고 있다. 아마 1월 초쯤부터 새롭게 프론트 개발자분이 오실 것 같은데, 오시면 내 나름대로의 프론트 개발팀 문화를 만들어갈 예정이다. PM 분이 원하는 업무 방식은 아닐 것이기에.. 내가 잘 만들어갈 수 있을까 우려가 조금 된다. 아무튼 &lt;b&gt;개발자로서의 성장을 잘 할 수 없는 회사가 아닌가?&lt;/b&gt; 라는 의문이 두번째 이유다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;머릿속에 있는 것을 그냥 그대로 적고 있는데, 어쩌다 보니 회사에 대한 불평과 불만을 많이 적게 되었다  &lt;br&gt;전혀 의도하지 않았는데..&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;그렇다고 바로 현재 이직 준비를 바로 하고 있지는 않다. 아마 새로 프론트 개발자분이 오면 그 분과 같이 일하면서 많은 것을 경험하고 배우게 될 것 같기도 하고, 또  가고 싶은 회사가 있는 것도 아니기 때문이다. 막상 이직을 했는데 현재 회사보다 더 환경이 안좋을 수 도 있지 않을까 싶기도 하다. ( 실제로 이직한 다른 개발자 분들을 보면 그런 경우도 꽤 있는 것 같다. )&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;신입 개발자 면접관 후기&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;아 앞서 말한대로 이번에 신입 개발자 채용을 진행하였다. 현재 회사 프론트 개발자가 나 혼자 뿐이기 때문에, 당연히(?) 면접관으로 내가 들어가게 되었다. 제대로된 면접관으로 들어간 것은 거의 처음이라서 좋은 경험이였다. 신입, 3년차 경력분 등 해서 총 5명 정도 면접을 진행했었고 프로젝트 및 프론트 개념적인 질문을 많이 했었다. 준비를 거의 안해온 분들도 있었고 모든 질문에 대답을 잘하는 지원자도 있었다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;면접을 진행하면서 지원자분들의 개발에 대한 열정과 개발자라는 직업에 대한 생각, 그리고 본인이 어떻게 하면 개발자로서 더 성장할 수 있을까에 대한 생각들 등을 들을 수 있었다. 음.. 그걸 들으면서 나도 2년전만 해도 그러한 열정과 생각을 가지고 있었는데 지금은 좀 많이 약해진 것 같음을 느꼈다. 그래서 다시금 개발자에 대해 깊게 생각해 보았고 신입 개발자분이 오시면 그 분과 같은 열정과 마음가짐으로 개발을 진행할 것을 다짐하였다. 지금 시점에서 좋은 경험이였던 것 같다 !&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사이드 프로젝트에 대하여&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;작년 회고글에도 적혀있듯이 원래 목표는 개인 앱 100개를 출시하여 소소한 부수입을 얻는 것이 목표였었다.&amp;nbsp;&lt;br&gt;근데 갑자기 꾸준히 뭔가를 포기하지 않고 계속해서 앞으로 나가기만 하면 언젠가는 성공을 이룰 수 있을 것 같다는 생각이 들었다.&amp;nbsp; 현재 회사에서 운영중인 서비스도 그렇다할 획기적인 발전이 있는 건 아닌데도 계속해서 돈을 벌고 있다. 그 이유가 포기하지 않고 꾸준히 팀원들이 매일 8시간씩 그 서비스에 대한 업무를 하고 있어서 그런게 아닌가 싶은 생각이 들었기 때문이다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;그래서 꾸준히 하나의 앱에만 집중을 할 계획을 세웠고 9월쯤 개발 및 기획을 시작해서 하나의 앱을 만들어서 IOS, Android 에 모두 배포하였다. 그 앱이 &lt;b&gt;뇽뇽이 - 습관챌린지&lt;/b&gt; 앱이다. &lt;a href=&quot;https://66daylaw.netlify.app/&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://66daylaw.netlify.app/&lt;/span&gt;&lt;/a&gt;&amp;nbsp;앱 소개 랜딩 페이지이다.&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;뇽뇽이 - 습관만들기, 66일 법칙&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;&quot; data-og-host=&quot;66daylaw.netlify.app&quot; data-og-source-url=&quot;https://66daylaw.netlify.app/&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://66daylaw.netlify.app/&quot;&gt;&lt;a href=&quot;https://66daylaw.netlify.app/&quot; target=&quot;_blank&quot; data-source-url=&quot;https://66daylaw.netlify.app/&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;뇽뇽이 - 습관만들기, 66일 법칙&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;66daylaw.netlify.app&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;4540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp4Fgk/btsLAw0cBzy/LsvqK7CutjA4CeXxxlgJt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp4Fgk/btsLAw0cBzy/LsvqK7CutjA4CeXxxlgJt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp4Fgk/btsLAw0cBzy/LsvqK7CutjA4CeXxxlgJt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp4Fgk%2FbtsLAw0cBzy%2FLsvqK7CutjA4CeXxxlgJt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2160&quot; height=&quot;4540&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;4540&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;66일 챌린지를 실행할 수 있는 앱이고, expo 와 node.js 를 이용하여 개발을 진행하였다.&lt;br&gt;&amp;nbsp;현재 활성 유저는 약 200명 정도 된다. 뇽뇽이 프로젝트에 대한 자세한 설명은 추 후 포스팅으로 미루겠다..&lt;br&gt;&amp;nbsp;&lt;br&gt;어쩌다보니 글이 너무 길어져서 .. &lt;br&gt;&amp;nbsp;&lt;br&gt;아무튼 일단은 2025년도 뇽뇽이 앱을 끊임없이 발전시켜서 수익을 창출해 낼 생각이다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2024년 개발자로서 성장하였는가&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;음.. 회사 프로젝트에 완벽히 적응하면서, 회사 자체에서 개발자로서의 성장은 거의 없었다고 생각한다. 익숙한 언어와 구조내에서 혼자서 프론트 프로젝트를 관리하다 보니 그런 것 같다. 새로운 기술을 접하지 않다보니 그렇게 느껴지는 것 같다..&lt;br&gt;다만 사이드 프로젝트를 하면서 expo 와 node.js + express 로 서버 구축에 대해 자신감이 생겼고 조금 익숙해 졌다.&lt;br&gt;&amp;nbsp;진짜 개발자로서의 성장에 대해 적으려니 적을게 없는 것 같다. 반성해야겠다..&lt;br&gt;2025년에는 테스트 코드를 작성한다거나 등 새로운 기술들을 많이 접해서 적을게 많도록 한해를 보내야겠다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;글을 쓰다보니 푸념만 엄청나게 늘어놓은 것 같다. 2025년에는 이러한 푸념들을 모두 해결하고 이겨낸 뒤에 회고록을 작성할 수 있게 보내야겠다. 그리고 뇽뇽이 활성유저 3000명을 만들겠다. 글을 작성하다보니 두시간이 넘어가서 집중력이 점점 없어지고 있는데, 뒤에 글들은 잘썼는지 모르겠다.. 얼른 마무리해야겠다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;다들 새해복 많이 받으세요.  ‍♂️&lt;/b&gt;&lt;/h4&gt;</description>
      <category>일상</category>
      <category>2024년 개발자회고</category>
      <category>2024년회고</category>
      <category>개발자</category>
      <category>개발자회고</category>
      <category>프론트 개발자</category>
      <category>프론트개발자</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/47</guid>
      <comments>https://program-note.tistory.com/47#entry47comment</comments>
      <pubDate>Sun, 29 Dec 2024 23:38:55 +0900</pubDate>
    </item>
    <item>
      <title>뇽뇽이 - 습관 만들기 앱 , 66일 챌린지 앱을 만들었습니다.</title>
      <link>https://program-note.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&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;현재 안드로이드 ios 모두 배포되어 서비스를 진행중이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;원씽&quot; 이라는 책에서 &lt;b&gt;새로운 습관을 만드는 데는 평균 66일이 걸린다&lt;/b&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;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXQDqo/btsJWxMsIqI/Afwrryn7tKZOJAhKGWMFZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXQDqo/btsJWxMsIqI/Afwrryn7tKZOJAhKGWMFZ0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2024-10-05-22-54-21.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXQDqo/btsJWxMsIqI/Afwrryn7tKZOJAhKGWMFZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXQDqo%2FbtsJWxMsIqI%2FAfwrryn7tKZOJAhKGWMFZ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUwp1r/btsJV6aOj2j/p3pN6DVs4tuKSVaD5SBWD0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUwp1r/btsJV6aOj2j/p3pN6DVs4tuKSVaD5SBWD0/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2024-10-05-22-50-17.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUwp1r/btsJV6aOj2j/p3pN6DVs4tuKSVaD5SBWD0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUwp1r%2FbtsJV6aOj2j%2Fp3pN6DVs4tuKSVaD5SBWD0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;책 원씽 중...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;b&gt;뇽뇽이 - 습관만들기, 66일 챌린지&lt;/b&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;adaptive-icon.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6OZZc/btsJVZiGbvE/BE5fQZKBFNZfQ7x1bIhRbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6OZZc/btsJVZiGbvE/BE5fQZKBFNZfQ7x1bIhRbk/img.png&quot; data-alt=&quot;뇽뇽이 메인 로고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6OZZc/btsJVZiGbvE/BE5fQZKBFNZfQ7x1bIhRbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6OZZc%2FbtsJVZiGbvE%2FBE5fQZKBFNZfQ7x1bIhRbk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;114&quot; height=&quot;114&quot; data-filename=&quot;adaptive-icon.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;뇽뇽이 메인 로고&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시중에도 비슷한 앱들이 있었지만, &quot;습관 만들기&quot; 라는 주제를 포기하고 싶지는 않았다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 챌린지 앱이면서 커뮤니티의 성격을 지니게 하여 다른 앱과의 차별점을 두기로 하였다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;처음에는 앱에 모든 부분을 혼자서 만들었었는데, 디자이너 한분을 어떻게 알게되어 도움을 받아 디자인 개선을 진행하였다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 지금은 디자이너 한 분이 앱을 사용해보면서, 디자인을 개선해주면 내가 적용하는 방식으로 작업을 하고 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;앱 화면은 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz7RjW/btsJWSpmcgA/BZJ6SFCUJvgLAdjAVNLNd1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz7RjW/btsJWSpmcgA/BZJ6SFCUJvgLAdjAVNLNd1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2400&quot; data-filename=&quot;KakaoTalk_Photo_2024-10-05-23-11-10 004.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz7RjW/btsJWSpmcgA/BZJ6SFCUJvgLAdjAVNLNd1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz7RjW%2FbtsJWSpmcgA%2FBZJ6SFCUJvgLAdjAVNLNd1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vsUij/btsJV1U4tDx/26gK9HgZAsPdb94QN48XA0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vsUij/btsJV1U4tDx/26gK9HgZAsPdb94QN48XA0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2400&quot; data-filename=&quot;KakaoTalk_Photo_2024-10-05-23-12-03 001.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vsUij/btsJV1U4tDx/26gK9HgZAsPdb94QN48XA0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvsUij%2FbtsJV1U4tDx%2F26gK9HgZAsPdb94QN48XA0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biafXb/btsJWfk2I83/x7cJHR6kKOoAHHvdZjSPzk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biafXb/btsJWfk2I83/x7cJHR6kKOoAHHvdZjSPzk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2400&quot; data-filename=&quot;KakaoTalk_Photo_2024-10-05-23-12-03 002.jpeg&quot; data-widthpercent=&quot;33.34&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biafXb/btsJWfk2I83/x7cJHR6kKOoAHHvdZjSPzk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiafXb%2FbtsJWfk2I83%2Fx7cJHR6kKOoAHHvdZjSPzk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;기본 66일 챌린지 기능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mKgxT/btsJW2yvcF1/eyex5ku7Pmbmk0Wrblu7m0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mKgxT/btsJW2yvcF1/eyex5ku7Pmbmk0Wrblu7m0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2400&quot; data-filename=&quot;KakaoTalk_Photo_2024-10-05-23-11-10 003.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mKgxT/btsJW2yvcF1/eyex5ku7Pmbmk0Wrblu7m0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmKgxT%2FbtsJW2yvcF1%2Feyex5ku7Pmbmk0Wrblu7m0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDZoDv/btsJVjWxx4Q/G4NWJHDoCu6512r1l8IHp1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDZoDv/btsJVjWxx4Q/G4NWJHDoCu6512r1l8IHp1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2400&quot; data-filename=&quot;KakaoTalk_Photo_2024-10-05-23-11-10 002.jpeg&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDZoDv/btsJVjWxx4Q/G4NWJHDoCu6512r1l8IHp1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDZoDv%2FbtsJVjWxx4Q%2FG4NWJHDoCu6512r1l8IHp1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgFIY1/btsJWThscRf/BeIwi4ExTIFSOxMBwo6Xm0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgFIY1/btsJWThscRf/BeIwi4ExTIFSOxMBwo6Xm0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2400&quot; data-filename=&quot;KakaoTalk_Photo_2024-10-05-23-11-10 001.jpeg&quot; data-widthpercent=&quot;33.34&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgFIY1/btsJWThscRf/BeIwi4ExTIFSOxMBwo6Xm0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgFIY1%2FbtsJWThscRf%2FBeIwi4ExTIFSOxMBwo6Xm0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2400&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;커뮤니티성 기능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;친구를 맺어, 피드에서 친구가 오늘 완료한 습관을 볼 수 있다.&lt;/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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 친구와 같이 66일 챌린지를 도전하는 기능&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;/p&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;혹시 친구와 같이 66일 챌린지를 도전하고 싶으신분들이 있다면 다운받아서 사용해보시기를 바란다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스타: &lt;a href=&quot;https://www.instagram.com/66nyong_nyong/&quot;&gt;https://www.instagram.com/66nyong_nyong/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드: &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&quot;&gt;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1728138916434&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;뇽뇽이 - 습관 만들기, 66일 챌린지 - Google Play 앱&quot; data-og-description=&quot;뇽뇽이로 66일간 도전할 행동을 등록하여 습관을 만들어 보세요.&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&amp;amp;hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wCuBO/hyXd26s8Xw/rvpb4wcAppVbQDdceox8i0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/bVokzx/hyXawam12V/4dUFFAZ0NV4aPHQKpM0S0K/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/loQdh/hyXd2rQK2t/M6qf58c12l4gzkB1J8Hjfk/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.sixsixdaylaw&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.sixsixdaylaw&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wCuBO/hyXd26s8Xw/rvpb4wcAppVbQDdceox8i0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/bVokzx/hyXawam12V/4dUFFAZ0NV4aPHQKpM0S0K/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/loQdh/hyXd2rQK2t/M6qf58c12l4gzkB1J8Hjfk/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;뇽뇽이 - 습관 만들기, 66일 챌린지 - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;뇽뇽이로 66일간 도전할 행동을 등록하여 습관을 만들어 보세요.&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;IOS: &lt;a href=&quot;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&quot;&gt;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1728138925999&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;습관을 만들려면 얼마만의 시간이 필요할까요? 이와 관련된 연구 중 하나로 영국 런던대학(UCL)의 필리파 랠리 Phillippe Lally 교수 연구팀은 행동이 습관으로 자리 잡는 데는 66일이 걸린다는 &amp;lsquo;66&quot; data-og-host=&quot;apps.apple.com&quot; data-og-source-url=&quot;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&quot; data-og-url=&quot;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bMZxAC/hyXd3RRrB2/Ze0GQnFgbYXKagbvdf4t91/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b9lfQT/hyXd4iUrxK/CzQhTVy1d83x91UvzMFYNK/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/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://apps.apple.com/us/app/%EB%87%BD%EB%87%BD%EC%9D%B4/id6664070484?platform=iphone&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bMZxAC/hyXd3RRrB2/Ze0GQnFgbYXKagbvdf4t91/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b9lfQT/hyXd4iUrxK/CzQhTVy1d83x91UvzMFYNK/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;습관을 만들려면 얼마만의 시간이 필요할까요? 이와 관련된 연구 중 하나로 영국 런던대학(UCL)의 필리파 랠리 Phillippe Lally 교수 연구팀은 행동이 습관으로 자리 잡는 데는 66일이 걸린다는 &amp;lsquo;66&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;&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>프로젝트</category>
      <category>66일</category>
      <category>66일법칙</category>
      <category>ReactNative</category>
      <category>뇽뇽이</category>
      <category>습관</category>
      <category>습관만들기</category>
      <category>원씽</category>
      <category>프로젝트</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/46</guid>
      <comments>https://program-note.tistory.com/46#entry46comment</comments>
      <pubDate>Sat, 5 Oct 2024 23:43:25 +0900</pubDate>
    </item>
    <item>
      <title>타이탄의 도구들 중.. 타인을 섬기는 사람이 가장 큰 것을 얻는다. 고찰</title>
      <link>https://program-note.tistory.com/45</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;최근 읽고 있는 책은 팀 페리스의 &quot;타이탄의 도구들&quot; 이라는 책이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nxwUm/btsHnwidRYw/cwKt7ASjlSDAJkfJcG1S0k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nxwUm/btsHnwidRYw/cwKt7ASjlSDAJkfJcG1S0k/img.jpg&quot; width=&quot;281&quot; height=&quot;281&quot; data-widthpercent=&quot;50&quot; data-filename=&quot;KakaoTalk_Photo_2024-05-12-00-05-33.jpeg&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;3024&quot; data-origin-width=&quot;3024&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nxwUm/btsHnwidRYw/cwKt7ASjlSDAJkfJcG1S0k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnxwUm%2FbtsHnwidRYw%2FcwKt7ASjlSDAJkfJcG1S0k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vToAP/btsHnjp051d/mmUkahm4lM5KkocuFLHU8K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vToAP/btsHnjp051d/mmUkahm4lM5KkocuFLHU8K/img.jpg&quot; data-widthpercent=&quot;50&quot; data-filename=&quot;KakaoTalk_Photo_2024-05-12-00-05-39 002jpeg.jpeg&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;3024&quot; data-origin-width=&quot;3024&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vToAP/btsHnjp051d/mmUkahm4lM5KkocuFLHU8K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvToAP%2FbtsHnjp051d%2FmmUkahm4lM5KkocuFLHU8K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;타이탄의 도구들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 책에 21 섹션(?) &quot;안태암불로가 되어라&quot; 를 읽다가 지금 회사 생활과 앞으로의 인생에 도움이 될만한 많은 문장들이 있어&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;21. 안태암불로가 되어라 섹션에 대해서 아주 간단하게 이야기하면 다음과 같다.&lt;/p&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;&lt;/p&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;1. 당신은 당신이 생각하는 것만큼 유능하거나 중요한 인물이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&amp;gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;이건 한 입사하고 1년이 지나서 깨달은 사실인 것 같다. 개발에 대해 자부심이 있었고 못만드는 건 없다는 생각을 가지고 있었다. 지금도 마찬가지긴하나 당시엔 그 능력 자체만으로 회사에는 내가 없으면 안된다는 생각을 하였었다. 하지만 그건 잘못된 생각이였다. 회사는 내가 없어도 잘 돌아갈거다. 나를 대체할 개발자는 많고, 나보다 더 나은 능력을 가진 개발자도 많다. 이 사실을 깨닫게 된 계기는 회사에서 가장 오래된 백엔드 개발자분이 이직을 하실때, 그 분이 없으면 회사 서비스가 안돌아갈 것 같았다. 하지만 생각보다 회사는 잘 돌아갔고 인력은 대체가 가능했다. 이 상황을 보고 나도 마찬가지이겠구나.. 생각하며 깨달았었다. 아무튼 지금은 잘 알고 있는 사실이 책에 있어 공감하며 읽었다!&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;2. 당신은 태도를 바꿀 필요가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&amp;gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;입사 당시와 현재 회사에 &lt;span style=&quot;color: #006dd7; text-align: start;&quot;&gt;업무 환경 및&amp;nbsp;&lt;/span&gt;개발 문화가 많이 달라졌다. 이전 환경 및 업무 방식과 비교하며 최근 현재 업무 처리 방식에 대해 불만이 조금 생긴 상태였는데, 이를 해결할 생각은 못하고 혼자서 스트레스를 많이 받았었다. 스트레스만 받지 내가 뭔가를 하지 않으면 업무 처리 방식이 변경되지 않을 것이라는 생각을 하였었다. 그래서 이 환경에 대한 생각부터 긍정적이게 바꾸려고 노력을 하고 있고 그리고 업무에 대한 불만이 있으면, 이야기를 해서 서로 윈윈할 수 있는 환경을 만들기 위해 노력을 하고 있다. 그리고 태도도 바꾸었다.&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;하기 싫은 잡무라던가 뭔가 이게 개발자가 해야할 일이 맞나(?)라고 생각 되는 것들은 이전에는 &lt;span style=&quot;color: #006dd7; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;( 내가 하기 싫으면 다른 사람도 하기 싫을 것이라고 생각했기에 )&lt;span&gt; &lt;/span&gt;&lt;/span&gt;하기는 했지만 웃으면서 하지는 못했었는데, 이제는 웃으면서 먼저 일을 하려고 한다. 그리고 꼭 개발 업무가 아니더라 열정과 의욕을 가지고 진심으로 모든 것을 하려고 태도를 바꾸었다. &lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;이렇게 태도를 바꾸니 실제 모든 일을 할 때 이전보다 훨씬 재밌게 할 수 있음을 느꼈다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 당신이 안다고 생각하는 사실들, 혹은 책이나 학교에서 배운 것들은 대부분 시대에 뒤떨어지거나 잘못된 것들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&amp;gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;이거는 잘 공감이 안되지만, 항상 유연하게 새롭게 배울 준비를 하는 깨어있는 사람이 되어라는 의미로 받아들이고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 책에서 구체적인 조언도 다섯가지 나오는데 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 조언은 책에서 &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;말하는 타이탄(성공한 사람들)들이 전한 것이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;1. 상사에게 넘겨줄 수 있는 아이디어를 찾아낸 사람은 누구보다 한 걸음 앞서간다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;2. 아이디어가 뛰어난 사람, 장래가 유망한 인재들은 서로 연결해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;3. 아무도 하고 싶어 하지 않는 일을 찾아서 그 일을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;4. 비효율, 낭비, 중복이 많은 곳을 맨 먼저 찾아낸다. 그러면 나와 내 조직이 새로운 분야로 진출하는데 필요한 자원을 확보할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;5. 자신의 아이디어를 기꺼이 공유한다.&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;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&quot;위대한 사람은 언제나 순종할 준비가 되어 있다. 자신의 지휘 능력은 나중에 언제든 증명할 수 있기 때문이다.&quot;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상</category>
      <author>daehwan2</author>
      <guid isPermaLink="true">https://program-note.tistory.com/45</guid>
      <comments>https://program-note.tistory.com/45#entry45comment</comments>
      <pubDate>Sun, 12 May 2024 00:08:23 +0900</pubDate>
    </item>
  </channel>
</rss>