<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Front</title>
    <link>https://ddoottaa.tistory.com/</link>
    <description>좋은 문장이 될 개발</description>
    <language>ko</language>
    <pubDate>Sat, 23 May 2026 15:25:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>뚜따따</managingEditor>
    <image>
      <title>Front</title>
      <url>https://tistory1.daumcdn.net/tistory/6384690/attach/de9081941e2a464aaf8e3d291e36dc1c</url>
      <link>https://ddoottaa.tistory.com</link>
    </image>
    <item>
      <title>상사가 부당한 지시를 했을 경우 어떻게 하실 건가요?</title>
      <link>https://ddoottaa.tistory.com/35</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;상사가 부당한 지시를 했을 경우 어떻게 하실 건가요?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;면접관이 내게 물었다. 높지도 낮지 않은 톤으로 담담하게 말하는 그에게서 조금의 감정도 느껴지지 않았다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&quot;모든&amp;nbsp;지시에는&amp;nbsp;이유가&amp;nbsp;있다고&amp;nbsp;생각합니다.&amp;nbsp;부당하다고&amp;nbsp;생각하는&amp;nbsp;건&amp;nbsp;아직&amp;nbsp;제가&amp;nbsp;상사의&amp;nbsp;지시를&amp;nbsp;이해하지&amp;nbsp;못했기&amp;nbsp;때문이라고&amp;nbsp;생각하고,&amp;nbsp;먼저&amp;nbsp;지시를&amp;nbsp;따르겠습니다.&quot; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;내 대답에 면접관은 고개를 몇 번 끄덕이고 다음 질문을 이어갔다. 맛도 향도 없는 질문이 계속되었다. 나는 무기적으로 대답했다. 경쾌하지 않은 문장들이 끈적하게 바닥에 쌓이고 있었다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;집으로 돌아가는 지하철에서 합격 문자를 받았다. 믿기지 않아 여러 번 다시 봤다. &lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;'합격했습니다. 처우 협의는... 출근 가능 시점은......'&lt;/span&gt; 떨어지는 게 당연하다 생각하는 마음에 문자가 장난처럼 느껴지기도 했다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;쉬었던만큼 초조했던 나는 그 말이 장난일까 초조해하며, 제발 장난이 아니길 바라며 답장했다. 빠르게 안 보내면 혹여나 놓칠까 성급하게, 그렇게 회사에 들어가게 됐다. &lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;상사가 부당한 지시를 했을 경우 어떻게 하실 건가요?&lt;/blockquote&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;무미건조한 줄 알았던 면접관이 팀장님이 된 지 1년이다. 그러다 알게 된 건 팀장님이 그렇게 건조한 사람이 아니란 것이다. 그는 사소한 것에도 환하게 잘 웃는 사람이었고, 울 때는 몰래 우는 사람이었다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;팀장님이 몰래 우는 걸 봤을 때는 많이 놀랐다. &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;부당함에 억울해서 몰래 우는 건 나 같은 주니어에게만 일어나는 일이 아니었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;'상사가 부당한 지시를 했을 경우 어떻게 하실 건가요?' &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;면접&amp;nbsp;때&amp;nbsp;팀장님이&amp;nbsp;했던&amp;nbsp;그&amp;nbsp;질문. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;팀장님이 나에게 묻는 말이지만 팀장님 스스로도 몰랐던 질문이 아닐까 지금은 생각한다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;팀장님은 부당하다 생각하고, 억울함을 참고 일하고 계셨다. 그건 '&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;팀장님이 좋은 사람이어서', '어쩔 수 없는 환경 때문에' , 그런 이유들이겠지만, 주변을 의지하지 않으려는 팀장님의 성향때문이기도 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;혼자 창고에서 울고 있는 팀장님을 보았을 때, 나는 팀장님의 고민과 짐을 좀 덜어드리기 위해 노력했다. 하지만 나는 끝내 팀장님의 신뢰를 얻을 수 없었다. 그는 너무 오랫동안 혼자에 익숙했기에, 서비스의 AWS 엔 오직 그만이 허락됐다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;팀장님은 i am. 그 자체였다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;상사가 부당한 지시를 했을 경우 어떻게 해야 할까?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;취업을 위해 그 질문에 대답을 고민할 때, &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;어떤 대답이 유리할지 생각하다 보니 내가 어떻게 생각하는지 잘 몰랐던 것 같다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;하하나 확실해진 건, 부당함을 줄일 수 있는 방법은 &amp;lsquo;신뢰와 소통&amp;rsquo;이라는 것이다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;최근 힘든 일을 겪으며 내 감정을 더 소중히 해야 한다는 사실을 알게 됐다. 상대를 배려하는 건 나를 소중히 여기는 것에서부터 출발한다는 것을.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;'상사가 부당한 지시를 했을 경우 어떻게 해야 할까?' &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1년 전 내 대답을 종종 생각한다. 그러다 최근 문득 알았다. 애초에 그 질문은 나를 소홀히 여기는 질문이었다는 것을. 내가 내 존재를 스스로 회사 앞에 포기하라 유도하는 질문이었다는 것을.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;힘든 시간 적절히 대하지 못해 미안했다. &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;내 감정아. 내 이성아.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;너희 문제가 아닌 걸로 너희를 탓해야 했다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;우리 이제 점진적으로 덜 괴로워 보자.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&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: 'Noto Serif KR';&quot;&gt;누군가의 악의에 연연하지 말자.&lt;/span&gt;&lt;/p&gt;</description>
      <category>글</category>
      <category>IAM</category>
      <category>부당함</category>
      <category>회고</category>
      <category>회사 생활</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/35</guid>
      <comments>https://ddoottaa.tistory.com/35#entry35comment</comments>
      <pubDate>Tue, 22 Jul 2025 23:07:11 +0900</pubDate>
    </item>
    <item>
      <title>고요</title>
      <link>https://ddoottaa.tistory.com/34</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아마도 고요.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;소란스럽게 인생을 채우던 소음들을 기억한다. &lt;br /&gt;사람에게서 사람으로 무수히 교차하는 소음 속에서 &lt;br /&gt;나는 외로웠던 나머지 그 소음을 꼭 끌어안았다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이제 서른 개의 해가 나의 나이가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서른 살. 내&amp;nbsp; 삶을 돌이켜보면 여러 색의 기억들이 가득하다. 누군가를 이해하거나, 누군가를 이해했다 착각하거나, 눈물을 흘리며 감사하는 걸 듣거나, 반대로 우는 걸 보거나, 사랑하고, 애정에 보답하며 행복하고, 사랑하고, 괴로워하고, 민폐를 끼치고, 반대로 민폐를 견디며, 때론 누군가 파놓은 악의에 스스로 빠져 허우적거리기도 했다. 그 모든 시간을 넘어 지금을 보내고 있는 나 자신에게 감사하다.&lt;br /&gt;사지 하나 잃어버리지 않고(무려 4개나 있는데 그중 하나도 잃어버리지 않았다!) 건강하게 지금 여기에 있다는 것이 너무 감사하다.&lt;br /&gt;어릴 적엔 내가 서른이 되면, 후줄근한 행색으로 너덜너덜해져 있을 거라 생각했다. 세상은 무척 가혹했고, 나는 삶의 경험을 대부분 회피에 투자한 망캐였다. 어떤 불화나 고통도 현실에서 한 발자국 멀리 떨어져 관찰하는 걸로 해결할 수 있었다. 적어도 그렇게 보였다. 그러다 언젠가 세상을 회피하는 버그가 발생하길 바랐다. &lt;br /&gt;어쩌면 나는 남들보다 피부가 얇은 것 같다. 누군가의 기본적인 악의나 모순이 나에겐 유독 아팠다. 사람을 너무 좋아했고, 내 생각을 강요하는 걸 사랑이라고 생각(그럴 리가 없을텐데)하며, 그렇게 사람을 앓았다.&lt;br /&gt;작은 상처에도 아픔을 느끼면서, 그걸 티내면 나를 싫어할까 두려웠던 나머지 현실을 외면하고 계속 외면하며, 스스로 만든 작은 상자 안에서 어린 시절을 보냈던 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;소란스럽게 인생을 채우던 소음들을 기억한다.&lt;br /&gt;사람에게서 사람으로 무수히 교차하는 소음 속에서&lt;br /&gt;내가 지금 어디에 있는지 깨달았다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회피하는 삶을 끝내고 현실과 마주보기로 한 것에 특별한 계기가 있었던 건 아니다. 그냥 회피하던 나를 위해 누군가 대신 괴롭고 있다는 것을 서서히 알게 됐던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 내 피부가 얇건, 세상이 나에게 특히 가혹하던, 그런 건 전부 회피였을 뿐이다. 나는 그냥 이기적이고 겁이 많은 정신승리자였다. 후줄근한 행색으로 너덜너덜해져도 세상에 맞서지 않고 보신만을 생각하며 열심히 사는 것에 관심 없는 척할 뿐이었던 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 놓쳤던 것을 되찾기 위해 노력한지 1년이 지났다. 술을 줄이고, 담배를 끊었고, 취업을 했다. 예전만큼 혼자 괴롭지 않고, 의지할 줄 알게 됐다. 배려와 존중, 함께 자라는 즐거움을 알게 됐다. 개발자 커뮤니티에 들어가고 나서는 주변에 존경스러운 사람들이 늘었다. 사람과 사람 사이 소음이 일정하게 정돈되기 시작하더니, 여러 장르의 음악처럼 들렸다. 소음이라고 생각했다면 소음이었을 것들이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;소란스럽게 인생을 채우던 소음들을 기억한다.&lt;br /&gt;소음 속에서도 고요하게, 고요하게&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배불뚝이 서른 살이 된 지금 이젠 30년 가까이 항상 느끼던 '소음과 불안'보다 이번 달 가계부나 오늘 저녁 반찬, 여행 계획에 관심이 많아졌다. 또 이렇게 현실로 불려 와 보니 참담하고 숨이 턱턱 막힐 때도 있지만, 괜찮다. 정말 괜찮다. 내 삶을 매일 새롭게 만드는 행복들이 널려 있고, 어느 곳에 있어도 괴롭거나 우당탕탕 불안하지 않으니까. 요즈음 습관처럼 '평화롭다.'는 말을 자주 한다. 어렸을 적 상상하던 '후줄근하고 너덜너덜한 녀석'은 절대로 하지 않을 말이다. 볼이 빵빵해진 상태로 평화로운 아저씨가 된 지금, 아무래도 이런 내가 있도록 노력해 준 내가 고맙다. 운이 좋았다고 생각한다. 내 주변에 좋은 사람들 때문에, 좋은 사람이 되지 않고는 버틸 수 없었으니까. 떠밀리듯 좋은 사람이 되게 만들어 줬으니까.&lt;/p&gt;</description>
      <category>글</category>
      <category>고요</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/34</guid>
      <comments>https://ddoottaa.tistory.com/34#entry34comment</comments>
      <pubDate>Sun, 30 Mar 2025 23:55:08 +0900</pubDate>
    </item>
    <item>
      <title>함께 안 자랄 거임 (w.함께 자라기를 읽고)</title>
      <link>https://ddoottaa.tistory.com/33</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;result (2).png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UPJ69/btsMKTNvpyr/XryJkK1779drJxHZJdP2f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UPJ69/btsMKTNvpyr/XryJkK1779drJxHZJdP2f0/img.png&quot; data-alt=&quot;함께_자라기를_읽고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UPJ69/btsMKTNvpyr/XryJkK1779drJxHZJdP2f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUPJ69%2FbtsMKTNvpyr%2FXryJkK1779drJxHZJdP2f0%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;1536&quot; height=&quot;804&quot; data-filename=&quot;result (2).png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;804&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;&lt;b&gt;목차&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 책 소개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 자라기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;함께&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 회사에서 함께 자라기를 적용해 보았다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 마치며&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 책 소개&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E5NGL/btsMKvzSdtD/eVSSoHvR2e8TswpOGKoL4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E5NGL/btsMKvzSdtD/eVSSoHvR2e8TswpOGKoL4K/img.png&quot; data-alt=&quot;눈에 편한 초록색을 사용한 것도 깊은 뜻이지 있을까?김창준선생님_짱&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E5NGL/btsMKvzSdtD/eVSSoHvR2e8TswpOGKoL4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE5NGL%2FbtsMKvzSdtD%2FeVSSoHvR2e8TswpOGKoL4K%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;438&quot; height=&quot;646&quot; data-origin-width=&quot;438&quot; data-origin-height=&quot;646&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;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000001033071&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;김창준의 함께 자라기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742098692654&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;함께 자라기 | 김창준 - 교보문고&quot; data-og-description=&quot;함께 자라기 | 모두가 함께 발전하기 위한 제안&amp;lsquo;함께&amp;rsquo;는 협력을 말하고, &amp;lsquo;자라기&amp;rsquo;는 학습을 말합니다. 무엇이건 실제 바깥세상(야생)에 임팩트를 남기려면 혼자 힘으로만 되는 게 없습니다.&quot; data-og-host=&quot;product.kyobobook.co.kr&quot; data-og-source-url=&quot;https://product.kyobobook.co.kr/detail/S000001033071&quot; data-og-url=&quot;https://product.kyobobook.co.kr/detail/S000001033071&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bgwfLO/hyYqMQaaIa/CrluuWFSlynVxlcsnjJ8Sk/img.jpg?width=458&amp;amp;height=704&amp;amp;face=0_0_458_704,https://scrap.kakaocdn.net/dn/WsgXr/hyYrR4p2wj/23QgzyIaOzVopVFdiBRzh1/img.jpg?width=458&amp;amp;height=704&amp;amp;face=0_0_458_704,https://scrap.kakaocdn.net/dn/bXvRPS/hyYqTV17dY/hr0AeALgiClekvSMrsvM41/img.png?width=335&amp;amp;height=335&amp;amp;face=0_0_335_335&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000001033071&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://product.kyobobook.co.kr/detail/S000001033071&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bgwfLO/hyYqMQaaIa/CrluuWFSlynVxlcsnjJ8Sk/img.jpg?width=458&amp;amp;height=704&amp;amp;face=0_0_458_704,https://scrap.kakaocdn.net/dn/WsgXr/hyYrR4p2wj/23QgzyIaOzVopVFdiBRzh1/img.jpg?width=458&amp;amp;height=704&amp;amp;face=0_0_458_704,https://scrap.kakaocdn.net/dn/bXvRPS/hyYqTV17dY/hr0AeALgiClekvSMrsvM41/img.png?width=335&amp;amp;height=335&amp;amp;face=0_0_335_335');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;함께 자라기 | 김창준 - 교보문고&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;함께 자라기 | 모두가 함께 발전하기 위한 제안&amp;lsquo;함께&amp;rsquo;는 협력을 말하고, &amp;lsquo;자라기&amp;rsquo;는 학습을 말합니다. 무엇이건 실제 바깥세상(야생)에 임팩트를 남기려면 혼자 힘으로만 되는 게 없습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;product.kyobobook.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;먼저 이 자리를 빌려 이 책을 읽을 나비효과를 준 글또 커뮤니티에 감사하고, 책을 빌려준 FE 개발자(나는 그녀만큼 함께 자라기를 실천하는 사람을 알지 못한다)님께 감사의 마음을 전한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;br /&gt;함께자라기는 개발 직업군뿐 아닌 대부분의 직업군을 관통하는 책이다. 내가 그렇게 생각하는 이유와 &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;'함께 안 자랄 거임'이라며 요란한 커버로 잔뜩 후킹한 이유(&lt;s&gt;죄송&lt;/s&gt;)에 대해 읽는 읽는 사람을 이해시킬 수 있는 글이 되었으면 좋겠다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;한 가지 분명한 건 함께&amp;nbsp;자라기는&amp;nbsp;아무&amp;nbsp;페이지나&amp;nbsp;펼쳐&amp;nbsp;읽어봐도&amp;nbsp;꾹꾹&amp;nbsp;눌러쓴&amp;nbsp;흔적이&amp;nbsp;있는&amp;nbsp;깊이가&amp;nbsp;있는&amp;nbsp;책이며, &lt;br /&gt;그 책을 읽고 나는&lt;b&gt;&amp;nbsp;조금&amp;nbsp;더&amp;nbsp;나은&amp;nbsp;내&lt;/b&gt;가 되었다는 것이다&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;문득 내가 이 책을 제외하곤 한번도 개발방법론에 대한 책을 완독해 본 적이 없다는 사실을 깨달았다. 그런 내가 이 책을 완독할 수 있었던 이유는 무엇일까?&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;❓ 함께 자라기가 다른 책이랑 뭐가 다른데?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;  함께 자라기는 자랑하지 않는다.&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;저자는 자신의 실패담(정말 실패담이다. 그런 실패를 통해 성공으로 이루어졌다~~! 가 아니라, '결과는 실패였습니다'로 끝나버린다.)을 예시로 제공하며, 반면교사하도록 둔다. 주로 방법론을 설명하는 책들은 '이런 방법이 도입했을 때의 장점.'에 관해 얘기를 하며 자신의 성공 시나리오를 제시하곤 하는데, 이 책엔 의미 없는 자랑이 없어 읽기 더 수월했다. &lt;s&gt;자랑을 들으면 킹받는다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;  함께 자라기는 사람을 생각한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;책에서는 에자일 방법론이 옳다고 얘기하는 게 아니라, 듣는 이의 성향에 따라 에자일 방법론의 장점을 설명하는 방법을 친절하게 알려준다. 책을 관통하는 주제가 &lt;b&gt;사람&lt;/b&gt;이라는 것, 그리고 저자의 목적이 정말 &lt;b&gt;함께 자라기&lt;/b&gt;라는 일관성이 보여 저자가 매력적으로 느껴졌고, 글에 설득력이 더 커졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;  함께 자라기는 하나의 목표를 추구한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;함께 자라기에서는 분명하고 고정적인 하나의 목표만을 추구한다.&amp;nbsp;&lt;/span&gt;&lt;b&gt;'어떻게 하면 함께 자랄 수 있을까?'&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;책은 처음부터 끝까지 내가 그렇게 하기를 바란다. 저자 스스로 &lt;b&gt;함께 자라려는&lt;/b&gt; 마음이 담겨 있어 글에서 더욱 설득력을 느끼지 않았나 싶다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 자라기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책은 자라기, 함께, 에자일 파트로 나뉘어 있고, 그중 자라기 파트에서는 &lt;b&gt;액션 아이템&lt;/b&gt;으로 사용할 수 있는 여러 자라는 방법을 알려준다. 성장에 대한 당연한 말이 아닌, 성장하는 방법을 이건 어때? 저건 어때? 제시해 주는 게 사려 깊다고 느꼈다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk4T1X/btsMM4UWP3x/TR1zi2hcs5a8qpdkdo3j60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk4T1X/btsMM4UWP3x/TR1zi2hcs5a8qpdkdo3j60/img.png&quot; data-alt=&quot;어떤 방법으로 성장할지 몰라 많이 준비했어&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk4T1X/btsMM4UWP3x/TR1zi2hcs5a8qpdkdo3j60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk4T1X%2FbtsMM4UWP3x%2FTR1zi2hcs5a8qpdkdo3j60%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;380&quot; height=&quot;401&quot; data-origin-width=&quot;380&quot; data-origin-height=&quot;401&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;경험을 기반한 그 얘기들은 대단히 인사이트가 있었고, 그중 특히 인상 깊은 부분들을 추려봤다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;br /&gt; &lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt; 우리는 양치의 고수가 되지 못했음&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; '의도적 수련'&lt;/b&gt; 부분에서 저자는 '일만 시간의 법칙'이 사실이 아니라는 점을 명확히 지적하고 있다. 이미 이 법칙이 어느 정도 과장되었다는 것을 알고 있었는데, 저자가 이를 직접적으로 반박하는 내용을 언급해 살짝 만족감을 느꼈다&lt;s&gt;.(네가 왜)&lt;/s&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;중요한 건 &lt;b&gt;의도적 수련&lt;/b&gt;이다. 반복을 통해 성장하길 권장되는 건 수타면의 달인이나 헬스트레이너 정도일 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt; 작은 화재라도 내지 않으면 큰 화재가 날 수도?&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;'실수는 예방하는 것이 아닌 관리하는 것이다.' &lt;/b&gt;많은 함께 자라기를 읽은 사람이 그랬듯, 이 부분이 킥이었다. 화재를 예방하는 것보다 중요한 건 화재를 관리하는 것이다. 예전에 읽었던 요리에 대한 칼럼 중에 그런 부분이 있었다. '서로 다른 식재료를 조합해 보는 시도가 새로운 맛의 지평을 열 수 있다.' 이제 와서 너무 당연한 말이지만 '&lt;b&gt;실수와 실패를 통해 성장할 수 있다&lt;/b&gt;.' 그 당연한 말이 좀 더 가슴에 와닿는 계기가 된 파트였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; &lt;/span&gt;&lt;/b&gt; &amp;nbsp;AI는 관련해서는...&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;'가장 학습하기 힘든 직업이 살아남는다'&lt;/b&gt; 파트에 관해선 지엽적이라는 생각을 좀 했다. '알파고나 AI 가 못하는 것이 모호한 영역이다.'라고 쓴 그 문맥은 충분히 이해하지만, 이제는 그렇게 자신할 수 없는 시대가 된 것 같다. 책이 써진 2019년에는 의심할 수 없었을 일이 현재 일어나고 있다는 생각이 좀 무서웠다. 책에 나온 모든 부분을 부정하는 건 아니다. 단지 '설득'과 '협상'의 분야에서 가끔 나는 AI의 자문을 구하곤 한다. 책에서 나온 &lt;b&gt;'창의성'과 '문해력'&lt;/b&gt;까지는 학습하기 힘든 것 같지만, 그것도 자신할 수 없다. 조직이나 회사에서 저자의 말에 동의하지만 점점 &lt;b&gt;'혼자'&lt;/b&gt; 할 수 있는 영역이 점점 늘어나고 있다는 의견에 대한 저자의 생각이 궁금했다. &lt;s&gt;(그래서 김창준 선생님의 블로그를 찾아봤는데 현재는 폐쇄되어 있었다. 힝)&lt;/s&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt; 불안하면 b2 나 b1으로 움직이시고요. 지루하면 a1이나 a2로 가시면 됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bosRAO/btsMNBx2awI/vedYR39HYODDigCds0xj60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bosRAO/btsMNBx2awI/vedYR39HYODDigCds0xj60/img.png&quot; data-alt=&quot;X축에 실력을 두고 Y축에 시간을 두면 내 그래프는 저 하늘을 뚫어!(으면 좋겠어!)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bosRAO/btsMNBx2awI/vedYR39HYODDigCds0xj60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbosRAO%2FbtsMNBx2awI%2FvedYR39HYODDigCds0xj60%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;488&quot; height=&quot;330&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;X축에 실력을 두고 Y축에 시간을 두면 내 그래프는 저 하늘을 뚫어!(으면 좋겠어!)&lt;/figcaption&gt;
&lt;/figure&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;b&gt;몰입&lt;/b&gt;의 경지로 가세요. 그게 당신을 성장시킬 것입니다. (자세한 건 &lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000001033071&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;를 참고하세요.)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 함께&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파트에서는 &lt;b&gt;함께&lt;/b&gt;하기 위해서는 어떻게 해야 할지 알려준다. 나는 예전부터 책 한 권만 읽은 사람만큼 두려운 게 없다고 생각했는데, 이제 그 책이 &lt;b&gt;함께 자라기&lt;/b&gt;면 괜찮을 것 같다는 생각이 든다. 그만큼 넓은 인사이트를 전하는 책이라는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt; 불확실성이 높을 때는 불가사리 구조 &amp;lt; 그물망 구조&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;경영학으로 봤을 때 팀과 작업 그룹은 다르고 작업 불확실성이 높을수록 팀이 유리하다는 정보가 유용했다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;802&quot; data-start=&quot;784&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  팀이 유리한 이유&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1069&quot; data-start=&quot;803&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;853&quot; data-start=&quot;803&quot;&gt;&lt;b&gt;문제 해결 능력&lt;/b&gt;: 팀은 다양한 관점을 모아 복잡한 문제에 대응할 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;932&quot; data-start=&quot;854&quot;&gt;&lt;b&gt;의사결정의 유연성&lt;/b&gt;: 불확실성이 클수록 빠른 의사결정이 중요한데, 팀은 구성원 간 긴밀한 협업을 통해 신속한 대응이 가능하다.&lt;/li&gt;
&lt;li data-end=&quot;999&quot; data-start=&quot;933&quot;&gt;&lt;b&gt;혁신과 창의성&lt;/b&gt;: 다양한 배경을 가진 구성원들이 아이디어를 공유하면서 혁신적인 해결책을 모색할 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;1069&quot; data-start=&quot;1000&quot;&gt;&lt;b&gt;책임 공유&lt;/b&gt;: 팀원들이 공동의 목표를 지니고 있어, 실패의 부담을 분산시키고 적극적인 참여를 유도할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;협력의 목표 -&amp;gt; 추상화. 대화는 기적이다.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;협력의 목표를 &lt;b&gt;추상화&lt;/b&gt; 개념으로 연결시킨 점도 인사이트가 있었다. 저자의 말대로 혼자서 할 수 있는 추상화에는 한계가 명백할 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이 파트를 읽고 떠오른 건 Gan( &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;Generative Adversarial Networks)에서 AI를 학습시키는 방법이다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fe3Si/btsML3CCwMg/LnDtNxIUdxaTNftVbd8C3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fe3Si/btsML3CCwMg/LnDtNxIUdxaTNftVbd8C3k/img.png&quot; data-alt=&quot;초등학생도_이해_가능한_GAN_출처_하단_첨부&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fe3Si/btsML3CCwMg/LnDtNxIUdxaTNftVbd8C3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFe3Si%2FbtsML3CCwMg%2FLnDtNxIUdxaTNftVbd8C3k%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;893&quot; height=&quot;426&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;초등학생도_이해_가능한_GAN_출처_하단_첨부&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;대학 때 배웠던 내용이었는데, AI 끼리 &lt;b&gt;협력&lt;/b&gt;의 방식으로 학습 정확도를 높이는 방법이다.&amp;nbsp;&lt;br /&gt;쉽게 말하면 위조지폐 만드는 AI 랑 그걸 판별하는 AI를 두고 판별 못할 때까지 다시 만들라고 하는 AI인데, 이런 방식도 &lt;b&gt;협력&lt;/b&gt;의 중요성에서 착안된 게 아닐까 마인드스토밍을 했다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;  상대의 콧대를 납작하게 만들어 승리하는 &lt;span style=&quot;color: #1d1c1d; text-align: start;&quot;&gt;세계관은 협력사회에 없다. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;신뢰를 위한 소통 파트에서 살짝 나온 말을 각색한 부분인데, 내가 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;책에서 느낀 부분 중 가장 날카롭게 와닿았던 파트인 것 같다.&lt;span&gt; &lt;b&gt;올바름을 관철하는 것&lt;/b&gt;. 이 얼마나 오만한 일이었는지를 책을 읽고 알게 됐다. 어떤 자료나 정보로 상대를 설득하는 게 아니라, &lt;b&gt;그 사람이 어떤 사람&lt;/b&gt;인지 이해하는 것부터 시작하는 게 중요했다. 그리고 우연히도, 이 책을 액션 아이템으로 할 기회가 나에게는 많았다. 실제로 나만의 함께 자라기를 실천한 사례를 아래 설명하겠다.&lt;/span&gt;&lt;/span&gt;&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;4. 회사에서 함께 자라기를 적용해 보았다!&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;지금 다니고 있는 회사는 대단히 자그마한 회사이다. 그래서 IT 회사라고는 이해할 수 없었던 일들이 하루에 과장 없이 한 두 번씩 일어나곤 한다. 초반에는 많이 놀라웠다.&lt;br /&gt;(ex. 장고가 파이썬 2.x 버전을 사용하는데, 문서화된 게 하나도 없어 부딪혀 보며 알아야 했다. 추후 내가 문서화)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;(ex. 배포될 때 css 캐시 무효화가 되지 않고 있어, Bitbuckit에서 코드를 Ctrl c + v 해야 했다. 추후 내가 고도화)&lt;br /&gt;(ex. PR 올리면 리뷰 없이 100 % 머지된다. 왜 PR을 하는지 아직도 의문이다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;(ex. AWS 계정을 1년째 못 받고 있다. 팀장은 IAM을 알고 있지만,,, 아직 나에 대한 신뢰가 부족한가 보다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;(ex. 파일 업로드 기능을 공통화하지 않고 계속 복사하고 붙여 넣어, 600 줄 이상의 key 만 바꾼 코드가 기능마다 들어가 있었다. 추후 내가 공통화)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;등등... 말하다 보니 후련해져서 계속 말하는 저를 이해해 주세요.&lt;/span&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;&lt;br /&gt;이런 부분들보다 내 위장을 아프게 하는 건 소통 없이 일이 진행되는 경우가 많다는 것이다. 다음은 내가 함께 자라기를 실천하게 된 배경이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 육아휴직 기간이 끝난 G님이 복귀하셨다. 그녀는 이 회사가 첫 회사이고 3년 차이다.&lt;br /&gt;2. G님이 내가 만든 서비스에 합류하셨다.&lt;br /&gt;3. G님이 서비스 디자인을 개편하면서 내가 만든 기능의 디자인을 수정했다. &lt;br /&gt;(나는 전달받지 못했다. 커밋 메시지는 'rebase 전 commit'으로 되어 있었다)&lt;br /&gt;4. 특정 상황에서 버튼이 활성화되지 않아 기능이 동작하지 않게 됐다. (뒤늦게 라이브에서 발견)&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내가 유지보수와 가독성을 더 생각했다면 위와 같은 문제를 막을 수 있을 것 같다는 생각은 한다. &lt;s&gt;하지만 분기되어 있는 게 어떤 기능인지 몰라 지우는 건 악의가 아닐까 하는 생각이 더 크다.&lt;/s&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;이런 비슷한 상황이 계속 반복되었다. 그때는 옥상에서 살려달라고 소리라도 지르고 싶었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;더 큰 문제는 그 상황에 대해 말씀드렸을 때 G님의 태도였다. '이건 기획이 이상하다.' '나는 몰랐다.' '초록님(나)은 너무 코드에 대한 장인정신이 크다' '고객을 먼저 생각해야 한다.'&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그런 요즈음, &lt;b&gt;함께 자라기&lt;/b&gt;를 회사에서 실천하기로 했다. G님과 미팅을 잡았고, 생각보다 둘 사이 앙금을 많이 풀 수 있었다.&lt;br /&gt;&lt;br /&gt;1. 그녀는 부족한 실력을 만회하고자 뭐라도 했어야 했고, &lt;br /&gt;2. 내가 너무 공격적이라고 느껴졌으며&lt;br /&gt;3. 소통을 거부하는 줄 알았다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;G님은 내가 공격적으로 했기에 본인도 공격적으로 나올 수밖에 없었다는 것을 재차 강조했다. 나는 내가 장인 정신이 부족한 사람인 것을 확실하게 전하며, 추후 commit 형식과 디자인과 기획서로 먼저 전달받을 것을 약속했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 대화로 잘 풀어나갈 수 있었던 건, 이전과 달리 내가 &lt;b&gt;한 명의 사람&lt;/b&gt;으로서 G님을 보려고 한 덕분이었다.&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;b&gt;싸워야 하는 사람&lt;/b&gt;은 사라지고 &lt;b&gt;내 편&lt;/b&gt;이 한 명 더 늘었기 때문에.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;5. 마치며&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;현재 내가 다니는 회사는 단적으로 &lt;b&gt;함께 자라기&lt;/b&gt;를 할 수 없는 회사다. 팀원 구성은 안드로이드 팀 1명, FE 2명(나 + G님), 윈도우 개발자 1명과 서비스의 모든 것을 &lt;b&gt;혼자 &lt;/b&gt;만드신 팀장님이 계신다.(그는 너무 뛰어난 나머지 윈도우와 안드와 리액트와 BE와 임베디드까지 모조리 혼자 하셨습니다.) 그중 협업에 대해 가장 경험이 많은 게 놀랍게도 3년 차인 나이다. 그들과 &lt;b&gt;함께&lt;/b&gt;하고 싶어 노력하고 실패했던 여러 과정들이 스트레스였었는데, 함께 자라기를 읽고 회사에서 적용해 보며&lt;b&gt; 한 사람의 사람&lt;/b&gt;으로서 그들을 이해할 수 있었다. 놀라운 건 그러자 그들도 나를&lt;b&gt; 한 사람의 사람&lt;/b&gt;으로 봐주었단 것이다. 언제부턴가 나도 모르게 &lt;b&gt;그들의 콧대를 누를 생각&lt;/b&gt;을 하지 않았나 싶다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;책은 함께 자라는 방법과, 실제 사례와 연구를 보여준다. 그러나 그걸 습득하고 적용하는 건 언제나 나이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; letter-spacing: 0px;&quot;&gt;함께 자라기 위해서&lt;b&gt;&amp;nbsp;혼자 자라는 것. &lt;/b&gt;그것이 내가 책을 읽으며 얻은 가장 큰 가르침이다.&lt;br /&gt;&lt;s&gt;(후킹을 위해서였다는 것도 부정할 수 없다)&lt;/s&gt;&lt;span style=&quot;background-color: #ffffff; color: #1d1c1d; text-align: start;&quot;&gt;&amp;nbsp; 진인사대천명. 함께 자라고 싶은 매력적인 개발자가 될 테야!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;도움받은 글&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[출처] 함께자라기 리뷰들&lt;/p&gt;
&lt;figure id=&quot;og_1742110199790&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[독후감] 함께 자라기 - 신입 개발자의 포부를 곁들인&quot; data-og-description=&quot;함께 자라기 책을 읽고, 프론트엔드 개발자로서 어떻게 일해야 동료와 함께 성장하며, 일을 잘 할 수 있을까 고민을 정리했습니다.&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@seoin1002/%EB%8F%85%ED%9B%84%EA%B0%90-%ED%95%A8%EA%BB%98-%EC%9E%90%EB%9D%BC%EA%B8%B0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9D%BC%ED%95%A0-%EA%B2%83%EC%9D%B8%EA%B0%80&quot; data-og-url=&quot;https://velog.io/@seoin1002/독후감-함께-자라기-어떻게-일할-것인가&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b9nF3V/hyYrShZS0t/INJuHMoYWUUVtucnBSUiOk/img.png?width=666&amp;amp;height=419&amp;amp;face=0_0_666_419,https://scrap.kakaocdn.net/dn/fAxZ8/hyYrXcwnUk/vM4cQIejue3mhCFMdDECPk/img.png?width=666&amp;amp;height=419&amp;amp;face=0_0_666_419,https://scrap.kakaocdn.net/dn/OdHwd/hyYqdUwNm3/zvz43RVawZtrRJaLTt8KrK/img.jpg?width=630&amp;amp;height=582&amp;amp;face=0_0_630_582&quot;&gt;&lt;a href=&quot;https://velog.io/@seoin1002/%EB%8F%85%ED%9B%84%EA%B0%90-%ED%95%A8%EA%BB%98-%EC%9E%90%EB%9D%BC%EA%B8%B0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9D%BC%ED%95%A0-%EA%B2%83%EC%9D%B8%EA%B0%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@seoin1002/%EB%8F%85%ED%9B%84%EA%B0%90-%ED%95%A8%EA%BB%98-%EC%9E%90%EB%9D%BC%EA%B8%B0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9D%BC%ED%95%A0-%EA%B2%83%EC%9D%B8%EA%B0%80&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b9nF3V/hyYrShZS0t/INJuHMoYWUUVtucnBSUiOk/img.png?width=666&amp;amp;height=419&amp;amp;face=0_0_666_419,https://scrap.kakaocdn.net/dn/fAxZ8/hyYrXcwnUk/vM4cQIejue3mhCFMdDECPk/img.png?width=666&amp;amp;height=419&amp;amp;face=0_0_666_419,https://scrap.kakaocdn.net/dn/OdHwd/hyYqdUwNm3/zvz43RVawZtrRJaLTt8KrK/img.jpg?width=630&amp;amp;height=582&amp;amp;face=0_0_630_582');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[독후감] 함께 자라기 - 신입 개발자의 포부를 곁들인&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;함께 자라기 책을 읽고, 프론트엔드 개발자로서 어떻게 일해야 동료와 함께 성장하며, 일을 잘 할 수 있을까 고민을 정리했습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1742110158668&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;현재 상황을 어떻게 타파할까? 근 몇주간 (이제 신입 핑계 댈 수 없는) 2년차 개발자의 고민&quot; data-og-description=&quot;1월 초중순부터 현재까지, 그리고 앞으로 몇달간 바빴고, 바쁘고, 바쁠 예정입니다. 정신없이 달려가는 와중에 현재의 어려움을 기록하고 이를 어떻게 타파하는 게 좋을지를 주제로 글을 써야겠&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@byte_logger/%ED%98%84%EC%9E%AC-%EC%83%81%ED%99%A9%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%83%80%ED%8C%8C%ED%95%A0%EA%B9%8C-%EA%B7%BC-%EB%AA%87%EC%A3%BC%EA%B0%84-%EC%9D%B4%EC%A0%9C-%EC%8B%A0%EC%9E%85-%ED%95%91%EA%B3%84-%EB%8C%88-%EC%88%98-%EC%97%86%EB%8A%94-2%EB%85%84%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EA%B3%A0%EB%AF%BC&quot; data-og-url=&quot;https://velog.io/@byte_logger/현재-상황을-어떻게-타파할까-근-몇주간-이제-신입-핑계-댈-수-없는-2년차-개발자의-고민&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/PGnfu/hyYrVlsXaK/fN2SJ5ojRLP1qkA3VeXMA1/img.png?width=428&amp;amp;height=321&amp;amp;face=0_0_428_321,https://scrap.kakaocdn.net/dn/bnQOQe/hyYqLKuzV0/w36REpXXgMKnkjUKA6Nre0/img.png?width=428&amp;amp;height=321&amp;amp;face=0_0_428_321,https://scrap.kakaocdn.net/dn/uBfsS/hyYrUGRA07/1nPCsLmGXZbQetn2Uppz80/img.png?width=1179&amp;amp;height=2556&amp;amp;face=439_798_878_1277&quot;&gt;&lt;a href=&quot;https://velog.io/@byte_logger/%ED%98%84%EC%9E%AC-%EC%83%81%ED%99%A9%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%83%80%ED%8C%8C%ED%95%A0%EA%B9%8C-%EA%B7%BC-%EB%AA%87%EC%A3%BC%EA%B0%84-%EC%9D%B4%EC%A0%9C-%EC%8B%A0%EC%9E%85-%ED%95%91%EA%B3%84-%EB%8C%88-%EC%88%98-%EC%97%86%EB%8A%94-2%EB%85%84%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EA%B3%A0%EB%AF%BC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@byte_logger/%ED%98%84%EC%9E%AC-%EC%83%81%ED%99%A9%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%83%80%ED%8C%8C%ED%95%A0%EA%B9%8C-%EA%B7%BC-%EB%AA%87%EC%A3%BC%EA%B0%84-%EC%9D%B4%EC%A0%9C-%EC%8B%A0%EC%9E%85-%ED%95%91%EA%B3%84-%EB%8C%88-%EC%88%98-%EC%97%86%EB%8A%94-2%EB%85%84%EC%B0%A8-%EA%B0%9C%EB%B0%9C%EC%9E%90%EC%9D%98-%EA%B3%A0%EB%AF%BC&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/PGnfu/hyYrVlsXaK/fN2SJ5ojRLP1qkA3VeXMA1/img.png?width=428&amp;amp;height=321&amp;amp;face=0_0_428_321,https://scrap.kakaocdn.net/dn/bnQOQe/hyYqLKuzV0/w36REpXXgMKnkjUKA6Nre0/img.png?width=428&amp;amp;height=321&amp;amp;face=0_0_428_321,https://scrap.kakaocdn.net/dn/uBfsS/hyYrUGRA07/1nPCsLmGXZbQetn2Uppz80/img.png?width=1179&amp;amp;height=2556&amp;amp;face=439_798_878_1277');&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;현재 상황을 어떻게 타파할까? 근 몇주간 (이제 신입 핑계 댈 수 없는) 2년차 개발자의 고민&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1월 초중순부터 현재까지, 그리고 앞으로 몇달간 바빴고, 바쁘고, 바쁠 예정입니다. 정신없이 달려가는 와중에 현재의 어려움을 기록하고 이를 어떻게 타파하는 게 좋을지를 주제로 글을 써야겠&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1742110077340&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;혼자 자라면 풀, 함께 자라면 숲! - &amp;quot;함께 자라기&amp;quot;를 읽고&quot; data-og-description=&quot;자! 자라고, 함께 성장하자! 요즘 글또 10기 활동을 하면서 성윤님 추천으로 '함께 자라기' 책을 알게 되었어요! (개발자들 사이에서는 이미 유명한 책이라고 하더라고요!  )평소에 함께 성장하&quot; data-og-host=&quot;develop-ssooo.tistory.com&quot; data-og-source-url=&quot;https://develop-ssooo.tistory.com/219&quot; data-og-url=&quot;https://develop-ssooo.tistory.com/219&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bf5iYv/hyYr079KPw/Q4Ydmx2n1Mb6SgolAGEFIK/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/HpW2X/hyYqVTUsWh/cxsuiTBtNVE0fbn0O9hJFK/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/cFxtWD/hyYujS5beh/Y99a3lodeHgKIxpgeVZL9K/img.png?width=1536&amp;amp;height=804&amp;amp;face=0_0_1536_804&quot;&gt;&lt;a href=&quot;https://develop-ssooo.tistory.com/219&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://develop-ssooo.tistory.com/219&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bf5iYv/hyYr079KPw/Q4Ydmx2n1Mb6SgolAGEFIK/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/HpW2X/hyYqVTUsWh/cxsuiTBtNVE0fbn0O9hJFK/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/cFxtWD/hyYujS5beh/Y99a3lodeHgKIxpgeVZL9K/img.png?width=1536&amp;amp;height=804&amp;amp;face=0_0_1536_804');&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;혼자 자라면 풀, 함께 자라면 숲! - &quot;함께 자라기&quot;를 읽고&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;자! 자라고, 함께 성장하자! 요즘 글또 10기 활동을 하면서 성윤님 추천으로 '함께 자라기' 책을 알게 되었어요! (개발자들 사이에서는 이미 유명한 책이라고 하더라고요!  )평소에 함께 성장하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;develop-ssooo.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[출처]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://blog.naver.com/mmismin/223028138716&quot;&gt;[초등학생도 이해하는 AI] GAN, 서로 싸우면서 데이터를 생성한다. Generative Adversarial Networks&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742110011521&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[초등학생도 이해하는 AI] GAN, 서로 싸우면서 데이터를 생성한다. Generative Adversarial Networks&quot; data-og-description=&quot;GAN은 '생성자'와 '판별자'로 구성되며 이들을 적대적으로 학습시킵니다. 결국 &amp;amp;#x...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/mmismin/223028138716&quot; data-og-url=&quot;https://blog.naver.com/mmismin/223028138716&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ce1qNR/hyYuotj7jp/8E09VBrqPKR8Ysawvb2nG1/img.png?width=743&amp;amp;height=373&amp;amp;face=474_172_541_246&quot;&gt;&lt;a href=&quot;https://blog.naver.com/mmismin/223028138716&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/mmismin/223028138716&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ce1qNR/hyYuotj7jp/8E09VBrqPKR8Ysawvb2nG1/img.png?width=743&amp;amp;height=373&amp;amp;face=474_172_541_246');&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;[초등학생도 이해하는 AI] GAN, 서로 싸우면서 데이터를 생성한다. Generative Adversarial Networks&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;GAN은 '생성자'와 '판별자'로 구성되며 이들을 적대적으로 학습시킵니다. 결국 &amp;amp;#x...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/div&gt;</description>
      <category>글</category>
      <category>TDD</category>
      <category>개발</category>
      <category>경험</category>
      <category>방법론</category>
      <category>에자일</category>
      <category>잘하기</category>
      <category>함께자라기</category>
      <category>혼자</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/33</guid>
      <comments>https://ddoottaa.tistory.com/33#entry33comment</comments>
      <pubDate>Sun, 16 Mar 2025 17:30:54 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 - N개의 최소공배수</title>
      <link>https://ddoottaa.tistory.com/32</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;프로그래머스&amp;nbsp;-&amp;nbsp;N개의&amp;nbsp;최소공배수난이도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl6oZO/btsMAZlW0Eo/WytVi5e8TEyzafl0Q1CasK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl6oZO/btsMAZlW0Eo/WytVi5e8TEyzafl0Q1CasK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl6oZO/btsMAZlW0Eo/WytVi5e8TEyzafl0Q1CasK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl6oZO%2FbtsMAZlW0Eo%2FWytVi5e8TEyzafl0Q1CasK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;822&quot; height=&quot;417&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12953&quot;&gt;프로그래머스 - N개의 최소공배수&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;난이도 : Level 2&lt;br /&gt;정답률: 67%&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12953&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12953&lt;/a&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1740920993740&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12953&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bz5Tq1/hyYnaWD8xn/XQUTcy9SRlXxNpMe7hCVWk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/dbHshl/hyYjxssBVj/12LEIdiz2TPdhmxuuiAUy1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12953&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12953&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bz5Tq1/hyYnaWD8xn/XQUTcy9SRlXxNpMe7hCVWk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/dbHshl/hyYjxssBVj/12LEIdiz2TPdhmxuuiAUy1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;-문제&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;▶ 문제&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mHmuB/btsMAIxW0Xx/xALliFThqD05NvcJjbrRDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mHmuB/btsMAIxW0Xx/xALliFThqD05NvcJjbrRDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mHmuB/btsMAIxW0Xx/xALliFThqD05NvcJjbrRDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmHmuB%2FbtsMAIxW0Xx%2FxALliFThqD05NvcJjbrRDk%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;755&quot; height=&quot;547&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;547&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;▶ 풀이&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1740921188907&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(arr) {
    let answer = 0;
    

    let n = 1
    let flag = true;
    while(flag)
    {
        n++;
        for(let i = 1; i &amp;lt; arr.length; ++i){
            if((arr[0] * n) % arr[i]  === 0){
                flag = false;
            } else {
                flag = true;
                break;
            }
        }
    }
    answer = arr[0] * n;
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;한 숫자를 곱하고 남은 나머지의 값이 모두 0으로 떨어지면 모든 값의 최소공배수가 구해질 거라고 생각하고 코드를 짰다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 짤 경우 최소공배수의 값이 클수록 while 루프가 오래 반복되므로 &lt;b&gt;시간이 기하급수적으로 증가&lt;/b&gt;할 수 있다.&lt;/p&gt;
&lt;h3 id=&quot;-다른-사람의-풀이&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;▶ 다른 사람의 풀이(좋은 풀이)&lt;/h3&gt;
&lt;pre id=&quot;code_1740921203867&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 또 다른 풀이
function getGcd(a, b) {
  if (b === 0) return a;
  return getGcd(b, a % b);
}

function solution(arr) {
  return arr.reduce((a, b) =&amp;gt; (a * b) / getGcd(a, b));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(유클리드 호제법을 이용한 풀이)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 풀이의 빅오표기는 &lt;b&gt;O(N log M) &lt;/b&gt;이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;알기 쉽게 내가 짠 코드와 비교하면 다음과 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 88px;&quot; border=&quot;1&quot; data-end=&quot;1837&quot; data-start=&quot;1596&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 26.9767%;&quot;&gt;입력 배열&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 33.9535%;&quot;&gt;&lt;b&gt; 유클리드 방법 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 38.9535%;&quot;&gt;&lt;b&gt;내가 짠 코드&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;1693&quot; data-start=&quot;1661&quot;&gt;
&lt;td style=&quot;height: 17px; width: 26.9767%;&quot;&gt;[2, 3]&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 33.9535%;&quot;&gt;&lt;b&gt;O(1)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 38.9535%;&quot;&gt;O(6)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;1728&quot; data-start=&quot;1694&quot;&gt;
&lt;td style=&quot;height: 17px; width: 26.9767%;&quot;&gt;[2, 3, 4]&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 33.9535%;&quot;&gt;&lt;b&gt;O(1)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 38.9535%;&quot;&gt;O(12)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;1786&quot; data-start=&quot;1729&quot;&gt;
&lt;td style=&quot;height: 20px; width: 26.9767%;&quot;&gt;[2, 3, 5, 7, 11]&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 33.9535%;&quot;&gt;&lt;b&gt;O(log M)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 38.9535%;&quot;&gt;O(2310[모든 수의 곱]) (매우 비효율적)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;1837&quot; data-start=&quot;1787&quot;&gt;
&lt;td style=&quot;height: 17px; width: 26.9767%;&quot;&gt;[10, 15, 20, 25, 30]&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 33.9535%;&quot;&gt;&lt;b&gt;O(log M)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 38.9535%;&quot;&gt;O(300) &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(매우 비효율적)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-end=&quot;1924&quot; data-start=&quot;1839&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유클리드 방법은 log 시간에 해결 가능 (훨씬 빠르다!)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;▶&amp;nbsp;  유클리드 호재법이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 유클리드 호제법(Euclidean Algorithm)&lt;/b&gt;은 두 수의 최대공약수(GCD, Greatest Common Divisor)를 구하는 효율적인 알고리즘이다. 그 성능이 어마어마하게 떠오&lt;/p&gt;
&lt;h3 data-end=&quot;123&quot; data-start=&quot;98&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;유클리드 호재법&lt;/b&gt;의 원리&lt;/h3&gt;
&lt;p data-end=&quot;169&quot; data-start=&quot;124&quot; data-ke-size=&quot;size16&quot;&gt;두 자연수 &lt;span&gt;&lt;span&gt;AA&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;A&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;와 &lt;span&gt;&lt;span&gt;BB&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; (&lt;span&gt;&lt;span&gt;A&amp;gt;BA &amp;gt; B&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;A&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;)가 있을 때,&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;332&quot; data-start=&quot;170&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;223&quot; data-start=&quot;170&quot;&gt;&lt;span&gt;&lt;span&gt;AA&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;A&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;를 &lt;span&gt;&lt;span&gt;BB&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;로 나눈 나머지를 구한다.&lt;/li&gt;
&lt;li data-end=&quot;264&quot; data-start=&quot;224&quot;&gt;만약 나머지가 0이면 &lt;span&gt;&lt;span&gt;BB&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;가 &lt;b&gt;최대공약수(GCD)&lt;/b&gt;이다.&lt;/li&gt;
&lt;li data-end=&quot;332&quot; data-start=&quot;265&quot;&gt;나머지가 0이 아니라면, &lt;span&gt;&lt;span&gt;AA&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;A&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;를 &lt;span&gt;&lt;span&gt;BB&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;로, &lt;span&gt;&lt;span&gt;BB&lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;B&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;를 나머지로 바꾸고 1번 과정을 반복한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt;example)&lt;/b&gt;&lt;br /&gt;1071과 1029의 최대공약수를 구한다고 하면,&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1071은 1029로 나누어 떨어지지 않기 때문에, 1071을 1029로 나눈 나머지를 구한다. ==&amp;gt; 나머지는 &lt;b&gt;42&lt;/b&gt; 이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;나머지가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;42&lt;/b&gt; 니까 1029는 42로 나누어 떨어지지 않기 때문에, 1029를 42로 나눈 나머지를 구한다. ==&amp;gt; 나머지는 &lt;b&gt;42&lt;/b&gt; 이다.&lt;br /&gt;나머지가 &lt;b&gt;21&lt;/b&gt; 이면 42는 21로 나누어 떨어진다.&lt;br /&gt;따라서, 최대공약수는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;21&lt;/b&gt;이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 당신도, 최대공약수 마스터이다!&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;▶ 느낀점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유클리드 호재법의 시작은 기원전 300년경 고대 그리스 수학자 유클리드부터라고 한다. 그 얘길 듣고 고등학교 선생님이 이제 된 친구의 얘기가 떠올랐다. 우리나라에 수포자가 많은 이유는 수학이란 과목만은 지름길이 없기 때문이라고 한다.&lt;/p&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;JS의 동작 원리도 제대로 모르는 상태로 리액트와 vue 부터 접했으니, 새로운 기술이 생긴 배경도 모른체 따라하는 코더가 되며 개발에 흥미를 잃었던 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평생 가야할 길에서는 지름길이 더 느릴 수도 있다는 생각이 든다. 탄탄하게 나아가자.&lt;/p&gt;</description>
      <category>코테</category>
      <category>유클리드호재법</category>
      <category>지름길</category>
      <category>최대공약수</category>
      <category>코테</category>
      <category>프로그래머스</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/32</guid>
      <comments>https://ddoottaa.tistory.com/32#entry32comment</comments>
      <pubDate>Sun, 2 Mar 2025 23:20:11 +0900</pubDate>
    </item>
    <item>
      <title>나는 마침내 BFS 와 DFS 를 이해했다.</title>
      <link>https://ddoottaa.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;제목이 곧 내용입니다&lt;/s&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;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;0. 시작하며&lt;br /&gt;1. DFS와 BFS 가 먼데?&lt;br /&gt;2. 그래서 이걸 언제 사용하는데?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 그래서 이걸 어떻게 사용하는데?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4. 마치며&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; font-size: 1.44em; letter-spacing: -1px; color: #ffffff;&quot;&gt;0. 시작하며&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이 글의 목적은 BFS와 DFS 가 뭔지 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;나도 이해한 BFS와 DFS, 너도 이해할 수 있어!!&lt;/p&gt;
&lt;p 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;span style=&quot;background-color: #000000; font-size: 1.44em; letter-spacing: -1px; color: #ffffff;&quot;&gt;1. DFS 와 BFS 가 뭔데?&lt;/span&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 data-end=&quot;80&quot; data-start=&quot;0&quot; data-ke-size=&quot;size16&quot;&gt;DFS(Depth-First Search)와 BFS(Breadth-First Search)는 그래프 탐색 알고리즘이다. &lt;br /&gt;&lt;br /&gt;그래프는 이런 녀석이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RRPXb/btsMjpz55Ly/KlaDaT6eIpmfzWsMlC0brk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RRPXb/btsMjpz55Ly/KlaDaT6eIpmfzWsMlC0brk/img.png&quot; data-alt=&quot;그래프다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RRPXb/btsMjpz55Ly/KlaDaT6eIpmfzWsMlC0brk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRRPXb%2FbtsMjpz55Ly%2FKlaDaT6eIpmfzWsMlC0brk%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;526&quot; height=&quot;355&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;355&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;&lt;b&gt;0&lt;/b&gt;은 &lt;b&gt;1&lt;/b&gt;과, &lt;b&gt;3&lt;/b&gt;과 &lt;b&gt;4&lt;/b&gt;와 이어져 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1&lt;/b&gt;은 &lt;b&gt;0&lt;/b&gt;과 &lt;b&gt;2&lt;/b&gt;와 이어져 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3&lt;/b&gt;은 &lt;b&gt;0&lt;/b&gt;과 &lt;b&gt;2&lt;/b&gt;와 이어져 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4&lt;/b&gt;는 &lt;b&gt;0&lt;/b&gt;과 이어져 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5&lt;/b&gt;는 &lt;b&gt;4&lt;/b&gt;워 이어져 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 JS로 표현하면 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #a626a4; text-align: left;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; graph &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #4078f2; text-align: left;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;1&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt; 3&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;0&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt; 2&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #b76b01; text-align: left;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #383a42; text-align: left;&quot;&gt;; //&amp;nbsp; &lt;s&gt;알아보기 어렵다&lt;/s&gt;&lt;/span&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;size18&quot;&gt;&lt;b&gt;DFS와 BFS는 이렇게 생긴 그래프를 탐색하는 방법이다. 아래 그림처럼 움직인다고 보면 된다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;X74ZB72z2PIoD0S4Yc-6zGiK6K0DQvoB21J-CbmsY2Pt_cx-L2RjsYJHRL4h60c6uiagU1eyQdfAra6kGuMD1A.gif&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vwXk0/btsMjptpkEk/hG3MHeFL2LdEPg2gCKf4Lk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vwXk0/btsMjptpkEk/hG3MHeFL2LdEPg2gCKf4Lk/img.gif&quot; data-alt=&quot;이렇게 탐색하는 것이다! 출처: 꺼무위키&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vwXk0/btsMjptpkEk/hG3MHeFL2LdEPg2gCKf4Lk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/vwXk0/btsMjptpkEk/hG3MHeFL2LdEPg2gCKf4Lk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;333&quot; data-filename=&quot;X74ZB72z2PIoD0S4Yc-6zGiK6K0DQvoB21J-CbmsY2Pt_cx-L2RjsYJHRL4h60c6uiagU1eyQdfAra6kGuMD1A.gif&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이렇게 탐색하는 것이다! 출처: 꺼무위키&lt;/figcaption&gt;
&lt;/figure&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;b&gt;DFS&lt;/b&gt;는 &lt;b&gt;Deep&lt;/b&gt; 하게 탐색하는 녀석이라 쭉쭉 아래부터 간다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BFS&lt;/b&gt;는 &lt;b&gt;Breadth(너비)&lt;/b&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;span style=&quot;background-color: #000000; font-size: 1.44em; letter-spacing: -1px; color: #ffffff;&quot;&gt;2. 그래서 이걸 언제 사용하는데?&lt;/span&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;table style=&quot;border-collapse: collapse; width: 100%; height: 105px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;DFS&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;BFS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt; &lt;b&gt;탐색 방식&lt;/b&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;깊이 우선(깊게 탐색 후 백트래킹)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;너비 우선(가까운 노드부터 탐색)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt; &lt;b&gt;최단 경로 탐색&lt;/b&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;❌&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;&lt;b&gt;시간 복잡도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;O(V + E) (V: 노드 수, E: 간선 숫자)&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;O(V + E) (V: 노드 수, E: 간선 숫자)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;2002&quot; data-start=&quot;1948&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;사용 예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;백트래킹, 체스&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;최단 거리 문제, 네트워크 탐색&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DFS&lt;/b&gt;는 &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: left;&quot;&gt;각 정점에 숫자가 적혀있고 a부터 b까지 가는 경로를 구하는데 경로에 같은 숫자가 있으면 안 된다는 문제 등, 각각의 경로마다 조건을 저장해야 할 때 쓰기에 알맞다. 표에 예시에 나온 &lt;b&gt;백트래킹&lt;/b&gt;이란 &lt;b&gt;경우의 수를 탐색하면서, 불가능한 경우를 제외(Pruning)하는 탐색 기법&lt;/b&gt;인데, BFS에서는 경로마다 특징을 가지지 못해, DFS를 사용하는 게 유리하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt;BFS&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: left;&quot;&gt;는 하나의 정점을 바라보는 녀석부터 탐색하기 때문에, 가장 가까운 녀석 찾거나 할 때 유리하다.&lt;/span&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;span style=&quot;background-color: #000000; font-size: 1.44em; letter-spacing: -1px; color: #ffffff;&quot;&gt;3. 그래서 이걸 어떻게 사용하는데?&lt;/span&gt;&amp;nbsp;&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;먼저 기본적인 BFS와 DFS의 js 코드를 &lt;a href=&quot;https://velog.io/@sean2337/Algorithm-DFS%EC%99%80-BFS%EC%9D%98-%EC%89%AC%EC%9A%B4-%EA%B0%9C%EB%85%90-JavaScript-%EA%B5%AC%ED%98%84-%EB%B0%A9%EB%B2%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;서 긁어왔다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;(내 글이 이해가 안 가면 저 블로그를 보세요, 저기가 더 잘 설명한 듯)&lt;/s&gt;&lt;/p&gt;
&lt;h4 id=&quot;dfs-구현-함수&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;DFS 구현 함수&lt;/h4&gt;
&lt;pre class=&quot;crmsh&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;// graph 자료구조와 startNode를 입력
const DFS = (graph, startNode) =&amp;gt; {
  const visited = []; // 탐색을 마친 노드들
  let needVisit = []; // 탐색해야할 노드들

  needVisit.push(startNode); // 노드 탐색 시작

  while (needVisit.length !== 0) { // 탐색해야할 노드가 남아있다면
    const node = needVisit.shift(); // queue이기 때문에 선입선출, shift()를 사용한다.
    if (!visited.includes(node)) { // 해당 노드가 탐색된 적 없다면
      visited.push(node); 
      needVisit = [...graph[node], ...needVisit];
    }
  }
  return visited;
};&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;bfs-구현-함수&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;BFS 구현 함수&lt;/h4&gt;
&lt;pre class=&quot;crmsh&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;// graph 자료구조와 startNode를 입력
const BFS = (graph, startNode) =&amp;gt; {
  let visited = []; // 탐색을 마친 노드들
  let needVisit = []; // 탐색해야할 노드들

  needVisit.push(startNode); // 노드 탐색 시작

  while (needVisit.length !== 0) { // 탐색해야할 노드가 남아있다면
    const node = needVisit.shift(); // 가장 오래 남아있던 정점을 뽑아냄.
    if (!visited.includes(node)) { // 해당 노드 방문이 처음이라면,
      visited.push(node); 
      needVisit = [...needVisit, ...graph[node]];
    }
  }
  return visited;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 이제 문제를 통해 BFS와 DFS를 활용해 보자.&lt;br /&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/43163?language=javascript&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/43163?language=javascript&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #000000; font-size: 1.44em; letter-spacing: -1px; color: #ffffff;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739693058420&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/43163?language=javascript&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eMNWmD/hyYcVts6Go/nedpRdrTk3sMQw0iNSqLRk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/cwmOdE/hyYfHU2C9a/PN0agRBDz7zzSMY3zQQZ40/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/43163?language=javascript&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/43163?language=javascript&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eMNWmD/hyYcVts6Go/nedpRdrTk3sMQw0iNSqLRk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/cwmOdE/hyYfHU2C9a/PN0agRBDz7zzSMY3zQQZ40/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;background-color: #263747; color: #b2c0cc; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다.&lt;/p&gt;
&lt;div style=&quot;background-color: #263747; color: #b2c0cc; text-align: left;&quot;&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #202b3d; color: #b2c0cc;&quot;&gt;&lt;code&gt;1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다.
2. words에 있는 단어로만 변환할 수 있습니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #263747; color: #b2c0cc; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 begin이 &quot;hit&quot;, target가 &quot;cog&quot;, words가 [&quot;hot&quot;, &quot;dot&quot;, &quot;dog&quot;, &quot;lot&quot;, &quot;log&quot;, &quot;cog&quot;]라면 &quot;hit&quot; -&amp;gt; &quot;hot&quot; -&amp;gt; &quot;dot&quot; -&amp;gt; &quot;dog&quot; -&amp;gt; &quot;cog&quot;와 같이 4단계를 거쳐 변환할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #263747; color: #b2c0cc; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 target으로 변환할 수 있는지 return 하도록 solution 함수를 작성해 주세요.&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;ul style=&quot;list-style-type: disc; background-color: #263747; color: #b2c0cc; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;각 단어는 알파벳 소문자로만 이루어져 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;각 단어의 길이는 3 이상 10 이하이며 모든 단어의 길이는 같습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;words에는 3개 이상 50개 이하의 단어가 있으며 중복되는 단어는 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;begin과 target은 같지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;변환할 수 없는 경우에는 0을 return 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;입출력 예&lt;/p&gt;
&lt;table style=&quot;background-color: #263747; color: #b2c0cc; text-align: left; border-collapse: collapse; width: 100%; height: 68px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;begin&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;target&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;words&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;return&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000; height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&quot;hit&quot;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&quot;cog&quot;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;[&quot;hot&quot;, &quot;dot&quot;, &quot;dog&quot;, &quot;lot&quot;, &quot;log&quot;, &quot;cog&quot;]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #000000; height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&quot;hit&quot;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&quot;cog&quot;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;[&quot;hot&quot;, &quot;dot&quot;, &quot;dog&quot;, &quot;lot&quot;, &quot;log&quot;]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #202b3d; color: #000000; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;background-color: #263747; color: #b2c0cc; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;예제 #1&lt;br /&gt;문제에 나온 예와 같습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #263747; color: #b2c0cc; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;예제 #2&lt;br /&gt;target인 &quot;cog&quot;는 words 안에 없기 때문에 변환할 수 없습니다.&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;'어라? 이게 왜 BFS / DFS로 푸는 거지?' 싶었다. 어떻게 그래프를 그려야 하는지도 모를 거다. &lt;s&gt;나도 잘 모르겠다.&lt;/s&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;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;일단 &lt;b&gt;그래프&lt;/b&gt;부터 그려보자!&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;문제에서 주어진&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;words &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;배열의 각 원소 사이에는 연결 관계가 없지만, 다른 노드에 방문하는 조건이 있다. 바로 '&lt;b&gt;한 글자&lt;/b&gt;'가 다를 때 방문한다는 것이다. &lt;br /&gt;&lt;br /&gt;어라? 그러면, 'hit'라는 단어와 words 들 사이를 연결할 수 있을 것 같다. 한 글자가 다른 것들은 사실 &lt;b&gt;다음 방문지&lt;/b&gt;라고 생각해도 되니까!&lt;/span&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;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;어라? 그리고 이거,&amp;nbsp; &lt;b&gt;'가장 짧은 변환 과정'&lt;/b&gt;이네? 그렇다면 &lt;b&gt;최단 거리&lt;/b&gt;를 찾는 문제니 &lt;b&gt;BFS&lt;/b&gt;를 사용해야겠다!!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqBRzl/btsMlpSFd29/p8tF3JdhEaAvXKR92pqDqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqBRzl/btsMlpSFd29/p8tF3JdhEaAvXKR92pqDqK/img.png&quot; data-alt=&quot;가장 짧은 변환 과정이래! BFS 다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqBRzl/btsMlpSFd29/p8tF3JdhEaAvXKR92pqDqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqBRzl%2FbtsMlpSFd29%2Fp8tF3JdhEaAvXKR92pqDqK%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;506&quot; height=&quot;201&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;201&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;가장 짧은 변환 과정이래! BFS 다!&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;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;*최단 거리를 찾을 때 BFS 가 맞으나, 다시 생각해 보니 위 문제 같은 경우, 어차피 정점이 정해져 있고 한 단어씩 바꾸는 거라&amp;nbsp; '최단 거리' 워딩과 다르게 DFS를 사용해도 괜찮았을 문제였을 것 같다. BFS와 DFS를 설명하기에 애매한 코태를 선정한 것 같다ㅠ&amp;nbsp; 읽는 여러분은 글자에 현혹되어 저처럼 실수하지 마세요ㅠㅠ&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;오호라! 그렇다면 &lt;b&gt;BFS &lt;/b&gt;코드에 그대로 집어넣으면 되겠다!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739696572106&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(begin, target, words) {
  const visited = { [begin] : 0 }; // init 값 푸시를 그냥 바로 했다.
  const needVisit  = [begin]; // 얘가 queue 다

  while(needVisit.length) {
    const node = needVisit.shift(); // 가장 오래된 녀석 꺼냄
    if(node === target) break;
    for(const word of words) {
      if(!visited[word]) { // 해당 노드 방문이 처음이라면
        visited[word] = visited[node] + 1; // 몇 번째인지 순서를 적어두자!
        needVisit.push(word);
      }
    }
  }
  return visited[target] ? visited[target] : 0; // 없으면 0 return 해야 하니까!
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;앗! 그런데, 이동할 수 있는 조건이 제한되었었잖아? 글자 중 하나만 같을 경우 호출하도록 조건이 추가되어야겠다!&lt;/p&gt;
&lt;pre id=&quot;code_1739696874273&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 글자중 하나만 같을 경우 호출 (왜냐면 이게 사실상 연결된 노드니까!)
const canTransfer = (str1, str2) =&amp;gt; {
  let count = 0;
  for (let i = 0; i &amp;lt; str1.length; i++) {
    if (str1[i] !== str2[i]) count++;
    if (count &amp;gt; 1) return false;
  }
  
  return count === 1;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 이렇게 하면 되겠다!&lt;/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;pre id=&quot;code_1739696918947&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(begin, target, words) {
  const visited = { [begin] : 0 };
  const needVisit  = [begin];

  while(needVisit.length) {
    const node = needVisit.shift();
    if(node === target) break;
    for(const word of words) {
      if(canTransfer(word, node) &amp;amp;&amp;amp; !visited[word]) { // 방문되는 녀석 중 해당 노드 방문이 처음이라면
        visited[word] = visited[node] + 1;
        needVisit.push(word);
      }
    }
  }
  return visited[target] ? visited[target] : 0;
}

// 글자중 하나만 같을 경우 호출 (왜냐면 이게 사실상 연결된 노드니까!)
const canTransfer = (str1, str2) =&amp;gt; {
  let count = 0;
  for (let i = 0; i &amp;lt; str1.length; i++) {
    if (str1[i] !== str2[i]) count++;
    if (count &amp;gt; 1) return false;
  }
  
  return count === 1;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;방문 조건을 추가해 주면 끝! 이렇게 BFS와 DFS를 실제 코태에 적용해 봤다. 나처럼 '이 녀석 언제 써먹지?' 싶은 사람들에게 도움이 되었으면 좋겠다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; font-size: 1.44em; letter-spacing: -1px; color: #ffffff;&quot;&gt;4. 마치며&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DFS와 BFS의 개념만 알고 있을 때는 그걸 어따&amp;nbsp;쓰는지 몰랐지만, 코테를 풀면서 고민해 가며 알아가는 과정이 보람찼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 다 풀고 알았는데, 이건 BFS와 DFS 간의 차이를 설명하기에 좋은 예제가 아니었던 것 같은데 시간관계상 냅다 제출했다. 이 부분은,, 여유롭게 글을 시작해 완성도를 높이는 것으로 해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그리고 사실 내가 푼 거랑 다른 좋은 예제를 많이 참고했는데, 그 과정 중 내 &lt;/span&gt;&lt;b&gt;경험을 보여주는 거&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;와 &lt;/span&gt;&lt;b&gt;모두가 이해하기 좋은 글&lt;/b&gt;&lt;span style=&quot;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;letter-spacing: 0px;&quot;&gt;사실 제일 좋은 건 &lt;/span&gt;&lt;b&gt;모두가 이해하기 좋게 만든 내 경험&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;을 보여주는 거란 거 알고 있다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;언젠가 내가 스스로 그런 수준이 되길 바란다. Try Try~&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;span style=&quot;background-color: #000000; color: #ffffff;&quot;&gt;도움 받은 것들&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 설명한 블로그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@lucky-korma/DFS-BFS%EC%9D%98-%EC%84%A4%EB%AA%85-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@lucky-korma/DFS-BFS%EC%9D%98-%EC%84%A4%EB%AA%85-%EC%B0%A8%EC%9D%B4%EC%A0%90&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739527589117&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;DFS, BFS의 설명, 차이점&quot; data-og-description=&quot;그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종을 말하며,그래프를 탐색한다는 것은 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@lucky-korma/DFS-BFS%EC%9D%98-%EC%84%A4%EB%AA%85-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot; data-og-url=&quot;https://velog.io/@lucky-korma/DFS-BFS의-설명-차이점&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bIUJ21/hyYfI0pq5y/4iPu7y2Hj06eH0uKNTKNfK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://velog.io/@lucky-korma/DFS-BFS%EC%9D%98-%EC%84%A4%EB%AA%85-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@lucky-korma/DFS-BFS%EC%9D%98-%EC%84%A4%EB%AA%85-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bIUJ21/hyYfI0pq5y/4iPu7y2Hj06eH0uKNTKNfK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&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;DFS, BFS의 설명, 차이점&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종을 말하며,그래프를 탐색한다는 것은 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이쁘게 설명한 블로그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chamdom.blog/graph/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://chamdom.blog/graph/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739685192126&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;Home&quot; data-og-description=&quot;기록하는 프론트엔드 개발자&quot; data-og-host=&quot;chamdom.blog&quot; data-og-source-url=&quot;https://chamdom.blog/&quot; data-og-url=&quot;https://chamdom.blog&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Mu1Dt/hyYfZuppSY/MTPMymIAGwlG3D8Tqpyct0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400&quot;&gt;&lt;a href=&quot;https://chamdom.blog/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chamdom.blog/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Mu1Dt/hyYfZuppSY/MTPMymIAGwlG3D8Tqpyct0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Home&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;chamdom.blog&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>알고리즘</category>
      <category>BFS</category>
      <category>dfs</category>
      <category>js</category>
      <category>LV.3</category>
      <category>그래프 탐색</category>
      <category>단언 변환</category>
      <category>알고리즘</category>
      <category>자바스크립트</category>
      <category>프로그래머스</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/31</guid>
      <comments>https://ddoottaa.tistory.com/31#entry31comment</comments>
      <pubDate>Sun, 16 Feb 2025 18:12:45 +0900</pubDate>
    </item>
    <item>
      <title>깊은 복사와 얕은 복사</title>
      <link>https://ddoottaa.tistory.com/30</link>
      <description>&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;차례&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 깊은 복사 / 얕은 복사란?&lt;/p&gt;
&lt;p id=&quot;-참조값의-얕은-복사&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2. 참조 타입의 얕은 복사&lt;/p&gt;
&lt;p id=&quot;-참조값-깊은-복사-방법&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3. 참조값의 깊은 복사 방법&lt;/p&gt;
&lt;p id=&quot;-structuredclone&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/structuredClone&quot;&gt;structuredClone&lt;/a&gt;&lt;/p&gt;
&lt;p id=&quot;-마치며&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5. 마치며&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;빙하기 같았던 취업 시장을 뚫으려 공부했던 깊은 복사 / 얕은 복사 개념이 아무래도 애매해서, 신입이 들어왔을 때 &lt;br /&gt;'헉! 저 사람은 깊은 복사와 얕은 복사도 잘 모르나 봐!' 라고 공공연하게 조리돌림을 당해 창피를 당할 수도 있겠단 생각에 급하게 정리해본 깊은 복사와 얕은 복사. &lt;s&gt;이렇게 정리해 두면 더 이상 까먹지 않겠지? 분명 또 까먹고 말겠지.&lt;/s&gt;&lt;/p&gt;
&lt;h3 id=&quot;-깊은-복사-얕은-복사&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;1. &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;깊은 복사 / 얕은 복사란?&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Javascript 의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;얕은 복사&lt;/b&gt;는 객체의 &lt;b&gt;참조값(주소 값)&lt;/b&gt;을 복사하고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깊은 복사&lt;/b&gt;는 객체의 &lt;b&gt;실제 값&lt;/b&gt;을 복사한단다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;복사된 녀석(카피)의 값을 변경했을 때, 원본 녀석도 바뀌면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;얕은 복사&lt;/b&gt;, &lt;br /&gt;복사된 녀석(카피)의 값을 변경해도 그대로면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깊은 복사&lt;/b&gt;이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이렇게만 정리하니 '&lt;b&gt;원시값&lt;/b&gt;' 과 '&lt;b&gt;참조값&lt;/b&gt;' 개념이 좀 &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;헷갈린&lt;/span&gt;다. 예제를 통해 알아보자.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;대입을 통한 &lt;b&gt;원시값(변수)&lt;/b&gt; 복사 -&amp;gt; 깊은 복사가 된다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const a = 'a';
let b = 'b';
 
b = 'c';

console.log(a, b);

================================
출력 (원본은 그대로!)
a c&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;대입을 통한 &lt;b&gt;참조값(객체)&lt;/b&gt; 복사 -&amp;gt; 얕은 복사가 된다. (원본은 그대로다!)&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const a = {
  one: 1,
  two: 2,
};
let b = a;
 
b.one = 333;
 
console.log(a, b); 

================================
출력 (원본이 변했다!)
{ one: 333, two: 2 }
{ one: 333, two: 2 }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 이제 참조값을 복사하기 위해서는 어떻게 해야하는지를 알아보자. 이게 또 골치 아프다.&lt;/p&gt;
&lt;h3 id=&quot;-참조값의-얕은-복사&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.&amp;nbsp; &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;참조 타입의 얕은 복사&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;참조값을 그냥 대입하면 위처럼 &lt;b&gt;얕은 복사&lt;/b&gt;가 된다. 그건 JavaScript 의 참조값들은 주소를 가르키고 있기 때문이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 참조값을 깊은 복사하려면 어떻게 해야 하냐?&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;slice() 와 spread 연산자, Object.asign() 등등을 이용한다면, 1depth 는 깊복, 2depth 는 얕복을 하게 할 수다. 이 녀석들을 &lt;b&gt;참조 타입의 얕은 복사&lt;/b&gt;라 부른다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const original = [
  {
    a: 1,
    b: 2,
  },
  true,
];
const copy = original.slice();
  
// 복사된 배열만 변경.
copy[0].a = 99;
copy[1] = false;
  
console.log(original);
// [ { a: 99, b: 2 }, true ]
console.log(copy);
// [ { a: 99, b: 2 }, false ]&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;a 는 얕복이라 원본이랑 카피본 둘 다 99로 바뀌었고&amp;nbsp; true 는 깊복이라 copy 만 false 로 바뀌었다.&amp;nbsp; 따로국밥이다.&lt;/p&gt;
&lt;h3 id=&quot;-참조값-깊은-복사-방법&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. 참조값의 깊은 복사 방법&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const copy = JSON.parse(JSON.stringify(object));&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 녀석, 프론트 개발자라면 실무에서 많이 써봤을 녀석이다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const object = {
  a: &quot;a&quot;,
  number: {
    one: 1,
    two: 2,
  },
  arr: [1, 2, [3, 4]],
};
 
const copy = JSON.parse(JSON.stringify(object));
 
copy.number.one = 3;
copy.arr[2].push(5);
 
console.log(object); // { a: 'a', number: { one: 1, two: 2 }, arr: [ 1, 2, [ 3, 4 ] ] }
console.log(copy); // { a: 'a', number: { one: 3, two: 2 }, arr: [ 1, 2, [ 3, 4, 5 ] ] }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 copy 를 만들면 copy 를 변경한다고 같이 변경되지 않는 걸 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;찾아보며 알았는데 이 녀석은 객체 안에 함수가 있으면 undefinded가 되어서 나오는 한계가 있었다.&lt;/p&gt;
&lt;h3 id=&quot;-structuredclone&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;4. &lt;/span&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Window/structuredClone&quot;&gt;structuredClone&lt;/a&gt;&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;찾아보다 나온 녀석.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우리가 알고 있는 lodash 나 &lt;b&gt;es-toolkit&lt;/b&gt;&amp;nbsp; 을 사용하지 않고도, JSON.parse()&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;보다 강력한 복사 메소드가 js 에는 있었다.&lt;/span&gt;&lt;br /&gt;아직은 일부 브라우저(Web API 형태로) 및 환경에서만 지원한다고 하는데, 깊은 복사를 제공하는 녀석이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;순환되는 데이터 구조를 처리할 수 있고, 내장 데이터 타입(Map 같은 녀석)을 지원할 수 있으며 일반적으로 더 강력하고 더 빠르다고 한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;const obj1 = {
  a: 1,
  b: 2,
  c: function () { return this.a + this.b }, // (함수는 복사할 수 없다.)
  d: new Date(), //  Date 타입으로 가져온다!
  e: 1n //BigInt 도 된다!
}

const obj2 = structuredClone(obj1);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-마치며&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;5. 마치며&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우리고 언어로 사용하고 있는 복사는 대체로 깊은 복사일 것이다.&lt;br /&gt;복사된 내 민증에 낙서를 한다고 원본 민증에 낙서가 되지 않는 것처럼. 생활 레벨에서 복사에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;원본과 같이 움직인다는 개념&lt;/b&gt;은 존재하지 않는다. 그것만 기억하면 쉽다. 우리가 보통 사용하는 복사라는 개념은 깊은 복사이고, 얕은 복사란 원본과 같이 움직이는 연결과 가깝다는 점.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;도움받은 곳&lt;br /&gt;&lt;a href=&quot;https://bbangson.tistory.com/78&quot;&gt;https://bbangson.tistory.com/78&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[뺑슨 - JavaScript 깊은 복사 얕은 복사]&lt;/p&gt;</description>
      <category>FRONT</category>
      <category>CS</category>
      <category>FRONT</category>
      <category>js</category>
      <category>개념</category>
      <category>깊은복사</category>
      <category>얕은복사</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/30</guid>
      <comments>https://ddoottaa.tistory.com/30#entry30comment</comments>
      <pubDate>Fri, 31 Jan 2025 16:05:05 +0900</pubDate>
    </item>
    <item>
      <title>플러터 개쩐다</title>
      <link>https://ddoottaa.tistory.com/29</link>
      <description>&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&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;b&gt;1. &lt;/b&gt;왜 플러터를 배우려고 했어?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;리엑트 네이티브 vs 플러터&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. &lt;/b&gt;Dart는 어때&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. &lt;/b&gt;Flutter&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. &lt;/b&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;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 왜 플러터를 배우려고 했어?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;첫번째 이유는 창업 준비중인 프로젝트가 플러터여서였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10월부터 준비하고 있는 프로젝트가 &lt;b&gt;플러터&lt;/b&gt;를 이용한 프로젝트였는데, 우리 서비스의 코드에 대한 개발자로서의 호기심이 생겼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;두번째 이유는 글또에서 얻은 인사이트 덕분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;최근 글또 [앱만들어또 모임]에서 앱을 만든 분(과 만드려는 분)들과 얘기를 나누었는데, 그 때 많은 인사이트를 얻었다. 각자 개발자로서의 자아와 프로덕트 레벨에서 생길 수 있는 고충, 마케팅이나 사업 전반에 대한 이야기를 들을 수 있었는데, 거기서 은찬님의 1인 개발자로 진로를 정한 부분에 많은 감명을 받았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;은찬님이 추천해준 영상에서 내가 할 수 있는 것과 내가 할 수 없는 것에 대해 인식할 수 있는 기회가 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xWSwohmOrzQ&amp;amp;feature=youtu.be&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=xWSwohmOrzQ&amp;amp;feature=youtu.be&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=xWSwohmOrzQ&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bjKhV2/hyX0mYnxVk/BYarZpkA9j0YXCYFu4jkG1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=924_296_1174_570,https://scrap.kakaocdn.net/dn/JBpEs/hyX0yxJ53e/mkFBbm8JqheZLXo1Fr88m0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=924_296_1174_570&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;비전공자도 코딩으로 월 1000만원 버는 모든 방법 정리&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/xWSwohmOrzQ&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;개발자가 돈을 버는 방법에 대한 정리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영상에서 정리해준 개발을 통한 경제적 자유 실현 방법은 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caDiQH/btsLS6sEvm3/boivtSqEMmhtp94Am8peOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caDiQH/btsLS6sEvm3/boivtSqEMmhtp94Am8peOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caDiQH/btsLS6sEvm3/boivtSqEMmhtp94Am8peOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaDiQH%2FbtsLS6sEvm3%2FboivtSqEMmhtp94Am8peOk%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;818&quot; height=&quot;606&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;영상에서 말한취업은 '대기업 / 중견기업' 을 제외한 입장이다. 그럼에도 취업과 컨텐츠 크리에이션에 대해서는 내 생각과 조금 다르긴 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 표와 영상을 통해 나에게&amp;nbsp;&lt;b&gt;인디해커(1인 개발)&lt;/b&gt;에 대한 열망이 있다는 것을 알게 되었다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 리엑트 네이티브 vs 플러터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 어째서 같은 크로스플랫폼인 리액트 네이티브를 선택하지 않았는가? &lt;br /&gt;리액트 경험이 있으니 리액트 네이티브를 시작하는 것에 더 유리했을텐데!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;775&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcBJ4p/btsLRk6ZvaD/kVCn4oiia0vFtgHkK8R711/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcBJ4p/btsLRk6ZvaD/kVCn4oiia0vFtgHkK8R711/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcBJ4p/btsLRk6ZvaD/kVCn4oiia0vFtgHkK8R711/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcBJ4p%2FbtsLRk6ZvaD%2FkVCn4oiia0vFtgHkK8R711%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;794&quot; height=&quot;775&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;775&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;s&gt;사실 이유는 리액트가 지긋지긋해서일 수도..&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는 플러터가 &lt;b&gt;예쁘&lt;/b&gt;기 때문이다. 리엑트 네이티브와 달리 Flutter는 &lt;b&gt;자체적인 렌더링 엔진&lt;/b&gt;을 활용해 모든 UI를 완벽히 제어하기 떄문에 다른 프레임워크와 비교해 더욱 세련되고 아름다운 앱을 만들 수 있다.&amp;nbsp; &lt;b&gt;마치 Unity처럼!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;물론 리엑트 네이티브가&lt;span&gt; &lt;/span&gt;&lt;/span&gt;네이티브적인 느낌(서비스가 아이폰 앱처럼 보이거나 안드로이드 앱처럼 보이는 것 같은 느낌) 은 더 띄어나다는 장점이 있지만, 그건 아이폰의 기능이나 안드로이드의 기능을 리엑트 네이티브가 사용하기 때문이라, 장점이라고 보기엔 어렵다고 나느 생각한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kLORX/btsLRJyOBAl/kSOVNMbhuRagHGeLmh449K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kLORX/btsLRJyOBAl/kSOVNMbhuRagHGeLmh449K/img.png&quot; data-alt=&quot;냅킨이 쪄줬다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kLORX/btsLRJyOBAl/kSOVNMbhuRagHGeLmh449K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkLORX%2FbtsLRJyOBAl%2FkSOVNMbhuRagHGeLmh449K%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;599&quot; height=&quot;477&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;냅킨이 쪄줬다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 id=&quot;3-1-react-native&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;React Native&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;운영체제 별 순정 UI를 사용한 앱을 만들기 쉽다.&lt;/li&gt;
&lt;li&gt;프로젝트 버전을 업데이트하기 매우 어렵다.&lt;/li&gt;
&lt;li&gt;범용적인 개발언어를 사용한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;3-2-flutter&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Flutter&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;자체 디자인 언어를 가진 커스텀 UI를 사용한 앱을 만들기 쉽다.&lt;/li&gt;
&lt;li&gt;프로젝트 버전을 업데이트하기 쉽다. =&amp;gt; 큰 사이드이펙트가 없는 것으로 알고 있음.&lt;/li&gt;
&lt;li&gt;전용 개발 언어를 사용한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Dart는 어때?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다트는 개쩐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 배열 안에 if 문과 for 문이 들어간다.&lt;/p&gt;
&lt;pre id=&quot;code_1737280287845&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
 
var a = ['오', '이게되나?', for (int number in numbers) if (number % 2 == 0) number];

print(a); // ['오', '이게되나?', 2, 4, 6, 8, 10]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼 배열 안에서 for 문과 if 문이 들어갈 수 있는데, 와 개쩐다! 라고 생각했다.&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;pre id=&quot;code_1737280524382&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('ListView 예제')),
        body: DynamicListView(),
      ),
    );
  }
}

class DynamicListView extends StatelessWidget {
  final List&amp;lt;int&amp;gt; numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

  @override
  Widget build(BuildContext context) {
    return ListView(
      children: [
        for (var number in numbers)
          ListTile(
            title: Text('아이템 $number'),
            subtitle: Text('이 숫자는 ${number % 2 == 0 ? '짝수' : '홀수'}입니다.'),
          )
      ],
    );
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 플러터로 짝수와 홀수를 찍는 코드인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주목할 부분은 &lt;b&gt;children: [ ] &lt;/b&gt;부분이다. 배열 안에 for 문으로 List 에 있는 아이템을 뽑을 수 있다. 이걸 리액트에서 하려면 다음처럼 해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(리액트 코드)&lt;/p&gt;
&lt;pre id=&quot;code_1737280645245&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import React from &quot;react&quot;;

const App = () =&amp;gt; {
  const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;리스트 예제&amp;lt;/h1&amp;gt;
      &amp;lt;ul&amp;gt;
        {numbers.map((number) =&amp;gt; (
          &amp;lt;li key={number} style={{ display: &quot;flex&quot;, alignItems: &quot;center&quot; }}&amp;gt;
            &amp;lt;div&amp;gt;
              &amp;lt;strong&amp;gt;아이템 {number}&amp;lt;/strong&amp;gt;
              &amp;lt;div&amp;gt;이 숫자는 {number % 2 === 0 ? &quot;짝수&quot; : &quot;홀수&quot;}입니다.&amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
          &amp;lt;/li&amp;gt;
        ))}
      &amp;lt;/ul&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};

export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 리액트는 중괄호와 소괄호를 사용해서 화면을 그려야 하는 반면 Dart 는 배열 안에 뚝딱 집어넣으면 되니 훨씬 편했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. Flutter는?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Flutter의 철학&lt;/b&gt;은 &lt;b&gt;효율적이고 일관되며 아름다운 사용자 경험(UI/UX)을 다양한 플랫폼에서 구현할 수 있는 개발 환경&lt;/b&gt;을 제공하는 데 중점을 둔다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜 그래서인지 개발 경험이 쩐-다. 함수 모듈화 노가다를 알아서 해주는 것 보고 감동했다. Flutter 의 개발 경험을 좋게 하는 몇 가지를 알아보려고 쳇지피티한테 물어봤다. 다음과 같은 기능 떄문이란다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Hot Reload: 실시간 코드 반영&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Flutter는 &lt;b&gt;Hot Reload&lt;/b&gt; 기능을 통해 개발자가 코드를 수정하면 앱이 즉시 변경 사항을 반영합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;화면을 새로 고치거나 다시 실행할 필요 없이, UI와 기능을 실시간으로 확인 가능.&lt;/li&gt;
&lt;li&gt;개발 속도가 대폭 향상되며, 디버깅과 UI 수정이 즐거운 경험이 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예&lt;/b&gt;: 버튼 색상이나 레이아웃 위치를 바꾸고 저장하면, 화면이 바로 업데이트됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 강력한 위젯 시스템&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Flutter는 모든 것이 위젯으로 구성되어 있으며, 직관적이고 재사용 가능한 UI 설계를 지원합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;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;Material Design과 Cupertino 디자인을 기본 지원하여, 플랫폼에 맞는 아름다운 UI를 쉽게 구현할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예&lt;/b&gt;:
&lt;div&gt;
&lt;div&gt;dart&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;Copy&lt;/span&gt;&lt;span data-state=&quot;closed&quot;&gt;Edit&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;ElevatedButton( onPressed: () {}, child: Text('클릭하세요'), );&lt;/div&gt;
&lt;/div&gt;
단순한 버튼부터 복잡한 UI까지 일관된 방식으로 개발할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 일관된 UI와 성능&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Flutter는 자체 렌더링 엔진을 사용하여 iOS와 Android에서 동일한 UI를 제공합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네이티브처럼 보이는 일관된 UI를 제공하면서도, 성능 저하 없이 동작합니다.&lt;/li&gt;
&lt;li&gt;애니메이션이나 화면 전환이 매우 부드럽고 자연스럽게 동작합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 한다. 말 그대로인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로 내가 감동했던 건 아이콘 기능인데 구글의 Material 디자인 시스템을 기반으로 한 다양한 아이콘을&amp;nbsp; 1,000개 이상 그냥 사용 가능하다! Icon.favorite_outlined 하면 좋아요 표시가 그냥 나온다! &lt;br /&gt;디자인 에셋에서 찾을 필요 없어! 너무 좋아!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 플러터로 지금까지 한 것들&lt;/h3&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-pm-slice=&quot;0 0 []&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;My Wallet&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-pm-slice=&quot;0 0 []&quot; data-ke-size=&quot;size16&quot;&gt;플러터에서 어떻게 디자인 요소를 다루는지 배움&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLEszv/btsLTPxfttz/aBT4hPpvNhESqJCNjizr61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLEszv/btsLTPxfttz/aBT4hPpvNhESqJCNjizr61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLEszv/btsLTPxfttz/aBT4hPpvNhESqJCNjizr61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLEszv%2FbtsLTPxfttz%2FaBT4hPpvNhESqJCNjizr61%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;502&quot; height=&quot;381&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Pomodoros&lt;/b&gt;&lt;/h4&gt;
&lt;div data-width=&quot;25&quot; data-layout=&quot;wrap-left&quot; data-node-type=&quot;mediaSingle&quot;&gt;사용자 인터렉션을 어떻게 활용하는지 배움&lt;/div&gt;
&lt;div data-pm-slice=&quot;0 0 []&quot; data-width=&quot;25&quot; data-layout=&quot;wrap-left&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpy3lv/btsLREYzv7p/Ib6lZwdnhxMuY0BmpSxRp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpy3lv/btsLREYzv7p/Ib6lZwdnhxMuY0BmpSxRp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpy3lv/btsLREYzv7p/Ib6lZwdnhxMuY0BmpSxRp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcpy3lv%2FbtsLREYzv7p%2FIb6lZwdnhxMuY0BmpSxRp0%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;975&quot; height=&quot;435&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Webtoon 클론&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;API 활용&lt;/b&gt;과 페이지네이션, 비동기 처리,&lt;b&gt; 라우팅 애니메이션&lt;/b&gt;, &lt;b&gt;기기별 로컬 데이터 저장&lt;/b&gt;, 을 배움&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YszRe/btsLTplkt2I/z6NLazpN2APxnLiwmUiIb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YszRe/btsLTplkt2I/z6NLazpN2APxnLiwmUiIb0/img.png&quot; data-alt=&quot;역대급 영지 설계사 유치한데 재밌습니다 나이가 드니까 사람이 유치한 거를 더 선호하게 되는 것 같아요. 머리 안 쓰고 얻는 도파민이 세상에는 참 많은 것 같아요. 주절주절&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YszRe/btsLTplkt2I/z6NLazpN2APxnLiwmUiIb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYszRe%2FbtsLTplkt2I%2Fz6NLazpN2APxnLiwmUiIb0%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;953&quot; height=&quot;637&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;637&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이상, 노마드 코더 강의를 통해 플러터를 찜쪄 먹어봤다. 재밌었다. 사실 약간 스크래치 코딩 하는 느낌이 들었다. 이거 하면서, 좀 그런 생각이 들었는데,, 이렇게 개발이 쉬워지면 아무나 개발자가 되는 세상이 와 버리지 않을까? &lt;br /&gt;내 밥그릇 지키려면 진짜 뭐라도 더 열심히 해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-width=&quot;33.33&quot; data-layout=&quot;wrap-left&quot; data-node-type=&quot;mediaSingle&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도움 받은 것들&lt;/h3&gt;
&lt;div data-width=&quot;33.33&quot; data-layout=&quot;wrap-right&quot; data-node-type=&quot;mediaSingle&quot;&gt;
&lt;div data-node-type=&quot;mediaSingle&quot; data-layout=&quot;wrap-right&quot; data-width=&quot;33.33&quot;&gt;&amp;nbsp;&lt;/div&gt;
노마드코더 다트 강의&lt;/div&gt;
&lt;div data-width=&quot;33.33&quot; data-layout=&quot;wrap-right&quot; data-node-type=&quot;mediaSingle&quot;&gt;&lt;a href=&quot;https://nomadcoders.co/dart-for-beginners/lobby&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://nomadcoders.co/dart-for-beginners/lobby&lt;/a&gt;
&lt;figure id=&quot;og_1737281379963&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;Dart 시작하기 &amp;ndash; 노마드 코더 Nomad Coders&quot; data-og-description=&quot;Flutter 앱 개발을 위한 Dart 배우기&quot; data-og-host=&quot;nomadcoders.co&quot; data-og-source-url=&quot;https://nomadcoders.co/dart-for-beginners/lobby&quot; data-og-url=&quot;https://nomadcoders.co/dart-for-beginners/lobby&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cEUvFA/hyX4nIMXEo/M0RKWcskySt7ObyN28LKAK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://nomadcoders.co/dart-for-beginners/lobby&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nomadcoders.co/dart-for-beginners/lobby&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cEUvFA/hyX4nIMXEo/M0RKWcskySt7ObyN28LKAK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Dart 시작하기 &amp;ndash; 노마드 코더 Nomad Coders&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Flutter 앱 개발을 위한 Dart 배우기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nomadcoders.co&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노마드코더 플러터 기본 강의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nomadcoders.co/flutter-for-beginners/lobby&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://nomadcoders.co/flutter-for-beginners/lobby&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737281406691&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;Flutter 로 웹툰 앱 만들기 &amp;ndash; 노마드 코더 Nomad Coders&quot; data-og-description=&quot;Flutter for Beginners&quot; data-og-host=&quot;nomadcoders.co&quot; data-og-source-url=&quot;https://nomadcoders.co/flutter-for-beginners/lobby&quot; data-og-url=&quot;https://nomadcoders.co/flutter-for-beginners/lobby&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Y51xC/hyX4lKX2xl/q6hiJAGkPQjUOJUYc4TaZ1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://nomadcoders.co/flutter-for-beginners/lobby&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nomadcoders.co/flutter-for-beginners/lobby&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Y51xC/hyX4lKX2xl/q6hiJAGkPQjUOJUYc4TaZ1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Flutter 로 웹툰 앱 만들기 &amp;ndash; 노마드 코더 Nomad Coders&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Flutter for Beginners&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nomadcoders.co&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;/div&gt;</description>
      <category>FRONT</category>
      <category>DART</category>
      <category>Flutter</category>
      <category>노마드코더</category>
      <category>니콜라스</category>
      <category>리엑트 네이티브</category>
      <category>인디해킹</category>
      <category>플러터</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/29</guid>
      <comments>https://ddoottaa.tistory.com/29#entry29comment</comments>
      <pubDate>Sun, 19 Jan 2025 19:36:39 +0900</pubDate>
    </item>
    <item>
      <title>2024.</title>
      <link>https://ddoottaa.tistory.com/28</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 목차&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 개발&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 사랑&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 창업&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 개발&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자로 다시 돌아오기까지에는 1년의 시간이 있었다. 2023년의 나는 점점 줄어드는 통장 잔고만큼의 소설을 썼고, 더 이상 쓸 돈이 없을 때가 될 때가 되어서야 개발자가 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 고발하자면, 나는 개발에 뜻이 없다. 20살, 오로지 돈을 위해 들어갔던 공장. 그 때와 2년차 개발자인 지금 내가 느끼는 업무에 대한 의식은 크게 다르지 않다. 그 당시에도 '어떻게 더 일을 잘하지?' 를 고민했고 지금도 마찬가지이다. 다만 일차원적인 공장 프로세스와 달리 개발이라는 큰 개념과 소통하며 일을 잘하는 무수히 많은 방법들을 알게 되었을 뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;개발자가 되기 위해 공부했던 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발로 누군가에게 도움이 되었을 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자가 되어 느낀 고마운 순간들이 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 나에게 그런 순간들이 큰 의미로 다가오지 않는다.&lt;/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년간 벌었던 170만원은 가난을 두려워하는 나에게 큰 불안이었고, 애초에 내가 글을 쓰고 싶던 마음은 내 게으름보다 대단하지 않았다. 단지 나는 게으른 사람이라는 것을 인식하는 순간, 내 게으름을 제어하기 위해 필수적으로 회사를 다녀야만 했다. 그 과정에서 100개의 서류 탈락이 있었지만, 자업자득이다. 오히려 결심한 다음부터는 괴롭지 않았던 것 같다. 다시 회사에 들어가 훌륭한 개발자를 목표로 지내고 있고, 개발자가 되어 다행이라고 생각한다. 힘든 상황 속 개발에 대한 경력이 나를 구했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 이 글은 내 커리어에 전혀 도움이 되지 않을 것이다. 다만 그저 나는 어디선가 한 번 진실해보고 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 거의 나를 위한 글이만, 이 글을 읽는 누군가에게 공감과 위로가 되면 좋겠다는 생각이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 어떻게 생각하는지와 내 역량과 성취는 별개이다. 다만 나는 즐기면서 개발하는 그대들을 존경한다는 얘기이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2025년의 나는 어쩌면 개발이 좀 더 즐거워질수도 있다. 다른 즐거운 일을 찾을수도 있고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약하자면 그냥 &lt;b&gt;서른 된 남자가 아직도 방황한다&lt;/b&gt;는 얘기다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 사랑&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2024년, 10년간 피던 담배를 끊게 된 건 사랑 덕이었다. 나는 자유를 사랑하는 사람이고, 담배를 피우던 순간의 자유로움이 좋았다. 아무도 없는 곳에서 세상과 단절해 오로지 나에 집중하는 시간. 그걸 자유라고 나는 생각했다. 하지만 사실 담배야말로 자유롭지 못한 일이었다. 담배를 필 때에만 자유를 느낄 수 있었기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 사랑은 속박이라고 생각하는 과거에는 전혀 몰랐지만, 사실 사랑이 곧 자유였다. 내가 나로 있다는 것을 인정해주는 누군가 덕에 나는 나를 더 잘 알게 되었고, 나를 더 사랑하게 되었다. 그걸 알게 된 2024년과 내 연인에게 감사하다. 나이 서른, 너무 늦게 알게 된 일이지만, 사랑은 고맙고 소중한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 창업&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;열 번의 만남보다 가치 있을 한 번의 이별&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이별노트 렌딩 페이지 주소: &lt;a href=&quot;https://ibyeolnote.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ibyeolnote.com/&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736054783921&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;수없임 많은 만남과 만나기 위한 서비스들이 있다.
그런데 왜 이별한 사람을 위한 서비스는 없지?&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 의문에서 기획된 위 이&lt;b&gt;별노트 서비스,&lt;/b&gt;&amp;nbsp;내 역할은 기획 / 전략 / FE 이다.&lt;/p&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;저번 주 헐레벌떡 프라이머 제출이 끝났다. 최선을 다했다만 긍정적인 결과를 기대하기는 아무래도 힘들 것 같다. 하지만 데이터 수집 및 동기, 사업계획서를 쓰던 과정이 보람찼고 그 과정 속에서 창업이 더 명확해지는 게 즐거웠다. 이제 시작. 2025년은 바쁜 한 해가 될 것 같다.&lt;/p&gt;</description>
      <category>글</category>
      <category>창업</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/28</guid>
      <comments>https://ddoottaa.tistory.com/28#entry28comment</comments>
      <pubDate>Sun, 5 Jan 2025 15:09:07 +0900</pubDate>
    </item>
    <item>
      <title>고객 니즈가 보이는 데이터 분석 with 파이썬 훑어보기</title>
      <link>https://ddoottaa.tistory.com/27</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;1140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baIbPv/btsLqBlWEyp/HAUXZXCqbg8UzrNZwLUWo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baIbPv/btsLqBlWEyp/HAUXZXCqbg8UzrNZwLUWo0/img.png&quot; data-alt=&quot;+&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baIbPv/btsLqBlWEyp/HAUXZXCqbg8UzrNZwLUWo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaIbPv%2FbtsLqBlWEyp%2FHAUXZXCqbg8UzrNZwLUWo0%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;775&quot; height=&quot;1140&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;1140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;+&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;차례&lt;br /&gt;1. 이 책을 고른 이유&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 무엇을 배웠나요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 어떤 게 좋았나요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 마치며&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;br /&gt;1. 이 책을 고른 이유&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;첫 번째 이유&lt;/b&gt;&lt;br /&gt;이 책을 고른 첫 번째 이유는 지금 다니는 회사에서 고객 데이터 감정 분석 기술이 필요했기&amp;nbsp; 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 책이 배송되었을 때는 이미 프로젝트는 조각조각 난도당한 상태였고, &lt;br /&gt;이사 준비로 바빠 뒤늦게 본가에 가 책을 수령한 나는 의미를 잃어버린 그 녀석을 소중하게 집어 들었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nf2N5/btsLoMvyndI/VmWYCnSe3kVUlvNOvK6ac0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nf2N5/btsLoMvyndI/VmWYCnSe3kVUlvNOvK6ac0/img.png&quot; data-alt=&quot;프로젝트가 사라지고 난 뒤~~ ♪ 나와 책만이 남아~~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nf2N5/btsLoMvyndI/VmWYCnSe3kVUlvNOvK6ac0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnf2N5%2FbtsLoMvyndI%2FVmWYCnSe3kVUlvNOvK6ac0%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;1080&quot; height=&quot;611&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;611&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로젝트가 사라지고 난 뒤~~ ♪ 나와 책만이 남아~~&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;심지어 길벗 측의 사소한 실수로 책이 5권이 발송되어서 '어떠카지! 어떠카지!' 하다가 성윤님한테 연락드려 책을 돌려드리러 묵직한 그 녀석의 4개의 분신을 들고 뚜벅뚜벅 편의점을 왔다가 갔다. 성윤 님도 왔다 갔다 힘드셨을 거야. 성윤님 너무 고생 많으셨어요ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;두 번째 이유&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 책을 고른 두 번째 이유. 3년 전부터 자연어 처리에 대한 해소되지 않은 갈증이 남아있었다. &lt;br /&gt;그 때 나는 졸업논문 주제를&amp;nbsp; '신문 기사 3줄 요약 AI'로 잡았었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;(&lt;/span&gt;AI 수업 하나 잘 보고 잔뜩 신이 나서 감히 잠자는 NLP의 코털을 건드렸다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;&lt;a href=&quot;https://dacon.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;데이콘&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;에서 한국어 문서를 요약하는 챌린지가 있었는데 거기서 제공받은 신문 기사 데이터를 바탕으로&amp;nbsp; &lt;/span&gt;&lt;a href=&quot;https://lovit.github.io/nlp/2019/04/30/textrank/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;textrank&lt;/a&gt; 나 &lt;a href=&quot;https://github.com/SKT-AI/KoGPT2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;KoGPT2&lt;/a&gt;&amp;nbsp; 처럼 직접 나만의 자연어 처리 모델을 만드려고 했지만, 빈약한 배경지식과 관련 자료의 부족. 물리적 시간, 정신적 나의 에너지를 고려하지 않아 당당하게 실패하고 말았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, 졸업논문은&amp;nbsp; &lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://lovit.github.io/nlp/2019/04/30/textrank/&quot;&gt;textrank를&lt;/a&gt; 사용한 신문 기사 요약, 생성 웹을 만드는 것으로 방향을 전환했었는데, 그 당시에 못해본 찝찝함을 해소해 보고자 이 책을 골랐다.&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 무엇을 배웠나요?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;책의 목차는 다음과 같다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;1&lt;/span&gt;장. 자연어 분석 준비&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;2&lt;/span&gt;장. 스크래퍼로 데이터 수집&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;3&lt;/span&gt;장. 수집한 데이터로 자연어 분석&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;4&lt;/span&gt;장. 자연어 분석에 필요한 통계 공부&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;부록 &lt;span&gt;A&lt;/span&gt;. GPT-&lt;span&gt;3.5&lt;/span&gt;로 자연어 분석하기&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;부록 B. 코랩 시작하기&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;부록 C. GPU 사용 설정하기&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1장&lt;/b&gt;에서는 파이썬 기초와 Pandas를 사용해 엑셀 쪼개고 붙이고 자르고 하는 그런 것들이 자세하게 나와 있다. 이 책을 읽으며 정인근 선생님이 대단히 따뜻한 사람이라고 &lt;s&gt;혼자 멋대로&lt;/s&gt; 생각하게 되었는데, 되게 편한 단어들을 주로 사용하고 친절한 옆집 아저씨 같은 말투로 서술되어 있다는 것이다. 중간중간 주는 팁들도 그렇고, 간단한 matplotlib로 그래프 그리는 것까지 알려줘 대학시절 생각이 살짝살짝 낫다. &lt;s&gt;(사실 1장은 힐끔 보고 건너 뛰었다.)&lt;/s&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;br /&gt;2장&lt;/b&gt;에서는 크롤링과 스크래퍼에 대해 다룬다. 길벗 사이트 스크래핑을 해보는 과정이 인상적이었고(ㅋㅋㅋㅋ 길벗 랜딩 페이지가 바뀌는 순간 2장의 예시는 모두 사용할 수 없게 된다!)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;br /&gt;3장&lt;/b&gt;에서는 실제 데이터를 분석하는 과정을 다룬다. 개념 -&amp;gt; 실습 형태로 해서 흐르듯 이해하며 넘어갈 수 있었고, 흥미 깊은 주제(ex. 어떤 떡볶이가 맛있을까, 내 여자친구 최애 쿠션 찾아주기)에 대해 얘기하며 중간중간 데이터와 머신러닝 개념들을 설명하는 게 인상적이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;4장&lt;/b&gt;은 본격적으로 데이터 용어들을 다룬다. 간단하게 설명되어 있어 데이터에 대해 무지한 사람이 읽기 좋을 것 같다. 실제로 그래프를 그려보는 과정은 갓 파이썬 입문한 사람들에게 귀할 것 같다는 생각을 했다.&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 어떤 게 좋았나요?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;의문을 먼저 해결해 주는 소프트한 데이터 분석&amp;nbsp;&lt;/b&gt;&lt;br /&gt;책을&amp;nbsp;읽다가&amp;nbsp;어?&amp;nbsp;이건&amp;nbsp;어떻게&amp;nbsp;하지?라는&amp;nbsp;부분이&amp;nbsp;생기면&amp;nbsp;바로&amp;nbsp;다음&amp;nbsp;장에&amp;nbsp;그것에&amp;nbsp;대한&amp;nbsp;개념과&amp;nbsp;실습이&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;여러 가지 라이브러리 제공과 비교 분석 &lt;/b&gt;&lt;br /&gt;한국어 맞춤법 교정을 해주는 &lt;b&gt;hanspell &lt;/b&gt;라이브러리는 더 이상 pip으로 설치할 수 없는데, 소스파일을 제공해 줬다! (감사)&lt;br /&gt;koromon이나 okt 같은 형태소 분석기를 비교 분석하며 알려주는 부분이 세심하다고 생각했다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;흥미로운&amp;nbsp;주제로&amp;nbsp;해보는&amp;nbsp;실습 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;남자 개발자라면 응당 목차를 보고 3.4 '&lt;b&gt;내 여자친구 최애 쿠션 찾아 주기'부터&lt;/b&gt; 펼쳐봤을 것이다. &lt;s&gt;나만 그런가 &lt;/s&gt;이런 킥을 놓치지 않는 부분이 참 좋았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;편안한 단어와 편안한 말투. 따뜻한 설명&lt;/b&gt;&lt;br /&gt;딱딱한 전문 용어나 복잡한 문장을 사용하지 않고 누구나 쉽게 이해할 수 있는 쉽고 부드러운 단어를 위주로 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알맞은 도식을 사용하고 자연스러운 문체로 흘러가서 읽는데 피로감이 덜하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;독자를 설득시켜 주는 책.&lt;/b&gt;&lt;/p&gt;
&lt;p 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;&amp;nbsp;&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;※ 길벗 출판사의 후원을 받아 서평을 작성했습니다.&lt;span&gt; 책을 받게 되어 영광입니다. 감사합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://www.yes24.com/Product/Goods/125892195&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;&lt;s&gt;&lt;/s&gt;&amp;nbsp;https://www.yes24.com/Product/Goods/125892195&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1734675095629&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;book&quot; data-og-title=&quot;고객 니즈가 보이는 데이터 분석 with 파이썬 - 예스24&quot; data-og-description=&quot;고객의 진정한 니즈가 담긴 데이터를 수집하고 분석한다!유튜브, 네이버 카페, 트위터 등에서 찾아내는 고객 니즈와 시장 트렌드!데이터 시대에서 살아가고 있는 만큼, 데이터를 분석해 의사 결&quot; data-og-host=&quot;www.yes24.com&quot; data-og-source-url=&quot;https://www.yes24.com/Product/Goods/125892195&quot; data-og-url=&quot;https://www.yes24.com/Product/Goods/125892195&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cpk3pH/hyXOkM3wzf/FpOYfL4GiUh5YkHamqyGu0/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200,https://scrap.kakaocdn.net/dn/bfpwOS/hyXOniIpGs/8IL4Hpwvxsy7Jo7OmIWV2K/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200,https://scrap.kakaocdn.net/dn/bRGoYJ/hyXOld8PUP/el4viA3YmHPwQtY5bOs2eK/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200&quot;&gt;&lt;a href=&quot;https://www.yes24.com/Product/Goods/125892195&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.yes24.com/Product/Goods/125892195&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cpk3pH/hyXOkM3wzf/FpOYfL4GiUh5YkHamqyGu0/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200,https://scrap.kakaocdn.net/dn/bfpwOS/hyXOniIpGs/8IL4Hpwvxsy7Jo7OmIWV2K/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200,https://scrap.kakaocdn.net/dn/bRGoYJ/hyXOld8PUP/el4viA3YmHPwQtY5bOs2eK/img.jpg?width=934&amp;amp;height=1200&amp;amp;face=0_0_934_1200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;고객 니즈가 보이는 데이터 분석 with 파이썬 - 예스24&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;고객의 진정한 니즈가 담긴 데이터를 수집하고 분석한다!유튜브, 네이버 카페, 트위터 등에서 찾아내는 고객 니즈와 시장 트렌드!데이터 시대에서 살아가고 있는 만큼, 데이터를 분석해 의사 결&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yes24.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>pandas</category>
      <category>길벗</category>
      <category>데이터</category>
      <category>데이터 분석</category>
      <category>머신러닝</category>
      <category>스크래핑</category>
      <category>정인근</category>
      <category>크롤링</category>
      <category>파이썬</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/27</guid>
      <comments>https://ddoottaa.tistory.com/27#entry27comment</comments>
      <pubDate>Fri, 20 Dec 2024 17:31:34 +0900</pubDate>
    </item>
    <item>
      <title>내가 셋을 세면 시작하는 거야...!! 원!!!!! 투!!! 쓰리.js</title>
      <link>https://ddoottaa.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1sN6H/btsKqO9bgdN/tOP8zkASocuz79PsxXXxb0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1sN6H/btsKqO9bgdN/tOP8zkASocuz79PsxXXxb0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1sN6H/btsKqO9bgdN/tOP8zkASocuz79PsxXXxb0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/1sN6H/btsKqO9bgdN/tOP8zkASocuz79PsxXXxb0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1085&quot; height=&quot;604&quot; data-origin-width=&quot;1085&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #777777;&quot;&gt;밤새도록 돌아가는~ 자동차 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;978&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nVmIg/btsKsoVqNAH/XPvyzKkNWTjuNyhBvkrQcK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nVmIg/btsKsoVqNAH/XPvyzKkNWTjuNyhBvkrQcK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nVmIg/btsKsoVqNAH/XPvyzKkNWTjuNyhBvkrQcK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/nVmIg/btsKsoVqNAH/XPvyzKkNWTjuNyhBvkrQcK/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1620&quot; height=&quot;978&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;978&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;&lt;span style=&quot;color: #777777;&quot;&gt;어찌저찌 돌아가는~ 내 인생 &lt;/span&gt;&lt;span style=&quot;color: #777777;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #777777;&quot;&gt; &lt;/span&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;차례&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;s&gt;0. 쓰잘데기 없는 데모 &lt;b&gt;(위에서 끝남)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;1. Three.js 모임 회고&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;2. Three.js란?&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;장면(Scene)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;카메라(Camera) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;렌더러(Renderer)&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;3. 원시 모델 (Primitives)&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;기하학(Geometry)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;재질(Material)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;조명(Lighting)&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;b&gt;4. 마치며&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Three.js 모임 회고&amp;nbsp;&lt;s&gt;(사실 감사글이자 반성글)&lt;/s&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;지난 10월 20일, 쓰리제이에스 킥오프를 다녀왔다. 기대를 그렇게 크게 하진 않았는데, &lt;b&gt;원규&lt;/b&gt;님께서 Three.js 발표를 하시며 지식을 꽂아 넣어주셨다. (그날,,, 그는 빛으로 이루어진 무언가셨다) 뇌로 직접 듣는 Three.js 발표를 해주신 원규님에 대한 감사한 마음을 여기에 다시 한 번 적는다. anyway 정말 값진 시간이었다.&amp;nbsp;&lt;br /&gt;그리고 우리 조원들과도 말이 잘 통해 뒷풀이도 즐겁게 다녀웠다. 다들 너무 감사하게도 내 얘기(한강 작가님 노벨상 개쩔지 않아요?! MBTI 를 믿나여! etc etc)를&amp;nbsp; 즐겁게 들어주셔서 조금 과하게 신이 나버렸던 것 같다. &lt;s&gt;너무 감사합니다!&lt;/s&gt; 이젠 강하게 나의 신남을 단속할 필요가 있다. anyway 좋은 주관들을 수집할 정말정말 값진 시간이었다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. Three.js란?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;쓰리.js 란 무엇일까&lt;span style=&quot;background-color: #000000;&quot;&gt;. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f6fc;&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;Three.js는 사용하기 쉬운, 가볍고, 크로스 브라우저 호환성을 가진 자바스크립트 3D 라이브러리&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;라고 한다. &lt;b&gt;쉽고&lt;/b&gt;, &lt;b&gt;가볍고&lt;/b&gt;, &lt;b&gt;호환&lt;/b&gt;되는&lt;b&gt; 3D&lt;/b&gt; 녀석이다!&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;오잉? 근데 3D 할 거면 Three.js 꼭 써야 해?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에 이런 걸 만든 적 있다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs1XWg/btsKqslkTx2/4K4hKLhDH2DnTTRhae1fq1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs1XWg/btsKqslkTx2/4K4hKLhDH2DnTTRhae1fq1/img.gif&quot; data-alt=&quot;멍하니 보고 있으면 왠지 기분이 좋다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs1XWg/btsKqslkTx2/4K4hKLhDH2DnTTRhae1fq1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cs1XWg/btsKqslkTx2/4K4hKLhDH2DnTTRhae1fq1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;435&quot; height=&quot;294&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;294&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;&lt;br /&gt;CSS 의 transform 이랑 animation 으로 만들어진 걸 &lt;s&gt;머리 안 쓰고&lt;/s&gt; 배껴와서 가공한 녀석이다.&lt;/p&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;amp; .box'&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;position&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'relative'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;transformStyle&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'preserve-3d'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;amp; .box__face'&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;width&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'100px'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'100px'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;position&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'absolute'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'flex'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;justifyContent&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'center'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alignItems&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'center'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'#fff'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;fontSize&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'1rem'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;borderRadius&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'20%'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;amp; .--front'&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'#e76554'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;opacity&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'0.9'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;transform&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rotateY(0deg) translateZ(50px)'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;amp; .--back'&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rgba(98, 155, 206, 0.9)'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;transform&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rotateY(0deg) translateZ(-50px) scaleX(-1)'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;amp; .--right'&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rgba(80, 188, 223, 0.9)'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;transform&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rotateY(90deg) translateZ(50px)'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;amp; .--left'&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rgba(149, 98, 206, 0.9)'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;transform&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rotateY(-90deg) translateZ(50px)'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;amp; .--top'&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'#ABA45F'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;transform&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rotateX(90deg) translateZ(50px)'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&amp;amp; .--bottom'&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;background&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'#A45FAB'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;transform&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'rotateX(-90deg) translateZ(50px)'&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;원본 코드 출처: &lt;a href=&quot;https://nykim.work/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://nykim.work/26&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;도메인에 따라서 간단한 CSS 와 html 로 빠르고 간결하게 3D 에니메이션을 뽑아내야 할 떄도 있을 거다. 그럴 때는 저렇게css 의 translate 를 써도 상관 없겠지만, 저 &lt;a title=&quot;(최예나-네모네모 뮤직비디오로 연결됩니다. 죄송합니다. 이렇게라도 노래 추천 한 번 하고 싶었어요)&quot; href=&quot;https://www.youtube.com/watch?v=Uw2hriYfvyg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;네모네모&lt;/span&gt;&lt;/a&gt; 주사위를 3D 그래픽스로 부르기는 좀 힘들어 보인다. 왜냐, 저 네모네모에겐&amp;nbsp;&lt;b&gt;Three.js&lt;/b&gt; 의 특징&lt;b&gt; 3가지가&lt;/b&gt; 없기 때문이다. 바로 요 녀석들이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;장면(Scene)&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;카메라(Camera)&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;렌더러(Renderer)&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1205&quot; data-origin-height=&quot;1353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lnEmp/btsKsxyg9GJ/Dh51j1KkjNg4akjg5A0igK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lnEmp/btsKsxyg9GJ/Dh51j1KkjNg4akjg5A0igK/img.png&quot; data-alt=&quot;삼형제생성기 출처: http://vbcstatic.s3-website-us-west-2.amazonaws.com/brothers/ ㅋㅋㅋㅋ 지금 보니 글자 짤림 엌ㅋㅋㅋㅋ 죄송ㅋㅋㅋ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lnEmp/btsKsxyg9GJ/Dh51j1KkjNg4akjg5A0igK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlnEmp%2FbtsKsxyg9GJ%2FDh51j1KkjNg4akjg5A0igK%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;1205&quot; height=&quot;1353&quot; data-origin-width=&quot;1205&quot; data-origin-height=&quot;1353&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;삼형제생성기 출처: http://vbcstatic.s3-website-us-west-2.amazonaws.com/brothers/ ㅋㅋㅋㅋ 지금 보니 글자 짤림 엌ㅋㅋㅋㅋ 죄송ㅋㅋㅋ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그럼 지금부터 삼형제를 한 명씩 만나러 가보자&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;장면(Scene)&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;999&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Og9J/btsKtqUifLM/EQMGmNkpu4mKBE2c78WpM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Og9J/btsKtqUifLM/EQMGmNkpu4mKBE2c78WpM1/img.png&quot; data-alt=&quot;출처: Three.js 메뉴얼 https://threejs.org/manual/#ko/fundamentals&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Og9J/btsKtqUifLM/EQMGmNkpu4mKBE2c78WpM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Og9J%2FbtsKtqUifLM%2FEQMGmNkpu4mKBE2c78WpM1%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;1455&quot; height=&quot;999&quot; data-origin-width=&quot;1455&quot; data-origin-height=&quot;999&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: Three.js 메뉴얼 https://threejs.org/manual/#ko/fundamentals&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 도식화처럼 Scene은 Renderer 가 그려준 녀석 중 카메라를 제외한 모든 녀석이다. 위에서 말한 것처럼&amp;nbsp; '&lt;b&gt;무대'&lt;/b&gt; 이다. 무대니까 카메라가 저래 위에 걸쳐 있다.&lt;br /&gt;Mesh 와 Light 는 후술.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;카메라(Camera)&lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어디서 무대를 보고 있는지를 나타낸다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;890&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8f5RS/btsKtivt9sY/g8KbcgPcMxUk7Hmlk3nLSk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8f5RS/btsKtivt9sY/g8KbcgPcMxUk7Hmlk3nLSk/img.gif&quot; data-alt=&quot;출처: Three.js 메뉴얼 https://threejs.org/manual/#ko/scenegraph 작은 탱크한테 걸리면 아주 뿅 되는거야!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8f5RS/btsKtivt9sY/g8KbcgPcMxUk7Hmlk3nLSk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/d8f5RS/btsKtivt9sY/g8KbcgPcMxUk7Hmlk3nLSk/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1347&quot; height=&quot;890&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;890&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: Three.js 메뉴얼 https://threejs.org/manual/#ko/scenegraph 작은 탱크한테 걸리면 아주 뿅 되는거야!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;위 3D Object 인 탱크의 시점이 변하는 것처럼, 카메라는 시야각, 시작과 끝 지점, 종횡비 같은 걸 설정한다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;카메라의 종류는 크게 &lt;b&gt;원근 카메라&lt;/b&gt;와 &lt;b&gt;정투영 카메라&lt;/b&gt;가 있는데, 일반적으로 원근 카메라가 쓰인다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. &lt;b&gt;원근 카메라 (Perspective Camera)&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;b&gt;원근감&lt;/b&gt;을 표현한다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;용도&lt;/b&gt;: 게임, 시뮬레이션, 가상현실(VR) 등 현실적인 시각 효과가 필요한 장면에 주로 사용.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 속성&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;fov&lt;/b&gt; (Field of View): 카메라의 수직 시야각을 설정. 각도가 커질수록 더 넓은 범위를 볼 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;aspect&lt;/b&gt; (Aspect Ratio): 화면의 가로 세로 비율로, 일반적으로 캔버스의 크기 비율에 맞춘다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;near&lt;/b&gt; | &lt;b&gt;far&lt;/b&gt;: 가까운(near) 곳과 먼(far) 곳의 거리 제한을 설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;fov&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;aspect&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;near&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;0.1&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;far&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;camera&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;THREE&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;PerspectiveCamera&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;fov&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;aspect&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;near&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;far&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;Near 과 Far 개념이 잘 이해가 안 가서 near 을 100으로 올려봤다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;890&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpX3MO/btsKtG3JZAa/ubbKvoyvHHWcplGjS14pk0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpX3MO/btsKtG3JZAa/ubbKvoyvHHWcplGjS14pk0/img.gif&quot; data-alt=&quot;near 만 100 으로 올렸을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpX3MO/btsKtG3JZAa/ubbKvoyvHHWcplGjS14pk0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bpX3MO/btsKtG3JZAa/ubbKvoyvHHWcplGjS14pk0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1346&quot; height=&quot;890&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;890&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;near 만 100 으로 올렸을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;890&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bESRc0/btsKsZiIdy4/D1eoOCDESeRKi93eqzKxO0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bESRc0/btsKsZiIdy4/D1eoOCDESeRKi93eqzKxO0/img.gif&quot; data-alt=&quot;near 가 0.1 일때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bESRc0/btsKsZiIdy4/D1eoOCDESeRKi93eqzKxO0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bESRc0/btsKsZiIdy4/D1eoOCDESeRKi93eqzKxO0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1346&quot; height=&quot;890&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;890&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;near 가 0.1 일때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;892&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLG229/btsKsmZHbKh/GGMF6lesA2uwLG4CwNMxj1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLG229/btsKsmZHbKh/GGMF6lesA2uwLG4CwNMxj1/img.gif&quot; data-alt=&quot;near 가 0.001 일 때 (으악!)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLG229/btsKsmZHbKh/GGMF6lesA2uwLG4CwNMxj1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/dLG229/btsKsmZHbKh/GGMF6lesA2uwLG4CwNMxj1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1346&quot; height=&quot;892&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;892&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;near 가 0.001 일 때 (으악!)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;near 과 far 가 의 값이 너무 멀어지게 되면 위처 서로 가까이 위치한 두 객체가 정확히 구분되지 않아, 떨리거나 깜박이는 시각적 오류가 발생한다&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;깊이 버퍼 정밀도 부족으로&amp;nbsp;&lt;/span&gt; 발생하는 이 증상을&amp;nbsp;&lt;b&gt;Z-파이팅&lt;/b&gt;이라고 부른다!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;결론) 적당히 설정하자&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;정투영 카메라 (Orthographic Camera)&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;b&gt;건축 도면, UI 디자인, 2D 게임&lt;/b&gt; 등에 유용하다. 끝&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;렌더러(Renderer)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 쓴다. WEBGL 기술을 활용하며, 계단현상 막는 것 외로 그림자 등 여러 옵션을 제공한다.&lt;/p&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;rederer&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4fc1ff;&quot;&gt;THREE&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;WebGLRenderer&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;({&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;canvas&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;document&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;querySelector&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;#c&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;),&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;antialias&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;alpha&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;true&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3. &lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp;원시 모델 (Primitives)&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Three.js의 원시 모델이란, 주로 런타임에서 다양한 인자들로 정의한 &lt;b&gt;3D 모양&lt;/b&gt;을 의미한다. (ex 원뿔, n각형, 글씨 이런 거)&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Geometry (기하학)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기하학&lt;/b&gt;은&amp;nbsp;&lt;b&gt;3D&amp;nbsp;객체의&amp;nbsp;형태&lt;/b&gt;를&amp;nbsp;결정하는&amp;nbsp;데이터&amp;nbsp;구조이다.&lt;b&gt;&amp;nbsp;점(Vertex),&amp;nbsp;면(Face),&amp;nbsp;&lt;/b&gt;그&lt;br /&gt;리고&amp;nbsp;각&amp;nbsp;&lt;b&gt;점의&amp;nbsp;위치와&amp;nbsp;간격&lt;/b&gt;으로&amp;nbsp;객체의&amp;nbsp;기본&amp;nbsp;모양을&amp;nbsp;정의한다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Vertex (정점)&lt;/b&gt;: 3D 공간에서 객체의 특정 위치를 나타내는 좌표로, 기하학의 가장 기본 요소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Face (면)&lt;/b&gt;: 정점들이 모여 이루는 면. 면을 여러 개 합쳐 3D 형태가 만들어진다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Edges (모서리)&lt;/b&gt;: 두 개의 정점을 연결하는 선분, 객체의 외형을 구성.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Material (재질)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시각적인 효과&lt;/b&gt;를 부여하는 요소.&amp;nbsp;&amp;nbsp;&lt;b&gt;빛을 반사&lt;/b&gt;하거나, &lt;b&gt;투명&lt;/b&gt;하거나, &lt;b&gt;색상&lt;/b&gt;을 가지도록 만든다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;b&gt;재질 종류&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;MeshBasicMaterial&lt;/b&gt;: 빛의 영향을 받지 않는 단순한 색상 재질&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MeshLambertMaterial&lt;/b&gt;: 부드러운 조명 효과가 필요한 경우 사용. 환경에 따라 색상이 조금씩 다르게 보인다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MeshPhongMaterial&lt;/b&gt;: 광택 효과가 있는 재질로, 반사와 하이라이트 표현이 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MeshStandardMaterial&lt;/b&gt;: 물리 기반 렌더링(PBR) 재질로, 사실적인 표현이 필요할 때 사용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;조명&lt;/b&gt;(Lighting)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;조명&lt;/b&gt;은 3D 장면에 사실감을 더하고, 각 객체가 시각적으로 구분되도록 하는 요소이다. 그 중에는 여러 조명이 있지만, 두 개가 주로 쓰이는 것 같으니, 두 개만 설명하겠다! &lt;s&gt;(당당)&lt;/s&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 97px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: justify;&quot;&gt;&lt;b&gt; 특성 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: justify;&quot;&gt;&lt;b&gt; PointLight &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: justify;&quot;&gt;&lt;b&gt; AmbientLight &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;&lt;b&gt;빛의 방향&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;한 지점에서 모든 방향으로 발산&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;방향성 없음, 모든 객체에 균일하게 적용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;&lt;b&gt;거리 감쇠&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;distance와 decay로 조절 가능&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;&lt;b&gt;그림자 생성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;그림자 생성 가능&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;그림자 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;&lt;b&gt;용도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;전구, 촛불 등 집중된 빛을 표현&lt;/td&gt;
&lt;td style=&quot;height: 20px; text-align: justify;&quot;&gt;장면의 기본적인 밝기를 조절하는 배경 조명&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;4.&amp;nbsp;&lt;b&gt;마치며&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[공부 -&amp;gt; 글쓰기] 를 통해 시간을 아끼고 더 효율적인 글쓰기를 할 예정이었건만 어째&lt;br /&gt;[공부 -&amp;gt; 글쓰기 -&amp;gt; 아, 정리한 거 봐도 잘 모르겠네 -&amp;gt; 서칭 -&amp;gt; 공부 -&amp;gt; 글쓰기] 의 모양세가 되어 생가보다 시간이 오래 걸렸다. 퀄리티가 일정한 글을 유지하고자 노력했는데, 아무래도 실패한 것 같다. 다음엔 초반에 힘을 좀 더 빼고 들어가야지.. 어쨌든 정신 사나운 글을 끝까지 봐주셔서 감사합니다.&lt;br /&gt;&lt;br /&gt;글 쓰는데 걸린 시간: 5시간 30분&lt;br /&gt;&amp;nbsp;&lt;br /&gt;참고 자료: &lt;a href=&quot;https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene&quot; target=&quot;_self&quot;&gt;&lt;span&gt;Three.js docs&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>FRONT</category>
      <category>쓰리제이에스</category>
      <category>자바스크립트</category>
      <author>뚜따따</author>
      <guid isPermaLink="true">https://ddoottaa.tistory.com/26</guid>
      <comments>https://ddoottaa.tistory.com/26#entry26comment</comments>
      <pubDate>Fri, 1 Nov 2024 18:47:31 +0900</pubDate>
    </item>
  </channel>
</rss>